Zachytit kliknutí myši i mimo formulář – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zachytit kliknutí myši i mimo formulář – Delphi – Fórum – Programujte.comZachytit kliknutí myši i mimo formulář – Delphi – Fórum – Programujte.com

 

28. 3. 2014   #1
-
0
-

Dobrý den,

omlouvám se, ale nemohu nikde najít řešení mého problému. Mohl byste mi s tím někdo poradit?

Chtěla bych, aby můj program uměl zaznamenat pozici kurzoru po stisknutí levého tlačítka myši. Pokud je kurzor uvnitř formuláře, funguje vše v pohodě a aktuální pozice se vypíše do labelu.

Jakmile vyjedu mimo formulář, program sice vypisuje aktuální pozici (používám timer), ale když kliknu, nic se neděje, zaktivuje se okno, na které jsem klikla, ale pozice se nevypíše.

Zkusila jsem zachytávat pomocí klávesy "s" a to funguje. Chtěla bych, aby to ale fungovalo na kliknutí myši.

Našla jsem i nějakou funkci hook (wh_mouse_ll), ale nepodařilo se mi to rozchodit, nevím, kam to mám zapsat.

Jsem spíše programátor nadšenec, takže mi asi chybí základní znalosti.

Předem moc děkuju za každou radu a přikládám svůj kód, kdybyste ho chtěli vidět:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Timer1: TTimer;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label17: TLabel;
    Edit1: TEdit;
    procedure Label6Click(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
     procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  point: tpoint;
  pt: tpoint;
  savepoint: tpoint;
  relative: boolean;

implementation

{$R *.dfm}


procedure TForm1.Timer1Timer(Sender: TObject);
begin
getcursorpos(point);
label4.caption := inttoStr(point.x + 1);
label5.caption := inttostr(point.y + 1);


end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
function GetCharFromVirtualKey(Key: Word): string;
 var
    keyboardState: TKeyboardState;
    asciiResult: Integer;
 begin
    GetKeyboardState(keyboardState) ;

    SetLength(Result, 2) ;
    asciiResult := ToAscii(key, MapVirtualKey(key, 0), keyboardState, @Result[1], 0) ;
    case asciiResult of
      0: Result := '';
      1: SetLength(Result, 1) ;
      2:;
      else
        Result := '';
    end;
 end;
begin
if GetCharFromVirtualKey(Key) = 's' then
  begin
    savepoint := point;

    label9.caption := inttoStr(savepoint.x);
    label10.caption := inttostr(savepoint.y);

  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  relative := true;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
 SetWindowPos(Form1.Handle,
         HWND_TOPMOST,
         0, 0, 0, 0,
         SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW);
end;


procedure TForm1.Label6Click(Sender: TObject);
begin
// posouvání kurzoru se zpožděním, nefunguje, doladit
getcursorpos(point);
label9.caption := inttoStr(point.x + 21);
label10.caption := inttostr(point.y + 21);
setcursorpos(point.x+21,point.Y+21);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
sleep(500);
label9.caption := inttoStr(point.x + 41);
label10.caption := inttostr(point.y + 41);
setcursorpos(point.x+41,point.Y+41);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
sleep(500);


end;

end.

Nahlásit jako SPAM
IP: 185.7.46.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý