Composants Dynamiques et Array [Résolu]

Signaler
Messages postés
31
Date d'inscription
lundi 9 août 2004
Statut
Membre
Dernière intervention
18 décembre 2006
-
Messages postés
31
Date d'inscription
lundi 9 août 2004
Statut
Membre
Dernière intervention
18 décembre 2006
-
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

Messages postés
31
Date d'inscription
lundi 9 août 2004
Statut
Membre
Dernière intervention
18 décembre 2006

Je m'était très mal expliqué.. désolé.

Merci tout de même pou ta réponse !
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
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.