Bei anklicken des Windows wird das Programm angehalten??

Für allgemeine Fragen zur Programmierung mit PureBasic.
BrunoF
Beiträge: 23
Registriert: 05.09.2004 22:29

Bei anklicken des Windows wird das Programm angehalten??

Beitrag von BrunoF »

Hallo,
wenn man bei dem Folgenden Programm das Window mit der Maus anklickt um z.B. das Window zu verschieben wird das Programm währen des verschiebend angehalten. Das erkennt man daran dass die Progressbars nicht mehr weiterlaufen.
Ist das normal oder mache ich etwas falsch :?:
BrunoF

Code: Alles auswählen

#Window_0 = 0
Global quit.b
Enumeration
  #Gadget_Window_0_Ueberschrift
  #Gadget_Window_0_UeberPBar_1
  #Gadget_Window_0_PBar_1
  #Gadget_Window_0_Fortschritt_1
  #Gadget_Window_0_UeberPBar_2
  #Gadget_Window_0_PBar_2
  #Gadget_Window_0_Fortschritt_2
  #Gadget_Window_0_ButtonOK
EndEnumeration

quit = 0

Procedure OpenWindow0()
  If OpenWindow(#Window_0, 100, 100, 350, 250, #PB_Window_SystemMenu, "Daten einlesen")
    If CreateGadgetList(WindowID(#Window_0))
      TextGadget(#Gadget_Window_0_Ueberschrift, 20, 20, 300, 25,"Die Daten weden eingelesen",#PB_Text_Center)
      TextGadget(#Gadget_Window_0_UeberPBar_1, 20, 50, 300, 25,"P:\")
      ProgressBarGadget(#Gadget_Window_0_PBar_1, 20, 75, 300,25,0,100,#PB_ProgressBar_Smooth)
      TextGadget(#Gadget_Window_0_Fortschritt_1, 20, 100, 300, 25, "0%",#PB_Text_Center)
      TextGadget(#Gadget_Window_0_UeberPBar_2, 20, 125, 300, 25,"Gesamt")
      ProgressBarGadget(#Gadget_Window_0_PBar_2, 20, 150, 300,25,0,100,#PB_ProgressBar_Smooth)
      TextGadget(#Gadget_Window_0_Fortschritt_2, 20, 175, 300, 25, "0%",#PB_Text_Center)
      ButtonGadget(#Gadget_Window_0_ButtonOK, 150, 205, 50, 25, "ESC", #PB_Button_Default)
    EndIf
  EndIf
EndProcedure

;----------------------------------------------------------------------
Procedure Test()
  i.b = 0
  j.b = 1
  x.b = 0
  y.b = 0
  For j = 1 To 3
    SetGadgetText(#Gadget_Window_0_UeberPBar_1,"Datei : "+Str(j))
    For i = 0 To 100
      EventID = WindowEvent()
      Select EventID
        Case #PB_Event_Gadget
          If EventGadgetID() = #Gadget_Window_0_ButtonOK
            quit = 1
            Break
          EndIf
      EndSelect
      SetGadgetState(#Gadget_Window_0_PBar_1, i)
      SetGadgetText(#Gadget_Window_0_Fortschritt_1, Str(i)+"%")
      x=(i/3) + y
      SetGadgetState(#Gadget_Window_0_PBar_2, x)
      SetGadgetText(#Gadget_Window_0_Fortschritt_2, Str(x)+"%")
      Delay(10)
    Next i
    If quit = 1
      Break
    EndIf
    y = x
  Next j
  SetGadgetState(#Gadget_Window_0_PBar_2, 100)
  SetGadgetText(#Gadget_Window_0_Fortschritt_2,"100%")
EndProcedure

;-------------------------------------------------------------------------
OpenWindow0()
Test()
SetGadgetText(#Gadget_Window_0_ButtonOK,"OK")

Repeat
  EventID = WaitWindowEvent()

  Select EventID

    Case #PB_Event_Gadget
      If EventGadgetID() = #Gadget_Window_0_ButtonOK
        quit = 1
      EndIf
    Case #PB_Event_CloseWindow
      quit = 1
  EndSelect

Until quit = 1
strgalt
Beiträge: 63
Registriert: 30.08.2004 23:25

Beitrag von strgalt »

Hallo BrunoF,

Prinzipell ist das normal, da Windows beim Verschieben eines Windows (dazu gehören genauergenommen sämmtliche Steuerelemente (Buttons, Labels, Progressbar usw)) zu diesem Zeitpunkt nicht genau weiss wo was neu gezeichnet werden soll.

Sicherlich lässt sich das mit dem Neuzeichnen mit dem ein oder andere API- Kniff regel, ob der Aufwand lohnt kannst nur du entscheiden. Wenn ja schreib noch mal und ich werd mich bemühen.

Das der Berechnungsprozess (also das was du gerade ausführst) angehlaten wird kann beispielsweise mit dem erstellen eines Threads gelöst werden. Ich würde dir dann aber empfehlen die Procedure "Test" neu zu strukturieren.
Wer lesen kann, ist klar im Vorteil

MfG
strgalt
BrunoF
Beiträge: 23
Registriert: 05.09.2004 22:29

Beitrag von BrunoF »

Hallo strgalt,
wenn dieses Verhalten normal ist gebe ich dir Recht dass es keinen Sinn macht in diesem Fall den Aufwand zu betreiben.
Danke BrunoF
Antworten