cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
16 juin 2006 à 18:41
MdoDev
Messages postés4Date d'inscriptionjeudi 8 juin 2006StatutMembreDernière intervention 6 juillet 2006
-
6 juil. 2006 à 22:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
MdoDev
Messages postés4Date d'inscriptionjeudi 8 juin 2006StatutMembreDernière intervention 6 juillet 2006 6 juil. 2006 à 22:20
Call SetWindowLong(stForms(UBound(stForms)).frmFormName.hWnd, GWL_STYLE, GetWindowLong(stForms(UBound(stForms)).frmFormName.hWnd, GWL_STYLE) Or WS_CHILD) ne permet pas de laisser le focus sur la fenêtre parent.
J'ai laissé le code en commentaire pour ceux qui souhaitent essayer.
J'ai cherché à mettre d'autres attributs mais rien à faire.
Je n'ai pas trouvé de solution en surfant :-{
MdoDev
Messages postés4Date d'inscriptionjeudi 8 juin 2006StatutMembreDernière intervention 6 juillet 2006 20 juin 2006 à 19:28
Dès que j'aurai le temps, je vais ajouter ce petit add-on pour le focus.
Je mettrai à disposition les nouvelles sources si ca veut bien fonctionner cette fois !
En ce qui concerne "TabsAssist 3.0 Free", il exite un objet standard vb qui permet déjà de jonglet facilement avec les onglets. Dans les 2 cas, on conserve les FRAMES. Personnellement, je n'aime pas ;-)
cs_derick
Messages postés41Date d'inscriptionmardi 20 mai 2003StatutMembreDernière intervention25 août 2007 20 juin 2006 à 08:43
Salut à tous,
Connaissez-vous "TabsAssist 3.0 Free" ? C'est un complément VB qui permet de faire fonctionner les onglets dans l'éditeur VB comme à l'exécution, et donc de jongler +/- facilement avec les frames [si on décide de conserver cette méthode ;-)]
> livré avec les sources
> http://fred.just.free.fr/francais/index.html
Bonne progr,
Derick
cs_FraGag
Messages postés81Date d'inscriptionjeudi 19 février 2004StatutMembreDernière intervention18 avril 2008 19 juin 2006 à 21:04
Je viens de me souvenir qu'il faut ajouter le style WS_CHILD (&H40000000) pour que les forms ne volent pas le focus au form parent. Présentement, quand un form est sélectionné, le form parent est désélectionné, mais avec SetWindowLong, avec nIndex = GWL_STYLE (-16), le form parent gardera le focus également (comme si c'était n'importe quel contrôle qu'on dépose sur un form). Il est important de conserver l'ancien style (à récupérer avec GetWindowLong) et de mélanger WS_CHILD avec l'opérateur Or (on l'enlèverait avec And Not). Donc, la ligne à ajouter (je la mettrais juste après l'appel à SetParent) serait :
Call SetWindowLong(stForms(UBound(stForms)).frmFormName.hWnd, GWL_STYLE, GetWindowLong(stForms(UBound(stForms)).frmFormName.hWnd, GWL_STYLE) Or WS_CHILD)
Il ne reste qu'à déclarer les APIs et les constantes, dont j'ai mis les valeurs entre parenthèses. Maintenant, on ne devrait y voir que du feu !
MdoDev
Messages postés4Date d'inscriptionjeudi 8 juin 2006StatutMembreDernière intervention 6 juillet 2006 17 juin 2006 à 12:00
Je vais mettre à jour mon source et tester dès que possible, A suivre ...
cs_FraGag
Messages postés81Date d'inscriptionjeudi 19 février 2004StatutMembreDernière intervention18 avril 2008 16 juin 2006 à 23:45
Plusieurs programmes (pas écrits en VB bien sûr...) utilisent les "Dialogs" de Windows pour afficher du contenu dans des onglets, sauf que ces fenêtres sont enfants de la fenêtre principale. En faisant ainsi, on enlèverait l'effet "pas joli". L'API SetParent est là pour ça. De plus, il ne sera plus nécessaire de calculer la position du form parent pour l'ajouter à la position des forms enfants. Finalement, avec les propriétés ClientLeft, ClientTop, ClientWidth et ClientHeight du TabStrip, il n'y a qu'à faire, dans Form_Resize :
Private Sub Form_Resize()
Dim i As Integer
For i = 1 To UBound(m_Forms)
m_Forms(i).frmFormName.Move TabStrip1.ClientLeft, ... 'continuer avec les autres ClientXYZ
Next
End Sub
MdoDev
Messages postés4Date d'inscriptionjeudi 8 juin 2006StatutMembreDernière intervention 6 juillet 2006 16 juin 2006 à 21:19
Pour moi l'autre avantage est de rendre le code plus clair et donc facilement maintenable.
Merci.
Mdo
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 16 juin 2006 à 18:41
Oui, pourquoi pas.
Avantage de ta méthode :
Quand, dans une TabStrip qui gère des options d'un programme, tu as beaucoup de controles, ça devient lourd, le compilo n'aime pas trop et en plus, VB6 limite le nombre de composants par forme à 255 (de mémoire).
Donc, le fait d'utiliser des formes peut résoudre ce genre de problème.
6 juil. 2006 à 22:20
J'ai laissé le code en commentaire pour ceux qui souhaitent essayer.
J'ai cherché à mettre d'autres attributs mais rien à faire.
Je n'ai pas trouvé de solution en surfant :-{
20 juin 2006 à 19:28
Je mettrai à disposition les nouvelles sources si ca veut bien fonctionner cette fois !
En ce qui concerne "TabsAssist 3.0 Free", il exite un objet standard vb qui permet déjà de jonglet facilement avec les onglets. Dans les 2 cas, on conserve les FRAMES. Personnellement, je n'aime pas ;-)
20 juin 2006 à 08:43
Connaissez-vous "TabsAssist 3.0 Free" ? C'est un complément VB qui permet de faire fonctionner les onglets dans l'éditeur VB comme à l'exécution, et donc de jongler +/- facilement avec les frames [si on décide de conserver cette méthode ;-)]
> livré avec les sources
> http://fred.just.free.fr/francais/index.html
Bonne progr,
Derick
19 juin 2006 à 21:04
Call SetWindowLong(stForms(UBound(stForms)).frmFormName.hWnd, GWL_STYLE, GetWindowLong(stForms(UBound(stForms)).frmFormName.hWnd, GWL_STYLE) Or WS_CHILD)
Il ne reste qu'à déclarer les APIs et les constantes, dont j'ai mis les valeurs entre parenthèses. Maintenant, on ne devrait y voir que du feu !
17 juin 2006 à 12:00
16 juin 2006 à 23:45
Private Sub Form_Resize()
Dim i As Integer
For i = 1 To UBound(m_Forms)
m_Forms(i).frmFormName.Move TabStrip1.ClientLeft, ... 'continuer avec les autres ClientXYZ
Next
End Sub
16 juin 2006 à 21:19
Merci.
Mdo
16 juin 2006 à 18:41
Avantage de ta méthode :
Quand, dans une TabStrip qui gère des options d'un programme, tu as beaucoup de controles, ça devient lourd, le compilo n'aime pas trop et en plus, VB6 limite le nombre de composants par forme à 255 (de mémoire).
Donc, le fait d'utiliser des formes peut résoudre ce genre de problème.