AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Testen, ob Maus Form verlassen hat

Ein Thema von Joe_the_Junkie · begonnen am 25. Apr 2006 · letzter Beitrag vom 26. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
Joe_the_Junkie
(Gast)

n/a Beiträge
 
#1

Testen, ob Maus Form verlassen hat

  Alt 25. Apr 2006, 15:38
Hallo,

Ich hab mal eben ne Frage. Wie kann ich testen, ob die Maus die Form verlassen hat?
Vielen Dank im Vorraus.
  Mit Zitat antworten Zitat
Benutzerbild von Catbytes
Catbytes

Registriert seit: 7. Sep 2002
Ort: Heckendalheim
353 Beiträge
 
Delphi XE5 Enterprise
 
#2

Re: Testen, ob Maus Form verlassen hat

  Alt 25. Apr 2006, 16:03
Hallo,

in einem etwas älteren Projekt habe ich das mal so gelöst:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := false;
  if (Mouse.CursorPos.X > (Form1.Left + Form1.Width)) or (Mouse.CursorPos.X <
    Form1.Left) or
    (Mouse.CursorPos.Y > (Form1.Top + Form1.Height)) or (Mouse.CursorPos.Y <
      Form1.Top) then
    MessageDlg('Erwischt', mtInformation, [mbOk], 0);
  Timer1.Enabled := true;
end;
Also per TTimer. Den Interval hatte ich auf 50 stehen.

Geht aber bestimmt eleganter per Mouse-Hook.
Catbytes
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#3

Re: Testen, ob Maus Form verlassen hat

  Alt 25. Apr 2006, 16:04
Hallo,

probiere es einmal mit

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure WndProc(var Msg: TMessage); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WndProc(var Msg: TMessage);
begin
   inherited;
   if Msg.Msg = CM_MOUSELEAVE then begin
      //DO SOMETHING
   end;
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: Testen, ob Maus Form verlassen hat

  Alt 25. Apr 2006, 16:16
Zitat von s-off:
probiere es einmal mit ...
oder mit:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
    procedure MouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure MouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.MouseEnter(var Msg: TMessage);
begin
  Color := clGreen;
end;

procedure TForm1.MouseLeave(var Msg: TMessage);
begin
  Color := clRed;
end;

end.
Anmerkung: CM_MOUSELEAVE wird nicht immer erzeugt, wenn Du sehr schnell mit der Maus aus dem Fenster gehst.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#5

Re: Testen, ob Maus Form verlassen hat

  Alt 25. Apr 2006, 16:27
Zitat von MaBuSE:
Anmerkung: CM_MOUSELEAVE wird nicht immer erzeugt, wenn Du sehr schnell mit der Maus aus dem Fenster gehst.
ok, akzeptiert
  Mit Zitat antworten Zitat
HuxXx
(Gast)

n/a Beiträge
 
#6

Re: Testen, ob Maus Form verlassen hat

  Alt 25. Apr 2006, 17:15
Zitat von Catbytes:
Hallo,

in einem etwas älteren Projekt habe ich das mal so gelöst:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := false;
  if (Mouse.CursorPos.X > (Form1.Left + Form1.Width)) or (Mouse.CursorPos.X <
    Form1.Left) or
    (Mouse.CursorPos.Y > (Form1.Top + Form1.Height)) or (Mouse.CursorPos.Y <
      Form1.Top) then
    MessageDlg('Erwischt', mtInformation, [mbOk], 0);
  Timer1.Enabled := true;
end;
Also per TTimer. Den Interval hatte ich auf 50 stehen.

Geht aber bestimmt eleganter per Mouse-Hook.
Das wird nicht funken, wenn man die Maus schnell aus der Form bewegt...
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Testen, ob Maus Form verlassen hat

  Alt 25. Apr 2006, 18:45
Delphi-Quellcode:
function MouseIn(rect: TRect): Boolean; overload;
function MouseIn(Ctrl: TControl): Boolean;

function MouseIn(rect: TRect): Boolean;
begin
  Result := (Mouse.CursorPos.X >= rect.left) and (Mouse.CursorPos.X <= rect.right ) and
            (Mouse.CursorPos.Y >= rect.top) and (Mouse.CursorPos.Y <= rect.bottom );
end;

function MouseIn(Ctrl: TControl): Boolean;
begin
Result := MouseIn(rect(Ctrl.ClientToScreen(0),Ctrl.ClientToScreen(0),Ctrl.ClientToScreen(Ctrl.Width),Ctrl.ClientToScreen(Ctrl.Height)));
end;
Sollte das nicht reichen? (ungetestet)
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Catbytes
Catbytes

Registriert seit: 7. Sep 2002
Ort: Heckendalheim
353 Beiträge
 
Delphi XE5 Enterprise
 
#8

Re: Testen, ob Maus Form verlassen hat

  Alt 26. Apr 2006, 08:17
Zitat von HuxXx:
Zitat von Catbytes:
Hallo,

in einem etwas älteren Projekt habe ich das mal so gelöst:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := false;
  if (Mouse.CursorPos.X > (Form1.Left + Form1.Width)) or (Mouse.CursorPos.X <
    Form1.Left) or
    (Mouse.CursorPos.Y > (Form1.Top + Form1.Height)) or (Mouse.CursorPos.Y <
      Form1.Top) then
    MessageDlg('Erwischt', mtInformation, [mbOk], 0);
  Timer1.Enabled := true;
end;
Also per TTimer. Den Interval hatte ich auf 50 stehen.

Geht aber bestimmt eleganter per Mouse-Hook.
Das wird nicht funken, wenn man die Maus schnell aus der Form bewegt...
Warum?
Catbytes
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Testen, ob Maus Form verlassen hat

  Alt 26. Apr 2006, 08:24
Zitat von Catbytes:
... Warum?
Hai Catbytes,

wenn die Maus genau dann über die Form "rennt" während das Timerergniss nicht arbeitet bzw. in dem moment wo die IF-Abfrage läuft würde nicht erkannt werden das die Maus über der Form gewesen ist.
Stephan B.
  Mit Zitat antworten Zitat
Benutzerbild von Catbytes
Catbytes

Registriert seit: 7. Sep 2002
Ort: Heckendalheim
353 Beiträge
 
Delphi XE5 Enterprise
 
#10

Re: Testen, ob Maus Form verlassen hat

  Alt 26. Apr 2006, 08:31
Zitat von Sharky:
Zitat von Catbytes:
... Warum?
Hai Catbytes,

wenn die Maus genau dann über die Form "rennt" während das Timerergniss nicht arbeitet bzw. in dem moment wo die IF-Abfrage läuft würde nicht erkannt werden das die Maus über der Form gewesen ist.
Bei 50ms? Den User bzw. die Maus möchte ich sehen, der das schafft

Immerhin: Zumindest wird bei mir (falls es wirklich einer schaffen sollte) nach spätestens 50ms das Überschreiten der Grenzen erkannt. Wenn das mit "zu schnell" bei CM_MOUSELEAVE passiert, wird IMHO gar nix ausgelöst...

Gibt es für dieses Problem wirklich keine saubere und 100% Lösung?
Catbytes
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:05 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