Ir para conteúdo
Fórum Script Brasil
  • 0

Fora Da Aplicação


Guest marcos da silva

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'.

rolleyes.gif

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...