begin process at 2008 08 29 21:52:42
1 233 909 membres
430 nouveaux aujourd'hui
14 294 membres club

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 : Problème de Tabstop inefficace... [ Algorithme / Autre ] (Delphi57)

Problème de Tabstop inefficace... le 14/06/2007 14:29:57

Delphi57
Bonjour à tous,

J'ai petit soucis de "tabstop" inefficace :

Mon application principale appelle une fonction contenue dans une DLL. Cette fonction crée une fenetre TForm en passant dans la méthode CreateParams un handle identifiant le contrôle (TTabSheet) de mon application principale, qui accueillera cette fenetre:

procedure TFormEditParametersList.CreateParams(var Params: TCreateParams);
begin
       Params.WndParent := MainFormCallerWindowHandle; 
       Params.Style:= WS_CHILD  + WS_CLIPCHILDREN + WS_BORDER+ WS_CLIPSIBLINGS + WS_TABSTOP ;   
end;


Or quand cette fenetre est créée dans ces conditions le tabstop sur les contrôles ne fonctionne pas.
Par Contre quand celle-ci est appelée sans passer par ce CreateParams les tabstop fonctionnent tout à fait normalement !

PS: L'application principale est en delphi 2005, et la DLL en Delphi 5

Si vous avez des idées, je vous en serais éternellement reconnaissant... car moi, je séche !

Merci d'avance,

DELPHI57

Re : Problème de Tabstop inefficace... le 14/06/2007 18:01:46

cirec
Membre Club
(Admin CS)
Salut,

Essaye comme ça ...
procedure TFormEditParametersList.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
       Params.WndParent := MainFormCallerWindowHandle; 
       Params.Style:= WS_CHILD  + WS_CLIPCHILDREN + WS_BORDER+ WS_CLIPSIBLINGS + WS_TABSTOP ;   
end;



 
@+
Cirec


Re : Problème de Tabstop inefficace... le 15/06/2007 09:31:54

Delphi57
Merci pour ta réponse.
Je viens de vérifier dans mon code : je me suis aperçu qu'en simplifiant le code que j'ai collé dans mon message initial, j'avais oublié la ligne que tu me préconise...Mille excuses !  Du coup, on peut considérer que la surcharge de mon CreateParams l'intégre déjà ...
Aurais-tu une autre piste ?
Ce que je me demandais c'est : ne faut-il pas plutôt agir sur le contrôle TTabSheet qui "acceuille" cette fenetre ? Car en fait, j'ai la nette impression que ce contrôle ignore qu'il a un contrôle enfant (la fenetre) et que dans ce cas il semblerait "normal" que la gestion des tabstop soit inefficace ...???

DELPHI57

Re : Problème de Tabstop inefficace... le 15/06/2007 12:48:59

florenth
Membre Club
Salut !

Je te cite un peu: "en simplifiant le code que j'ai collé dans mon message initial"
Question: mais pourquoi simplifier le code ? Donne le nous tel quel, on sait jamais, des fois que le problème vienne d'un conflit avec autre chose (ce qui est souvent le cas dans les "choses" faisant intervenir les objets Windows).

Pour ton problème, je trouve que la solution que tu utilises est bizarre. As-tu déjà essayé d'utiliser les propriétés TabStop et TabOrder du TTabSheet ?

A part ça, les fenêtres VCL dans le dll, ça risque de te causer quelques soucis. C'est pas Cirec qui te dira le contraire mais je vais le laisser te répondre: il s'y connait mieux que moi sur le sujet...

A+
Flo



Re : Problème de Tabstop inefficace... le 15/06/2007 13:55:03

Delphi57
Pourquoi Simplifier ? car les autres éléments sont sans influence et traite d'autre cas d'utilisation de la fenetre ... On peut considérer le code comme ceci :
procedure TFormEditParametersList.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
       Params.WndParent := MainFormCallerWindowHandle; 
       Params.Style:= WS_CHILD  + WS_CLIPCHILDREN + WS_BORDER+ WS_CLIPSIBLINGS + WS_TABSTOP ;   
end;


Une précision cenpendant, MainFormCallerWindowHandle contient le handle du TabSheet.

DELPHI57

Re : Problème de Tabstop inefficace... le 15/06/2007 16:31:09

cirec
Membre Club
(Admin CS)
En effet les fiches dans les DLL's provoquent souvant des erreurs

Je ne m'attarderai pas sur le sujet (il existe des codes ici qui traitent du problème) mais ce qu'il faut retenir dans un premier temps
Si on utilise pas le Style XP (XPMan) il est possible de les utiliser avec quand mêmes quelques petites précautions.

Mais pour ton cas si tu veux changer le parent de la fenêtre que tu viens de créer
je te propose l'utilisation de SetParent de l'unité Windows.

    Windows.SetParent(Handle_de_la_fenetre, Handle_du_TabSheet);


 
@+
Cirec


Re : Problème de Tabstop inefficace... le 18/06/2007 10:23:41

Delphi57
Merci de ta réponse.
J'ai mis le code que tu m'as indiqué dans le Create de la form de la DLL : 
    Windows.SetParent(Handle_de_la_fenetre, Handle_du_TabSheet);

Ceci ne change rien....malheureusement !

Sais-tu comment faire pour indiquer au TTabSheet qu'il a un enfant ? Est-ce que la méthode Insert peut fonctionner dans ce cas : TabSheet.insert( Handle_de_la_fenetre as Tcontrol)
Car ce que j'ai observé, c'est que le controlcount du TTabSheet est à zéro....(aprés création de la fenetre évidemment !)

J'ai essayé de faire coté application principale :
     tabsheet.InsertControl(tabsheet1.CreateParentedControl(HWnd(Message.WParam)));

Où Message.WParam est le handle de la fenetre de la DLL

Mais encore une fois ceci ne change rien au problème de tabstop.

Que faire ????

DELPHI57


Classé sous : application, ws, principale, tabstop, inefficace

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS