Bonjours tout le monde,
J'utilise un TObjectList pour mémoriser les composants cliqués sur ma fiche.
Evénements placer sur les composants pendant leur création dynamique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Var FDossierTiers: TFDossierTiers; //... MyList : TObjectList; implementation // ... procedure TFDossierTiers.FormClose(Sender: TObject; var Action: TCloseAction); begin // ... if Assigned(MyList) then MyList.free; end; procedure TFDossierTiers.FormCreate(Sender: TObject); begin // ... MyList := TObjectList.Create(True); end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 procedure TFDossierTiers.ControlMouseDown(Sender: TObject;Button: TMouseButton;Shift: TShiftState;X, Y: Integer); begin if not Assigned(Sender) then exit; if not (Sender is TMysPanel) then exit; if not Assigned(TControl(Sender).Parent) then exit; if not (TControl(Sender).Parent is TsPanel) then exit; // ... if (ssCtrl in shift) then begin // ... end else begin Mylist.Pack; for i := 0 to MyList.Count - 1 do MyList.Extract(MyList[i]); // ... end; end;Pour info L'évènement Move rien qui modifie le TMyList
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 procedure TFDossierTiers.ControlMouseUp(Sender: TObject;Button: TMouseButton;Shift: TShiftState; X, Y: Integer); begin if not Assigned(Sender) then exit; if not (Sender is TMysPanel) then exit; if not Assigned(TControl(Sender).Parent) then exit; if not (TControl(Sender).Parent is TsPanel) then exit; // ... // on alimente le Tlist d'objet MyList.Add(TMysPanel(Sender)); // ... TMysPanel(Sender).SetFocus; end;
Donc quand je clique un par un par sur les composants, pas de problème.
Dés que j'appuie sur Ctrl, seul l'évènement down ajoute élément par élement chacun de mes cliques, ensuite si j'arrete d'appuier sur CTRL et que je clique de nouveau une fois sur n'importe quel composant boom j'ai une erreur Indice de liste hors limites (2) blablabla au niveau du DOWN.
Pouvez-vous me dire où je fais mon erreur ?
Merci.
PS : j'ai aussi essayé avec
Puis dans le Down
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 TComposant = Class(TObject) Public Panel: TMysPanel; End;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Var oComposant : TComposant begin //... oComposant := Tcomposant.Create; oComposant := TMysPanel(Sender); TMyList.add(oComposant); End;
Partager