WindowEvent / WaitWindowEvent

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
steelbasic
Beiträge: 63
Registriert: 02.09.2004 19:41
Wohnort: Niedersachsen

WindowEvent / WaitWindowEvent

Beitrag von steelbasic »

Hallo,

ich habe ein (Verständnis-) Problem mit Wait - WindowEvent.

Wie ihr seht arbeite ich mit WindowEvent und einem Delay von 1. Klappt auch ganz gut. Kann es sein das der Fensteraufbau beim Programmstart langsamer ist? Wieso klappt WaitWindowEvent nicht. Zum Teil muss ich 2 mal auf einen Button oder einen Menüpunkt klicken!!

Habe zwar schon die Hilfe gelesen und im Codearchiv geblättert, komme aber (wegen dem Brett vorm Kopf) nicht weiter.

Hier ein Auszug aus dem Code. Zur besseren Übersicht habe ich einige Teile aus der Mitte ausgeschnitten. Also nicht wundern.

Code: Alles auswählen

Repeat

;EventID = WaitWindowEvent()
EventID = WindowEvent()
;Window = EventWindowID() 
 
;-Button einlesen=============================
Select WaitWindowEvent() 
   Case #PB_Event_CloseWindow
      CloseHelp ()
      End 
    Case #PB_Event_Gadget 
      Select EventGadgetID() 
         Case #start                      ;Startbutton 
            start = 1
         Case #help                       ;Helpfenster öffnen
            OpenHelp ("Traininghelp.chm","") 
         Case #close_help                 ;Fenster "über" schliessen
            CloseWindow(#ueber)   
      EndSelect
EndSelect 
  
;-Menü abfragen =============================
;{
If EventID = #PB_EventMenu
   Select EventMenuID()
      Case #MENU_ueber                          ;Programminfo anzeigen
         Open_ueber()
         AddGadgetItem (#Listview_ueber,-1,"Trainingssrechner      " )
         AddGadgetItem (#Listview_ueber,-1,"- - - - - - - - - - - - -")        
      
      Case #MENU_drucken                           ;Ergebnisse drucken  
         If PrintRequester()
            If StartPrinting("Trainingsrechner Ausdruck")
               If StartDrawing(PrinterOutput())
                  ;===================================================                 
                  DrawingFont(LoadFont(0, "Times New Roman", ycm(1),#PB_Font_Bold))
                  Locate(xcm(5), ycm(4)) : DrawText("Ergebnis Trainigsrechner")
                  
      Case #MENU_Ende            ;Programmende
         CloseHelp ()
         End
      Case #MENU_help            ;Hilfefenster öffnen
         OpenHelp ("Traininghelp.chm","")
   EndSelect
EndIf
;}
;- Daten einlesen  ===================================
  maennlich=GetGadgetState(#maennlich)
  weiblich=GetGadgetState(#weiblich)

If weiblich = 1
   maennlich = 0
   SetGadgetState(#maennlich, 0)
EndIf
  groesse$ = GetGadgetText(#groesse)
  groesse = Val(groesse$) 
  
;-Daten berechnen ====================================
;{
If start = 1
    ;- BMI berechnen
      groesse_m.f = groesse / 100
      
      bmi = gewicht / (groesse_m.f * groesse_m.f)
      bmi$ = Str(bmi)
      SetGadgetText(#bmi, bmi$)
      
      SetGadgetState   (#ProgressBar_BMI,bmi)   
    

      
EndIf 
start = 0 
;}
Delay (1)
Until Event = #PB_EventCloseWindow
End
Viele Grüße
Hein Blöd
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Deinen ersten Fehler (beim schnell Überfliegen) hast du hier gemacht:
-> Select WaitWindowEvent()
Warum speicherst du vorher die EventID in einer Variable und benutzt dann nachher nicht diese Variable sondern fragst erneut das Window-Event ab? Das könnte der Grund sein, warum du manchmal zweimalig klicken musst. Denn so werden die ersten Messages, welche in der EventID Variable stehen, übersehen, da sie ja nicht ausgewertet werden sondern direkt das danach folgende Event abgefragt wird. (Per Select)
Dieses WaitWindowEvent verwendet man einmalig in der Schleife und zwar irgendwo zu Beginn. Dort speichert man sich den Wert in einer Variable (wie du ja auch gemacht hast) un wertet den Wert der Variable dann aus. Du hast stattdessen erneut eine Message aus dem Stack gegriffen und die alte aus der Variable unbeachtet gelassen. (Im Menü greifst du dann zwar darauf zurück, aber trotzdem wird bei den Buttons eine weitere Message rausgenommen, was nicht sein darf).
Antworten