|
Trouver une ressource
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 : Accéder aux objets dynamique [ Divers / Aide et documentation ] (gebu34)
Informations & options pour cette discussion
vendredi 11 mai 2007 à 11:16:32 |
Accéder aux objets dynamique

gebu34
|
Salut à tous, Je crée dynamiquement un ComboBox sur une Form. J'ai élaguer volontairement le code pour ne pas surchager.... var CmBx: TComboBox; Objects: array of TControl; .............. CmBx := TComboBox.Create(Self); with CmBx do begin Parent := Self; Name := 'CB1'; OnClick := CmBxClick; SetBounds(100, 100, 150, 17); end; SetLength(Objects, Length(Objects) + 1); Objects[High(Objects)] := CmBx; On peut charger la ComboBox par : CmBx.Items.Add(NomVariable); On peut lire sur Click avec : variable := CmBx.Text; Ca c'est bien quand on a 1 ComboBox... Mais avec plusieurs CB1, CB2 ????? A+ Merci
|
|
|
vendredi 11 mai 2007 à 11:47:54 |
Re : Accéder aux objets dynamique

Loda
|
salut,
var MesCB : array[1..NBCB] of TcomboBox;
for i := 1 to NBCB do begin CmBx := TComboBox.Create(Self); with CmBx do begin Parent := Self; // Name := 'CB1'; // inutile ou CB + inttostr(i) OnClick := CmBxClick; SetBounds(100, 100+i*..., 150, 17); tag := i; // si ça t'aide.... end; MesCB[i]:=cmbx; end; n'oublie pas que les event pass en param le "sender" ! Aussi, rappel toi le champs tag!
A+
Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
|
|
|
vendredi 11 mai 2007 à 16:03:24 |
Re : Accéder aux objets dynamique

gebu34
|
Re, J'ai pris un tableau TControl car mets dedans aussi du TCheckBox et du TEdit. Ca ne change pas grand chose. J'avais déjà vu la possibilité d'utiliser Tag, qui peut-être fort util dans ce cas. Mais pour accéder aux propriétés du compo, il existe peut-être un manière plus simple que : for i:=0 to Length(Objects)-1 do begin if Objects[i].Tag = 2 ou if Objects[i].Name = 'CB1' end; pour récupérer l'indice de l'objet..... A+
|
|
|
vendredi 11 mai 2007 à 19:08:21 |
Re : Accéder aux objets dynamique

gebu34
|
Salut Loda, J'étais en train de relire ton message, et je pense que tu as la solution. Je m'acharne à avoir un tableau TControl pour pouvoir mettre toute sorte de composants, alors que déclarer un tableau par composant TComboBox, TCheckBox, TEdit est plus lourd en code, mais plus simple à gérer (remplir des listes, extraire des données...) Qu'en penses-tu ? A+.
|
|
|
vendredi 11 mai 2007 à 20:36:51 |
Re : Accéder aux objets dynamique

f0xi
|
ptite technique de derriere les fagots : uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Contnrs;
type TControlClass = class of TControl;
TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private fDynCtrlList : TObjectList; protected public constructor Create(AOwner : TComponent); override; destructor Destroy; override; function CreateChild(const AName : string; AClass : TControlClass; AParent : TWinControl; const ALeft, ATop : integer; var VIndex : integer) : TControl; property DynamicCtrls : TObjectList read fDynCtrlList write fDynCtrlList; end;
var Form1: TForm1;
implementation
{$R *.dfm}
constructor TForm1.Create(AOwner: TComponent); begin inherited Create(AOwner); fDynCtrlList := TObjectList.Create(true); end;
function TForm1.CreateChild(const AName : string; AClass : TControlClass; AParent : TWinControl; const ALeft, ATop : integer; var VIndex : integer) : TControl; begin result := AClass.Create(nil); VIndex := fDynCtrlList.Add(result); with Result do begin if Length(AName) >= 2 then Name := AName else Name := 'DynamicCtrl'+IntToStr(fDynCtrlList.Count);
if AParent <> nil then Parent := AParent;
SetBounds(ALeft,ATop,Width,Height); end; end;
destructor TForm1.Destroy; begin fDynCtrlList.Clear; fDynCtrlList.Free; inherited Destroy; end;
procedure TForm1.FormCreate(Sender: TObject); var N,II,OT,OH : integer; begin CreateChild('',TEdit,Self,10,10,II); with DynamicCtrls.Items[II]as TEdit do begin Text := 'Hahahahaha'; OT := Top; OH := Height; end;
CreateChild('',TComboBox,Self,10,OT+OH+8,II); with DynamicCtrls.Items[II] as TComboBox do begin for N := 1 to 10 do Items.Add(IntToStr(N)); end; end;
Croc (click me)
|
|
|
samedi 12 mai 2007 à 08:39:07 |
Re : Accéder aux objets dynamique

