Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать цвет заданной точки экранна


Батыр ©   (2006-07-21 00:06:00) 

Мне нужно узнать цвет заданной точки экранны, возможно ли это.


Юрий Зотов   (2006-07-22 12:24:00) [1]

Если бороться за упрощение, то тогда уж так:

procedure TForm1.Timer1Timer(Sender: TObject);
var
 DC: HDC;
begin
 DC := GetDC(0);
 try
   Color := GetPixel(DC, Mouse.CursorPos.X, Mouse.CursorPos.Y)
 finally
   ReleaseDC(0, DC)
 end
end;

И если не страдать паранойей, как я,  то try-finally-end тоже можно выкинуть. Потому что исключение здесь практически невероятно.


Loginov Dmitry   (2006-07-22 08:45:00) [2]

Ну тады так:


procedure TForm1.Timer1Timer(Sender: TObject);
begin
with TCanvas.Create do
try
  Handle := GetDC(0);
  Self.Color := Pixels[Mouse.CursorPos.X, Mouse.CursorPos.Y];
finally
  ReleaseDC(0, Handle);
  Free;
end;


Просто до этого не проверял на утечки памяти. Если таймер выставлен на 1000, то утечки памяти почему-то не наблюдаются, а если 100, то утечки без ReleaseDC очень даже заметны.


KilkennyCat   (2006-07-21 23:17:00) [3]


> [3] Loginov Dmitry ©   (21.07.06 15:35)


А ReleaseDC?


Loginov Dmitry   (2006-07-21 15:35:00) [4]

Вот вариант по-проще:


procedure TForm1.Timer1Timer(Sender: TObject);
begin
 with TCanvas.Create do
 try
   Handle := GetDC(0);
   Self.Color := Pixels[Mouse.CursorPos.X, Mouse.CursorPos.Y];
 finally
   Free;
 end;
end;


Батыр   (2006-07-21 00:20:00) [5]

Игорь Шевченко огромное спасибо


Игорь Шевченко   (2006-07-21 00:17:00) [6]

unit main;

interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, ExtCtrls;

type
 TfMain = class(TForm)
   Shape1: TShape;
   Timer: TTimer;
   procedure TimerTimer(Sender: TObject);
 end;

var
 fMain: TfMain;

implementation

{$R *.dfm}

procedure TfMain.TimerTimer(Sender: TObject);
var
 Wnd: HWnd;
 CursorPos: TPoint;
 DC: HDC;
 Pixel: DWORD;
begin
 GetCursorPos(CursorPos);
 Wnd := WindowFromPoint(CursorPos);
 if IsWindow(Wnd) then begin
   MapWindowPoints(HWND_DESKTOP, Wnd, CursorPos, 1);
   DC := GetWindowDC(Wnd);
   try
     Pixel := GetPixel(DC, CursorPos.X, CursorPos.Y);
     Shape1.Brush.Color := Pixel;
   finally
     ReleaseDC(Wnd, DC);
   end;
 end;
end;

end.


Определяет цвет точки под курсором мыши


Наверх

Титульная страница Поиск, карта сайта Написать письмо