Utilisateur anonyme
-
21 avril 2008 à 21:51
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 2014
-
22 avril 2008 à 18:17
Salut la compagnie
J'ai réalisé un petit composant : Celui fonctionne très bien sauf qu'il est terriblement lent ce qui fait que le refresh de la fiche que j'utilise mais du temps à se faire. Je pense que c'est une question d'optimisation mais je ne vois pas trop ce que je pourrais améliorer. Donc je m'en remet à vos lumières
Procedure TBrowser.Add_SoundFont(Value:String);
Begin
SetLength(SoundFontList,High(SoundFontList)+2);
With SoundFontList[High(SoundFontList)] Do
Begin
FileName:=Value;
Bank:=0;
Panel:=TPanel.Create(Self);
Panel.Parent:=Self;
Panel.OnClick:=SoundFontsOnClick;
Panel.Tag:=High(SoundFontList)+1;
Selected:=False;
Font.Color:=Clwhite;
Panel.Caption:=ExtractFileName(FileName);
End;
Self.Invalidate;
End;
Procedure TBrowser.Add_Asio(Value:String);
Begin
SetLength(AsioList,High(AsioList)+2);
With AsioList[High(AsioList)] Do
Begin
FileName:=Value;
Panel:=TPanel.Create(Self);
Panel.Parent:=Self;
Panel.OnClick:=AsiosOnClick;
Panel.Tag:=High(AsioList)+1;
Selected:=False;
Font.Color:=Clwhite;
Panel.Caption:=ExtractFileName(FileName);
End;
Self.Invalidate;
End;
Procedure TBrowser.Add_VSTInstr(Value:String);
Begin
SetLength(VSTInstrList,High(VSTInstrList)+2);
With VSTInstrList[High(VSTInstrList)] Do
Begin
FileName:=Value;
Panel:=TPanel.Create(Self);
Panel.Parent:=Self;
Panel.OnClick:=VSTInstrsOnClick;
Panel.Tag:=High(VSTInstrList)+1;
Selected:=False;
Font.Color:=Clwhite;
Panel.Caption:=ExtractFileName(FileName);
End;
Self.Invalidate;
End;
Procedure TBrowser.InstrumentsOnClick(Sender:TObject);
Var
Number,Index:Cardinal;
Begin
InstrumentSelected:=0;
Number:=1;
If (Sender is TPanel) Then
Number:=(Sender As TPanel).Tag;
For Index:=1 To 128 Do
InstrumentList[Index].Selected:=False;
InstrumentList[Number].Selected:=True;
InstrumentSelected:=Number;
Self.Invalidate;
If Assigned(fOnInstrument_Event) Then Self.fOnInstrument_Event(Sender);
End;
Procedure TBrowser.SoundFontsOnClick(Sender:TObject);
Var
Number,Index:Cardinal;
Begin
SoundFontSelected:=0;
Number:=1;
If (Sender is TPanel) Then
Number:=(Sender As TPanel).Tag;
For Index:=Low(SoundFontList) To High(SoundFontList) Do
SoundFontList[Index].Selected:=False;
SoundFontList[Number-1].Selected:=Not SoundFontList[Number-1].Selected;
If SoundFontList[Number-1].Selected Then SoundFontSelected:=Number;
Self.Invalidate;
If Assigned(fOnSoundFont_Event) Then Self.fOnSoundFont_Event(Sender);
End;
Procedure TBrowser.AsiosOnClick(Sender:TObject);
Var
Number,Index:Cardinal;
Begin
Number:=1;
If (Sender is TPanel) Then
Number:=(Sender As TPanel).Tag;
For Index:=Low(AsioList) To High(AsioList) Do
If Number-1<>Index Then AsioList[Index].Selected:=False;
AsioList[Number-1].Selected:=Not AsioList[Number-1].Selected;
If AsioList[Number-1].Selected Then AsioSelected:=Number;
Self.Invalidate;
If Assigned(fOnAsio_Event) Then Self.fOnAsio_Event(Sender);
End;
Procedure TBrowser.VSTInstrsOnClick(Sender:TObject);
Var
Number,Index:Cardinal;
Begin
Number:=1;
VSTISelected:=0;
If (Sender is TPanel) Then
Number:=(Sender As TPanel).Tag;
For Index:=Low(VSTInstrList) To High(VSTInstrList) Do
If Number-1<>Index Then VSTInstrList[Index].Selected:=False;
VSTInstrList[Number-1].Selected:=Not VSTInstrList[Number-1].Selected;
If VSTInstrList[Number-1].Selected Then VSTISelected:=Number;
Self.Invalidate;
If Assigned(fOnVSTInstr_Event) Then Self.fOnVSTInstr_Event(Sender);
End;
Procedure TBrowser.Paint;
Var
Index, IndexTop:Cardinal;
Begin
Gen_Grad_Panel;
IndexTop:=0;
With fInstrumentPanel Do
Begin
Width:=Self.Width-4;
Height:=30;
Top:=IndexTop*32;
Left:=2;
Color:=Self.fColorPanel;
Caption:='INSTRUMENT';
End;
For Index:=1 To 128 Do
With InstrumentList[Index] Do
Begin
Panel.Width:=Round(Self.Width*0.90)-2;
Panel.Height:=30;
Panel.Top:=32*IndexTop+32;
Panel.Left:=Round(Self.Width*0.1);
If Not Selected Then Panel.Color:=Self.fColorPanel Else
Panel.Color:=Self.fSelectColor;
Panel.Visible:=Self.fInstrumentsVisible;
If Panel.Visible Then Inc(IndexTop);
End;
With fSoundFontPanel Do
Begin
Width:=Self.Width-4;
Height:=30;
Top:=32*IndexTop+32;
Left:=2;
Color:=Self.fColorPanel;
Caption:='SOUNDFONT';
Inc(IndexTop);
End;
If High(SoundFontList)>-1 Then
For Index:=Low(SoundFontList) To High(SoundFontList) Do
With SoundFontList[Index] Do
Begin
Panel.Width:=Round(Self.Width*0.90)-2;
Panel.Height:=30;
Panel.Top:=32*IndexTop+32;
Panel.Left:=Round(Self.Width*0.1);
If Not Selected Then Panel.Color:=Self.fColorPanel Else
Panel.Color:=Self.fSelectColor;
Panel.Visible:=Self.fSoundFontsVisible;
If Panel.Visible Then Inc(IndexTop);
End;
With fAsioPanel Do
Begin
Inc(IndexTop);
Width:=Self.Width-4;
Height:=30;
Top:=IndexTop*32;
Left:=2;
Color:=Self.fColorPanel;
Caption:='ASIO';
End;
If High(AsioList)>-1 Then
For Index:=Low(AsioList) To High(AsioList) Do
With AsioList[Index] Do
Begin
Panel.Width:=Round(Self.Width*0.90)-2;
Panel.Height:=30;
Panel.Top:=32*IndexTop+32;
Panel.Left:=Round(Self.Width*0.1);
If Not Selected Then Panel.Color:=Self.fColorPanel Else
Panel.Color:=Self.fSelectColor;
Panel.Visible:=Self.fAsiosVisible;
If Panel.Visible Then Inc(IndexTop);
End;
With fVSTInstrPanel Do
Begin
Inc(IndexTop);
Width:=Self.Width-4;
Height:=30;
Top:=IndexTop*32;
Left:=2;
Color:=Self.fColorPanel;
Caption:='VST INSTRUMENT';
End;
If High(VSTInstrList)>-1 Then
For Index:=Low(VSTInstrList) To High(VSTInstrList) Do
With VSTInstrList[Index] Do
Begin
Panel.Width:=Round(Self.Width*0.90)-2;
Panel.Height:=30;
Panel.Top:=32*IndexTop+32;
Panel.Left:=Round(Self.Width*0.1);
If Not Selected Then Panel.Color:=Self.fColorPanel Else
Panel.Color:=Self.fSelectColor;
Panel.Visible:=Self.fVSTInstrsVisible;
If Panel.Visible Then Inc(IndexTop);
End;
Self.Height:=(IndexTop+1)*32;
End;
destructor TBrowser.Destroy;
Var
Index:Cardinal;
begin
fInstrumentPanel.Free;
fSoundFontPanel.Free;
fASioPanel.Free;
If High(SoundFontList)>-1 Then
For Index:=0 To High(SoundFontList) Do Self.SoundFontList[Index].Panel.Free;
If High(AsioList)>-1 Then
For Index:=0 To High(AsioList) Do Self.AsioList[Index].Panel.Free;
If High(VSTInstrList)>-1 Then
For Index:=0 To High(VSTInstrList) Do Self.VSTInstrList[Index].Panel.Free;
Finalize(SoundFontList);
Finalize(AsioList);
Finalize(VSTInstrList);
inherited;
end;
procedure TBrowser.MouseDown(Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
Begin
Inherited;
If (Assigned(fPopupMenu)) And (Shift=[ssRight]) Then
fPopupMenu.Popup(ClientOrigin.X+x,ClientOrigin.Y+y);
End;
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 22 avril 2008 à 00:38
Salut,
il y a plusieurs choses qui me "choque" en voyant ton code
<ol><li>l'utilisation de Records est assez lourd, utilise des classes (collections) à la place</li><li>les TPanel c'est pas une bonne idée c'est lourd à l'affichage et tu en as beaucoup</li><li>La procédure Gen_Grad_Panel n'est pas vraiment adaptée ****</li><li>c'est
quoi tout ces appels à Self ... dans certain cas c'est utile mais là tu
peux t'en passer tant que tu es dans les procédures de l'objet et qu'il
n'y a pas confusion pour le compilateur</li><li>Tu n'as pas libérer les objets que tu as créer avec comme Owner Self c'est ce dernier qui se chargera de le faire pour toi ^^
</li></ol>
**** [codes/REALISER-DEGRADE-SUR-PLUSIEURS-COULEURS-AVEC-API-WINDOWS_35784.aspx Regarde ce code] ... surtout ne prend pas peur en voyant le code
il est très simple d'utilisation (en une ligne) le reste c'est que de l'agrément
pour la démo. Regarde aussi l'unité Briques.pas elle pourrait te donner des idées
pour te passer des TPanel
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 22 avril 2008 à 10:39
Haa la création de compos: j' en suis tombé amoureux!
Pourquoi?
J' aime tout simplifier dans mes applis: si j' arrive à ajouter des fonctionnalités gràce à un compo, ça m' évite de faire du code dans mon appli.
C' est en quelques sorte une appli que l' on met dans nos applis: j' aime ça car on ne se soucie plus du code derrière une fois que ça marche. Depuis quelques jours je travaille sur mon compo TcyDBGrid pour lui ajouter de vrais fonctionnalités.
Bref, les remarques de Cirec sont justes, voire à suivre à la lettre!
Si je peux te donner un conseil:
- n' hesite pas créer plusieurs compos au lieu de tout faire en un.
- met sur le papier ce que tu veux faire, voir même dessiner le compo car ainsi, tu verras si tu t' es limité ou si tu as atteinds tes objectifs
- le nom de propriétés et fonctions sont très mais TRÈS importants à l' utilisation.
- poste les sur CS ^ ^
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 21 avril 2008 à 22:45
Bonjour,
Le temps de lire tout le code et j'aurai cassé ma dernière pipe ^^'
je ne vois pas très bien à quoi sert le composant, pourrais-tu me préciser à quoi il sert ? J'ai un esprit très visuel désolé, j'ai beaucoup de mal à créer des trucs dans ma tête, faut que je les voie ^^'
Cordialement, Bacterius !
Vous n’avez pas trouvé la réponse que vous recherchez ?
C'est juste une sorte de sélectionneur ("proche" d'un treeview) Instruments Midi, Asio, SoundFont et VSTI. La lenteur est du au dégradée à priori mais je ne vois pas trop comment l'optimiser.
1)En fait si j'utilise des records ce n'est pas sans raison . En fait j'utilise ce composant pour autre chose et c'est la méthode la plus simple et la moins lourde pour le reste de mon travail.
2)J'avais pensé à des briques à la place mais vu l'ambiance en ce moment, Cari a déjà tout dévalisé chez casto . Plus sérieusement, je ne vois pas quoi utiliser d'autres
3)La procédure Gen_Grad_Panel : Oué elle est pas terrible je le sentais .
4)Pour les Self c'est une mauvaise habitude : tu m'avais déja fais la remarque et comme je suis un vieux garcon z'aime pas changer mes mauvaises habitudes. Plus sérieusement vu le nombre de compos que j'ai fais j'en ai pour 10 ans à tous les virer. En plus à chaque fois j'ai le droit à des beugs.
5)D'accord avec toi : le owner devra se charger de la libération des objects. Cependant je me méfie de la bête. La bête est parfois vicieuse.
Non puisse à force de dire qu'il faut libérer, je libère moi : Allez tout le monde circule, faut faire de la place .
@Cari : On peut peut etre refaire un remake de mai 68 sur CS si tu veux. Appelle Japee qu'il ramene les tartes : va y en avoir besoin .
Merci Mauricio : je vais suivre les conseils de Cirec et reprendre les composo.
Pour le postage t'inquete pas c'est pour CS le projet : Mais comme je veux vous faire une grosse surprise, va falloir etre patient .
Oui les compos on en tombe amoureux et c'est vrai que ca fait 95% du boulots : ce qui fait que les choses complexes deviennent simples .
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 22 avril 2008 à 15:21
Haa oui mais dans ce cas là je serait les deux même s' il me reste une grande marge de progression dans les 2 disciplines ^^
Je pense qu' il faut être d' abord "simple programmeur" pour ensuite créer des compos correctement.
Savoir faire ses propres compos apportent beaucoup aussi: ça permet de comprendre comment ils fonctionnent et d' optimiser notre code car la conception de compo oblige à une réelle préocupation de bonne structuration et de vitesse d' exécution.
... Vous me donnez envie de créer des compos.
'faudra bien que je m'y mette un jour...
Comment ca tu as toujours pas fait ma sdk
? Hé un pavé dans la tronche à Francky .
Ben dans mon cas de figure Cari, je n'avais pas le choix : 95% des choses que je devais utiliser n'existait pas : TimeLine, GridPiano,SetDrums, GridDrums,MidiWriter ect ect . Donc quitte à tout se farcir autant faire des composants qui soient réutilisables pour les autres. C'est vrai que les composants ca permer de franchir un cap et de mieux cerner le fonctionnement des objets : c'est tres enrichissant. Puis en plus si on aime le design, on se fait plaisir en même temps. Enfin c'est tres formateur et tres passionnant .
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 22 avril 2008 à 16:48
...Ouais
Me reste à <strike>glandouiller</strike> réfléchir pour trouver le super compo qui va étonner le monde de la prog.
C'est pas pour demain quand même vu que Mauricio a déjà tout inventé.