gebu34
|
Salut, En ce moment je me connecte en pointillés j'ai des problèmes sur la ligne. La, FOxi nous présente THE code.... J'aime bien, c'est clair et nul doute efficace... Petite question, ta variable II (Vindex) est initialisée comment ? Dans mon cas, je veux faire apparaître les compos "à la volée" (un click sur une cellule d'un STringGrid = visible une autre cellule = libéré). Je pense qu'il suffit de déclaré CreateChild non pas dans FormCreate mais dans OnSelectCell. Par contre pour récupérer les données de ces compos comment utiliser DynamicCtrls ? (Par exemple le OnClick d'un ComboBox remplis la cellule 1,1 d'un TStringGrid) A+ et merci de vos efforts
|
|
|
samedi 12 mai 2007 à 19:07:53 |
Re : Accéder aux objets dynamique

f0xi
|
Réponse acceptée !
procedure TForm1.FormCreate(Sender: TObject); var N,II,OT,OH : integer; begin CreateChild('',TEdit,Self,10,10,II); with DynamicCtrls.Items[II] as TEdit do begin Text := 'Hahahahaha'; OT := Top; OH := Height; end;
CreateChild('',TComboBox,Self,10,OT+OH+8,II); with DynamicCtrls.Items[II] as TComboBox do begin for N := 1 to 10 do Items.Add(IntToStr(N)); end; end;
function TForm1.CreateChild(const AName : string; AClass : TControlClass; AParent : TWinControl; const ALeft, ATop : integer; var VIndex : integer) : TControl; begin result := AClass.Create(nil); VIndex := fDynCtrlList.Add(result); DynamicCtrls fonctione comme la propriété Items ou Lines d'une ListBox ou Memo, juste que la ce n'est pas des chaines mais des objets. pour assigner les evenements, tu créer des gestionnaire dans l'objet ou la fiche que tu desire, puis, tu assigne les gestionnaires comme suis : CreateChild('DEdit1',TEdit,Self,10,10,II); with DynamicCtrls.Items[II] as TEdit do begin Text := ''; OnClick := DoDEdit1Click; OnChange := DoDEdit1Change; OnKeyPress := DoDEdit1KeyPress; end; Croc (click me)
|
|
|
dimanche 13 mai 2007 à 00:03:24 |
Re : Accéder aux objets dynamique

gebu34
|
Ok, c'est clair, en plus j'aime bien ce code. Il ne me reste qu'a me mettre au clavier.... Merci A+
|
|
|
dimanche 13 mai 2007 à 01:57:42 |
Re : Accéder aux objets dynamique

f0xi
|
Réponse acceptée !
ah et pour enlever un objet de la fiche tu fait : DynamicCtrls.Delete(index de l'objet); Delete s'occupera de la suppression et liberation de l'objet. Croc (click me)
|
|
|
dimanche 13 mai 2007 à 21:44:06 |
Re : Accéder aux objets dynamique
|
Cette discussion est classé dans : combobox, accéder, objets, objects, cmbx
Répondre à ce message
Sujets en rapport avec ce message
combobox [ par Microbsoft ]
Je voudrais bloquer une combobox de l'ecriture est-ce possible si oui repondez. Merci @+
Manipulation de composants [ par finipe ]
Bonjour à tous. Tout d'abord bravo au concepteur web, le site est bien fait et très clair, c'estagréable, ça change...Bon trève de compliments :)Je dé
Combobox [ par lguez ]
Je cherche à mettre à jour la partie texte de la combobox au fur et à mesure que j'ecris dans la combo?par exemple si ma combobox contient :aaaaaaaabb
combobox [ par cldvax ]
Bonjour à tousJe suis débutant en programmation vba et j'ai deux petits problèmes.Dans une combobox j'arrive à extraire une valeur dans une liste, pré
Je veux mmoriser le contenu d'un combobox [ par Youyou0214 ]
J'ai fait un executeur de exe. Un bouton ouvre le opendialog et met le chemin du exe dans une combobox puis un autre bouton permet d'executer le exe c
findnearest dans la Combobox [ par mik38 ]
Bonjour,j'aurais savoir comment faire (a part trouver un autre composant) pour pouvoir saisir dans une combobox et qu'il se place sur l'item le plus p
combobox [ par Resco ]
je cherche comment, dans un combobox, selectionner une valeur mais en envoyer une autre qui ne figure pas dans Items
Propriété "Style" d'un ComboBox [ par jack554 ]
Bonjour.Question pour contrôler la saisie dans un ComboBox :Si on positionne le Style d'un TComboBox à csDropDown, l'utilisateur peut taper des valeur
pb combobox [ par tema ]
Salut, g un petit prob : g associer une bdd access à mon prog et je voudrais faire une combobox avec les valuers d'un champ de ma baz access mais g le
ComboBox.Text [ par magicvinni ]
Bonjour, J'ai un comboBox, avec une liste de choix et j'ai rajoutté un dernier item : "autre". Je voudrais que quand on clique sur autre, il y ai ec
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|