Zeitverzögertes "SetGadgetText" in einem Fenster

Anfängerfragen zum Programmieren mit PureBasic.
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Zeitverzögertes "SetGadgetText" in einem Fenster

Beitrag von HemSA »

Hallole Ihr,
ich mache schon eine Weile herum um in einem Fenster eine zeitverzögerte Textausgabe zu machen.

1.) Was ich will ist das die "Antwort" eine bestimmte Zeit nach der "Frage" kommt. Den Code habe ich etwas verkürzt damit er nicht so lange ist.
Es handelt sich um ein Vokabelprogramm, wo ein Erinnerungsfenster immer nach einstellbaren Zeiten auftaucht und die Italienischen-Türkischen Vokabeln ( auf Wunsch auch Deutsch und / oder Englisch ) anzeigt um danach wieder für eine bestimmte Zeit von der Bildfläche zu verschwinden. Nun wollte ich den Code so ändern, das das "Antwortfeld" nicht gleich mit der Frage angezeigt wird, sondern um eine einstellbare Zeit danach, damit die Schüler die Gelegenheit haben um selbst auf das Wort zu kommen.
So wie es jetzt ist klappt es auch - allerdings nur beim 1. mal. Danach werden "Frage" und "Antwort" wieder gleichzeitig und nicht versetzt angezeigt.

2.) Ich habe auch schon den Block

Code: Alles auswählen

