TABSTRIP EN UTILISANT LES OBJETS FORM (VB.NET)

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
- - Dernière réponse : 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

Afficher la suite 
cs_Jack
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61 -
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.
MdoDev
Messages postés
4
Date d'inscription
jeudi 8 juin 2006
Statut
Membre
Dernière intervention
6 juillet 2006
-
Pour moi l'autre avantage est de rendre le code plus clair et donc facilement maintenable.

Merci.
Mdo
cs_FraGag
Messages postés
82
Date d'inscription
jeudi 19 février 2004
Statut
Membre
Dernière intervention
18 avril 2008
-
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
-
Je vais mettre à jour mon source et tester dès que possible, A suivre ...
cs_FraGag
Messages postés
82
Date d'inscription
jeudi 19 février 2004
Statut
Membre
Dernière intervention
18 avril 2008
-
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 !
cs_derick
Messages postés
41
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
25 août 2007
-
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
MdoDev
Messages postés
4
Date d'inscription
jeudi 8 juin 2006
Statut
Membre
Dernière intervention
6 juillet 2006
-
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 ;-)
MdoDev
Messages postés
4
Date d'inscription
jeudi 8 juin 2006
Statut
Membre
Dernière intervention
6 juillet 2006
-
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 :-{