Avatar billede kalle_mod Nybegynder
01. april 2006 - 15:08 Der er 11 kommentarer og
1 løsning

ændring af menupunters "caption"?

Hej Eksperter

Jeg har (endnu) et problem, som jeg håber i kan løse for mig :)

Når jeg har brugt den indbyggede menueditor i visual studio(VB6) til at lave nogle menupunkter, hvordan kan jeg så i runtime ændre disse?

Jeg har f.eks. et menupunkt kaldet lang(det er name) med caption language(i menueditoren). Når man klikker på denne har man mulighed for at vælge sproget dansk, og så skal der jo ikke længere stå "language" men "sprog" som caption på menupunktet :) Resten af mit program er lavet så det kan oversætte men lige præcis menupunkterne vil ikke(der findes ingen .caption til lang)

Det drejer sig præcist om:
Files(index 0, name "Files")
Language(index 1, name "Lang")

Håber i kan fortælle mig hvordan deres caption ændres runtime :)

Kalle
Avatar billede sjh Nybegynder
01. april 2006 - 15:31 #1
du kunne fx. lave det sådan:


' ----------------------------------- Form1 -----------------------------------
Option Explicit

Private Sub cmdDansk_Click()
Dim arrLanguage(0 To 3) As String
  arrLanguage(0) = "Filer"
  arrLanguage(1) = "Åbn"
  arrLanguage(2) = "Gem"
  Call UpdateLanguage(arrLanguage)
End Sub

Private Sub cmdEnglish_Click()
Dim arrLanguage(0 To 3) As String
  arrLanguage(0) = "File"
  arrLanguage(1) = "Open"
  arrLanguage(2) = "Save"
  Call UpdateLanguage(arrLanguage)
End Sub

Private Sub Form_Load()
' mnuFile (File)
' ...mnuOpen (Open)
' ...mnuSave (Save)
End Sub

Private Sub UpdateLanguage(arrLanguage() As String)
Dim objControl As Object
  For Each objControl In Controls
    If TypeOf objControl Is Menu Then
      With objControl
          Select Case LCase$(.Name)
                Case "mnufile"
                  .Caption = arrLanguage(0)
                Case "mnuopen"
                  .Caption = arrLanguage(1)
                Case "mnusave"
                  .Caption = arrLanguage(2)
          End Select
      End With
    End If
  Next
End Sub
' ----------------------------------- Form1 -----------------------------------
Avatar billede sjh Nybegynder
01. april 2006 - 15:35 #2
eller bare sådan:

' ----------------------------------- Form1 -----------------------------------
Option Explicit

Private arrLanguage(0 To 3) As String

Private Sub cmdDansk_Click()
  arrLanguage(0) = "Filer"
  arrLanguage(1) = "Åbn"
  arrLanguage(2) = "Gem"
  Call UpdateLanguage
End Sub

Private Sub cmdEnglish_Click()
  arrLanguage(0) = "File"
  arrLanguage(1) = "Open"
  arrLanguage(2) = "Save"
  Call UpdateLanguage
End Sub

Private Sub Form_Load()
' mnuFile (File)
' ...mnuOpen (Open)
' ...mnuSave (Save)
End Sub

Private Sub UpdateLanguage()
Dim objControl As Object
  For Each objControl In Controls
    If TypeOf objControl Is Menu Then
      With objControl
          Select Case LCase$(.Name)
                Case "mnufile"
                  .Caption = arrLanguage(0)
                Case "mnuopen"
                  .Caption = arrLanguage(1)
                Case "mnusave"
                  .Caption = arrLanguage(2)
          End Select
      End With
    End If
  Next
End Sub
' ----------------------------------- Form1 -----------------------------------
Avatar billede sjh Nybegynder
01. april 2006 - 16:12 #3
her er også en mulighed..

' ----------------------------------- Form1 -----------------------------------
Option Explicit

Private Sub Form_Load()
' mnuFile (File)
' ...mnuOpen (Open)
' ...mnuSave (Save)

  ' BuildLanguage() skal du kun bruge til at finde menuer og text
  ' så kan du gemme det i en file..
  txtLanguage.Text = BuildLanguage
  Call UpdateLanguage(txtLanguage.Text)
End Sub

