Seite 2 von 2
Verfasst: 29.08.2007 22:49
von mk-soft
Hatten wir schon mal irgendwo.
Code: Alles auswählen
*hWin.long = OpenWindow(#PB_Any,#PB_Ignore,#PB_Ignore,640,480,"",#WS_SYSMENU|#WS_SIZEBOX)
CreateGadgetList(*hWin\l)
ButtonGadget(0,10,10,100,100,"Blub1")
ButtonGadget(1,10,110,100,100,"Blub2")
CreateStatusBar(0,*hWin\l)
AddStatusBarField(90)
Repeat
uMsg = WaitWindowEvent()
If #WM_MOUSEMOVE = uMsg
x = DesktopMouseX()
y = DesktopMouseY()
Select WindowFromPoint_(x,y)
Case GadgetID(0)
StatusBarText(0, 0, "Blub1")
Case GadgetID(1)
StatusBarText(0, 0, "Blub2")
Default
StatusBarText(0, 0, Str(x) + ":" + Str(y))
EndSelect
EndIf
Until uMsg = #WM_CLOSE
FF

Verfasst: 29.08.2007 23:08
von Fluid Byte
Seit wann ist WindowFromPoint_(x,y) Crossplatform?
Verfasst: 29.08.2007 23:19
von mk-soft
Noch nie,
War auch die frage welche Events auch noch gibt. Und die erweiterten Events sind halt Platformabhängig.
@Sebastian
win32.hlp noch aus den Internet laden und in das Help Verzeichnis von PB kopieren.
Verfasst: 30.08.2007 09:24
von Shardik
Sebastian hat geschrieben:
Wo finde ich eine Liste mit allen Events, die zurückgeliefert werden können?
Eine Liste mit allen Events wird wohl kaum existieren, aber ein Beispielprogramm, das 184 "WM_"-Ereignisse erkennt und ausgibt, hat GedB im englischen Forum veröffentlicht:
http://www.purebasic.fr/english/viewtopic.php?t=12352
Der Beispiel-Code ist noch für PB 3.9x. Für PB 4 sollte "DefType.s Result" in "Protected Result.S" abgeändert werden und in der OpenWindow()-Anweisung der Fenstertitel "Split Picture" vor die Flags-Angabe "#PB_Window_ScreenCentered..." gesetzt werden...
Verfasst: 03.09.2007 10:31
von Sebastian
Okay. Das habe ich soweit verstanden. Vielen Dank! Das stellt mich jedoch vor ein Problem, welches ich aktuell zu lösen versuche:
Ich arbeite mit mehreren Fenstern, unter anderem mit einem WindowedScreen. Es ist nun für mich wichtig zu wissen, ob die Maus innerhalb des WindowedScreen ist (das ist über WindowMouseX()>-1 kein Problem) und, ob geklickt wurde (und da ist das Problem.) Ich habe es mit ExamineMouse() und MouseButton() versucht, diese Befehle werden in der Fensterumgebung nicht korrekt verarbeitet. Ich muss also den Mausklick über WaitWindowEvent() abgreifen. Unter WinXP ist das die Nr. 513 und die Nr. 514 ermittelt, ob die Maus wieder losgelassen wurde. Mit dieser Methode funktioniert es wunderbar. Die Furcht ist nun natürlich, dass es unter Win 9x/ME/Vista nicht laufen wird, weil hier vielleicht eine andere Nummer ausgegeben wird. Wie gehe ich nun damit um?
Verfasst: 03.09.2007 10:49
von NicTheQuick
Es gibt folgende Konstanten dafür:
Code: Alles auswählen
#WM_LBUTTONDOWN
#WM_LBUTTONUP
#WM_LBUTTONDBLCLK
#WM_RBUTTONDOWN
#WM_RBUTTONUP
#WM_RBUTTONDBLCLK
Allerdings haben die ihre Werte noch nie geändert. Sonst müsste man ja
wirklich für jede Windows-Version andere Werte benutzen und neu
kompilieren, und Konstanten ändern ihre Werte ja bekanntlich nicht.
Verfasst: 03.09.2007 10:55
von Sebastian
SUPER! Jetzt kann ich beruhigt weiterarbeiten. Klasse. Vielen Dank!