Guest marcos da silva Postado Setembro 28, 2004 Denunciar Share Postado Setembro 28, 2004 oi galera do bem !Bom essa pergunta e bem breve, eu queria saber quando o usuario clicou fora da minha aplicação ?eu usei a function 'MouseCapture' mais só funciona dentro dela 'aplicação minha'. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Capablanca Postado Setembro 30, 2004 Denunciar Share Postado Setembro 30, 2004 Olá,Coloque um componente TIMER e um componente Memo dentro do seu aplicativo. Configure a propriedade INTERVAL do TIMER para 10 e no evento OnTimer coloque o código que se encontra abaixo. Foi declarada uma variável chamada CliqueDentro.A Unit completa ficou assim: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; Memo1: TMemo; procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } CliqueDentro: boolean; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin if ((GetAsyncKeyState(VK_LBUTTON) and 1) = 1) then begin if (mouse.CursorPos.x<form1.Left) or (mouse.CursorPos.x>(form1.left+form1.Width)) or (mouse.CursorPos.y<form1.Top) or (mouse.CursorPos.y>(form1.Top+form1.Height)) then memo1.lines.add('O botão esquerdo do mouse foi clicado em: ' + inttostr(mouse.cursorpos.x)+',' + inttostr(mouse.cursorpos.y) ); CliqueDentro:=false; end; end; end. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest MARCOS DA SILVA Postado Setembro 30, 2004 Denunciar Share Postado Setembro 30, 2004 CARA VALEU PELA DICA. CONTINUE SEMPRE ASSIM FALOW!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Capablanca Postado Outubro 1, 2004 Denunciar Share Postado Outubro 1, 2004 Cara, dá uma olhada nisso (encontrei por aí e adaptei):1) Coloque um componente ListBox1;2) Coloque um componente ApplicationEvents e configure o evento OnMessage conforme linhas abaixo;3) No evento OnCreate e OnClose do seu FORM, coloque o código que se segue abaixo.Unit completa: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, AppEvnts; type TForm1 = class(TForm) ListBox1: TListBox; ApplicationEvents1: TApplicationEvents; procedure ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; JHook: THandle; Track: Boolean; implementation {$R *.DFM} function JournalProc(Code, wParam: Integer; var EventStrut: TEVENTMSG): Integer; stdcall; var Char1: PChar; begin Result := CallNextHookEx(JHook, 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_LBUTTONUP then Form1.ListBox1.Items.Add('Left Mouse UP at X pos '+IntToStr(EventStrut.paramL) +' and Y pos '+IntToStr(EventStrut.paramH)); if EventStrut.message = WM_LBUTTONDOWN then Form1.ListBox1.Items.Add('Left Mouse Down at X pos '+IntToStr(EventStrut.paramL) +' and Y pos '+IntToStr(EventStrut.paramH)); if EventStrut.message = WM_RBUTTONDOWN then Form1.ListBox1.Items.Add('Right Mouse Down at X pos '+IntToStr(EventStrut.paramL) +' and Y pos '+IntToStr(EventStrut.paramH)); if (EventStrut.message = WM_RBUTTONUP) then Form1.ListBox1.Items.Add('Right Mouse Up at X pos '+IntToStr(EventStrut.paramL) +' and Y pos '+IntToStr(EventStrut.paramH)); if (Eventstrut.message= WM_KEYDOWN ) then Form1.ListBox1.Items.Add('Keyboard pressed '+IntToStr(EventStrut.paramL) +' and Y pos '+IntToStr(EventStrut.paramH)+' NEW SET '+inttostr(eventstrut.time)); end; end; procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin Handled := False; if (Msg.message = WM_CANCELJOURNAL) and Track then JHook := SetWindowsHookEx(WH_JOURNALRECORD , @JournalProc, 0, 0); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin UnhookWindowsHookEx(JHook); end; procedure TForm1.FormCreate(Sender: TObject); begin if Track then begin ShowMessage('Mouse is already being Journaled, can not restart'); Exit; end; // or 0 JHook := SetWindowsHookEx(WH_JOURNALRECORD , @JournalProc,hinstance, 0); {SetWindowsHookEx starts the Hook} if JHook > 0 then begin Track := True; end else ShowMessage('No Journal Hook availible'); end; end. Se você tiver problemas, me dá um toque que eu disponibilizo o projeto para download.Abs. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest marcos da silva
oi galera do bem !
Bom essa pergunta e bem breve, eu queria saber quando o usuario clicou fora da minha aplicação ?
eu usei a function 'MouseCapture' mais só funciona dentro dela 'aplicação minha'.
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.