Private Sub UpdateLanguage(strLanguage As String)
Dim i            As Integer
Dim arrTemp()    As String
Dim arrLine()    As String
Dim arrMenu()    As String
Dim arrCaption() As String
Dim objControl  As Object

  arrLine = Split(strLanguage, vbCrLf)

  ReDim arrMenu(UBound(arrLine)) As String
  ReDim arrCaption(UBound(arrLine)) As String

  For i = 0 To UBound(arrLine)
    If InStr(arrLine(i), "=") Then
      arrTemp = Split(arrLine(i), "=")
      arrMenu(i) = LCase$(Trim$(arrTemp(0)))
      arrCaption(i) = Trim$(arrTemp(1))
    End If
  Next

  For Each objControl In Controls
    If TypeOf objControl Is Menu Then
      With objControl
          For i = 0 To UBound(arrMenu)
            If arrMenu(i) = LCase$(.Name) Then
              .Caption = arrCaption(i)
              Exit For
            End If
          Next
      End With
    End If
  Next
End Sub

Private Function BuildLanguage() As String
Dim objControl As Object
Dim strLanguage As String
  For Each objControl In Controls
    If TypeOf objControl Is Menu Then
      With objControl
        strLanguage = (strLanguage & .Name & "=" & .Caption) & vbCrLf
      End With
    End If
  Next
  BuildLanguage = strLanguage
End Function
' ----------------------------------- Form1 -----------------------------------
Avatar billede kalle_mod Nybegynder
02. april 2006 - 17:35 #4
kigger lige på det i morgen eller i overmorgen, har været til svendegilde i går aftes så må indrømme at jeg ikke magter ret meget, er lige kommet ind af døren og er ved at falde i søvn ved computeren :)

Kalle
Avatar billede blueeye97 Nybegynder
03. april 2006 - 17:21 #5
Øhhhh...

Hvis du bare vil ændre caption for et menupunkt er det da bare at skrive:

Lang.Caption = "Ny tekst"

Det virker ihvertfald fint her...
Avatar billede kalle_mod Nybegynder
04. april 2006 - 10:36 #6
blueeue97> Lang.Caption = tmp(1) giver en fejl(object or method not found) men jeg ved at object Lang findes(den giver mig mulighederne Item, LBound, UBound og count når jeg skriver lang. - hvilket indikerer at objektet findes)
Avatar billede kalle_mod Nybegynder
04. april 2006 - 11:04 #7
Arg så forsvandt mit indlæg :(

Nå prøver igen, jeg prøvede at lave min egen lille funktion ud fra din kode og det virkede :)

ElseIf InStr(tmp(0), "varFiler") Then
strHej = tmp(1)
Call GetObject("Filer", strHej)

Function GetObject(strMenu As String, strCaption As String)
Dim objControl As Object

For Each objControl In Controls
If objControl.Name = strMenu Then
objControl.Caption = strCaption
Exit For
End If
Next

End Function

Ved ikke lige hvorfor det ikke virker med Call GetObject("Lang", tmp(1)) men pyt :)

Kalle
Avatar billede sjh Nybegynder
04. april 2006 - 12:41 #8
kalle_mod > Det er fordi din menu har Index på..

  For i = Lang.LBound To Lang.UBound
    Lang(i).Caption = "Bla bla.."
  Next
Avatar billede blueeye97 Nybegynder
04. april 2006 - 22:44 #9
sjh >

Så er menuen da ikke bare lavet med menueditoren eller ?

F.eks. har jeg et menupunkt der hedder "Slut. Hvis jeg vil ændre caption på det skriver jeg da bare slut.caption = "noget andet"

Private Sub Slut_Click()
End
End Sub

:o)
Avatar billede sjh Nybegynder
04. april 2006 - 23:08 #10
blueeye97 > Jo.. du skal bare skrive 0,1,2,3... i Index.. så kan du skrive Slut(Index).caption = "noget" ;)
Avatar billede sjh Nybegynder
04. april 2006 - 23:09 #11
og ja gennemløbe dem med fx..

  For i = Slut.LBound To Slut.UBound
    Slut(i).Caption = "Bla bla.."
  Next
Avatar billede blueeye97 Nybegynder
05. april 2006 - 21:32 #12
weird...

Det virker da fint hos mig når jeg bare skriver slut.caption ="noget andet"

:o))
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester