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 : Objet dynamique et Form modale [ Divers / Aide et documentation ] (gebu34)

lundi 7 mai 2007 à 18:45:37 | Objet dynamique et Form modale

gebu34

Bonjour à tous,
Je veux créer un objet (un boutton par exemple) dynamiquement sur unr Form en mode modale.
Dans les sources j'ai trouvé un code qui parait sympathique. (permet de faire une verif au moment de la libération)
  Objects: array of TControl;
procedure TForm1.Button2Click(Sender: TObject);
begin
  setlength(Objects,length(Objects)+1);
  Objects[length(Objects)-1]:=TButton.create(Application);
  (Objects[length(Objects)-1] as TButton).Parent:=Form1;
  (Objects[length(Objects)-1] as TButton).Name:='MyButton';
  (Objects[length(Objects)-1] as TButton).Caption:='MonBouton';
  (Objects[length(Objects)-1] as TButton).Top:=100;
  (Objects[length(Objects)-1] as TButton).Left:=20;
  end;

En le testant avec une Form puis F9....ça fonctionne.
En l'incorporant à une application (style page principale avec menu qui ouvre une autre Form2 en mode modale) j'applique ce code sur cette Form2 rien ne s'affiche mais le bouton est crée. (j'ai une exeption en recréant le bouton).
Je pense que celà provient du mode modale mais pourquoi ????
A+ et Merci

lundi 7 mai 2007 à 21:13:02 | Re : Objet dynamique et Form modale

florenth

Membre Club
Réponse acceptée !
Salut, déjà, simplification du code :






var
  B: TButton;
begin
  B := TButton.Create(Self);
  with B do
  begin

    Parent := Self;
    Caption := 'Bouton crée !';
    SetBounds(100, 20, Width, Height);
  end;
  SetLength(Objects, Length(Objects) + 1);
  Objects[High(Objects)] := B;

end;

Déjà, ce code est bien plus lisible.
En plus :
- Utiliser "Self" est bien plus adapté que Application pour le propriétaire de l'objet ,surtout si c'est une fiche modale.
- Creér une variable temporaire c'est plus simple.
- Utiliser "Self" comme parent t'évite des embrouilles (par ex, que le compo ne s'affiche pas sur la bonne fiche après avoir remanié un peu le code, ce qui doit être ton cas).
- SetBounds() évite le double-réaffichage lorsquetu modifies Left et Top.
- Le groupement with...do, c'est plus agréable à lire.

Avec tout ça, chez moi, ça marche nickel

++
Flo

lundi 7 mai 2007 à 22:20:35 | Re : Objet dynamique et Form modale

gebu34

Salut,
Je suis comme toi, j'aimes bien le code propre......Là j'avais mis le code brute de décoffrage.
Exact, celà fonctionne.... peut-être l'histoire de la variable....
J'en ai profiter pour lire ton Tuto sur les procedure  pour créer des objets.......Très interressant...celà fait des années (et plus) que je programme, et j'en apprends tous les jours.
Je vais m'en servir pour mes objets dynamiques....
allez A+ et merci

mardi 8 mai 2007 à 09:14:53 | Re : Objet dynamique et Form modale

Loda

Membre Club
salut,

  (Objects[length(Objects)-1] as TButton).Parent:=Form1;

En l'incorporant à une application (style page principale avec menu qui ouvre une autre Form2 en mode modale) j

suivant ce que tu veux faire avec le buttoun, tu peux garder une ref (ptr) dans un champs de la form. (au lien d'une var local)

A+

Loda

Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.

mardi 8 mai 2007 à 12:54:08 | Re : Objet dynamique et Form modale

florenth

Membre Club
@gebu: en fait, comme te le dit Loda, c'est le problème Form1 <> Form2. Si tu changes ton code (copier-coller) mais pas le nom de la variable, deux choses arivent :
- Soit Delphi te balance des jurons parce qu'il ne trouve pas Form1.
- Soit tu as mis Unit1 dans les uses et alors là le code compile sans problème mais ne fait pas ce que tu veux.

C'est la deuxième chose qui vient de t'arriver.
En parlant de ça, renomme tes fiches ! Au moins, quand tu reliras le code, tu te diras "nondidjou ! Ma quésquésaféla ?"

++
Flo


mercredi 9 mai 2007 à 06:58:37 | Re : Objet dynamique et Form modale

gebu34

Salut,
Les Form1 et Form2 c'est juste pour les tests, en vérité ma page d'accueil s'appelle toujours Fprincipal et le reste suivant l'application.(j'applique des conventions d'écriture que je me suis fixé).
Par contre le tableau "Objects: array of TControl;" peut-être déclaré sur plusieurs Form et peut-être que là il y a confusion.....
A+


mercredi 9 mai 2007 à 12:44:44 | Re : Objet dynamique et Form modale

Loda

Membre Club
Réponse acceptée !
re,

autant que possible (et logique) declare tes var en tant que champs (fields) de ta (tes) form et non en tant que var global de l'unité de ta form. cela te limitera déjà un peu tes problème des noms/portées de var.

si la différence n'est pas clair pour toi, renseigne toi, puis, si c'est toujours obscure, demande moi en MP.
A+
Loda

Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.

mercredi 9 mai 2007 à 16:24:21 | Re : Objet dynamique et Form modale

gebu34

Salut ,
Si c'est très clair, d'ailleurs j'essaie d'utiliser le moins de varable possible (je viens du TurboPascal Dos ou il fallait être économe sur le code....les machines n'étaient pas des bêtes de course....d'ou j'ai gardé quelques habitudes...).
Néanmoins depuis que je programme, j'en apprends encore et franchement je n'est pas honte.
Merci à tous les deux de vos réponses claires.
A+

jeudi 10 mai 2007 à 09:13:59 | Re : Objet dynamique et Form modale

Loda

Membre Club
re,

bin je suis content de savoir que c'est clair pour toi :-)

bon code !

Loda

Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.

dimanche 13 mai 2007 à 15:51:01 | Re : Objet dynamique et Form modale

cantador

Membre Club
@florenth : SetLength(Objects, Length(Objects) + 1); Objects[High(Objects)] := B; Pourquoi prévoir un tableau s'il n'y a qu'un seul bouton à créer ? A+


1 2

Cette discussion est classé dans : form, length, modale, tbutton, objects


Répondre à ce message

Sujets en rapport avec ce message

Aide urgente sur la création à la volée [ par rindra ] Voila, j'aurai une question de débutant à poser :kan je lance delphi, g une form qui est crée automatiquement, c'est comme ça chez tout le monde norma Fenêtre Modale qui passe en arrière plan [ par anisb ] Bonjour, Alors voici mon "Etrange" problème ... je vais essayer d'être le plus precis dans ma description en esperant que quelqu'un puisse m'aider à l Pour que la form ne se cache pas sous barre de tache [ par cocowz ] Bonsoir,J'ai un truc c'est que quand je lance le projet... puis dans la form je peux choisir la position de ma form (en bas a gauche ou droite ou en h Popup dans une DLL [ par jeje2 ] Bonjour à tous,J'ai créé une DLL qui contient une form avec un menu popup.De mon apllication j'arrive bien à afficher ma form venant de la dll, mais i Statusbar dans une DLL [ par jeje2 ] Bonjour, J'ai un projet avec une DLL qui contient une Form, sur cette form j'ai un statusbar en mode Autohint pour afficher l'aide dans celui-ci.Hors Suppression de composants [ par xzenou ] Bonjour;J'ai bien sur une question à poser, j'utilise des composants Tlabel que je crée 'dynamiquement' avec une simple fonction create.Quand je ferme Form et barre de titre [ par ThWilliam ] Bonjour à tous. J'ai un programme avec plusieurs Forms visibles.Pour simplifier :Form1 = fenêtre principaleForm2 = fenêtre de Style = fsStayOnTop. probleme de label [ par Mr7Bungle ] Bien le bonjour je vous explique mon soucis !J'ai, sur une form, 150 label qui tour à tour seront utilisés. J'aurai voulu indexer tout ces label dans Nouvelle icone dans nouveaux éléments [ par gebu34 ] Bonjour,Je m'explique, j'ai écris des composants avec couleurs dégradée réglable plus ombre. Il y en a un qui me pose problème, c'est une Form. Je ne form [ par zobotabota ] comment faire pour modifier par exemple les formes du bouton en rond ou triangle ou autres


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.