Seite 1 von 2
Eventproblem
Verfasst: 14.12.2011 20:49
von Schlaubi
Moin,
ich hab eine Software geschrieben, welche währen diese ausgeführt wird ein Werbungsfenster einblendet. In der gesamten Software findet eigentlich keine Usereingabe statt. Dieses Fenster wird nach Ablauf auch per CloseWindow() automatisach geschlossen. Damit das fenster aktiv bleibt und nicht weiß erscheint, habe ich nach Eurem Tipp eine While WindowEvent() Schleife hinzugefügt, was auch geklappt hat.
Nun dachte ich mir ich muss in diesem fenster eine Checkbox einfügen und jetzt klappt nichts mehr. Mit der bisherigen Schleife ließ sich die checkBox nicht mehr klicken und sämtliche Repeat:forever Schleifen klappten bisher auch nicht.
Ich will, dass während das fenster eingeblendet wird die checkbox aktiv bleibt und ich nach CloseWindow() eine Abfrage starten kann, ob diese CheckBox aktiv war oder nicht. Könnt Ihr mir dabei helfen?
Ich hoffe ich habe mich nicht allzu verworren ausgedrückt, bei Fragen bitte einfach melden.
Code: Alles auswählen
Open_Window_0() ; Werbungsfester öffnen
StickyWindow(#Window_0,1) ; Immer im Vordergrund halten
SetGadgetText(#Statustext,"Downlod ...") ;Statustext ändern
While #WindowEvent:Wend ;war bisher mit drin und hielt das Fenster oben ohne weiß zu werden
!!!! eigentlicher Programmablauf !!!!
CloseWindow(#Window_0) ; Werbungsfenster schließen
Re: Eventproblem
Verfasst: 14.12.2011 21:01
von RSBasic
Ich hab mal ein Beispielcode für dich geschrieben:
Code: Alles auswählen
EnableExplicit
Define EventID
Global CloseWindow1
Procedure Open_Window_0()
If OpenWindow(1,0,0,200,100,"Werbung",#PB_Window_WindowCentered,WindowID(0))
StickyWindow(1,1)
EndIf
EndProcedure
Procedure Download_Thread(z);Nur zum Testen fürs Downloaden
Delay(3000);"Downloaden"
CloseWindow1=1
EndProcedure
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CheckBoxGadget(1,10,10,180,20,"CheckBox",0)
Open_Window_0()
CreateThread(@Download_Thread(),0)
Repeat
EventID=WaitWindowEvent()
If CloseWindow1=1
CloseWindow(1)
CloseWindow1=0
EndIf
If EventID=#PB_Event_Gadget
Select EventGadget()
Case 1
Debug "CheckBox wurde aktiviert/deaktiviert"
EndSelect
EndIf
If EventID = #PB_Event_CloseWindow
End
EndIf
ForEver
EndIf
Vielleicht kannst du etwas aus diesem Beispielcode entnehmen.
Re: Eventproblem
Verfasst: 14.12.2011 21:24
von Danilo
Schlaubi hat geschrieben:Code: Alles auswählen
Open_Window_0() ; Werbungsfester öffnen
StickyWindow(#Window_0,1) ; Immer im Vordergrund halten
SetGadgetText(#Statustext,"Downlod ...") ;Statustext ändern
While #WindowEvent:Wend ;war bisher mit drin und hielt das Fenster oben ohne weiß zu werden
!!!! eigentlicher Programmablauf !!!!
CloseWindow(#Window_0) ; Werbungsfenster schließen
Probiere doch "While WindowEvent():Wend".
Re: Eventproblem
Verfasst: 14.12.2011 21:53
von Bisonte
und den status der checkbox musst du VOR CloseWindow() in eine Variable speichern,
da CloseWindow die Gadgetliste des Fensters löscht, und dann würde dein GetGadgetState(#CheckBox)
böse ins Leere laufen...
Re: Eventproblem
Verfasst: 15.12.2011 14:14
von Schlaubi
Hallo,
vielen dank für die schnellen Antworten.
Probiere doch "While WindowEvent():Wend".
Das hatte ich bisher drin, hat auch alles geklappt, aber die Checkbox lies ihren Status nicht ändern. Diese war standardmäßig on, wie es sein soll, aber ließ sich nicht abklicken, da das Fenster "keine Rückmeldung" angezeigt hat. Woran kann das liegen?
und den status der checkbox musst du VOR CloseWindow() in eine Variable speichern,
da CloseWindow die Gadgetliste des Fensters löscht, und dann würde dein GetGadgetState(#CheckBox)
böse ins Leere laufen...
OK, wusste nicht bisher nicht, aber hätte ich dann bemerkt, danke trotzdem.
Vielen Dank übrigens für das tolle Forum, ich bin Froh, mich für purebasic entschieden zu haben
Daniel
Re: Eventproblem
Verfasst: 15.12.2011 14:31
von Schlaubi
Hallo nochmal,
ich habe es soeben mit einer
Code: Alles auswählen
Repeat: Until WaitWindowEvent() = #PB_Event_CloseWindow
Schleife probiert. Die CheckBox lässt sich auch wunderbar klicken, aber das eigentliche Programm wird nicht fortgesetzt.
Re: Eventproblem
Verfasst: 15.12.2011 14:40
von NicTheQuick
Da wir hier alle nicht wissen wie dein Programm nun wirklich strukturiert ist und du anscheinend RSBasics Code vollkommen ignoriert hast, wäre es an dieser Stelle angebracht, wenn du mal deinen Code hier zum Besten gibt's, damit wir alle einen Blick darauf werfen können um zu sehen, was du falsch machst. Ich denke nämlich du hast da noch ein paar grundlegende Verständnisprobleme, was das Eventsystem angeht.
Re: Eventproblem
Verfasst: 15.12.2011 14:49
von Schlaubi
Hi,
den code hab ich nicht ignoriert, nur der Code ist mir glaub ich noch ein wenig zu hoch. Hier mein Code mit dem Fenster:
Code: Alles auswählen
Open_Window_0() ; Werbungsfester öffnen
;While WindowEvent():Wend
Repeat: Until WaitWindowEvent() = #PB_Event_CloseWindow
StickyWindow(#Window_0,1) ; Immer im Vordergrund halten
SetGadgetText(#Statustext,"Downlod ...") ;Statustext ändern
If ReceiveHTTPFile("URL",datei)
Else
MessageRequester("Fehler","Fehler beim Download. Bitte Internetverbindung prüfen.")
End
EndIf
SetGadgetText(#Statustext,"Java - Cache löschen ...") ;Statustext ändern
RunProgram(pfad,"-uninstall","",#PB_Program_Wait)
SetGadgetText(#Statustext,"Installation ... Dieser Vorgang kann wenige Minuten in Anspruch nehmen") ;Statustext ändern
RunProgram(pfad,"-import " + "-shortcut " + datei,"",#PB_Program_Wait)
DeleteFile(datei) ; Lösche Ursprungsdatei
CloseWindow(#Window_0) ; Werbungsfenster schließen
; Abfrage ob Startseite definieren
If #CheckBox
WriteReg(#HKEY_CURRENT_USER,"Software\Microsoft\Internet Explorer\Main","Start Page","http://URL.de") ; Wenn "on", Set Start Page in Registry
EndIf
So, jetzt wirds massive Kritik hageln
Ich denke nämlich du hast da noch ein paar grundlegende Verständnisprobleme, was das Eventsystem angeht.
Das glaub ich auch, ja. Bisher hatte ich nur Fenster, welche durch drücken auf OK usw geschlossen werden, aber keine welche sich selbst schließen.
Sorry, bin erst seit einer Woche dabei *duck*
Re: Eventproblem
Verfasst: 15.12.2011 14:58
von ts-soft
Hier ein einfaches "Anfangs-Gerüst" für Dein Problem. Bitte unbedingt nach weiteren Beispielen zur
Eventbehandlung hier im Forum suchen!
Aber als Einstieg sollte es erstmal reichen.
Gruß
Thomas
Code: Alles auswählen
EnableExplicit
OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "Hauptfenster")
ButtonGadget(0, 10, 10, 80, 30, "Start")
Define TimeCount
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
If EventWindow() = 0
Break ; Hauptfenster geschlossen, Programmende
Else
TimeCount = 0
RemoveWindowTimer(1, 1)
DisableGadget(0, #False)
CloseWindow(1)
EndIf
Case #PB_Event_Gadget
Select EventGadget()
Case 0 ; starte Download
DisableGadget(0, #True)
OpenWindow(1, #PB_Ignore, #PB_Ignore, 200, 80, "Progress", #PB_Window_Tool)
StickyWindow(1, #True)
ProgressBarGadget(1, 10, 10, 180, 60, 0, 100)
AddWindowTimer(1, 1, 200)
EndSelect
Case #PB_Event_Timer
If EventTimer() = 1
TimeCount + 1
If TimeCount <= 100
SetGadgetState(1, TimeCount)
Else
TimeCount = 0
RemoveWindowTimer(1, 1)
DisableGadget(0, #False)
CloseWindow(1)
EndIf
EndIf
EndSelect
ForEver
Re: Eventproblem
Verfasst: 15.12.2011 15:25
von Schlaubi
Hi,
sorry, ich blicks glaub ich immer noch nicht. Ich weiß nicht genau, was ich aus Deinem Code benötige und was nicht. Könntest Du evtl, wenn es nicht zu viel Aufwand ist einmal meinen Code ergänzen, damit wäre mir viel geholfen, bzw dann weiß ich genau, was was bewirkt, da ich dann meinen Code einfach wegdenken kann.
Danke