Seite 2 von 3
Verfasst: 04.05.2009 17:16
von edel
@KG
Deine Variante funktioniert aber nur dann, wenn nichts zu tun ist, was nicht wirklich optimal ist.
Verfasst: 04.05.2009 17:18
von Kaeru Gaman
oh nee...
Code: Alles auswählen
SetGadgetText(20,"It will take a moment to do the analysis, please wait.")
UpdateDrives(0)
SetGadgetText(20,"Drive analysis completed.")
den ersten Text wirst du niemals sehen, weil das event erst verarbeitet werden muss um den text anzuzeigen.
@edel
klar, die Eventschleife muss durchlaufen, aber um eine WM_TIMER zu verarbeiten muss sie das doch auch....?
klar ist es besser, direkt ein Timer-Event erzeugen zu lassen,
anstatt bei jedem TimeOut zu checken, ob schon wieder ne halbe sekunde rum ist...
wie gesagt, schade dass das nicht nativ drin ist.
gibt doch noch mehr Windows-Spezifisches...
... außerdem haben Linux und OSX doch vielleicht auch timer...
Verfasst: 04.05.2009 17:30
von Zerosurf
also ist diese problem eigentlich nicht ideal gelöst, oder?
Verfasst: 04.05.2009 17:45
von Kaeru Gaman
Zerosurf hat geschrieben:also
Bezug?
Verfasst: 04.05.2009 17:48
von edel
Kaeru Gaman hat geschrieben:oh nee...
Code: Alles auswählen
SetGadgetText(20,"It will take a moment to do the analysis, please wait.")
UpdateDrives(0)
SetGadgetText(20,"Drive analysis completed.")
den ersten Text wirst du niemals sehen, weil das event erst verarbeitet werden muss um den text anzuzeigen.
Versteh ich jetzt nicht so ganz, warum sollte man das nicht sehen koennen?
Timer gibt es wohl ueberall, koennte man ja mal eine Include basteln, die plattform unabhaengig ist.
Verfasst: 04.05.2009 17:49
von Zerosurf
Versteh ich jetzt nicht so ganz, warum sollte man das nicht sehen koennen?
genau das meinte ich eigentlich auch
Verfasst: 04.05.2009 18:40
von Kaeru Gaman
Zerosurf hat geschrieben:Versteh ich jetzt nicht so ganz, warum sollte man das nicht sehen koennen?
genau das meinte ich eigentlich auch
der Text "It will take a moment to do the analysis, please wait." wird nicht zu sehen sein,
weil vor dem nächsten WaitWindowEvent() der Text nochmal auf "Drive analysis completed." geändert wird.
generell ist von so einer Vorgehensweise abzuraten.
Verfasst: 04.05.2009 19:27
von edel
Verstehe ich immer noch nicht, es funktioniert doch
Code: Alles auswählen
Procedure main()
Protected window
Protected event,i
window = OpenWindow(#PB_Any,#PB_Ignore,#PB_Ignore,640,480,"Test",#WS_OVERLAPPEDWINDOW)
If window
ButtonGadget(0,0,0,100,23,"click")
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
If EventGadget() = 0
SetGadgetText(0,"Bitte warten ...")
While i < 10000000
i +1
Wend
i = 0
SetGadgetText(0,"click")
EndIf
EndIf
If event = #PB_Event_CloseWindow
Break
EndIf
ForEver
EndIf
EndProcedure:End main()
Verfasst: 04.05.2009 19:39
von Kaeru Gaman
das ist ein bedeutungsloser zufall.
man kann sich nicht mal bei dem Unterschied von mit oder ohne XP-Skin-Unterstützung sicher sein,
welche und wieviel Events abgesetzt werden wenn man irgendwelche Inhalte aktualisiert.
also, egal welchen Inhalt von welchen Gadgets man verändert,
man sollte immer nachdem eine Änderung durchgeführt wurde die events verarbeiten.
in diesem falle kann man in dem einen branch Gadget 10 verstecken, den ersten text ändern und die Subroutine starten...
dann sollte man aber in die normale Eventverarbeitung zurückkehren.
bei Beeindigung der Subroutine kann man dann ein Event feuern,
auf das die Hauptschleife mit der zweiten Textänderung und anzeigen von Gadget 10 reagiert.
alles andere ist fishikram.
mich wundert, dass du, wenn du vorher drüber moserst dass ein timeout schlechter ist als ein timer,
eine derart unsaubere arbeitsweise nicht ebenfalls kritisierst.
Verfasst: 04.05.2009 19:49
von edel
Ich wuerde es natuerlich anders machen, aber das liegt nicht an dem setzen
des Textes, sondern an dem Blockieren des Fensters, in diesem Fall bei der
Updatefunktion. Und das man erstmal die Events nach dem setzen des
Textes verarbeiten soll, ist quatsch. Das wuerde ja in einem reinen Krampf
enden.