Refresh trop lent dans un composant

Résolu
Signaler
-
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
-
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

unit Browser;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, ExtCtrls, Graphics, Menus, dialogs;

Type
  TInstrument = record
    Channel:Cardinal;
    Instrument:Cardinal;
    Panel:TPanel;
    Selected:Boolean;
  End;

Type
  TSoundFont = record
    FileName:String;
    Bank:Cardinal;
    Panel:TPanel;
    Selected:Boolean;
  End;

Type
  TASio = record
    FileName:String;
    Panel:TPanel;
    Selected:Boolean;
  End;

Type
  TVSTInstr = record
    FileName:String;
    Panel:TPanel;
    Selected:Boolean;
  End; 

type

  TInstrument_Event = procedure(Sender : TObject) of object;
  TSoundFont_Event = procedure(Sender : TObject) of object;
  TAsio_Event = procedure(Sender : TObject) of object;
  TVSTInstr_Event = procedure(Sender : TObject) of object;
 
  TBrowser = class(TCustomControl)
  private
    fInstrumentPanel:TPanel;
    fSoundFontPanel:TPanel;
    fASioPanel:TPanel;
    fVSTInstrPanel:TPanel;   
    fColorPanel:TColor;
    fColorBackGround:TColor;
    fColorGrad:TColor;
    fSelectColor:TColor;
    fInstrumentsVisible:Boolean;
    fSoundFontsVisible:Boolean;
    fASiosVisible:Boolean;
    fVSTInstrsVisible:Boolean;
    fOnInstrument_Event:TInstrument_Event;
    fOnSoundFont_Event:TSoundFont_Event;
    fOnAsio_Event:TAsio_Event;
    fOnVSTInstr_Event:TVSTInstr_Event;   
    fPopupMenu:TPopupMenu;
    Procedure SetColorPanel(Value:TColor);
    Procedure SetColorBackGround(Value:TColor);
    Procedure SetColorGrad(Value:TColor);
    Procedure SetSelectColor(Value:TColor);
    Procedure Create_InstrumentsPanel;
    Procedure InstrumentsOnClick(Sender:TObject);
    Procedure InstrumentPanelOnClick(Sender:TObject);
    Procedure SoundFontsOnClick(Sender:TObject);
    Procedure SoundFontPanelOnClick(Sender:TObject);
    Procedure AsiosOnClick(Sender:TObject);
    Procedure AsioPanelOnClick(Sender:TObject);
    Procedure VSTInstrsOnClick(Sender:TObject);
    Procedure VSTInstrPanelOnClick(Sender:TObject);    
    Procedure Gen_Grad_Panel;
    Procedure SetPopupMenu(Value:TPopupMenu);
  protected
    procedure MouseDown(Button: TMouseButton;Shift: TShiftState; X, Y: Integer); override;
  public
    InstrumentList:Array[1..128] of TInstrument;
    SoundFontList:Array of TSoundFont;
    AsioList:Array of TAsio;
    VSTInstrList:Array of TVSTInstr;
    SoundFontSelected : Cardinal;
    InstrumentSelected : Cardinal;
    AsioSelected : Cardinal;   
    VSTISelected : Cardinal;
    Procedure Add_SoundFont(Value:String);
    Procedure Add_Asio(Value:String);
    Procedure Add_VSTInstr(Value:String);
    Procedure Paint; override;
    constructor Create(AOwner:TComponent); override;
    destructor Destroy; override;
  published
    Property ColorPanel:TColor Read fColorPanel Write SetColorPanel;
    Property ColorBackGround:TColor Read fColorBackGround Write SetColorBackGround;
    Property ColorGrad:TColor Read fColorGrad Write SetColorGrad;
    Property SelectColor:TColor Read fSelectColor Write SetSelectColor;
    Property Instrument_Event : TInstrument_Event read fOnInstrument_Event write fOnInstrument_Event;
    Property SoundFont_Event : TSoundFont_Event read fOnSoundFont_Event write fOnSoundFont_Event;
    Property Asio_Event : TAsio_Event read fOnAsio_Event write fOnAsio_Event;
    Property VSTInstr_Event : TVSTInstr_Event read fOnVSTInstr_Event write fOnVSTInstr_Event;
    Property PopupMenu:TPopupMenu Read fPopupMenu Write SetPopupMenu;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MUSIC_PRO', [TBrowser]);
end;

constructor TBrowser.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
  fInstrumentPanel:=TPanel.Create(Self);
  fInstrumentPanel.Parent:=Self;
  Self.fInstrumentsVisible:=True;
  fInstrumentPanel.OnClick:=InstrumentPanelOnClick;
  Create_InstrumentsPanel;

  fSoundFontPanel:=TPanel.Create(Self);
  fSoundFontPanel.Parent:=Self;
  Self.fSoundFontsVisible:=True;
  fSoundFontPanel.OnClick:=SoundFontPanelOnClick;

  fAsioPanel:=TPanel.Create(Self);
  fAsioPanel.Parent:=Self;
  Self.fAsiosVisible:=True;
  fAsioPanel.OnClick:=AsioPanelOnClick;
 
  fVSTInstrPanel:=TPanel.Create(Self);
  fVSTInstrPanel.Parent:=Self;
  Self.fVSTInstrsVisible:=True;
  fVSTInstrPanel.OnClick:=VSTInstrPanelOnClick;  
 
  Initialize(SoundFontList);
  Initialize(AsioList);
  Initialize(VSTInstrList);

  SoundFontSelected:=0;
  InstrumentSelected :=0;
  VSTISelected :=0;
end;

Procedure TBrowser.InstrumentPanelOnClick(Sender:TObject);
Begin
  Self.fInstrumentsVisible:=Not Self.fInstrumentsVisible;
  Self.Invalidate;
End;

Procedure TBrowser.SoundFontPanelOnClick(Sender:TObject);
Begin
  Self.fSoundFontsVisible:=Not Self.fSoundFontsVisible;
  Self.Invalidate;
End;

Procedure TBrowser.AsioPanelOnClick(Sender:TObject);
Begin
  Self.fAsiosVisible:=Not Self.fAsiosVisible;
  Self.Invalidate;
End;

Procedure TBrowser.VSTInstrPanelOnClick(Sender:TObject);
Begin
  Self.fVSTInstrsVisible:=Not Self.fVSTInstrsVisible;
  Self.Invalidate;
End;

Procedure TBrowser.SetColorPanel(Value:TColor);
Begin
  If Assigned(Self) Then
    Begin
      fColorPanel:=Value;
      Self.Invalidate;
    End;
End;

Procedure TBrowser.SetColorBackGround(Value:TColor);
Begin
  If Assigned(Self) Then
    Begin
      fColorBackGround:=Value;
      Self.Invalidate;
    End;
End;

Procedure TBrowser.SetColorGrad(Value:TColor);
Begin
  If Assigned(Self) Then
    Begin
      fColorGrad:=Value;
      Self.Invalidate;
    End;
End;

Procedure TBrowser.SetSelectColor(Value:TColor);
Begin
  If Assigned(Self) Then
    Begin
      fSelectColor:=Value;
      Self.Invalidate;
    End;
End;

Procedure TBrowser.SetPopupMenu(Value:TPopupMenu);
Begin
  If Assigned(Self) Then
  fPopupMenu:=Value;
End;

Procedure TBrowser.Create_InstrumentsPanel;
Const
  NameInstruments:Array [1..128] of String=
                  (   'Piano acoustique 1'
                      ,'Piano acoustique 2'
                      ,'Piano électrique'
                      ,'Piano HonkyTonk'
                      ,'Piano électrique 1'
                      ,'Piano électrique 2'
                      ,'Clavecin'
                      ,'Clavicorde'
                      ,'Célesta'
                      ,'Carillon'
                      ,'Boîte à musique'
                      ,'Vibraphone'
                      ,'Marimba'
                      ,'Xylophone'
                      ,'Cloches tubulaires'
                      ,'Tympanon'
                      ,'Orgue à tubes'
                      ,'Orgue percussif'
                      ,'Orgue rock'
                      ,'Orgue église'
                      ,'Orgue vibrato'
                      ,'Accordéon'
                      ,'Harmonica'
                      ,'Accordéon tango'
                      ,'Guitare classique'
                      ,'Guitare folk'
                      ,'Guitare electrique Jazz'
                      ,'Guitare electrique claire'
                      ,'Guitare electrique muted'
                      ,'Guitare saturée'
                      ,'Guitare à distorsion'
                      ,'Harmoniques'
                      ,'Basse acoustique'
                      ,'Basse  electrique(doigt)'
                      ,'Basse  electrique (medium)'
                      ,'Basse fretless'
                      ,'Basse Slap  1'
                      ,'Basse Slap  2'
                      ,'Basse Synthé  1'
                      ,'Basse  Synthé 2'
                      ,'Violon'
                      ,'Viole'
                      ,'Violoncelle'
                      ,'Contrebasse'
                      ,'Cordes tremolo'
                      ,'Cordes pizzicato'
                      ,'Harpe'
                      ,'Timbales'
                      ,'Quartet cordes 1'
                      ,'Quartet cordes 2'
                      ,'Cordes synthé 1'
                      ,'Cordes synthé 2'
                      ,'Chours Aahs'
                      ,'Voix Oohs'
                      ,'Voix synthé'
                      ,'Coup orchestre'
                      ,'Trompette'
                      ,'Trombone'
                      ,'Tuba'
                      ,'Trompette bouchée'
                      ,'Cors'
                      ,'Ensemble de cuivres'
                      ,'Cuivres synthé 1'
                      ,'Cuivres synthé 2'
                      ,'Saxo soprano'
                      ,'Saxo alto'
                      ,'Saxo ténor'
                      ,'Saxo Baryton'
                      ,'Hautbois'
                      ,'Cors anglais'
                      ,'Basson'
                      ,'Clarinette'
                      ,'Piccolo'
                      ,'Flûte'
                      ,'Flûte à bec'
                      ,'Flûte de Pan'
                      ,'Bouteille'
                      ,'Shakuhachi'
                      ,'Sifflet'
                      ,'Ocarina'
                      ,'Signal carré'
                      ,'Signal dents de scie'
                      ,'Orgue à vapeur'
                      ,'Chiff'
                      ,'Charang'
                      ,'Voix solo'
                      ,'Quinte'
                      ,'Basse'
                      ,'New Age'
                      ,'Warm'
                      ,'Polysynth'
                      ,'Chour'
                      ,'Archet'
                      ,'Métallique'
                      ,'Halo'
                      ,'Sweep'
                      ,'Pluie'
                      ,'Bande son'
                      ,'Cristal'
                      ,'Atmosphère'
                      ,'Brightness'
                      ,'Goblins'
                      ,'Echos'
                      ,'Scie '
                      ,'Sitar'
                      ,'Banjo'
                      ,'Shamisen'
                      ,'Koto'
                      ,'Kalimba'
                      ,'Cornemuse'
                      ,'Violon folklorique'
                      ,'Shanai'
                      ,'Sonnerie'
                      ,'Agogo'
                      ,'Percussion acier'
                      ,'Woodblock'
                      ,'Taiko'
                      ,'Tom mélodique'
                      ,'Percussion synthé'
                      ,'Cymbale inversée'
                      ,'Cordes guitares'
                      ,'Respiration'
                      ,'Rivage'
                      ,'Chant oiseaux'
                      ,'Sonnerie téléphone'
                      ,'Hélicoptère'
                      ,'Applaudissements'
                      ,'Coup de feu');
