OpenSubMenu(Text$) Text ändern ??

Anfängerfragen zum Programmieren mit PureBasic.
Bayernhans
Beiträge: 20
Registriert: 09.04.2006 15:56
Wohnort: Bayern

OpenSubMenu(Text$) Text ändern ??

Beitrag 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
:|
vitamine, Vitamine, VITAMINE, ...
Vitamin PB - the best
PB 4.x
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag 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.
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
sibru
Beiträge: 265
Registriert: 15.09.2004 18:11
Wohnort: hamburg

Beitrag 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
Bild Bild
Bayernhans
Beiträge: 20
Registriert: 09.04.2006 15:56
Wohnort: Bayern

Beitrag 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 ...
vitamine, Vitamine, VITAMINE, ...
Vitamin PB - the best
PB 4.x
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag 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 ;)
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Bayernhans
Beiträge: 20
Registriert: 09.04.2006 15:56
Wohnort: Bayern

Beitrag 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 ...
vitamine, Vitamine, VITAMINE, ...
Vitamin PB - the best
PB 4.x
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
Bayernhans
Beiträge: 20
Registriert: 09.04.2006 15:56
Wohnort: Bayern

Beitrag 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?
vitamine, Vitamine, VITAMINE, ...
Vitamin PB - the best
PB 4.x
Antworten