![]() |
[Andorra2D] Maus kann aus dem Sichtbaren Bereich bewegt werd
Hallo! Ich bins wieder und leider wieder mit einem Problem.
Ich benutze das Andorra WindowFramework mit AdGLFWWindow. In einer Auflösung von 1024x768 und eine Gui die ich auf die selbe auflösung strecke. Problem: Die Maus kann aus dem sichtbaren Bereich heraus bewegt werden so das man sie nur schwer wieder hinein bekommt.
Delphi-Quellcode:
AdDraw := TAdDraw.Create(nil);
AdDraw.DllName := 'AndorraOGL.dll'; //Function in the AdDLLExplorer unit screenwidth:=1024; screenheight:=768; AdDraw.Display.Width :=screenwidth; AdDraw.Display.Height :=screenheight; ... AdGUI:= TAdGUI.Create(AdDraw); //Erzeugen der Klasse AdGUI.Skin.LoadFromFile('sunna.axs'); //Laden des Skins AdGUI.Cursors.LoadFromFile('cursors.xml'); //Laden der Cursor IF Paramstr(1)='-go' then go(ParamStr(2)) else go('selektion'); AdConnector:= TAdGUIConnector.Create(AdGUI); //Erzeugen des GUI Connectors AdConnector.ConnectEventHandlers(AdDraw.Window); //Verknuepfen mit dem Elternfenstersystem AdDraw.Window.Events.OnKeyDown:=@KeyDown; gegend:=''; AdDraw.Run; |
Re: [Andorra2D] Maus kann aus dem Sichtbaren Bereich bewegt
Das ist ein mir bekanntes Problem mit GLFW. Eine mögliche Lösung ist den Mauszeiger selbst zu zeichnen und die Koordinaten einfach nicht über den Fensterrand hinaus gehen zu lassen. Dafür musst du entsprechen in OnMouseMove ein DeltaX und DeltaY berechnen.
EDIT: Leite eine Klasse vom Andorra 2D Mauszeiger/der Mauszeigerverwaltung ab und verwende diese. |
Re: [Andorra2D] Maus kann aus dem Sichtbaren Bereich bewegt
ok, danke ich werd versuchen
|
Re: [Andorra2D] Maus kann aus dem Sichtbaren Bereich bewegt
Ich kriegs einfach nciht hin, kannst du mir ein Stück Code geben den ich einbauen kann. Alles andere funktioniert, aber wenn die Maus dauernd raushuppt, sit das blöd. Also hast du oder jemand ein Stück code parat?
|
Re: [Andorra2D] Maus kann aus dem Sichtbaren Bereich bewegt
Ein Stückchen Code habe ich nicht, aber wenn du es wie oben beschrieben nicht hin bekommst, dann verwende doch das SDL oder VCL Windowframework - dort hast du dieses Problem erst gar nicht.
|
Re: [Andorra2D] Maus kann aus dem Sichtbaren Bereich bewegt
OK, ich hab eine wacklige Lösung gefunden, ich hab meine AdGLFWWindow.pas folgender maßen verändert:
Delphi-Quellcode:
Da mein Programm auch unter Linux laufen soll, kommt für mich nur GLFW in Frage.
procedure MousePosCallback(X, Y: Integer); stdcall;
var w,h:integer; begin //Store the current mouse position MouseX := X; MouseY := Y; //Changes Ilja Bauer - Fix folowing Problem: Mouse move outside the Window glfwGetWindowSize(w, h); IF MouseX>w Then MouseX:=w-1; IF MouseX<0 Then MouseX:=1; IF MouseY>h Then MouseY:=h-1; IF MouseY<0 Then MouseY:=1; //Changes End //Call the mouse move event if Assigned(WindowInstance.Events.OnMouseMove) then WindowInstance.Events.OnMouseMove(WindowInstance, GetShiftState, MouseX, MouseY); end; Ein Problem hat die Lösung noch: Es wird nur MouseX und MouseY verändert, X und Y gehen jedoch weiterhin ausßerhalb des Bereiches, so dass es Zu einem leichten kleben an dem Rand des Fensters gibt. Wenn jemand weiß, wie manns beheben kann, soll hier posten. |
Re: [Andorra2D] Maus kann aus dem Sichtbaren Bereich bewegt
Ich habe das implementiert, was ich oben gemeint habe - so geht es:
Delphi-Quellcode:
procedure MousePosCallback(X, Y: Integer); stdcall;
var deltax, deltay, w, h: Integer; begin deltax := X - LastX; deltay := Y - LastY; LastX := X; LastY := Y; MouseX := MouseX + deltax; MouseY := MouseY + deltay; glfwGetWindowSize(w, h); if MouseX > w then MouseX := w - 1; if MouseX < 0 then MouseX := 0; if MouseY > h then MouseY := h - 1; if MouseY < 0 then MouseY := 0; //Call the mouse move event if Assigned(WindowInstance.Events.OnMouseMove) then WindowInstance.Events.OnMouseMove(WindowInstance, GetShiftState, MouseX, MouseY); end; |
Re: [Andorra2D] Maus kann aus dem Sichtbaren Bereich bewegt
Ok, danke... War ja fast richtig...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz