Seite 1 von 1

OpenSubMenu(Text$) Text ändern ??

Verfasst: 29.02.2008 00:05
von Bayernhans
Hallo,
hat einer eine Idee wie man den Text$ im obigen Befehl ändern, z. B. für andere Sprache ?
Bei MenuTitle(Titel$) geht's mit SetMenuTitleText und bei MenuItem(MenuItemID, Text$) mit SetMenuItemText. Aber bei Submenüs verbiegts mir alles, wenn ich die Sprache per Menüpunkt umschalten möchte ...(?)
DANKE
:|

Verfasst: 29.02.2008 00:12
von Rubiko
Du gehst da falsch an die Sache ran...
änder deine Texte nicht per Set-Befehle sondern ändere sie schon
direkt beim Start des Programms.

Wovon ich spreche sind .ini Dateien die sich wunderbar mit PureBasic
verwenden lassen ;). Schreib in die .ini einfach den Namen
für jede Sprache und die einzelnen Menüpunkte,
beim Start fragst du ab, welche Sprache benutzt wird und dementsprechend
benutzt du verschiedene Texte.

Lies dir einfach mal das .ini Kapitel in der Hilfe durch und probier
die einzelnen Code Beispiele aus, bei Fragen meld dich.

Verfasst: 01.03.2008 17:37
von sibru
ich glaub´, dass isses:
(ist PB3.80, sollte problemlos zu PB4x gewandelt werden können...)

