-- Veuillez escuser les aproximation syntaxique, je n'ai pas de compileur sous la main. --
C'est ça. Il fait le "erreur à l'adresse toto" à la sortie de la procedure OnSelect (il arrive à finir l'execution de la procedure. Solide ces bestioles!).
Pour resumer, je suis en train de construire un composant(dérivant de TPanel) contenant une liste de combo.
Chaque combo est affiché sous le precedant.
Le dernier combo de la liste est toujours vide (liste de choix renseignée, mais ItemIndex = -1)
Lorsqu'on selectionne une valeur dans le dernier combo, un nouveau combo apparait en bas de la liste.
Ca donne grosso modo le code ci-dessous (avec un Tform "normal comme support):
Code :
- type TForm1 = class(TForm)
- ListCombo : TObjectList;
- end;
- Procedure TForm1.ReechelonerCombo;
- var i : integer;
- begin
- //On affiche chaque combo de la liste, chacun espacer de 25 points
- For i := 0 to ListeCombo.count-1 do begin
- TComboBox(Liste[i]).top := (i+1)*25;
- end;
- function TForm1.AjouterCombo:TComboBox;
- begin
- //On crée un Combo qu'on ajoute à la liste
- Result := TComboBox.create(self);
- ListCombo.Add(Result);
- Result.parent := Support;
- Result.items := 'choix1';
- Result.items := 'choix2';
- Result.items := 'choix3';
- Result.items := '--- supprimer ---';
- Result.itemIndex := -1; //aucun choix selectioné
- Result.OnSelect := TForm1.SelectionCombo;
- end;
- TForm1.procedure SelectionCombo(sender:TObject);
- var combo : TcomboBox;
- begin
- Combo := TComboBo(sender);
- If combo = ListCombo[ListCombo.count-1] // si c'est le dernier combo de
- and Combo.itemIndex<>-1 then begin //et qu'on a selectioné quelque chose
- AjouterCombo; //alors, on ajoute un nouveau combo (vide) au bas de l'écran
- ReechelonerCombo;
- end;
- end;
|
Pour l'instant, on a donc une liste de choix qu'on peut etende à l'infini, mais on ne peut pas suprimer un élément.
Tu aura remarqué que dans la liste des choix, j'ai ajouté une valeur "--supprimer--". L'idée est que si l'utilisateur selectionnne cette valeur, le combo est supprimé et ceux en bas se décalent vers le haut.
Le code de la suppression est simple:
Code :
- Procedure SupprimerCombo(Numero :integer);
- begin
- ListeCombo.delete(Numero);// La Liste Own ses élément, donc, le combo est supprimé
- ReechelonerCombo;
- end;
|
Mais où le caser
.
Pour l'instant, il est dans le TForm1.Canvas.OnRefresh(je teste chaque combo pour vois si il est sur "suprimer" ). Plutot crade et surtout, c'est galère pour une exécution pas à pas.
.
Message édité par el zozo le 12-11-2006 à 21:58:00