[MaxGUI] Absolute Mausposition - Tabber Problem
Übersicht

![]() |
NoaBetreff: [MaxGUI] Absolute Mausposition - Tabber Problem |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo allerseits ^^,
ich hätte da gerne mal ein Problem und zwar folgendes: Habe per MaxGUI ein Fenster erstellt. -> Dieses Fenster enthält einen Tabber. -> Dieser Tabber wiederum enthält ein Panel. Wenn nun ein EVENT_MOUSEDOWN und ein darauf folgendes EVENT_MOUSEMOVE auf diesem Panel erzeugt wird, brauche ich davon die x, y Koordinaten, relativ zum Fenster und nicht zum Panel. Ich habe das bisher so versucht zu lösen, dass ich vom TGadget des Panels aus über GadgetGroup() nach oben aufgestiegen bin bis zum Fenster und jeweils die GadgetX() bzw. GadgetY() addiert habe. Bei einem normalen Panel funktioniert das, nun liegt leider das Panel in einem Tabber und der hat zwar eine Position aber das ist leider nicht die Position des Inhaltsbereichs des Tabbers, sondern die Position der Tab-Leiste. Da das darunterliegende Panel sich aber am Inhaltsbereich ausrichtet, fehlen mir bei der Positionsberechnung die Pixel zwischen Tab-Leiste und Tabber-Inhaltsbereich. Hat irgendjemand eine Idee für eine Lösung? Oder eine Möglichkeit wie ich sonst an die "absoluten" Werte des Mouse-Events komme? Im Voraus vielen Dank für eure Hilfe. |
||
klepto2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Unter Windows kannst du es so machen:
Code: [AUSKLAPPEN] Case EVENT_MOUSEMOVE Local P:Int[2] GetCursorPos_(P) Print P[0] + ";" + P[1] Wie es unter den anderen Betriebssystemen aussieht kann ich nicht sagen, da müssen die Mac und Linux Gurus ran ![]() |
||
Matrix Screensaver
Console Modul für BlitzMax KLPacker Modul für BlitzMax HomePage : http://www.brsoftware.de.vu |
![]() |
Noa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wunderbar, wenn ich davon die x, y des Hauptfensters abziehe funktioniert es unter Windows.
Dank dir klepto2 ^^ Jetz hoff ich natürlich, dass auch noch jemand was zu Linux / MacOS sagen kann. |
||
![]() |
Noa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nachtrag: Leider musste ich feststellen, dass die absolute Maus-Position nicht genügt, muss auch irgendwie die absolute Position des Gadgets errechnen können, mit dem oben genannten Problem.
Irgendwelche Ideen? Im Voraus danke ^^ |
||
klepto2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dank etwas mehr Zeit habe ich noch folgende Lösung:
Code: [AUSKLAPPEN] ' createbutton.bmx Import MaxGui.Drivers Strict Global window:TGadget = CreateWindow("MaxGUI Buttons",40,40,400,330,Null,WINDOW_TITLEBAR|WINDOW_CLIENTCOORDS) CreateButton("Std. Button",10,10,120,30,window,BUTTON_PUSH) CreateButton("OK Button",140,10,120,30,window,BUTTON_OK) CreateButton("Cancel Button",270,10,120,30,window,BUTTON_CANCEL) Global panel:TGadget[4] panel[0]=CreatePanel(10,50,380,60,window,PANEL_GROUP,"Checkbox") FillPanelWithButtons(panel[0], BUTTON_CHECKBOX, "Checkbox") panel[1]=CreatePanel(10,120,380,60,window,PANEL_GROUP,"Checkbox (with Push Button Style)") FillPanelWithButtons(panel[1], BUTTON_CHECKBOX|BUTTON_PUSH, "Toggle") panel[2]=CreatePanel(10,190,380,60,window,PANEL_GROUP,"Radio Buttons") FillPanelWithButtons(panel[2], BUTTON_RADIO, "Option ") panel[3]=CreatePanel(10,260,380,60,window,PANEL_GROUP,"Radio Buttons (with Push Button Style)") FillPanelWithButtons(panel[3], BUTTON_RADIO|BUTTON_PUSH, "Option") Repeat Select WaitEvent() Case EVENT_WINDOWCLOSE, EVENT_APPTERMINATE End Case EVENT_GADGETACTION Print "EVENT_GADGETACTION~n" + .. "GadgetText(): ~q" + GadgetText(TGadget(EventSource())) + "~q ~t " + .. "ButtonState(): " + ButtonState(TGadget(EventSource() ) ) Local p:Int[] = GadgetAbsolutePosition(TGadget(EventSource() ) ) Print "Abs Position: " + p[0] + ";" + p[1] p=RelativeToAbsolutePosition(TGadget(EventSource() ),20,20 ) Print "Abs(20,20) Position: " + p[0] + ";" + p[1] EndSelect Forever Function FillPanelWithButtons( pPanel:TGadget, pStyle%, pText$ = "Button" ) Local buttonwidth% = (pPanel.width-10)/3 For Local i% = 0 Until 3 CreateButton( pText + " " + (i+1), 5+(i*buttonwidth), 5, buttonwidth-10, 26, pPanel, pStyle ) Next EndFunction Function GadgetAbsolutePosition:Int[](gadget:TGadget) Local hwnd:Int = QueryGadget(gadget , QUERY_HWND) Local p:Int[] = [GadgetX(gadget) , GadgetY(gadget)] ClientToScreen(hwnd , p) Return p End Function Function RelativeToAbsolutePosition:Int[](gadget:TGadget,X:Int,Y:Int) Local hwnd:Int = QueryGadget(gadget , QUERY_HWND) Local p:Int[] = [X , Y] ClientToScreen(hwnd , p) Return p End Function Einfach mal die Buttons klicken und den Output anschauen. Auch mal das Fenster verschieben. |
||
Matrix Screensaver
Console Modul für BlitzMax KLPacker Modul für BlitzMax HomePage : http://www.brsoftware.de.vu |
![]() |
Noa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist genial. Danke vielmals ^^
Von dieser ClientToScreen() Funktion hab ich nirgens etwas gelesen. Aber da die scheinbar aus pub.win32 stammt wird das ganze wahrscheinlich nur unter Windows laufen, oder? Jedenfalls nochmals vielen Dank, nun kann ich endlich weiterarbeiten ^^ |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group