SetGadgetText(#Erinnerungsfenster_txt1,"Frage")
Delay(1000)
SetGadgetText(#Erinnerungsfenster_txt2,"Antwort") 
vor das

Code: Alles auswählen

EndProcedure    
geschoben. Dann klappt alles wie ich es mir wünsche, aber dann werden die "Images" erst nach der "Delayzeit" angezeigt - was ich nun überhaupt nicht verstehe.

Code: Alles auswählen

Enumeration ; Windows 
  #Eingangsfenster 
  #Erinnerungsfenster
EndEnumeration 

Enumeration ; Gadgets 
 
  ; Eingangsfenster 
  #Eingangsfenster_txt1 
  #Eingangsfenster_txt2
  #Eingangsfenster_imagIT
  #Eingangsfenster_txt3 
  #Eingangsfenster_txt4 
  #Eingangsfenster_txt5 
  #Eingangsfenster_txt6 
  #Eingangsfenster_butWeiter 
   
  
  ; Erinnerungsfenster
  #Erinnerungsfenster_imag1
  #Erinnerungsfenster_txt1
  #Erinnerungsfenster_imag2
  #Erinnerungsfenster_txt2
  
EndEnumeration 
 
Global anzeigezeitl.l, versteckzeitl.l  

Procedure Open_Eingangsfenster() 
    If OpenWindow(#Eingangsfenster,400,300,330,220,"İtalyanca - Release 2.0",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar ) 
    EndIf 
    
    If LoadFont(1, "Arial", 10) 
        SetGadgetFont(#PB_Default, FontID(1)) 
    EndIf
    
    If  LoadImage(0, "I.bmp")    
        LoadImage(1, "Tr.bmp") 
    EndIf 
    
    If CreateGadgetList(WindowID(#Eingangsfenster)) 
      TextGadget(#Eingangsfenster_txt1, 10,10, 230, 30, "Giuseppe, bana İtalyanca öğrettiğin") 
      TextGadget(#Eingangsfenster_txt2, 10,40,200, 30, "için çok teşekkür ederim.") 
      ImageGadget(#Eingangsfenster_imagIT, 250,10,10, 10,ImageID(0))
      TextGadget(#Eingangsfenster_txt3, 250,70, 350, 30, "Saygılar") 
      TextGadget(#Eingangsfenster_txt4, 250,100, 350, 30, "Michael") 
      TextGadget(#Eingangsfenster_txt5, 10,130, 220, 30, "Şu anda programın kelime hazinesi: ") 
      TextGadget(#Eingangsfenster_txt6, 250,130, 150, 30, "") 
      ButtonGadget(#Eingangsfenster_butWeiter, 35, 170, 250, 30, "Devam etmek için tıklayın") 
    EndIf 
    
    If ReadFile(1,"Wortschatz.dat") 
        laengel.l= Lof(1) 

        zeilenanzahlw.w=laengel.l/162 
        zeilenanzahls.s= StrU((zeilenanzahlw.w), #Word) 
        SetGadgetText(#Eingangsfenster_txt6,zeilenanzahls.s) 
       CloseFile(1) 
     EndIf 
  EndProcedure    
  

Procedure Open_Erinnerungsfenster_italienisch_turkisch()    
  If OpenWindow(#Erinnerungsfenster,50,100,300,130,"Hatırlatma pencere") 
    
    
    If LoadFont(1, "Arial", 15) 
      SetGadgetFont(#PB_Default, FontID(1)) 
    EndIf 
    
    
    If CreateGadgetList(WindowID(#Erinnerungsfenster)) 
      ImageGadget(#Erinnerungsfenster_imag1, 10,10,10, 10,ImageID(0))                      
      TextGadget(#Erinnerungsfenster_txt1, 90, 20, 200, 50, "")                            
      ImageGadget(#Erinnerungsfenster_imag2, 10,70,10, 10,ImageID(1))    
      TextGadget(#Erinnerungsfenster_txt2, 90,80, 200, 50, "") 
    EndIf 
    
  EndIf 
  
EndProcedure    
 
Procedure Open_Versteckfenster_italienisch_turkisch()
  Static zeit 
  
  If ElapsedMilliseconds() > zeit 
    zeit = ElapsedMilliseconds() +  anzeigezeitl.l + versteckzeitl.l
    
      SetGadgetText(#Erinnerungsfenster_txt1,"Frage")
      Delay(1000)
      SetGadgetText(#Erinnerungsfenster_txt2,"Antwort") 
      
      SetWindowState(#Erinnerungsfenster, #PB_Window_Normal)
      StickyWindow(#Erinnerungsfenster,1);Fenster immer im Vordergrund
      
  Else 
    SetWindowState(#Erinnerungsfenster, #PB_Window_Minimize)
  EndIf 
   
EndProcedure 

Procedure hauptprogramm()
  
  Protected quit.l 
  Protected EventID.l 
  Protected EventGadget.l 
  Protected EventWindow.l 
  
  Open_Eingangsfenster()
  
  Repeat 
    
    EventID     = WaitWindowEvent() 
    EventGadget = EventGadget() 
    EventWindow = EventWindow() 
    
    Select EventID 
      Case #PB_Event_CloseWindow 
        
        Select EventWindow 
          Case #Eingangsfenster         :  quit =1      
          Case #Erinnerungsfenster      :  quit =1
        EndSelect 
        
      Case #PB_Event_Gadget  
        
        Select EventWindow 
          
          Case #Eingangsfenster
            
            Select EventGadget 
              Case #Eingangsfenster_butWeiter
                Open_Erinnerungsfenster_italienisch_turkisch()
                SetWindowState(#Eingangsfenster, #PB_Window_Minimize)
            
                  
                  DisableGadget(#Eingangsfenster_butWeiter,1)

                  anzeigezeits.s= "3"
                  versteckzeits.s= "5"
                  anzeigezeitl.l= Val(anzeigezeits.s)*1000
                  versteckzeitl.l= Val(versteckzeits.s)*1000
                     
                  SetTimer_(Open_Erinnerungsfenster_italienisch_turkisch(),0,anzeigezeitl.l,@Open_Versteckfenster_italienisch_turkisch())
                          
                  
            EndSelect
        EndSelect 
    EndSelect  
  Until quit=1 
  
EndProcedure 

hauptprogramm()
End 
Hat da vielleicht einer eine Idee?
Danke schon mal.
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> aber dann werden die "Images" erst nach der "Delayzeit" angezeit - was ich nun überhaupt nicht verstehe.

yo ist doch ganz klar...

jede änderung eines gadgets ist ein event, und muss in der eventschleife bearbeitet werden, um wirksam zu werden.

wenn das programm zwischendruch in nem delay hängt, wird kein event bearbeitet,
und kein gadget aktualisiert.

du musst die wartezeit in die hauptschleife legen, und zwar ohne den normalen schleifendurchlauf zu behindern.

...timer-callback wär ne passable lösung
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Endlich hats einer kapiert :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

:mrgreen: bin doch lernfähig....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Andere leider nicht - nein, ich meine euch, mit eurem OT, diesmal nicht :D.

HemSA hatte das gleiche Problem schon einmal, er sollte vielleicht
mal seine alten Threads durchsuchen.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> HemSA hatte das gleiche Problem schon einmal
Deswegen passte meine Aussage so schön, mit einer <)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Beitrag von HemSA »

Hallo Edel - stimmt du hast mir damals sehr geholfen was das Programm angeht. Ich habe es danach etwas umgeschrieben ( alles in Proceduren gepackt - und noch ein extra Fenster mit zusätzlichen Funktionen hinzugefügt ). Klappt auch alles gut. Jetzt wollte ich nur noch eine weitere Funktion ( ein Mitschüler hatte die Idee ) hinzufügen, das eben mit der verzögerten Anzeige von den Vokabeln, damit man vorher überlegen kann was wohl das Wort ist, bevor es angezeigt wird.

Ich hänge dann wohl noch immer noch in der Leitung - in der Procedur habe ich ja keine "Eventabfrage" - ist alles in die Hauptprocedur gepackt.

Hier ist mal der komplette Code. ( muss jetzt mal meine Tochter vom Kino holen - schaue nachher wieder rein )

Code: Alles auswählen

Enumeration ; Windows 
  #Eingangsfenster 
  #Auswahlfenster
  #Erinnerungsfenster
EndEnumeration 

Enumeration ; Gadgets 
 
  ; Eingangsfenster 
  #Eingangsfenster_txt1 
  #Eingangsfenster_txt2
  #Eingangsfenster_imagIT
  #Eingangsfenster_txt3 
  #Eingangsfenster_txt4 
  #Eingangsfenster_txt5 
  #Eingangsfenster_txt6 
  #Eingangsfenster_butWeiter 
   
  ; Auswahlfenster
  #Auswahlfenster_checkbox_D
  #Auswahlfenster_checkbox_EN
  #Auswahlfenster_strAnzeig
  #Auswahlfenster_strVersteck
  #Auswahlfenster_txt1
  #Auswahlfenster_txt2
  #Auswahlfenster_txt3
  #Auswahlfenster_txt4
  #Auswahlfenster_txt5
  #Auswahlfenster_txt6
  #Auswahlfenster_imagD
  #Auswahlfenster_imagEN
  #Auswahlfenster_butWeiter

  ; Erinnerungsfenster
  #Erinnerungsfenster_imag1
  #Erinnerungsfenster_txt1
  #Erinnerungsfenster_imag2
  #Erinnerungsfenster_txt2
  #Erinnerungsfenster_imag3
  #Erinnerungsfenster_txt3
  #Erinnerungsfenster_imag4
  #Erinnerungsfenster_txt4

EndEnumeration 
 
Global anzeigezeitl.l, versteckzeitl.l  

Procedure Open_Eingangsfenster() 
    If OpenWindow(#Eingangsfenster,400,300,330,220,"İtalyanca - Release 2.0",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar ) 
    EndIf 
    
    If LoadFont(1, "Arial", 10) 
        SetGadgetFont(#PB_Default, FontID(1)) 
    EndIf
    
    
    If  LoadImage(0, "I.bmp")    
        LoadImage(1, "Tr.bmp") 
        LoadImage(2, "D.bmp") 
        LoadImage(3, "GB.bmp") 
    EndIf 
    
    If CreateGadgetList(WindowID(#Eingangsfenster)) 
      TextGadget(#Eingangsfenster_txt1, 10,10, 230, 30, "Giuseppe, bana İtalyanca öğrettiğin") 
      TextGadget(#Eingangsfenster_txt2, 10,40,200, 30, "için çok teşekkür ederim.") 
      ImageGadget(#Eingangsfenster_imagIT, 250,10,10, 10,ImageID(0))
      TextGadget(#Eingangsfenster_txt3, 250,70, 350, 30, "Saygılar") 
      TextGadget(#Eingangsfenster_txt4, 250,100, 350, 30, "Michael") 
      TextGadget(#Eingangsfenster_txt5, 10,130, 220, 30, "Şu anda programın kelime hazinesi: ") 
      TextGadget(#Eingangsfenster_txt6, 250,130, 150, 30, "") 
      ButtonGadget(#Eingangsfenster_butWeiter, 35, 170, 250, 30, "Devam etmek için tıklayın") 
    EndIf 
    
    If ReadFile(1,"Wortschatz.dat") 
        laengel.l= Lof(1) 

        zeilenanzahlw.w=laengel.l/162 
        zeilenanzahls.s= StrU((zeilenanzahlw.w), #Word) 
        SetGadgetText(#Eingangsfenster_txt6,zeilenanzahls.s) 
       CloseFile(1) 
     EndIf 
  EndProcedure    
  
Procedure Open_Auswahlfenster()
  If OpenWindow(#Auswahlfenster, 218, 0, 350, 300, "Seçenekler",  #PB_Window_SystemMenu | #PB_Window_TitleBar|#PB_Window_ScreenCentered )
    
    If  LoadImage(2, "D.bmp") 
        LoadImage(3, "GB.bmp") 
    EndIf  
    
    If CreateGadgetList(WindowID(#Auswahlfenster))
      TextGadget(#Auswahlfenster_txt1, 70, 10, 300, 20, "İstediğiniz ek dil bilgileri işaretleyin")
      ImageGadget(#Auswahlfenster_imagD, 20, 40, 10, 10, ImageID(2))
      CheckBoxGadget(#Auswahlfenster_checkbox_D, 120, 55, 20, 20, "")
      ImageGadget(#Auswahlfenster_imagEN, 200, 40, 10, 10, ImageID(3))
      CheckBoxGadget(#Auswahlfenster_checkbox_EN, 300, 55, 20, 20, "")
      TextGadget(#Auswahlfenster_txt2, 50, 130, 300, 20, "Lütfen gösterme ve saklama zamanını girin")
      TextGadget(#Auswahlfenster_txt3, 20, 160, 120, 20, "Gösterme süresi")
      StringGadget(#Auswahlfenster_strAnzeig, 140, 160, 40, 20, "")
      TextGadget(#Auswahlfenster_txt4, 200, 160, 150, 20, "(Saniye olarak)")
      TextGadget(#Auswahlfenster_txt5, 20, 200, 120, 20, "Saklama süresi")
      StringGadget(#Auswahlfenster_strVersteck, 140, 200, 40, 20, "")
      TextGadget(#Auswahlfenster_txt6, 200, 200, 150, 20, "(Saniye olarak)")
      ButtonGadget(#Auswahlfenster_butWeiter, 50, 250, 250, 30, "Yazılıma başlamak için tıklayın") 
    EndIf
  EndIf
EndProcedure
 
Procedure Open_Erinnerungsfenster_italienisch_turkisch()    
  If OpenWindow(#Erinnerungsfenster,50,100,300,130,"Hatırlatma pencere") 
    
    
    If LoadFont(1, "Arial", 15) 
      SetGadgetFont(#PB_Default, FontID(1)) 
    EndIf 
    
    
    
    If CreateGadgetList(WindowID(#Erinnerungsfenster)) 
      ImageGadget(#Erinnerungsfenster_imag1, 10,10,10, 10,ImageID(0))                      
      TextGadget(#Erinnerungsfenster_txt1, 90, 20, 200, 50, "")                            
      ImageGadget(#Erinnerungsfenster_imag2, 10,70,10, 10,ImageID(1))    
      TextGadget(#Erinnerungsfenster_txt2, 90,80, 200, 50, "") 
    EndIf 
    
  EndIf 
  
EndProcedure    
 
Procedure Open_Versteckfenster_italienisch_turkisch()
  Static zeit 
  
  If ElapsedMilliseconds() > zeit 
    zeit = ElapsedMilliseconds() +  anzeigezeitl.l + versteckzeitl.l
    
    If ReadFile(1,"Wortschatz.dat") 
      laengel.l= Lof(1) 
      ;Debug laengel.l
      zeilenanzahlw.w=laengel.l/162 
      zeilenanzahls.s= StrU((zeilenanzahlw.w), #Word) 
      
      zufallszeilennummerw.w= Random(zeilenanzahlw.w-1) 
      
      FileSeek(1,zufallszeilennummerw.w*162)                                        
      
      wert1s.s= StrU((zufallszeilennummerw.w+1), #Word)            
      wert2s.s=ReadString(1) 
      italienischs.s=Left(wert2s.s,40) 
      tuerkischs.s=Mid(wert2s.s,41, 40) 
      deutschs.s=Mid(wert2s.s,81, 40)
      englischs.s=Mid(wert2s.s,121, 40)
      
      SetGadgetText(#Erinnerungsfenster_txt1,italienischs.s)
      SetGadgetText(#Erinnerungsfenster_txt2,tuerkischs.s) 
       
      CloseFile(1) 
      
    EndIf 
    
    SetWindowState(#Erinnerungsfenster, #PB_Window_Normal)
    StickyWindow(#Erinnerungsfenster,1);Fenster immer im Vordergrund
  Else 
    SetWindowState(#Erinnerungsfenster, #PB_Window_Minimize)
  EndIf 
  
EndProcedure 

Procedure Open_Erinnerungsfenster_italienisch_turkisch_deutsch()    
    If OpenWindow(#Erinnerungsfenster,50,100,300,190,"Hatırlatma pencere") 
      
      
      If LoadFont(1, "Arial", 15) 
        SetGadgetFont(#PB_Default, FontID(1)) 
      EndIf 
      
            
      
      If CreateGadgetList(WindowID(#Erinnerungsfenster)) 
        ImageGadget(#Erinnerungsfenster_imag1, 10,10,10, 10,ImageID(0))                      
        TextGadget(#Erinnerungsfenster_txt1, 90, 20, 200, 50, "")                            
        ImageGadget(#Erinnerungsfenster_imag2, 10,70,10, 10,ImageID(1))    
        TextGadget(#Erinnerungsfenster_txt2, 90,80, 200, 50, "") 
        ImageGadget(#Erinnerungsfenster_imag3, 10,130,10, 10,ImageID(2))    
        TextGadget(#Erinnerungsfenster_txt3, 90,140, 200, 50, "")  
         
      EndIf 
      
    EndIf 
    
EndProcedure    
 
Procedure Open_Versteckfenster_italienisch_turkisch_deutsch()
    Static zeit 
    
    If ElapsedMilliseconds() > zeit 
      zeit = ElapsedMilliseconds() +  anzeigezeitl.l + versteckzeitl.l
      
      If ReadFile(1,"Wortschatz.dat") 
        laengel.l= Lof(1) 
        ;Debug laengel.l
        zeilenanzahlw.w=laengel.l/162 
        zeilenanzahls.s= StrU((zeilenanzahlw.w), #Word) 
        
        zufallszeilennummerw.w= Random(zeilenanzahlw.w-1) 
        
        FileSeek(1,zufallszeilennummerw.w*162)                                        
        
        wert1s.s= StrU((zufallszeilennummerw.w+1), #Word)            
        wert2s.s=ReadString(1) 
        italienischs.s=Left(wert2s.s,40) 
        tuerkischs.s=Mid(wert2s.s,41, 40) 
        deutschs.s=Mid(wert2s.s,81, 40)
        englischs.s=Mid(wert2s.s,121, 40)
        
        SetGadgetText(#Erinnerungsfenster_txt1,italienischs.s)
        SetGadgetText(#Erinnerungsfenster_txt2,tuerkischs.s) 
        SetGadgetText(#Erinnerungsfenster_txt3,deutschs.s) 
          
        CloseFile(1) 
        
      EndIf 
      
      SetWindowState(#Erinnerungsfenster, #PB_Window_Normal)
      StickyWindow(#Erinnerungsfenster,1);Fenster immer im Vordergrund
    Else 
      SetWindowState(#Erinnerungsfenster, #PB_Window_Minimize)
    EndIf 
    
EndProcedure 
 
Procedure Open_Erinnerungsfenster_italienisch_turkisch_englisch()    
    If OpenWindow(#Erinnerungsfenster,50,100,300,190,"Hatırlatma pencere") 
      
      
      If LoadFont(1, "Arial", 15) 
        SetGadgetFont(#PB_Default, FontID(1)) 
      EndIf 
      
      
      
      If CreateGadgetList(WindowID(#Erinnerungsfenster)) 
        ImageGadget(#Erinnerungsfenster_imag1, 10,10,10, 10,ImageID(0))                      
        TextGadget(#Erinnerungsfenster_txt1, 90, 20, 200, 50, "")                            
        ImageGadget(#Erinnerungsfenster_imag2, 10,70,10, 10,ImageID(1))    
        TextGadget(#Erinnerungsfenster_txt2, 90,80, 200, 50, "") 
        ImageGadget(#Erinnerungsfenster_imag3, 10,130,10, 10,ImageID(3))    
        TextGadget(#Erinnerungsfenster_txt3, 90,140, 200, 50, "")  
        
      EndIf 
      
    EndIf 
    
EndProcedure    
  
Procedure Open_Versteckfenster_italienisch_turkisch_englisch()
    Static zeit 
    
    If ElapsedMilliseconds() > zeit 
      zeit = ElapsedMilliseconds() +  anzeigezeitl.l + versteckzeitl.l
      
      If ReadFile(1,"Wortschatz.dat") 
        laengel.l= Lof(1) 
        ;Debug laengel.l
        zeilenanzahlw.w=laengel.l/162 
        zeilenanzahls.s= StrU((zeilenanzahlw.w), #Word) 
        
        zufallszeilennummerw.w= Random(zeilenanzahlw.w-1) 
        
        FileSeek(1,zufallszeilennummerw.w*162)                                        
        
        wert1s.s= StrU((zufallszeilennummerw.w+1), #Word)            
        wert2s.s=ReadString(1) 
        italienischs.s=Left(wert2s.s,40) 
        tuerkischs.s=Mid(wert2s.s,41, 40) 
        deutschs.s=Mid(wert2s.s,81, 40)
        englischs.s=Mid(wert2s.s,121, 40)
        
        SetGadgetText(#Erinnerungsfenster_txt1,italienischs.s)
        SetGadgetText(#Erinnerungsfenster_txt2,tuerkischs.s) 
        SetGadgetText(#Erinnerungsfenster_txt3,englischs.s) 
        
        CloseFile(1) 
        
      EndIf 
      
      SetWindowState(#Erinnerungsfenster, #PB_Window_Normal)
      StickyWindow(#Erinnerungsfenster,1);Fenster immer im Vordergrund
    Else 
      SetWindowState(#Erinnerungsfenster, #PB_Window_Minimize)
    EndIf 
    
EndProcedure 
  
Procedure Open_Erinnerungsfenster_italienisch_turkisch_deutsch_englisch()    
  If OpenWindow(#Erinnerungsfenster,50,100,300,250,"Hatırlatma pencere") 
    
    
    If LoadFont(1, "Arial", 15) 
      SetGadgetFont(#PB_Default, FontID(1)) 
    EndIf 
    
    
    
    If CreateGadgetList(WindowID(#Erinnerungsfenster)) 
      ImageGadget(#Erinnerungsfenster_imag1, 10,10,10, 10,ImageID(0))                      
      TextGadget(#Erinnerungsfenster_txt1, 90, 20, 200, 50, "")                            
      ImageGadget(#Erinnerungsfenster_imag2, 10,70,10, 10,ImageID(1))    
      TextGadget(#Erinnerungsfenster_txt2, 90,80, 200, 50, "") 
      ImageGadget(#Erinnerungsfenster_imag3, 10,130,10, 10,ImageID(2))    
      TextGadget(#Erinnerungsfenster_txt3, 90,140, 200, 50, "")  
      ImageGadget(#Erinnerungsfenster_imag4, 10,190,10, 10,ImageID(3))    
      TextGadget(#Erinnerungsfenster_txt4, 90,200, 200, 50, "")  
    EndIf 
    
  EndIf 
  
EndProcedure    
  
Procedure Open_Versteckfenster_italienisch_turkisch_deutsch_englisch()
  Static zeit 
  
  If ElapsedMilliseconds() > zeit 
    zeit = ElapsedMilliseconds() +  anzeigezeitl.l + versteckzeitl.l
    
    If ReadFile(1,"Wortschatz.dat") 
      laengel.l= Lof(1) 
      ;Debug laengel.l
      zeilenanzahlw.w=laengel.l/162 
      zeilenanzahls.s= StrU((zeilenanzahlw.w), #Word) 
      
      zufallszeilennummerw.w= Random(zeilenanzahlw.w-1) 
      
      FileSeek(1,zufallszeilennummerw.w*162)                                        
      
      wert1s.s= StrU((zufallszeilennummerw.w+1), #Word)            
      wert2s.s=ReadString(1) 
      italienischs.s=Left(wert2s.s,40) 
      tuerkischs.s=Mid(wert2s.s,41, 40) 
      deutschs.s=Mid(wert2s.s,81, 40)
      englischs.s=Mid(wert2s.s,121, 40)
      
      SetGadgetText(#Erinnerungsfenster_txt1,italienischs.s)
      SetGadgetText(#Erinnerungsfenster_txt2,tuerkischs.s) 
      SetGadgetText(#Erinnerungsfenster_txt3,deutschs.s) 
      SetGadgetText(#Erinnerungsfenster_txt4,englischs.s) 
      
      CloseFile(1) 
      
    EndIf 
    
    SetWindowState(#Erinnerungsfenster, #PB_Window_Normal)
    StickyWindow(#Erinnerungsfenster,1);Fenster immer im Vordergrund
  Else 
    SetWindowState(#Erinnerungsfenster, #PB_Window_Minimize)
  EndIf 
  
EndProcedure 
 
Procedure hauptprogramm()
  
  Protected quit.l 
  Protected EventID.l 
  Protected EventGadget.l 
  Protected EventWindow.l 
  
  Open_Eingangsfenster()
  
  Repeat 
    
    EventID     = WaitWindowEvent() 
    EventGadget = EventGadget() 
    EventWindow = EventWindow() 
    
    Select EventID 
      Case #PB_Event_CloseWindow 
        
        Select EventWindow 
          Case #Eingangsfenster         :  quit =1      
          Case #Auswahlfenster          :  quit =1
          Case #Erinnerungsfenster      :  quit =1
        EndSelect 
        
      Case #PB_Event_Gadget  
        
        Select EventWindow 
          
          Case #Eingangsfenster
            
            Select EventGadget 
              Case #Eingangsfenster_butWeiter
                Open_Auswahlfenster()
                SetWindowState(#Eingangsfenster, #PB_Window_Minimize)
            EndSelect 
              
          Case #Auswahlfenster
              
            Select EventGadget 
                Case #Auswahlfenster_butWeiter  
                  
                  DisableGadget(#Eingangsfenster_butWeiter,1)

                  anzeigezeits.s= GetGadgetText(#Auswahlfenster_strAnzeig)
                  versteckzeits.s= GetGadgetText(#Auswahlfenster_strVersteck)
                  anzeigezeitl.l= Val(anzeigezeits.s)*1000
                  versteckzeitl.l= Val(versteckzeits.s)*1000
                  
                  auswahl_D = GetGadgetState(#Auswahlfenster_checkbox_D)
                  auswahl_EN = GetGadgetState(#Auswahlfenster_checkbox_EN)
                  
                    Select auswahl_D 
                      Case 1
                        Select auswahl_EN 
                          Case 1
                            SetTimer_(Open_Erinnerungsfenster_italienisch_turkisch_deutsch_englisch(),0,anzeigezeitl.l,@Open_Versteckfenster_italienisch_turkisch_deutsch_englisch())
                          Case 0
                            SetTimer_(Open_Erinnerungsfenster_italienisch_turkisch_deutsch(),0,anzeigezeitl.l,@Open_Versteckfenster_italienisch_turkisch_deutsch())
                        EndSelect
                      Case 0
                        Select auswahl_EN 
                          Case 1
                            SetTimer_(Open_Erinnerungsfenster_italienisch_turkisch_englisch(),0,anzeigezeitl.l,@Open_Versteckfenster_italienisch_turkisch_englisch())
                          Case 0
                            SetTimer_(Open_Erinnerungsfenster_italienisch_turkisch(),0,anzeigezeitl.l,@Open_Versteckfenster_italienisch_turkisch())
                        EndSelect   
                          
                    EndSelect     
                         
                  CloseWindow(#Auswahlfenster)
            EndSelect
        EndSelect 
    EndSelect  
  Until quit=1 
  
EndProcedure 

hauptprogramm()
End 
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Mit SetGadgetText sorgste dafür, das Windows diverse Ereignisse erzeugt um das
umzusetzen. Erzeugt also ein Paint-Ereignis, ein Update-Ereignis usw. Wenn
diese abgearbeitet sind, wird der Text angezeigt.

Diese Ereignisse können durch Dich oder Windows selbst abgearbeitet
werden, aber nur nach einem WaitWindowEvent()!!! Ausserhalb einer solchen
Schleife findet kein Fensterrefresh statt.

Ohne WaitWindowEvent oder WindowEvent wird die Darstellung des Fenster
nicht geändert, bei längerem Fehlen erscheint unter Umständen sogar:
Keine Rückmeldung im Titel.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Das Problem hab ich auch schon mal gehabt. Nach SetGadgetText(...) solltest du noch

Code: Alles auswählen

SendMessage_(GadgetID(GadgetID), #WM_PAINT, 0, 0)
ausführen, damit die Veränderung auch angezeigt werden.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Leonhard hat geschrieben:Das Problem hab ich auch schon mal gehabt. Nach SetGadgetText(...) solltest du noch

Code: Alles auswählen

SendMessage_(GadgetID(GadgetID), #WM_PAINT, 0, 0)
ausführen, damit die Veränderung auch angezeigt werden.
Diese Message richtet sich auch an das Event-Loop, wenn das nicht
vorhanden ist, bleibt die Message trotzdem ihm Messagequeque, bis
WaitWindowEvent kommt
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten