Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   [Andorra2D] Maus kann aus dem Sichtbaren Bereich bewegt werd (https://www.delphipraxis.net/132186-%5Bandorra2d%5D-maus-kann-aus-dem-sichtbaren-bereich-bewegt-werd.html)

Eljey 7. Apr 2009 20:33


[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;

igel457 9. Apr 2009 12:12

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.

Eljey 9. Apr 2009 14:31

Re: [Andorra2D] Maus kann aus dem Sichtbaren Bereich bewegt
 
ok, danke ich werd versuchen

Eljey 30. Mai 2009 21:29

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?

igel457 30. Mai 2009 22:23

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.

Eljey 3. Jun 2009 19:08

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:
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;
Da mein Programm auch unter Linux laufen soll, kommt für mich nur GLFW in Frage.
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.

igel457 3. Jun 2009 20:06

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;

Eljey 3. Jun 2009 20:19

Re: [Andorra2D] Maus kann aus dem Sichtbaren Bereich bewegt
 
Ok, danke... War ja fast richtig...


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz