Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Postmessage(Handle,WM_RBUTTONDOWN,0,0) an falscher position (https://www.delphipraxis.net/122014-postmessage-handle-wm_rbuttondown-0-0-falscher-position.html)

Luckie 8. Okt 2008 10:14

Re: Postmessage(Handle,WM_RBUTTONDOWN,0,0) an falscher posit
 
Dann guck im MSDN nach: MSDN-Library durchsuchenPostMessage.

Dust Signs 8. Okt 2008 10:18

Re: Postmessage(Handle,WM_RBUTTONDOWN,0,0) an falscher posit
 
Das kann ja nicht funktionieren, wenn du statt lparam wparam auf die Koordinaten setzt. Du musst den letzten Parameter (lparam) auf die Koordinaten setzen:

Delphi-Quellcode:
PostMessage(Handle, WM_RBUTTONDOWN, 0, WordsToLparam(x,y));
Dust Signs

SimStar001 8. Okt 2008 10:27

Re: Postmessage(Handle,WM_RBUTTONDOWN,0,0) an falscher posit
 
Zitat:

Delphi-Quellcode:
PostMessage(Handle, WM_RBUTTONDOWN, 0, WordsToLparam(x,y));

also wenn ich das mache, dann bewegt sich zwar das Popupmenü in x richtung an die richte position, es bleib aber immernoch in y richtung auf null hängen

Dust Signs 8. Okt 2008 10:29

Re: Postmessage(Handle,WM_RBUTTONDOWN,0,0) an falscher posit
 
Luckie hat dich ja bereits auf MakeLparam hingewiesen. Versuch das doch mal.
Es wäre angebracht, wenn du etwas mehr Eigeninitiative zeigen und dir einmal die von Luckie und mir geposteten Links durchlesen würdest :roll:

Dust Signs

Fussball-Robby 8. Okt 2008 10:33

Re: Postmessage(Handle,WM_RBUTTONDOWN,0,0) an falscher posit
 
Zitat:

Zitat von SimStar001
Delphi-Quellcode:
function WordsToLparam(w1: Word; w2: Word): cardinal;
begin
  Result := (w1 shr 16) or w2;
end;

Ich bin mir jetzt nicht 100%ig sicher, aber müsste es, wenn überhaupt, nicht w1 shl 16 heißen?


Edit: Ja, es funktioniert mit shl. Allerdings muss man w2 nach links shiften, also so:
Delphi-Quellcode:
function WordsToLparam(w1: Word; w2: Word): cardinal;
begin
  Result := w1 or (w2 shl 16);
end;
Dann sollte alles wie gewollt funktionieren.

SimStar001 8. Okt 2008 10:38

Re: Postmessage(Handle,WM_RBUTTONDOWN,0,0) an falscher posit
 
Zitat:

Luckie hat dich ja bereits auf MakeLparam hingewiesen. Versuch das doch mal.
Es wäre angebracht, wenn du etwas mehr Eigeninitiative zeigen und dir einmal die von Luckie und mir geposteten Links durchlesen würdest Rolling Eyes

Also ich bin doch schon am lesen und ausprobieren, mehr kann ich auhc nicht machen. und außerdem versteh ich die erklärungen bei msdn nicht wirklich. tut mir leid....

Fussball-Robby 8. Okt 2008 10:42

Re: Postmessage(Handle,WM_RBUTTONDOWN,0,0) an falscher posit
 
Funktionierendes Beispiel ist im Edit meines letzten Posts. Wenn du willst, kann ich dir den Code auch noch erklären..

SimStar001 8. Okt 2008 10:44

Re: Postmessage(Handle,WM_RBUTTONDOWN,0,0) an falscher posit
 
Also bin jett schonmal etwas weiter gekommen:

Zitat:

Ich bin mir jetzt nicht 100%ig sicher, aber müsste es, wenn überhaupt, nicht w1 shl 16 heißen?

Also wenn ich es so mache wie du schreibst, bleibt das popupmenü zumindest nciht mehr bei y = 0 hängen, die richtige postion hat es allerdings immer noch nicht.


Nun zu MakelParam: Also damit wird das popup auf der richtigen position geöffnet!


vielen dank für die Hilfe!


(schwere Geburt!)


Zitat:

Funktionierendes Beispiel ist im Edit meines letzten Posts. Wenn du willst, kann ich dir den Code auch noch erklären..
Ja bitte erklär mir den Code mal, denn ich bekomm es einfach nciht in den kopf wieso man nicht einfach die x,y koordinate angeben kann!

Dust Signs 8. Okt 2008 10:47

Re: Postmessage(Handle,WM_RBUTTONDOWN,0,0) an falscher posit
 
Zitat:

Zitat von Fussball-Robby
Zitat:

Zitat von SimStar001
Delphi-Quellcode:
function WordsToLparam(w1: Word; w2: Word): cardinal;
begin
  Result := (w1 shr 16) or w2;
end;

Ich bin mir jetzt nicht 100%ig sicher, aber müsste es, wenn überhaupt, nicht w1 shl 16 heißen?


Edit: Ja, es funktioniert mit shl. Allerdings muss man w2 nach links shiften, also so:
Delphi-Quellcode:
function WordsToLparam(w1: Word; w2: Word): cardinal;
begin
  Result := w1 or (w2 shl 16);
end;
Dann sollte alles wie gewollt funktionieren.

Mit dem shl hattest du recht (mein Fehler). Trotzdem muss das erste Word geshiftet werden, also:

Delphi-Quellcode:
Result := (w1 shl 16) or w2;
Dann wäre die Funktion wahrscheinlich ident zu MakeLparam und würde ebenfalls funktionieren.

Dust Signs

Dust Signs 8. Okt 2008 10:48

Re: Postmessage(Handle,WM_RBUTTONDOWN,0,0) an falscher posit
 
Zitat:

Zitat von SimStar001
ich bekomm es einfach nciht in den kopf wieso man nicht einfach die x,y koordinate angeben kann!

Wie bereits in meinem ersten Post geschrieben: X und Y sind je ein Word breit (16 Bit), und du übergibst einen Integer (lparam, 32 Bit). In 32 Bit passen 2 * 16 Bit, also 2 Koordinaten - X und Y mit jeweils 16 Bit.

Dust Signs


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 Uhr.
Seite 2 von 3     12 3      

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