Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Postmessage wm_lbuttondblclk geht aber wm_lbuttondown nicht? (https://www.delphipraxis.net/122092-postmessage-wm_lbuttondblclk-geht-aber-wm_lbuttondown-nicht.html)

SimStar001 9. Okt 2008 11:08


Postmessage wm_lbuttondblclk geht aber wm_lbuttondown nicht?
 
hallo, ich lasse an einer bestimmten position in einem externen programm die linke maustaste drücken.

wenn diese gedrückt wird, sollte in einem edit einer externen anwendung dann ein text erscheinen. dies passiert jedoch nicht.

hier mal der Code:


Delphi-Quellcode:
 
    //Text bei wirklichen klick mit maus wird gespeichert
  form1.Memo1.Lines.Add(callsign + ' selected first');
 
  //Hier wird die Anwendung (extern) nochmals in den vordergrund gerufen mittels einer Funktion aus der Sndkey32.pas
  appactivate(radar_handle,1);

  //Hier setze ich die Maus auf die von mir gewünschte, berechnete Position im Programm
  // Diese x,y koordinate ist im bezug auf den desktop berechnet
  SetCursorPos(x + 25,y + 25);
 
  //Hier wird jetzt der Mausklick simuliert und die x,y koordinate umgerechnet
  postMessage(Radar_handle,wm_lbuttondown,0,Makelparam(x + 25,y + 25));
  postmessage(Radar_handle,wm_lbuttonup,0,makelparam(x + 25,y + 25));

  //ich lasse hier bewusst buttondown, und buttonup senden, weil entweder das eine oder das andere funktioniert nicht

  //Hier wird der Text der in dem Edit erscheinen sollte ausgelesen
  callsign2 := get_commbox_selected_callsign;
 
  //und zur kontrolle gespeichert
  form1.Memo1.Lines.Add(callsign2 + ' second selected');

Meine vermutung ist nun, dass die berechnete x,y Koordinate auf dem desktop nicht mit der gewünschten umgerechneten Position im externen programm übereinstimmt!


hat jemand eine idee woran es denn liegen könnte?

Medium 9. Okt 2008 11:55

Re: Postmessage probleme (falsche lparam werte)???
 
Solange du uns nicht offenbarst wie du deine Variablen x und y zuvor versorgst, kann man da nicht mehr mutmaßen als du es bereits selbst getan hast. Da du den Cursor aber ja an die Stelle setzt, solltest du doch sehen können ob du getroffen hast.

Edit: Es kann zu dem gut sein, dass du den Mausclick relativ zum fremden Fenster, nicht zum Desktop durchführen musst. Evtl. musst du dann auch noch zwischen Client- und NC-Area unterscheiden, da bin ich gerade unsicher.
Auch wäre die Implementierung von "get_commbox_selected_callsign;" evtl. interessant falls die Koordinaten ansonsten passen.

SimStar001 9. Okt 2008 12:02

Re: Postmessage probleme (falsche lparam werte)???
 
ja also wie gesagt, x, y errechne ich wie folgt:


1. Maus wird auf Position 100,100 bewegt, dort werden aus dem Porgramm koordniaten ausgelesen,

2. Maus wird auf Position 500,500 bewegt, dort werden aus dem Porgramm koordniaten ausgelesen,

3. Es wird errechnet, welche Länge bzw Breite 1 Pixel in x-Richtung und 1 Pixel in y-Richtung hat.


demzufolge bewege ich dann meine maus auf die gewünschtge Position. Diese ist auch korrekt, nur wird scheinbar der klick nicht vollständig ausgeführt.

klicke ich nach ausführen des codes genau an die Stelle wo die maus hin bewegt wurde, dann funktioniert das was bei einem linksklick auch passieren sollte.


das macht mich stutzig!



Wahrscheinlich liegt es wirklich an der fensterposition, wie bekomme ich denn die Borderhöhe des Fensters raus?


Delphi-Quellcode:
Function Get_CommBox_selected_CallSign : string;
var Handle : Hwnd;
    WndCaption: PWideChar;
    len: Integer;
begin
  Handle := Find_WindowHandle('#32770','COMMBox');
  Handle := get_Handle(Handle,'Edit');
  len := SendMessage(Handle, WM_GETTEXTLENGTH, 0, 0);
  if len > 0 then
    begin
    len := len * 2;
    WndCaption := GetMemory(len + 1);
    if Assigned(WndCaption) then
      begin
      SendMessageW(Handle, WM_GETTEXT, len + 1, Integer(WndCaption));
      result := String(WndCaption);
      FreeMemory(WndCaption);
      SendMessageW(Handle, WM_setTEXT, 0, Integer(0));
      end;
    end;
end;


also auch wenn ich die Borderhöhe und alles abziehen von der position funktioniert der linksklich nicht! es geht nur ein rechtsklick;

SimStar001 9. Okt 2008 16:26

Re: Postmessage probleme (falsche lparam werte)???
 
Also ich habe nochmal folgendes ausprobiert:


Delphi-Quellcode:

setcapture(Radar_Handle);
  postmessage(Radar_Handle,WM_lBUTTONdblclk,makelparam(x,y),0);
  releasecapture;

wenn ich einen doppelklick ausführe, funktioniert das, es wird an der richtigen stelle ausgeführt, nur ein normaler linksklick nicht!?



wieso zum teufel nochmal denn nicht! ich verzweifel bald!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 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