cs_JeffC1977
Messages postés926Date d'inscriptionvendredi 10 novembre 2000StatutMembreDernière intervention10 septembre 2010
-
31 août 2005 à 18:44
PCPT
Messages postés13280Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
1 sept. 2005 à 20:15
Salut...
J'ai posé une question sur le Forum à propos du SSTab mais la réponse que j'ai eu ne fonctionne pas...
J'ai 5 programmes que je me suis fait en VB6 et je veux faire qu'un seul programme en utilisant le SSTab (5 onglets).
Je me suis fait un nouveau projet et j'ai importer mes 5 Form. J'ai fait un copier coller de ma première Form et je l'ai coller dans un onglet. J'ai fais la même chose pour les 4 autres onglets (Chauqe programme (Form) à son onglet)
Je veux que si je clique sur l'onglet 0 (If SSTab1.Tab = 0 Then) je verrai le programme que j'ai copier et que ca l'appelle le code de la Form auquel elle se rattache. Donc je clique sur l'onglet 0 et je peux utiliser le programme qui se trouve dans cet onglet. Donc à chaque fois que je change d'onglet le code change de form pour faire fonctionner le progaremme... ???? C'est plus clair.. ????
Je ne peux pas utiliser le SHOW car ca fais apparaitre le form qui n'est pas dans le SSTab.... je veux seulement que ca l'appelle le code....
PCPT
Messages postés13280Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 31 août 2005 à 19:33
je crois que Jeff parle des évènement qu'il y avait dans le OnLoad des ses anciens projets.
Jeff, copier l'interface n'est pas tout. le plus propre me semble de créer/modifier tes codes dans des modules, et selon les onglets, executer les codes des modules voulus
ex :
' au SSTab1 click
Select Case SSTab1.Tab
case 0: Call Mod_Zero.LoadProject
case1
Call Mod_Commun.DestroyVars
Call Mod_One.InitInterface
'etc....
End Select
sans oublier de lancer au Load la fonction du premier onglet affiché :
'disons le 3e (j'ai pas la syntaxe sous les yeux)
Call SSTab1_Click(2)
PCPT
Messages postés13280Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 31 août 2005 à 20:47
oui, c'est bien comme çà que je l'avais compris ;)
le truc, c'est qu'il ne suffit pas de copier des composants.
tu avais avant par exemple :
Form1.Text1="machin"
maintenant, tu as Form_SStab.Text1="machin"
mais si dans ta form1, à l'évènement OnChange, tu avais une fonction, cette fonction n'existe pas dans ton Form_SStab.
la meilleur solution est donc d'adapter tes codes, sous formes de modules différents (pour la clareté) et de les appeler selon tes besoins & selon l'onglet concerné.
si ce n'est qu'une solution de facilité, pour ne recopier aucun code, tu as encore une possibilité :
tu as tes 5onglets. tu créés 5 pictures.
au chargement, tu Load tes 5 forms (LOAD, pas SHOW)
ensuite, tu les rends "filles" de tes 5pictures. tu n'auras plus rien à changer, les codes sont accessibles puisque les Forms sont ouverte dans un autre support.
NB : ne pas oublier de les "dé-parenter" au UnLoad
cela dit, il faut vraiment être certain de tes 5 projets existants, pour qu'aucun ne comporte d'évènement public commun, etc..
PCPT
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 31 août 2005 à 20:53
si tu as copier les controles il faut que tu copies aussi toutes les procédures évêments sur la forme principale.
sinon tu seras obligé de mettre toutes les procédures en Public et les rappeler à partir de la forme principale.
l'évênement se fera toujours sur la forme principale, là où se trouvent les contrôles
sur la forme principale tu ne peux pas non plus avoir deux controles de même nom (sauf s'ils sont indexés bien sur)
donc si tu as un Command1 sur la Form1 et un Command2 sur la Form2,
soit tu copies tout sur la Forme principale, soit tu met tout en Public
et tu appelles les procédures correspondantes:
cs_JeffC1977
Messages postés926Date d'inscriptionvendredi 10 novembre 2000StatutMembreDernière intervention10 septembre 20104 31 août 2005 à 20:31
Je vais ressayer d'^tre plus clair...
Ca m'ennuis car je ne connais pas tous les termes en VB donc c'est un peu plus complexe à expliquer pour moi...
Je réessaye...
Oublions le SSTab...
Je vais essayer d'en dire un peu plus et je sais tres bien que je vaius dire des choses que vous savez déjà mais enfin j'essais...
J'ai 5 programmes donc 5 projet (Projet.vbp) C'est projet on chacun une Form que je nommerais Form1 (Projet1), Form2 (Projet2), Form3 (Projet3) etc.. C'est Form ont tous des textbox, cmdbutton Listview, etc....
Je me suis donc créé un Projet et j'ai Ajouter mes 5 Form à ce projet...
Revenons au SSTab.
J'aimerais que mon premier onglet puisse avoir les textbox, cmdbutton, etc de ma Form1. J'ai donc pris tout les boutons, textbox, etc. de ma Form1 et j'ai fais un copier de tous ces éléments pour les coller dans mon premier onglet.
Donc quand je démarre mon programme et que je vais dans mon premier onglet, je veux que mon premier onglet utilise le code de ma Form1 (Projet1)...
et si je vais dans mon second onglet le code utilisé sera celui de ma Form2 (Projet2)... Ca va ????
Donc je crois que Pcpt a la solution mais j'aimerais être bien compris pour être certain que je part dans la bonne direction....
J'attends de vos nouvelles... et merci d'avance et merci de votre patience
cs_JeffC1977
Messages postés926Date d'inscriptionvendredi 10 novembre 2000StatutMembreDernière intervention10 septembre 20104 1 sept. 2005 à 19:08
Salut....
J'ai fait un copier coller du code à propose du SetParent....
Lorsque je démarre ca bug au Show de ma première Form....
Et c'est quoi la couleur du ButtonFace.. mon VB est en francais et je ne trouve pas c'est quelle couleur....
Merci d'avance
Voici le code que j'ai modifié
Option Explicit
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Unload frmDossierActif
Unload frmContrat
Unload frmContratIndexAuxImmeubles
End Sub
Private Sub SSTab1_Click(PreviousTab As Integer)
If SSTab1.Tab = 0 Then
frmDossierActif.Move 15, 310
End If
If SSTab1.Tab = 1 Then
frmContrat.Move 15, 310
End If
If SSTab1.Tab = 2 Then
frmContratIndexAuxImmeubles.Move 15, 310
End If
End Sub
PCPT
Messages postés13280Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 1 sept. 2005 à 19:33
personnellement, je n'aurais pas tout à fait fait de la même manière :
j'aurais mis 5 pictureBox (une par onglet), dimmentionnées de la bonne taille (donc sans doute la totalité du sstab).
ensuite, en vérifiant bien qu'aucun des Form_Load des Form ne contiennent "show"
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 1 sept. 2005 à 19:33
les 3 propriétés faut les mettre dans l'IDE, surtout le BorderStyle.
Button Face c'est une couleur, tu la trouve dans les propriétés
Backcolor, Forecolor, FileColor et dans les constantes vb, comme vbRed,
vbActiveBorder, vbActiveTitleBar, vbApplicationWorkspace, etc ...
frmDossierActif.BorderStyle = 0
frmDossierActif.Appearance = 0
frmDossierActif.BackColor = vbButtonFace
ça bug au Show ?
ça affiche une erreur ou ça marche mal ?
sinon j'ai une correction à faire:
il faut cacher les autres formes à chaque fois, sinon certains controles apparaissent de temps en temps.
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 1 sept. 2005 à 19:39
ça marche très bien directement dans la SStab
le Move de départ c'est pour adapter la taille de la forme au SStab
avec le BorderStyle 0 et la couleur vbButtonFace, la forme est
totalement invisible comme si elle n'existait pas et comme si les
controles étaient effectivement sur le SStab.
310 c'est la taille en twips de l'entête tabHeight + 15