Problème de focus dans TEdit, TComboBox, TDateTimePicker : besoin d'aide ....

uruma Messages postés 25 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 1 décembre 2012 - 24 nov. 2012 à 10:17
uruma Messages postés 25 Date d'inscription vendredi 25 avril 2003 Statut Membre Derniè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"

Aidez moi ....

15 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
24 nov. 2012 à 16:19
Il faudrait voir le code de la DLL pour dire.

________________________________________________________
besoin de câbles audio, vidèo, informatique pas cher ?
0
uruma Messages postés 25 Date d'inscription vendredi 25 avril 2003 Statut Membre Derniè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 ?
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
25 nov. 2012 à 16:53
mmm bonne question...

il est possible que la fenetre récupère les messages sans les passer à la fenetre enfant. c'est étonnant mais probable.

il faudrait peut etre viser le handle de l'objet Application plutot que la fenetre (MainForm) de l'appli.

________________________________________________________
besoin de câbles audio, vidèo, informatique pas cher ?
0
uruma Messages postés 25 Date d'inscription vendredi 25 avril 2003 Statut Membre Derniè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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
26 nov. 2012 à 10:43
Essaye plutot Application.CreateForm() ...

A+


Composants Cindy pour Delphi
Faites une donation.
0
uruma Messages postés 25 Date d'inscription vendredi 25 avril 2003 Statut Membre Derniè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

J'ai le message handle de fenetre invalide.
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
26 nov. 2012 à 11:14
Pourquoi fais tu "ParentWindow := z_handle; " ? Tu n' en as pas besoin ...


Composants Cindy pour Delphi
Faites une donation.
0
uruma Messages postés 25 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 1 décembre 2012
26 nov. 2012 à 11:21
J'ai besoin que la fenetre que je viens de créer se position à l'interieure de la fenetre appelant c'est pour cela que j'utilise de parentwindow

A priori même en supprimant ce parentwindow, j'ai quand même le problème.

pour resumer nous avons
fenetre1 = fenetre appelant la dll
fenetre2 = fenetre recouvrant la fenetre1
fenetre3 = fenetre contenant mes TEdit etc...

avec
fenetre2.parent = fenetre1
fenetre3.parent = fenetre2
0
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 10
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;

Salut

solilog
0
uruma Messages postés 25 Date d'inscription vendredi 25 avril 2003 Statut Membre Derniè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.
0
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 10
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.

solilog
0
uruma Messages postés 25 Date d'inscription vendredi 25 avril 2003 Statut Membre Derniè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é.
0
uruma Messages postés 25 Date d'inscription vendredi 25 avril 2003 Statut Membre Derniè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.

Je continue ....
0
solilog Messages postés 273 Date d'inscription samedi 13 juin 2009 Statut Membre Dernière intervention 18 avril 2015 10
1 déc. 2012 à 07:37
Salut,
Désolé, mais je m'arrête là.
Bon courage.
solilog
0
uruma Messages postés 25 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 1 décembre 2012
1 déc. 2012 à 11:38
Ne soit pas désolé, ta piste m'aide déjà beaucoup.
Je reviens vers vous dès que j'ai la solution.
0
Rejoignez-nous