Seite 1 von 1

Window auffrischen

Verfasst: 09.06.2010 14:25
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

Re: Window auffrischen

Verfasst: 09.06.2010 14:30
von STARGÅTE
ndem du die Entscheidung welche Sprache geladen wird in die Procedure auslagerst und dann nur noch:
EventGadget()
übergibst ...

Re: Window auffrischen

Verfasst: 09.06.2010 14:57
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


Re: Window auffrischen

Verfasst: 09.06.2010 15:14
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 ...

Re: Window auffrischen

Verfasst: 09.06.2010 15:27
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.

Re: Window auffrischen

Verfasst: 09.06.2010 15:32
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

Re: Window auffrischen

Verfasst: 09.06.2010 20:06
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...