Seite 1 von 2
#WM_LBUTTONUP funktioniert nicht mehr mit PB 5.11
Verfasst: 03.04.2013 15:18
von mpz
Hallo Leute,
bis PB 5.10 hat der folgen Code mit #WM_LBUTTONUP noch funktioniert. Ab pb 5.11 wird aber kein Event mehr mit #WM_LBUTTONUP erzeugt. Kennt jemand den Grund bzw eine Lösung?
Gruß Michael
Code: Alles auswählen
OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
Repeat
Event = WindowEvent()
If Event = #PB_Event_CloseWindow ; An event was in the queue so process it
Break
Else
Delay(1) ; No event, let the others apps get some CPU time too !
EndIf
If event = #WM_LBUTTONDOWN
Debug "down"
EndIf
If event = #WM_LBUTTONUP
Debug "up"
EndIf
Until Event=#PB_Event_CloseWindow
__________________________________________________
Thread verschoben
Bugs>Allgemein
03.04.2013
RSBasic
Re: #WM_LBUTTONUP funktioniert nicht mehr mit PB 5.11
Verfasst: 03.04.2013 15:28
von STARGÅTE
Wie oft denn noch diese "Bug-Meldung"?
#WM_LBUTTONDOWN war nie ein PB-Event.
Das PB-Event heißt: #PB_Event_LeftClick
Re: #WM_LBUTTONUP funktioniert nicht mehr mit PB 5.11
Verfasst: 03.04.2013 16:55
von Lambda
Ja, dummer weise. Im Callback allerdings möglich:
Code: Alles auswählen
Procedure ButIWantIt_O_o(hWnd, msg, wParam, lParam)
Select msg
Case #WM_LBUTTONDOWN
MessageRequester("", "WM_LBUTTONDOWN", #MB_OK|#MB_ICONINFORMATION)
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
SetWindowCallback(@ButIWantIt_O_o())
Repeat
Event = WindowEvent()
If Event = #PB_Event_CloseWindow ; An event was in the queue so process it
Break
Else
Delay(1) ; No event, let the others apps get some CPU time too !
EndIf
Until Event=#PB_Event_CloseWindow
Re: #WM_LBUTTONUP funktioniert nicht mehr mit PB 5.11
Verfasst: 03.04.2013 17:00
von ts-soft
Aber besser ohne Delay im eventloop
Wenn erforderlich, besser ein Timeout nutzen, aber in diesem Beispiel auch unnötig:
Code: Alles auswählen
Procedure ButIWantIt_O_o(hWnd, msg, wParam, lParam)
Select msg
Case #WM_LBUTTONDOWN
MessageRequester("", "WM_LBUTTONDOWN", #MB_OK|#MB_ICONINFORMATION)
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
SetWindowCallback(@ButIWantIt_O_o())
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_CloseWindow ; An event was in the queue so process it
Break
EndIf
Until Event=#PB_Event_CloseWindow
Re: #WM_LBUTTONUP funktioniert nicht mehr mit PB 5.11
Verfasst: 03.04.2013 19:16
von mpz
Hi,
warum könnte es wohl eine Bug Meldung sein ?!? Vermutlich weil der Event #WM_LBUTTONDOWN nicht gemeint war der natürlich noch geht weil #WM_LBUTTONDOWN = #PB_Event_LeftClick ist. Es ging doch aber um den Event Maustaste hoch = #WM_LBUTTONUP der nicht mehr funktioniert. Wenn also ein Event zwischen zwei PB Versionen nicht mehr geht, ich aber einige Programme noch mit dem Event geschrieben habe, dann frage ich doch einfach mal hier nach
Die Lösung mit dem Callback funktioniert dann auch mit der Mousehoch, schade das der Befehl nicht mehr gehen soll und ich also jetzt mit Callbacks arbeiten muss. Auch wenns nicht gefällt ist für mich ein Bug...
Code: Alles auswählen
Procedure ButIWantIt_O_o(hWnd, msg, wParam, lParam)
Select msg
Case #WM_LBUTTONUP
MessageRequester("", "#WM_LBUTTONUP", #MB_OK|#MB_ICONINFORMATION)
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
SetWindowCallback(@ButIWantIt_O_o())
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_CloseWindow ; An event was in the queue so process it
Break
EndIf
Until Event=#PB_Event_CloseWindow
Gruß Michael
Re: #WM_LBUTTONUP funktioniert nicht mehr mit PB 5.11
Verfasst: 03.04.2013 19:53
von ts-soft
Hättest Du ein wenig gesucht, hätteste auch die Erklärung gefunden, die hier und im engl. Forum mehrmals vorhanden ist.
Im EventLoop von PB werden nur die PB-eigenen Events offiziell unterstützt, d.h., das wegfallen vereinzelter oder aller
API-Events, genauso wie das wegfallen von EventLParam() oder EventWParam() wären/sind keine Bugs.
Wenn Du sicherstellen möchtest, diese Events zu empfangen, solltest Du grundsätzlich ein Callback nutzen!
Diese Regelung ist nicht Neu, auch wenn Du zum ersten Male davon hörst.
Gruß
Thomas
Re: #WM_LBUTTONUP funktioniert nicht mehr mit PB 5.11
Verfasst: 03.04.2013 20:15
von mpz
Hallo,
ich kann der Argumentation schon folgen. Ich hatte aber nichts zu diesem Thema gefunden, daher mein Schreiben. Ich benutze das Event schon seit PB 3.8 glaube ich und erst bei PB 5.11 ist es weg. Warum er weg ist ist mir daher nicht wirklich ersichtlich und wäre sicher leicht änderbar. Aber ich weiß jetzt Bescheid und werde eine Lösung finden.
Gruß
Michael
Re: #WM_LBUTTONUP funktioniert nicht mehr mit PB 5.11
Verfasst: 03.04.2013 20:21
von Lambda
PB sollte eigentlich wesentlich mehr Ereignisse unterstützen. Habe selbst bereits einiges für Windows und Linux portiert (MacOS folgt noch). Viele Nachrichten oder Befehle sind nahezu identisch, verstehe nicht wieso gerade so wichtige wie #PB_EventType_Size fehlen.

Re: #WM_LBUTTONUP funktioniert nicht mehr mit PB 5.11
Verfasst: 03.04.2013 20:28
von ts-soft
Es ist seit 5.11 weg, weil seit 5.11
#PB_Event_LeftClick unterstützt wird
Wenn PB also intern das Event nutzt, fällt es auch schon mal weg, im normalem EventLoop.
Nur im normalem Callback von Windows sollte alles ankommen, weil PB erst dahinter, die für
sich benötigten Events abzweigt. Ohne diese Vorgehen hätten wir z.B. niemals die ganzen
Erweiterungen bezüglich Gadgets (Farben usw.) erfahren. In PB3.xx war das noch nicht der
Fall, da waren die Möglichkeiten ja auch wesentlich geringer, da wurden noch keine Gadgets
von PB gesubclassed usw.
Erweiterungen bringen auch Einschränkungen, bzw. sehe ich das gar nicht als Einschränkung,
die undokumentierte Nutzung der Events im Eventloop von PB ist natürlich mit einem Risiko
verbunden, so wie jede Nutzung undokumentierter oder veraltetet Funktionen (goto usw.)
Re: #WM_LBUTTONUP funktioniert nicht mehr mit PB 5.11
Verfasst: 04.04.2013 09:38
von Josh
ts-soft hat geschrieben:...so wie jede Nutzung undokumentierter oder veraltetet Funktionen (goto usw.)
Auch wenn die Verwendung von Goto in den meisten Fällen nicht sinnvoll ist, ist es nicht veraltet und undokumentiert:
http://www.purebasic.com/german/documen ... thers.html