Window auffrischen

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Window auffrischen

Beitrag von Daffy0815 »

Hallo,

folgendes Problem:

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

Code: Alles auswählen

Repeat
    Event = WaitWindowEvent()
    Select Event
        ;
        Case #PB_Event_CloseWindow
            Quit = #True
            ;
        Case #PB_Event_Gadget         
            Gadget = EventGadget()
            Select Gadget
                ;
                Case ID_EinstellenAnzeigeSprachauswahlButtonDE.l
                    Sprache.b = #Deutsch
                    EinstellenAnzeige()
                    ;
                Case ID_EinstellenAnzeigeSprachauswahlButtonGB.l
                    Sprache.b = #Englisch
                    EinstellenAnzeige()
                    ;

            EndSelect
            ;
        Default
            Delay(1)
            ;
    EndSelect
    ;
Until Quit = 1

Edit by NicTheQuick: Code-Tags gesetzt
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Window auffrischen

Beitrag von STARGÅTE »

ndem du die Entscheidung welche Sprache geladen wird in die Procedure auslagerst und dann nur noch:
EventGadget()
übergibst ...
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
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Window auffrischen

Beitrag von Daffy0815 »

@STARGÅTE


Verstehe ich nicht!

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

Code: Alles auswählen

;Deklarationsteil
...
...
Procedure.l EinstellenAnzeige()
  ...
  ...
  ...
EndProcedure
...
...
;============= Aufruf der Prozedur
z.l=EinstellenAnzeige()
;==========================
;
Repeat
    Event = WaitWindowEvent()
    Select Event
        ;
        Case #PB_Event_CloseWindow
            Quit = #True
            ;
        Case #PB_Event_Gadget         
            Gadget = EventGadget()
            Select Gadget
                ;
                Case ID_EinstellenAnzeigeSprachauswahlButtonDE.l
                    Sprache.b = #Deutsch
                    [color=#FF0000];LAUFENDE PROZEDUR PLATTMACHEN[/color]                     
                     EinstellenAnzeige()
                    ;
                Case ID_EinstellenAnzeigeSprachauswahlButtonGB.l
                    Sprache.b = #Englisch
                    [color=#FF0000];LAUFENDE PROZEDUR PLATTMACHEN[/color]
                    EinstellenAnzeige()
                    ;

            EndSelect
            ;
        Default
            Delay(1)
            ;
    EndSelect
    ;
Until Quit = 1

End

Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Window auffrischen

Beitrag von STARGÅTE »

was willst du "platt machen"

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 ...
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
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Window auffrischen

Beitrag von Daffy0815 »

@STARGÅTE

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
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Window auffrischen

Beitrag von Daffy0815 »

Ich hab's!!!

Code: Alles auswählen

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
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Re: Window auffrischen

Beitrag von Blackskyliner »

Code: Alles auswählen

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
Antworten