Problème de focus dans TEdit, TComboBox, TDateTimePicker : besoin d'aide ....
uruma
Messages postés25Date d'inscriptionvendredi 25 avril 2003StatutMembreDernière intervention 1 décembre 2012
-
24 nov. 2012 à 10:17
uruma
Messages postés25Date d'inscriptionvendredi 25 avril 2003StatutMembreDernière intervention 1 décembre 2012
-
1 déc. 2012 à 11:38
Bonjour,
Voici un sujet qui je pense, pourra intéresser les plus calé.
J'ai conçue une dll qui me permet depuis une autre application de créér des fiches dynamiquement via un appel du style :
creerfenetre(x,y,w,h)
insererlabel(x,y,"Article")
insereredit(x,y,var_prix)
etc...
La fenetre parente de ma fenetre est la fenetre de l'application d'origine.
Et dans ce cas j'ai un phénomène un peu bizarre, les tedit, tcombo, tdatetime ne prenne pas le focus lors d'un click sur eux.
Pour le Tedit, j'ai pu ruser en mettant sur l'évenement onClick un SetFocus sur le Sender, malheuresement cette solution ne peut pas fonctionner avec le TCombo le OnClick ayant lieu lors de la selection d'un élément (trop tard dans mon cas)
J'ai pu constater que le problème venait de la fenetre parente (qui appel la dll) malheuresement je dois me positionner par rapport à celle-ci et interagir avec celle-ci donc difficile de ne pas la prendre comme parente.
De plus, avec les listes, si j'enlève cette fenetre parente j'obtiens le message "le control xxx n'a pas de fenetre parente"
uruma
Messages postés25Date d'inscriptionvendredi 25 avril 2003StatutMembreDernière intervention 1 décembre 2012 24 nov. 2012 à 17:05
Je ne peux pas mettre tout le code de la dll.
J'ai vraiment fait dans le standard.
je recupere le handle de la fenetre appelant la dll via l'appel de l'init
ensuite j'ai créér une fenetre ainsi
formp := tform.createparented(handle_fenetre_appli)
form := tform.create(formp)
edit := tedit.create(form)
edit.parent := form
Rien de particulier, la même chose que dans une appli.
J'ai l'impression que la fenetre principal (appelant la dll) bloque certain message, est ce possible ?
uruma
Messages postés25Date d'inscriptionvendredi 25 avril 2003StatutMembreDernière intervention 1 décembre 2012 26 nov. 2012 à 09:48
J'ai fait un essai mais j'obtiens l'erreur comme quoi ce n'est pas un handle de fenetre valide lorsque je fais form := TForm.CreateParented(handle)
Ce qui en soit me semble logique non ?
Sur ma fenetre j'ai des radios, des listes etc... ces controles recoivent bien les clicks. Il n'y a que le focus qui ne fonctionne pas sur les TEdit, etc...
Et quand je dis ne fonctionne pas, il ne fonctionne pas sur le click mais via la tcouhe Tab pas de soucis.
Vous n’avez pas trouvé la réponse que vous recherchez ?
uruma
Messages postés25Date d'inscriptionvendredi 25 avril 2003StatutMembreDernière intervention 1 décembre 2012 26 nov. 2012 à 10:51
Oui, mais même en faisant ça :
// Création de la form principale
Application.CreateForm(TForm, z_mform);
With z_mform do
begin
ParentWindow := z_handle;
Align := alClient; // Handle transmis par l'application principale
solilog
Messages postés273Date d'inscriptionsamedi 13 juin 2009StatutMembreDernière intervention18 avril 201510 26 nov. 2012 à 21:45
Bonsoir,
Je viens de faire qq' essais. Si tu passes à ta DLL l'application ET la form parent tu n'as plus de prob (il semblerait).
procedure CreFenetre( app:Tapplication; papa:tform);
begin
dllForm := tDllForm.create( app );
dllForm.parent := papa;
...
dllForm.showmodal;
end;
Tous les focus, messages fonctionnent;
uruma
Messages postés25Date d'inscriptionvendredi 25 avril 2003StatutMembreDernière intervention 1 décembre 2012 27 nov. 2012 à 00:19
Salut,
Merci de ton aide.
Je ne suis pas sur de pouvoir recupérer le handle de l'application.
Lorsque je transfert le handle recuperer à l'objet application de ma dll je recupère bien les infos (title, exename, etc...) mais pour moi il s'agit du handle de la fenetre.
J'ai quand même créer selon tes conseils mais cela ne fonctionne toujours pas.
solilog
Messages postés273Date d'inscriptionsamedi 13 juin 2009StatutMembreDernière intervention18 avril 201510 28 nov. 2012 à 19:41
Bonsoir,
Tu as raison, ca ne marche pas. Ni avec une dll, ni sans dll (directement avec une fenetre de l'appli): cela semble imposs de "focuser" les contrôles d'une fenêtre enfant d'une autre fenêtre (la preuve en est que la fenêtre "enfant" n'a jamais sa barre supp de menu active).
Il semble quand les forms sont enfants de forms, elles ne recoivent pas correctement les even.
- Par contre, tous les even "onclick" que tu as mis fonctionnent: (sender as twincontrol).setfocus; Et pour les combo, list, tdatetimepicker, ... les even les click fonctionnent sans onclick (ici).
-par contre est impossible de selectionner des mots dans les memos :-(
- cool: tout marche (sans onclick) si papa formstyle=MDIform et bebe MDIChild (c'est p'etre pas possible chez toi).
J'avais 2 heures à perdre hier soir.
Bon courage.
uruma
Messages postés25Date d'inscriptionvendredi 25 avril 2003StatutMembreDernière intervention 1 décembre 2012 28 nov. 2012 à 23:20
Merci beaucoup.
En effet, le fait d'utiliser MdiForm & MdiChild me pose plusieurs soucis dans mon cas, mais si cela solutionne ce problème je vais refaire des essais de ce coté.
Je vous tiens informé.
uruma
Messages postés25Date d'inscriptionvendredi 25 avril 2003StatutMembreDernière intervention 1 décembre 2012 30 nov. 2012 à 14:46
Donc, je reviens.
En effet, le MDIForm & Child est bien la cause de mon problème.
Sauf que je bute sur un autre point.
Pour être clair.
Le langage qui appelle ma dll est en mode texte (pas de gestion graphique)
Il s'exécute dans une fenêtre et c'est donc le handle de cette fenetre (form_app) que le langage est capable de me fournir.
De mon coté j'ai une première fenetre (form_a_moi) qui me sert à recouvrir la fenetre de l'éxécuteur & à l'interieur de la quelle je peux créer mes fenetres (form_fille) .
Donc en passant ma form_a_moi en MDIForm & ma form_fille en MDIChild cela ne fonctionne pas si form_a_moi.parent = form_app
Il faudrait que je puisse passer form_app en MDIForm mais je ne sais pas si c'est possible.