utilisation d'un tabStrip - VB/VBA/VBS - Programmation
MarshPosté le 31-01-2005 à 14:53:16
bonjour, j'ai un probleme avec l'utilisation de mon tabStrip. j'explique un peu mon programme: mon prog est censé, a partir d'un fichier texte, créer un onglet puis une frame puis un text et un label! le tout est créer dynamiquement! pour l'instant j'ai pas de probleme! ensuite dans mon tabstrip_click (fonction pour changer d'onglet) j'ai un probleme pour identifier les objects et les afficher ou les cacher!
Private Sub Form_Load() Dim BclErreur As Long Dim Ferr As ferreur Dim nomfile As String Dim tableauText() As Object Dim tableauFrame() As Object Dim tableauLabel() As Object nomfile = App.Path & IIf(Right(App.Path, 1) <> "\", "\", "" ) & "param\affichage.txt" lecturefichierconf nomfile, Onglet, tableauFrame(), tableauText(), tableauLabel()
Exit Sub gesterreur: Select Case Err.Number Case Else Set Ferr = New ferreur Ferr.Afficherreur Err.Number, Err.Description, App.Title & ":Application.Form_Load", BclErreur End Select Err.Clear BclErreur = BclErreur + 1 If BclErreur >= 3 Then Exit Sub Resume Next End Sub
Private Sub lecturefichierconf(nomfichier As String, Onglet As TabStrip, tabFrame() As Object, _ tabTexte() As Object, tabLabel() As Object) Dim param As String Dim Decoup() As String Dim i As Integer Dim hauteur As Integer, largeur As Integer, gauche As Integer Dim NbOnglet As Integer, nbLabelText() As Variant, NbFrame() As Integer, ArrayLabel() As Integer Dim nTopFrame() As Integer, nLeftFrame As Integer, nTopLabel As Integer Dim indexOnglet As Integer, indexFrame As Integer, indexText As Integer Dim BclErreur As Long Dim Ferr As ferreur
nLeftFrame = 200 gauche = nLeftFrame largeur = Onglet.Width - 400 hauteur = 0 On Error GoTo gesterreur Open nomfichier For Input As #1 Do While Not EOF(1) Line Input #1, param param = Trim(param) If Left(param, 1) <> "'" Then If InStr(1, param, "=" ) > 1 Then Decoup = Split(param, "=" ) If (Trim(Decoup(0)) = "NOM_ONGLET" ) Then Onglet.Tabs.Add NbOnglet = Onglet.Tabs.Count Onglet.Tabs(NbOnglet).Caption = Trim(Decoup(1)) indexOnglet = Onglet.SelectedItem.Index ReDim Preserve NbFrame(NbOnglet) ReDim Preserve nbLabelText(NbOnglet) ElseIf (Trim(Decoup(0)) = "NOM_FRAME" ) Then NbFrame(NbOnglet) = NbFrame(NbOnglet) + 1 ReDim Preserve tabFrame(NbFrame(NbOnglet)) ReDim nTopFrame(NbFrame(NbOnglet)) If IsObject(Application.Controls) Then Set tabFrame(NbFrame(NbOnglet)) = Application.Controls.Add( _ "VB.Frame", "Frame" & NbOnglet & NbFrame(NbOnglet)) End If If Not tabFrame(NbFrame(NbOnglet)) Is Nothing Then tabFrame(NbFrame(NbOnglet)).Left = nLeftFrame tabFrame(NbFrame(NbOnglet)).Caption = Decoup(1) tabFrame(NbFrame(NbOnglet)).Width = largeur hauteur = ((Onglet.Height - ESPACE * 2) - (NbFrame(NbOnglet) - 1) * 400) / NbFrame(NbOnglet) For i = 1 To NbFrame(NbOnglet) Step 1 nTopFrame(i) = ESPACE + (hauteur + ESPACE) * (i - 1) tabFrame(i).Top = nTopFrame(i) tabFrame(i).Height = hauteur Next i tabFrame(NbFrame(NbOnglet)).Visible = True tabFrame(NbFrame(NbOnglet)).ZOrder End If ReDim Preserve ArrayLabel(NbFrame(NbOnglet)) nbLabelText(NbOnglet) = ArrayLabel() nTopLabel = 240 ElseIf (Trim(Decoup(0)) = "NOM_PARAM" ) Then nbLabelText(NbOnglet)(NbFrame(NbOnglet)) = nbLabelText(NbOnglet)(NbFrame(NbOnglet)) + 1 ReDim tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))) ReDim tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))) If IsObject(Application.Controls) Then Set tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))) = Application.Controls.Add("VB.Label", "label" & NbOnglet & NbFrame(NbOnglet) & nbLabelText(NbOnglet)(NbFrame(NbOnglet))) Set tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))) = Application.Controls.Add("VB.Textbox", "text" & NbOnglet & NbFrame(NbOnglet) & nbLabelText(NbOnglet)(NbFrame(NbOnglet))) 'remplacer les nom du control par les valeurs à lire End If If Not tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))) Is Nothing Then tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Top = nTopLabel + 50 tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Left = gauche tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Width = LABELLARGEUR tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Height = LABELHAUTEUR tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Caption = Decoup(1) tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Visible = True End If If Not tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))) Is Nothing Then tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Top = nTopLabel tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Left = gauche + LABELLARGEUR tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Width = TEXTLARGEUR tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Height = LABELHAUTEUR tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Text = Decoup(2) 'ObtenirMRS(trim(decoup(2)) tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Visible = True End If nTopLabel = nTopLabel + LABELHAUTEUR If nTopLabel > (tabFrame(NbFrame(NbOnglet)).Height - LABELHAUTEUR) Then nTopLabel = 240 gauche = (gauche + LABELLARGEUR + TEXTLARGEUR) + 400 End If Set tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Container = tabFrame(NbFrame(NbOnglet)) Set tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Container = tabFrame(NbFrame(NbOnglet)) End If End If End If Loop Close #1 End Sub
Private Sub Onglet_Click() Dim i As Integer Dim IdSelectOng As Integer IdSelectOng = Onglet.SelectedItem.Index tabFrame(IdSelectOng).ZOrder 0
'If i = IdSelectOng Then ' tableauFrame(i).Visible = True 'End If
Marsh Posté le 31-01-2005 à 14:53:16
bonjour,
j'ai un probleme avec l'utilisation de mon tabStrip.
j'explique un peu mon programme: mon prog est censé, a partir d'un fichier texte, créer un onglet puis une frame puis un text et un label!
le tout est créer dynamiquement!
pour l'instant j'ai pas de probleme!
ensuite dans mon tabstrip_click (fonction pour changer d'onglet) j'ai un probleme pour identifier les objects et les afficher ou les cacher!
voici mon code :
Option Explicit
Option Compare Text
Option Base 1
Private Const ESPACE = 400
Private Const LABELLARGEUR = 1600
Private Const LABELHAUTEUR = 285
Private Const TEXTLARGEUR = 600
Private Sub Form_Load()
Dim BclErreur As Long
Dim Ferr As ferreur
Dim nomfile As String
Dim tableauText() As Object
Dim tableauFrame() As Object
Dim tableauLabel() As Object
nomfile = App.Path & IIf(Right(App.Path, 1) <> "\", "\", "" ) & "param\affichage.txt"
lecturefichierconf nomfile, Onglet, tableauFrame(), tableauText(), tableauLabel()
Exit Sub
gesterreur:
Select Case Err.Number
Case Else
Set Ferr = New ferreur
Ferr.Afficherreur Err.Number, Err.Description, App.Title & ":Application.Form_Load", BclErreur
End Select
Err.Clear
BclErreur = BclErreur + 1
If BclErreur >= 3 Then Exit Sub
Resume Next
End Sub
Private Sub lecturefichierconf(nomfichier As String, Onglet As TabStrip, tabFrame() As Object, _
tabTexte() As Object, tabLabel() As Object)
Dim param As String
Dim Decoup() As String
Dim i As Integer
Dim hauteur As Integer, largeur As Integer, gauche As Integer
Dim NbOnglet As Integer, nbLabelText() As Variant, NbFrame() As Integer, ArrayLabel() As Integer
Dim nTopFrame() As Integer, nLeftFrame As Integer, nTopLabel As Integer
Dim indexOnglet As Integer, indexFrame As Integer, indexText As Integer
Dim BclErreur As Long
Dim Ferr As ferreur
nLeftFrame = 200
gauche = nLeftFrame
largeur = Onglet.Width - 400
hauteur = 0
On Error GoTo gesterreur
Open nomfichier For Input As #1
Do While Not EOF(1)
Line Input #1, param
param = Trim(param)
If Left(param, 1) <> "'" Then
If InStr(1, param, "=" ) > 1 Then
Decoup = Split(param, "=" )
If (Trim(Decoup(0)) = "NOM_ONGLET" ) Then
Onglet.Tabs.Add
NbOnglet = Onglet.Tabs.Count
Onglet.Tabs(NbOnglet).Caption = Trim(Decoup(1))
indexOnglet = Onglet.SelectedItem.Index
ReDim Preserve NbFrame(NbOnglet)
ReDim Preserve nbLabelText(NbOnglet)
ElseIf (Trim(Decoup(0)) = "NOM_FRAME" ) Then
NbFrame(NbOnglet) = NbFrame(NbOnglet) + 1
ReDim Preserve tabFrame(NbFrame(NbOnglet))
ReDim nTopFrame(NbFrame(NbOnglet))
If IsObject(Application.Controls) Then
Set tabFrame(NbFrame(NbOnglet)) = Application.Controls.Add( _
"VB.Frame", "Frame" & NbOnglet & NbFrame(NbOnglet))
End If
If Not tabFrame(NbFrame(NbOnglet)) Is Nothing Then
tabFrame(NbFrame(NbOnglet)).Left = nLeftFrame
tabFrame(NbFrame(NbOnglet)).Caption = Decoup(1)
tabFrame(NbFrame(NbOnglet)).Width = largeur
hauteur = ((Onglet.Height - ESPACE * 2) - (NbFrame(NbOnglet) - 1) * 400) / NbFrame(NbOnglet)
For i = 1 To NbFrame(NbOnglet) Step 1
nTopFrame(i) = ESPACE + (hauteur + ESPACE) * (i - 1)
tabFrame(i).Top = nTopFrame(i)
tabFrame(i).Height = hauteur
Next i
tabFrame(NbFrame(NbOnglet)).Visible = True
tabFrame(NbFrame(NbOnglet)).ZOrder
End If
ReDim Preserve ArrayLabel(NbFrame(NbOnglet))
nbLabelText(NbOnglet) = ArrayLabel()
nTopLabel = 240
ElseIf (Trim(Decoup(0)) = "NOM_PARAM" ) Then
nbLabelText(NbOnglet)(NbFrame(NbOnglet)) = nbLabelText(NbOnglet)(NbFrame(NbOnglet)) + 1
ReDim tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet)))
ReDim tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet)))
If IsObject(Application.Controls) Then
Set tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))) = Application.Controls.Add("VB.Label", "label" & NbOnglet & NbFrame(NbOnglet) & nbLabelText(NbOnglet)(NbFrame(NbOnglet)))
Set tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))) = Application.Controls.Add("VB.Textbox", "text" & NbOnglet & NbFrame(NbOnglet) & nbLabelText(NbOnglet)(NbFrame(NbOnglet)))
'remplacer les nom du control par les valeurs à lire
End If
If Not tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))) Is Nothing Then
tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Top = nTopLabel + 50
tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Left = gauche
tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Width = LABELLARGEUR
tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Height = LABELHAUTEUR
tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Caption = Decoup(1)
tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Visible = True
End If
If Not tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))) Is Nothing Then
tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Top = nTopLabel
tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Left = gauche + LABELLARGEUR
tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Width = TEXTLARGEUR
tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Height = LABELHAUTEUR
tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Text = Decoup(2) 'ObtenirMRS(trim(decoup(2))
tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Visible = True
End If
nTopLabel = nTopLabel + LABELHAUTEUR
If nTopLabel > (tabFrame(NbFrame(NbOnglet)).Height - LABELHAUTEUR) Then
nTopLabel = 240
gauche = (gauche + LABELLARGEUR + TEXTLARGEUR) + 400
End If
Set tabTexte(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Container = tabFrame(NbFrame(NbOnglet))
Set tabLabel(nbLabelText(NbOnglet)(NbFrame(NbOnglet))).Container = tabFrame(NbFrame(NbOnglet))
End If
End If
End If
Loop
Close #1
End Sub
Private Sub Onglet_Click()
Dim i As Integer
Dim IdSelectOng As Integer
IdSelectOng = Onglet.SelectedItem.Index
tabFrame(IdSelectOng).ZOrder 0
'If i = IdSelectOng Then
' tableauFrame(i).Visible = True
'End If
Next i
End Sub
merci