AGB  ·  Datenschutz  ·  Impressum  







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

OnMouseOut-Event

Ein Thema von Hirnsausen · begonnen am 18. Jan 2007 · letzter Beitrag vom 20. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Hirnsausen
Hirnsausen

Registriert seit: 12. Mär 2006
Ort: 18°00'33.64" N, 76°46'50.73" W, elev 344 ft
64 Beiträge
 
Delphi 7 Personal
 
#1

OnMouseOut-Event

  Alt 18. Jan 2007, 18:26
Leider gibt es kein OnMouseOut-Event bei der Form, welches ich mit dem OnMouseOver-Event verknüpfen kann.

Meine Zielsetzung ist es, ein Programmfenster zu haben, welches bemerkt, wann die Mouse außerhalb des Fensters ist, und wann sie wieder darüber (über einer der Komponenten) ist. Ich will ein Fenster haben, was bei MousOut fast ganz transparent ist, aber bei MouseOver wieder sichtbar wird.

Weiß jemand, wie ich diese Events erzeugen kann?
Vielen Dank für Eure Zeit, Absicht, Mühe und Ideen.

Sven
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#2

Re: OnMouseOut-Event

  Alt 18. Jan 2007, 18:32
Das müsstest du über einen hook realisieren.

Gruß
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Benutzerbild von Hirnsausen
Hirnsausen

Registriert seit: 12. Mär 2006
Ort: 18°00'33.64" N, 76°46'50.73" W, elev 344 ft
64 Beiträge
 
Delphi 7 Personal
 
#3

Re: OnMouseOut-Event

  Alt 18. Jan 2007, 18:36
Hallo Knogge,

was ist ein Hook? Und wie erstelle und nutze ich so einen Hook?
Vielen Dank für Eure Zeit, Absicht, Mühe und Ideen.

Sven
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#4

Re: OnMouseOut-Event

  Alt 18. Jan 2007, 18:47
Dieser Hook wird ausgelöst, wenn die Maus bewegt wird:

Delphi-Quellcode:
var
  Form1: TForm1;
  aHook : Cardinal;
  FHookStarted : Boolean;

[...]

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  Handled := False;
  if (Msg.message = WM_CANCELJOURNAL) and FHookStarted then
    aHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, 0, 0);
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if FHookStarted then
    UnhookWindowsHookEx(aHook);
end;

function JournalProc(Code, wParam: Integer; var EventStrut: TEventMsg; Sender: TObject): Integer; stdcall;
var
  aPoint : TPoint;
begin
 Result := CallNextHookEx(aHook, Code, wParam, Longint(@EventStrut));
 if Code < 0 then Exit;
 if Code = HC_SYSMODALON then Exit;
 if Code = HC_ACTION then
  begin
   if (EventStrut.message = WM_MOUSEMOVE) then
   begin
     GetCursorPos(aPoint);
     Form1.Label1.Caption := IntToStr(aPoint.x) + ' ' + IntToStr(aPoint.y)
   end;
  end;
end;
so wird der hook gestartet:
Delphi-Quellcode:
hook starten

if (FHookStarted = false) then begin
  aHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, hInstance, 0);
  FHookStarted := True;
end;
Du musst jetzt nur noch prüfen, ob sich sich in dem bereich deiner Form befindet oder nicht.

Gruß

[Edit]Sorry, hab ein Stückchen Code vergessen[/Edit]
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: OnMouseOut-Event

  Alt 18. Jan 2007, 18:50
Hier ist ein Link mit Tutor und Source in Deutsch.assarbad Ein Hook (Haken) wird normalerweise in einer Dll ausgelagert.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: OnMouseOut-Event

  Alt 18. Jan 2007, 19:03
Hallo,

Du kannst Dich auch mit MSDN-Library durchsuchenTrackMouseEvent von Windows benachrichtigen lassen.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#7

Re: OnMouseOut-Event

  Alt 18. Jan 2007, 19:17
'n Abend!

Zitat von bitsetter:
Ein Hook (Haken) wird normalerweise in einer Dll ausgelagert.
Nur globale Haken, lokale Hooks können auch in der Exe sein


@MrKnogge: Hier wäre ein Mouse-Hook (Flag WH_MOUSE) angebracht, erspart auch das GetCursorPos

Grüßle!

Edit: Mal auf diesen Thread aufmerksam mache: Klick
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Benutzerbild von Hirnsausen
Hirnsausen

Registriert seit: 12. Mär 2006
Ort: 18°00'33.64" N, 76°46'50.73" W, elev 344 ft
64 Beiträge
 
Delphi 7 Personal
 
#8

Re: OnMouseOut-Event

  Alt 20. Jan 2007, 13:20
Hallo, danke für Eure Hilfen.

Ich habe den Code von MrKnogge verwendet. Hier mein gegenwärtiges Problem:

Delphi-Quellcode:
procedure TAlpha.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
 Handled:=False;
 if (Msg.message=WM_CANCELJOURNAL) and FHookStarted then aHook:=SetWindowsHookEx(WH_JOURNALRECORD,@JournalProc,0,0);
end;
Beim Kompilieren gibt es die folgenden Fehler: VARIABLE REQUIRED.

Dieser Fehler taucht in der mit IF beginnenden Zeile auf.

Wenn es okay mit Euch ist, kann ich den gesamten Code mal in eine ZIP order RAR packen und Euch zur Verfügung stellen.

Meine Absicht ist, den TimerDown auszulösen, sobald die Mouse außerhalb des Fensters ist, und den Timer Up auszulösen, sobald die Mouse über dem Fenser ist.
Angehängte Dateien
Dateityp: rar complex_reactions_manager_104.rar (1,81 MB, 4x aufgerufen)
Vielen Dank für Eure Zeit, Absicht, Mühe und Ideen.

Sven
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#9

Re: OnMouseOut-Event

  Alt 20. Jan 2007, 13:47
Nimm für die ApplicationEvents mal die gleichnamige Komponente unter "Zusätzliches".

Gruß

[Add]
Aber um auf den eigentlichen Fehler zu kommen, da bin ich noch auf der Suche. Ich habe bei deinem Projekt das gleiche Problem, aber sehe keinen Unterschied zu meinem Code.
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: OnMouseOut-Event

  Alt 20. Jan 2007, 14:00
Versuche es mal hiermit:
Delphi-Quellcode:
function JournalProc(Code, wParam: Integer; var EventStrut: TEventMsg; Sender: TObject): Integer; stdcall;
var
 aPoint: TPoint;
begin
 Result:=CallNextHookEx(aHook, Code, wParam, Longint(@EventStrut));
 if Code<0 then Exit;
 if Code=HC_SYSMODALON then Exit;
 if Code=HC_ACTION then
 begin
  if (EventStrut.message=WM_MOUSEMOVE) then
  begin
   GetCursorPos(aPoint);
   Alpha.Label1.Caption:=IntToStr(aPoint.x)+' '+IntToStr(aPoint.y)
  end;
 end;
end;

procedure TAlpha.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
 Handled:=False;
 if (Msg.message=WM_CANCELJOURNAL) and FHookStarted then aHook:=SetWindowsHookEx(WH_JOURNALRECORD,@JournalProc,0,0);
end;
Die Function JournalProc muss wohl global sein, sie war bei dir unter der Klasse TAlpha eingetragen.
  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 04:58 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