Var
  Index:Cardinal;
Begin
  For Index:=1 To 128 Do
  With InstrumentList[Index] Do
    Begin
      Channel:=1;
      Instrument:=Index;
      Panel:=TPanel.Create(Self);
      Panel.Parent:=Self;
      Panel.OnClick:=InstrumentsOnClick;
      Panel.Tag:=Index;
      Selected:=False;
      Font.Color:=ClBlack;
      Font.Color:=ClWhite;
      Panel.Caption:=NameInstruments[Index];
    End;
End;

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.Gen_Grad_Panel;
Var
  Index, R1, G1, B1, R2, G2, B2, R3, G3, B3, Border: integer;
begin
  Self.Color:=Self.fColorGrad;
  R1 := GetRValue(Self.fColorBackGround);
  G1 := GetGValue(Self.fColorBackGround);
  B1 := GetBValue(Self.fColorBackGround);
  R2 := GetRValue(Self.fColorGrad);
  G2 := GetGValue(Self.fColorGrad);
  B2 := GetBValue(Self.fColorGrad);
  Border:=Round(Self.Width*0.1);
  For Index := 0 to Border do
    begin
      R3 := Trunc(((Border - Index) * R1)/Border + (Index * R2)/Border);
      G3 := Trunc(((Border - Index) * G1)/Border + (Index * G2)/Border);
      B3 := Trunc(((Border - Index) * B1)/Border + (Index * B2)/Border);
      Self.Canvas.Pen.Color :=RGB(R3, G3, B3);
      Self.Canvas.MoveTo(Index,0);
      Self.Canvas.LineTo(Index,Self.Height);
    End;
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;

end.

Désolé pour le pavé .

Merci à tous

21 réponses

Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
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

 
@+
Cirec

<hr siz="" />
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
... Un pavé...    des briques...    re, un pavé...

                                              On se croirait en 68 !

                                                         Sous les pavés, la plage !      
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
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 ^ ^

A+
Messages postés
3792
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
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 !

Salut,

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.

Merci

@Cirec :

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 à tous

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 .

Merci pour tout .
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
... Vous me donnez envie de créer des compos.
    'faudra bien que je m'y mette un jour...

Mais j'ai lu quelque part qu'il y avait 2 sortes de programmeurs en Delphi :
- les programmeurs de compos
- et les autres  

J'suis p'têt les autres...
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
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.

A+

... 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 .
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Haaa bem là je sent que Cari va changer de bord ^^
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
...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é. 
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Haaaa,

t' as pas encore vu mon dernier  lol
Il sort demain normalement  ^^

<strike>"glandouiller</strike> réfléchir" Je vois qu' on lis les mêmes messages sur le forum lol

A+

En meme temps<strike> glandouiller</strike>  réfléchir devant une paintbox, ca le fait grave
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
<strike>J'</strike>

<strike>glandouille</strike> Je réfléchis à une PaintBox avec l'origine au milieu.
 
J'ai déjà un <strike>glandouilleur</strike> client !   
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
J'ai déjà un <strike>glandouilleur</strike> client !   


Haaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa !!!
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
@Caribensila:

je crois que je viens de piquer ton client ^^

 
@+
Cirec

<hr siz="" />
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
J'te trouvais sympa, Cirec...  jusqu'à cet aprèm. 

  
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Tout ça prouve qu' un <strike>glandouilleur</strike> programmeur qui réfléchit en vaut 2:

<strike>glandouilleur</strike> programmeur qui réfléchit = Caribensila + Cirec! 
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
@Cari :

 
@+
Cirec

<hr siz="" />