Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

brunoguitarman

Achar e capturar pontos da tela

Recommended Posts

Galera, estou fazendo um programinha que basicamente vai fazer o ponteiro do mouse se mover automaticamente (até aí não tive problemas), então eu quero que, dependendo da cor que estiver uma região da tela, o mouse clique ali. O grande problema é esse: como eu faço para pegar um pixel dessa região e como eu faço pra comparar a cor dele com a cor que eu quero?

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza kra ?!

Veja na funcao a baixo e adapte conforme suas nescessidades :

 

function TForm1.GetColor(const X, Y: Integer): TColor;var  c: TCanvas;begin  c := TCanvas.Create;  try	c.Handle := GetWindowDC(GetDesktopWindow);	Result   := GetPixel(c.Handle, X, Y);  finally	c.Free;  end;end;

procedure TForm1.Timer1Timer(Sender: TObject);var  Pos: TPoint;begin  GetCursorPos(Pos);  label1.Color:= GetColor(Pos.X, Pos.Y);end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza kra ?!Veja na funcao a baixo e adapte conforme suas nescessidades :

function TForm1.GetColor(const X, Y: Integer): TColor;var  c: TCanvas;begin  c := TCanvas.Create;  try	c.Handle := GetWindowDC(GetDesktopWindow);	Result   := GetPixel(c.Handle, X, Y);  finally	c.Free;  end;end;
procedure TForm1.Timer1Timer(Sender: TObject);var  Pos: TPoint;begin  GetCursorPos(Pos);  label1.Color:= GetColor(Pos.X, Pos.Y);end;
Cara, não entendi muito bem a tua função. Pode comentar ela pra mim?

Compartilhar este post


Link para o post
Compartilhar em outros sites

kra na minha funcao GetColor, ela retorna um TColor de onde estiver posicionado o cursor ...no meu caso, invoquei a funcao dentro de um timer,,, a funcao fika pegando a posicao do ponteiro na tela e retorna a cor do mesmo ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, eu peguei essa função que tu fez e coloquei também dentro de um timer, mas depois de um tempo executando ela dá um erro.Esta é a parte do meu código, dentro do timer, que ele acusa como tendo erro."Cor := GetColor(cursor.X,cursor.Y);"E este é o erro:"Project nome_do_projeto.exe raised exception class EInvalidOperation with message 'Canvas does not allow drawing'. Process stopped. Use Step or Run to continue."A variável Cor eu coloquei como integer. Pode ser por causa disso o erro? Se for, como eu faço pra passar um TColor pra integer, tipo o inttostr?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais pq quer um inteiro ??!!!!Retornando um TColor naum resolve naum ?

É que eu faço algumas comparações lá e aí usei inteiro e também passo o valor pra uma editbox depois. Na verdade talvez até dê usando simplesmente o TColor, por que eu realmente nunca tinha usado isso, então nem sei direito como funciona.Quanto à tua função, o problema que tava dando era que faltava um ReleaseDC (ao menos foi o que eu li na documentação da API do windows), aí eu coloquei e deu certo.A função ficou assim no final:
function TForm1.GetColor(const X, Y: Integer): TColor; var													   c: TCanvas;begin  c := TCanvas.Create;	   try	c.Handle := GetWindowDC(GetDesktopWindow);	Result   := GetPixel(c.Handle, X, Y);  finally	ReleaseDC(GetDesktopWindow,c.Handle);	c.Free;  end;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opah beleza kra ?

faça assim e você se fika como você quer :

function TForm1.GetColor(const X, Y: Integer): TColor;var  c: TCanvas;begin  c := TCanvas.Create;  try	c.Handle := GetWindowDC(GetDesktopWindow);	Result   := GetPixel(c.Handle, X, Y);  finally	c.Free;  end;end;
Invocando no Timer

procedure TForm1.Timer1Timer(Sender: TObject);var  Pos: TPoint;begin  GetCursorPos(Pos);  Edit1.Text:= ColorToString(GetColor(Pos.X, Pos.Y));  if (GetColor(Pos.X, Pos.Y) = clBlack) then  begin	ShowMessage('você passo o mouse em cima da cor preta!');  end;end;
belê?! :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.