TABSTRIP EN UTILISANT LES OBJETS FORM (VB.NET)

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 16 juin 2006 à 18:41
MdoDev Messages postés 4 Date d'inscription jeudi 8 juin 2006 Statut Membre Derniè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.

https://codes-sources.commentcamarche.net/source/38141-tabstrip-en-utilisant-les-objets-form-vb-net

MdoDev Messages postés 4 Date d'inscription jeudi 8 juin 2006 Statut Membre Derniè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és 4 Date d'inscription jeudi 8 juin 2006 Statut Membre Derniè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és 41 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 25 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és 81 Date d'inscription jeudi 19 février 2004 Statut Membre Dernière intervention 18 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és 4 Date d'inscription jeudi 8 juin 2006 Statut Membre Derniè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és 81 Date d'inscription jeudi 19 février 2004 Statut Membre Dernière intervention 18 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és 4 Date d'inscription jeudi 8 juin 2006 Statut Membre Derniè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és 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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.
Rejoignez-nous