Maus Position in einem Message Handler

Antworten
Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Maus Position in einem Message Handler

Beitrag von Heinrich Wolf »

Hallo,

ich hab ein SysTray Icon mit

Code: Alles auswählen

Shell_NotifyIcon(NIM_Add, @NotifyIconData);

erzeugt. Eigentlich funktioniert diese Code Zeile nicht. Ich übergebe stattdessen eine PNotifyIconDataA Variable. Nun möchte ich auf einen Mausklick in dieses Icon reagieren. Folgenden Code habe ich ähnlich zu Delphi 5 erstellt. Aber mit Lazarus krieg ich immer (0, 0). Wie kriege ich (x, y) mit Lazarus?

Code: Alles auswählen

public
    procedure            wmUser(var Msg : tMessage); message wm_User;
 
  procedure GetCursorPos(var p : tPoint);
    begin
      p.X := CursorX;
      p.Y := CursorY;
    end;
 
procedure TParamForm.wmUser;
  var     Point : tPoint;
  begin
    case Msg.lParam of
      wm_rButtonUp,
      wm_lButtonUp:
        begin
          Point.X := 0;
          GetCursorPos(Point);
          PopupMenu.Popup(Point.X, Point.Y);
        end;
    end;
  end;

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Maus Position in einem Message Handler

Beitrag von Scotty »

Warum so "kompliziert", warum nur Windows? Ich habe unter "Additional" das TTrayIcon mit allen zugehörigen Events, in LMessages sind Nachrichten als LM_* kodiert.

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Maus Position in einem Message Handler

Beitrag von MAC »

Frag ich mich auch.
Unter Additional befindet sich (glaub schon seit 0.9.26) ein TTrayIcon.
Vorteil unter anderem:
- Funktioniert auf mehreren Betriebssystemen .
- Einfache "OnMouseMove" oder "OnMouseDown" ... Fuinktionen
- und warscheinlich noch ne ecke mehr ;)

Code: Alles auswählen

Signatur := nil;

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Maus Position in einem Message Handler

Beitrag von Heinrich Wolf »

Warum?

Weil ich mit Delphi 5 angefangen hab. Da gibt's kein TTrayIcon. Ich kann's auch auf Delphi 4 compilieren. Bei Gelegenheit schau ich mir TTrayIcon an. Danke für diese Info! Aber ich wüsste trotzdem gerne, wie ich die Mauskoordinaten kriege.

Gruß
Heiner

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Maus Position in einem Message Handler

Beitrag von Scotty »

GetCursorPos() ist in der Unit LCLIntf definiert (Du überschreibst die Funktion zurzeit).
Bedenke vielleicht trotz deiner Delphi-Affinität OS unabhängige Funktionen zu erstellen. FPC ist gerade dadurch sehr mächtig, dass man Dinge auf verschiedenen OSen kompilieren kann. :mrgreen:

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Maus Position in einem Message Handler

Beitrag von Socke »

Scotty hat geschrieben:GetCursorPos() ist in der Unit LCLIntf definiert (Du überschreibst die Funktion zurzeit).

Alternativ könnte man sich auch des Objektes Forms.Screen(s) bedienen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Maus Position in einem Message Handler

Beitrag von theo »

Heinrich Wolf hat geschrieben:Aber ich wüsste trotzdem gerne, wie ich die Mauskoordinaten kriege.


Mouse.CursorPos.X
Mouse.CursorPos.Y

(unit Controls)

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Maus Position in einem Message Handler

Beitrag von Heinrich Wolf »

Scotty hat geschrieben:GetCursorPos() ist in der Unit LCLIntf definiert (Du überschreibst die Funktion zurzeit).
Bedenke vielleicht trotz deiner Delphi-Affinität OS unabhängige Funktionen zu erstellen. FPC ist gerade dadurch sehr mächtig, dass man Dinge auf verschiedenen OSen kompilieren kann. :mrgreen:

Vielen Dank für diese Info. Beim Migrieren meines ersten Projekts hatte ich GetCursorPos vermisst und Lazarus war nicht intelligent genug, mir zu sagen, wo ich die finde. Und die Unabhängigkeit lebe ich, so weit ich kann. Schau Dir mal http://www.Wolf-Fuerth.de/takeeasy.src.zip an. Das läuft auf Delphi und Linux, natürlich auch auf Lazarus Win32. 64 Bit kann es aber sicher nicht, weil ich das nicht hab und die Internet Kommunikation auf IPV4 beschränkt ist.
Zuletzt geändert von Heinrich Wolf am Do 18. Aug 2011, 12:46, insgesamt 1-mal geändert.

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Maus Position in einem Message Handler

Beitrag von Heinrich Wolf »

Socke hat geschrieben:Alternativ könnte man sich auch des Objektes Forms.Screen(s) bedienen.

In Screen hab ich das noch nicht gefunden.

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Maus Position in einem Message Handler

Beitrag von Heinrich Wolf »

theo hat geschrieben:
Mouse.CursorPos.X
Mouse.CursorPos.Y

(unit Controls)

Vielen Dank für diese Info! Das verspricht wahrscheinlich am meisten Erfolg in einem MessageHandler.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Maus Position in einem Message Handler

Beitrag von Socke »

Heinrich Wolf hat geschrieben:
Socke hat geschrieben:Alternativ könnte man sich auch des Objektes Forms.Screen(s) bedienen.

In Screen hab ich das noch nicht gefunden.

Ich kann mich auch irren und eigentlich das von theo benannte Mouse-Objekt meinen.
Heinrich Wolf hat geschrieben:Lazarus war nicht intelligent genug, mir zu sagen, wo ich die finde.

Lazarus hat einen Dialog um in Dateien zu suchen; mit maximal zwei Durchläufen kann man alle Lazarus und FreePascal-Quellen durchsuchen. Über die seitens Lazarus benötigte Intelligenz möchte ich nicht streiten :D
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Maus Position in einem Message Handler

Beitrag von Heinrich Wolf »

Socke hat geschrieben:Lazarus hat einen Dialog um in Dateien zu suchen; mit maximal zwei Durchläufen kann man alle Lazarus und FreePascal-Quellen durchsuchen. Über die seitens Lazarus benötigte Intelligenz möchte ich nicht streiten :D


Das brauchst Du auch nicht. Ich kenne und liebe den Dialog, weil er auch *.inc usw. im Gegensatz zu Delphi und MS Suche findet. Ich bin halt verwöhnt von Delphi, und Lazarus hat ja auch noch ne 0 vor der .9.31 .

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Maus Position in einem Message Handler

Beitrag von Heinrich Wolf »

Ich hab jetzt LCLIntf eingebunden. Lazarus hat die beim Migrieren meines Projekts nicht automatisch ergänzt. Meine eigene GetCursorPos hab ich rausgeschmissen. Jetzt geht es. Mouse.CursorPos brauche ich nicht.

Antworten