;Modul Menue_Text Version 1.0 vom 09.05.2006
;
;Funktion: ändert den Text einer bestehenden Menü-Option (OptId>=0) oder -Titel (OptID<0).
; Die Änderung von UnterMenü-Titel ist hier nicht möglich !!!
;
;Aufruf: Menue_Text(OptID, Text$)
; wobei: OptID = FunktionsNr der Menü-Option, wie sie beim Aufbau
; des Menü´s angegeben wurde (1. Parameter von MenuItem(ID,Text$)
; Hiermit können die einzelnen OptionsTexte geändert werden.
; Ist OptID kleiner 0, so können die Menü-Titel (=Überschrift
; eines Menü-Turm´s) geändert werden (-1 = 1. Menü-Turm, -5 = 5.
; MenüTurm...usw).
;

Code: Alles auswählen

Procedure Menue_Text(OptNr,OptText$)
   If OptNr>0 ;OptionsNr
      ModifyMenu_(GetMenu_(WindowID()),OptNr,#MF_BYCOMMAND|#MF_STRING,OptNr,@OptText$) 
   ElseIf OptNr<1 ;Menü-Turm
      ModifyMenu_(GetMenu_(WindowID()),-OptNr-1,#MF_BYPOSITION|#MF_STRING,0,@OptText$) 
      DrawMenuBar_(WindowID())
   EndIf
EndProcedure
viel Erfolg

Siggi

Verfasst: 02.03.2008 00:40
von Bayernhans
@Rubiko
Habe mir das mit den inis schon auch betrachtet - allerdings nicht zu detailliert (beim nächsten Projekt).
Wollte allerdings die Sprache on-the-fly, dh. per Menü änderbar machen, geht auch ganz gut wenn man nicht zuviele Texte hat. Mit einer Ausnahme: Submenutitle

@sibru
Kann dir leider nicht ganz folgen :roll:
Ein Submenü wird mit OpenSubMenu(Text$) aufgebaut, aber ohne ID (?)

@All
Hat da der/die PB-Entwickler etwas vergessen ? Texte von Menü Titel und -Items können direkt geändert werden, aber nicht der eines SubMenüs ...

Verfasst: 02.03.2008 00:47
von STARGÅTE
der Entwickler hat nix vergessen denn eine ID bei OpenSubMenu(Text$) ist ja nicht nötig , da ja kein Event abgefragt werden muss.

Aber idee für dich:

Du erstellst ja eh irgendwo dein komplettes Menü, und anstatt nun jedes Item einzeln zu ändern, mach einfach das ganze Menü neu.
Einfach ein FreeMenu(#Menue) und dann noch mal das menü, in der anderen Sprache erstellen

Verfasst: 02.03.2008 15:14
von Rubiko
Naja, - wie du schon sagst... wenn man nicht zuviele Texte hat...
Der Code wird aber schnell unübersichtlich, wenn er dann nur
noch voll mit den Set-Befehlen ist, mit einer Ini reicht eben auch
ein einziger für jedes Menü/Item, würde dir auch wenn du den
Befehl jetzt hast, zur Ini raten, hast jetzt aber den Vorteil,
dass du es on-the-fly über die Ini ändern kannst ;)

Verfasst: 02.03.2008 21:09
von Bayernhans
@STARGÅTE
Vielen Dank für den Tip mit FreeMenu, könnte funktionieren.
Ich kenne die Historie nicht wie sich PB hier entwickelt hat, bleibe aber dabei, dass hier etwas unvollständig ist, zumindest aus Sicht der PB-Befehle: SetMenuItemText u. SetMenuTitleText ermöglichen sehr schön neuen Texte für Menüeintrag und -titel. Für Submenü, das ja auch Bestandteil eines Menüs sein kann, ist eine direkte Textänderung nicht möglich

DANKE für die bisherigen Antworten und Tipps - nicht nachlassen ...

Verfasst: 02.03.2008 21:33
von Kiffi
beim Sprachenwechsel (oder auch bei dynamischen Menüeinträgen, wie
z.B. RecentMenu) würde ich so (wie STARGÅTE vorgeschlagen hat) vorgehen:

Code: Alles auswählen

Enumeration
  #frmMain
  #cmdSwitchLanguage
  #mnuMenu
  #mnuSubmenu
  #mnuQuit
EndEnumeration

Global CurrentLanguage.s

Procedure ReCreateMenu()
  
  If IsMenu(#mnuMenu)
    FreeMenu(#mnuMenu)
  EndIf
  
  If CreateMenu(#mnuMenu, WindowID(#frmMain))
    Select CurrentLanguage
      Case "DE"
        MenuTitle("Datei")
        OpenSubMenu("Untermenü")
          MenuItem(#mnuSubmenu, "Hallo Welt! :-)")
        CloseSubMenu()
        MenuItem(#mnuQuit, "Beenden")
      Case "EN"
        MenuTitle("File")
        OpenSubMenu("Submenu")
          MenuItem(#mnuSubmenu, "Hello world! :-)")
        CloseSubMenu()
        MenuItem(#mnuQuit, "Quit")
    EndSelect
  EndIf
  
EndProcedure

CurrentLanguage = "DE"

OpenWindow(#frmMain, #PB_Ignore, #PB_Ignore, 110, 100, "")
CreateGadgetList(WindowID(#frmMain))
ButtonGadget(#cmdSwitchLanguage, 5 , 60, 100, 20, "Sprache ändern")
ReCreateMenu()

Repeat
  
  WWE = WaitWindowEvent()
  
  If WWE = #PB_Event_Gadget And EventGadget() = #cmdSwitchLanguage
    
    If CurrentLanguage="DE"
      CurrentLanguage="EN"
    Else
      CurrentLanguage="DE"
    EndIf
    
    ReCreateMenu()
    
  EndIf
  
Until WWE = #PB_Event_CloseWindow
Grüße ... Kiffi

Verfasst: 09.03.2008 22:56
von Bayernhans
Coole Lösung Kiffi - nur mit "Boardmitteln" !!
Werde es bei mir mal einbauen. DANKE! :D

Wäre eine Eingabe an die PB-Entwicklung (?) möglich, um einen zusätzlichen oder modifizierten PB-Befehl zu ermöglichen. Etwa in der Art wie die anderen Befehle "SetMenuItemText" ? :)
Wenn ja, wie/an wen?