Composants Dynamiques et Array

Résolu
picolo5 Messages postés 31 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 18 décembre 2006 - 22 oct. 2006 à 21:37
picolo5 Messages postés 31 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 18 décembre 2006 - 13 nov. 2006 à 18:53
Bonsoir à tous !!

j'ai un piti souci avec des composants dynamiques (TCustomPanel + autres composants) que je stockent dans un tableau.

Le probleme se situe lors de suppression avec remonté des éléments. Le rafraichissement ne se fait pas.
Je met un bout de code simplifé ou je permutte deux elements.

Code :

type
  TMonP = class(TCustomPanel)
    private
      { Déclarations privées }
    public
      constructor create(AOwner : TComponent;y :integer);
      { Déclarations publiques }
  end;

var
  Form1: TForm1;
  TabP : array[0..10] of TMonP;


implementation


{$R *.dfm}
constructor TMonP.create(AOwner : TComponent;y: integer);
begin
  inherited Create(AOWner);
  parent := Form1;
  BorderWidth := 0;
  Left := 0;
  Top := y;
  Width  := 100;
  Height := 100;
  Caption := inttostr(y);
  Enabled := true;
  //FullRepaint := true;
  Visible := true;
end;


procedure TForm1.CreerClick(Sender: TObject);
var
 TempTMonP : TMonP;
begin
  TabP[0] := nil;
  TabP[1] := nil;
  TabP[0] := TMonP.create(self,100);
  TabP[1] := TMonP.create(self,250);
end;


procedure TForm1.EchangerClick(Sender: TObject);
var
   TempTMonP : TMonP;
begin


  TempTMonP := TabP[0];
  TabP[0] := TabP[1];
//TabP[0] := Tab[1].Caption;
  TabP[1] := TempTMonP;
//TabP[1] := TempMonP.Caption;


end;

J'ai fait de nombreux essais en déclarant la procedure Repaint, Refresh....
Si je supprime le commentaire alors cela fonctionne. Dans mon cas le pannel contient de nombreux object, c est un peu contraignant....

Help !

Merci

2 réponses

picolo5 Messages postés 31 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 18 décembre 2006
13 nov. 2006 à 18:53
Je m'était très mal expliqué.. désolé.

Merci tout de même pou ta réponse !
3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
23 oct. 2006 à 10:04
salut,

Je suis pas sur de comprendre, ton exemple ne devrait PAS provoquer de rafraichissement.

puisque tu ne fait que changer l'emplacement en mémoire des tes pointeurs. tes panels sont toujours au même endroit sur la fiche...

procedure TForm1.EchangerClick(Sender: TObject);
var
TempTop : integer;
begin

TempTop := TabP[0].Top;
TabP[0].Top := TabP[1].Top;
TabP[1].Top := TempTop;

end;

Sinon, une proposition (non-testée)
as-tu essayer d'appeler .Invalidate ?

Ne connaissant pas ton niveau, j'attire ton attentention sur le inherited necessaire lors que tu implémente une fonction existante dans une class parent (genre repaint)

bonne chance.
0
Rejoignez-nous