In einer Prozedur namens "EinstellenAnzeige()" wird ein Fenster aufgebaut in dem sich durch Druck auf verschiedene Knöpfe die Sprache ändern lässt.
Wie kann man die Prozedur "auffrischen" so das die Texte nun in der neuen Sprache erscheinen ohne dass die Prozedur erneut "kopiert" wird so wie im unten stehenden Beispiel
Sprache ist eine globale Variable.
Das Druck auf den entsprechenden Länderbutton löst das Ereignis aus, dass dann den Wert von "Sprache" entsprechend ändert.
Nun soll zum Beispiel die Prozedur beendet werden und erneut aufgerufen werden
wenn das nächste mal EinstellenAnzeige() aufgerufen wird, dann ist doch die alte schon längst beendet, sonst würde es ja zu keinem neuen ereignis kommen ...
Ich denke hier liegt ein Verständnisproblem vor!
Ich programmiere normalerweise in Assembler und da habe ich ja die volle Kontrolle...
Also nochmal:
Der Aufruf von "EinstellenAnzeige()" im Programm führt in der Prozedur zum Öffnen eines Fensters in dem man unter anderem die Sprache ändern kann.
Nach dem "EinstellenAnzeige()" abgelaufen ist (EndProcedure) "fällt" der Programmzeiger in die "Repeat-Schleife" und "eiert" dort herum.
Das Fenster "EinstellenAnzeige" ist ja weiterhin mit z. B. deutschen Texten geöffnet.
Nun klickt jemand in dem Fenster auf den Button "Enlisch".
Das wird in der Repeat-Schleife registriert und der Wert der globalen Variablen "Sprache" auf "#Englisch" geändert.
So, und nun kommt es....
Jetzt soll das noch offene Fenster NEU AUFGEBAUT werden (mit den englischen Texten).
Ich hoffe es ist jetzt klar.
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Repeat
Event = WaitWindowEvent()
Select Event
;
Case #PB_Event_CloseWindow
Quit = #True
;
Case #PB_Event_Gadget
Gadget = EventGadget()
Select Gadget
;
Case ID_EinstellenAnzeigeSprachauswahlButtonDE.i
Sprache.b = #Deutsch
CloseWindow(ID_EinstellenAnzeigeWindow.i)
EinstellenAnzeige()
;
Case ID_EinstellenAnzeigeSprachauswahlButtonGB.i
Sprache.b = #Englisch
CloseWindow(ID_EinstellenAnzeigeWindow.i)
EinstellenAnzeige()
;
EndSelect
;
Default
;Delay(1)
;
EndSelect
;
Until Quit = 1
End ; All the opened windows are closed automatically by PureBasic
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Repeat
Event = WaitWindowEvent()
Select Event
;
Case #PB_Event_CloseWindow
Quit = #True
;
Case #PB_Event_Gadget
Gadget = EventGadget()
Select Gadget
;
Case ID_EinstellenAnzeigeSprachauswahlButtonDE.i
Sprache.b = #Deutsch
;
Case ID_EinstellenAnzeigeSprachauswahlButtonGB.i
Sprache.b = #Englisch
;
EndSelect
CloseWindow(ID_EinstellenAnzeigeWindow.i)
EinstellenAnzeige()
;
Default
;Delay(1)
;
EndSelect
;
Until Quit = 1
End ; All the opened windows are closed automatically by PureBasic
Warum nicht so? Da sparste dir 2 Zeilen pro Sprache
Edit: Okay... gibt sicher auch noch andere Gadgets, dann isses nicht sinnvoll... Sorry hab grad erst gemerkt das du mit
den einzelnen ; eigentlich sowas wie ;----SNIP----, bzw. ;[...] meinst, also das da noch anderer code steht...
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher