Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Refresh trop lent dans un composant [ Divers / Débutant(e) ] (Francky23012301)

lundi 21 avril 2008 à 21:51:38 | Refresh trop lent dans un composant

Francky23012301

Membre Club
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

lundi 21 avril 2008 à 22:45:45 | Re : Refresh trop lent dans un composant

Bacterius

Membre Club

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 !


lundi 21 avril 2008 à 22:50:33 | Re : Refresh trop lent dans un composant

Francky23012301

Membre Club
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.

mardi 22 avril 2008 à 00:38:12 | Re : Refresh trop lent dans un composant

cirec

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Salut,

il y a plusieurs choses qui me "choque" en voyant ton code
 
  1. l'utilisation de Records est assez lourd, utilise des classes (collections) à la place
  2. les TPanel c'est pas une bonne idée c'est lourd à l'affichage et tu en as beaucoup
  3. La procédure Gen_Grad_Panel n'est pas vraiment adaptée ****
  4. 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
  5. 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 ^^

**** 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


mardi 22 avril 2008 à 02:58:08 | Re : Refresh trop lent dans un composant

Caribensila

Membre Club
Réponse acceptée !
... Un pavé...    des briques...    re, un pavé...

                                              On se croirait en 68 !

                                                         Sous les pavés, la plage !      

mardi 22 avril 2008 à 08:00:41 | Re : Refresh trop lent dans un composant

Francky23012301

Membre Club
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

mardi 22 avril 2008 à 10:39:30 | Re : Refresh trop lent dans un composant

MAURICIO

Réponse acceptée !
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+

mardi 22 avril 2008 à 13:06:04 | Re : Refresh trop lent dans un composant

Francky23012301

Membre Club
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 .

mardi 22 avril 2008 à 14:55:01 | Re : Refresh trop lent dans un composant

Caribensila

Membre Club
... 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...

mardi 22 avril 2008 à 15:21:45 | Re : Refresh trop lent dans un composant

MAURICIO

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+


1 2 3

Cette discussion est classé dans : end, self, panel, index, procedure


Répondre à ce message

Sujets en rapport avec ce message

Opinion sur un composant TTreePanel [ par Francky23012301 ] Salut à tous,Ca commence à etre de notoriété internationale : Francky et le Design, ca fait deux .Alors quitte à faire un truc autant faire un truc sy Problème de scintillement malgré le DoubleBuffered [ par Francky23012301 ] Salut à tous,Voila je suis entrain de développer un composant de type potentiomètre. Tout fonctionne enfin presque . Ca scintille à mort et quand je Problème de control dans un composant hérité de TScrollBox [ par Francky23012301 ] Salut à tous,Je suis entrain de réaliser un composant. J'ai fais des tests préalable et au moment de son élaboration voila que je suis confronté à un résolution sudoku backtrack [ par zwyx ] Bonjour à tous, Pour ceux qui aiment bien se creuser la tête sur de l'algorithmie... J'ai écrit un code permettant de résoude une grille de sudoku ré Evènements d'un enfant dans l'inspecteur d'objet [ par Francky23012301 ] Salut à tous,J'ai un ptit soucis : j'ai fais un composant qui créer d'autres composants ent tant qu' enfants. Dans l'inspecteur d'objet, les propriét Rajouter un TreeNode dans un TreeView [ par Francky23012301 ] Salut à tous,Je suis entrain de réaliser un composant dont voici le code :unit BrowserEffects;interfaceuses  Windows, Messages, SysUtils, Classes, Con stingGrid et dbgrid [ par zerargui ] j'ai pris le programme de delphiprog qui est dessousmais à la place d'une base de données Dbase(.dbf) j'ai utilisé une base paradox(.db)alors le progr Détecter quand un utilisateur appuie sur le bouton Power (marche\arret) du pc [ par Millenod ] Bonjour, On me demande de développer un service, qui vise à logguer l'extinction d'un ordinateur. Mon problème provient de cette action "sous win20 Dbgrid et index [ par zerargui ] j'ai pris un petit programme de Delphiprog en le modifiant par la lecture des indexes de DBase .DBF par indexex de base Paradox  .db tous s'affiche no thread & dll -> Exception [ par WSTBoss ] Bonjour à tous,j'ai une dll qui contient un thread, tout ce passe bien le thread marche comme il faut mais cependant lors du dechargement de la dll pa


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.