![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать цвет заданной точки экранна
Батыр © (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.
Определяет цвет точки под курсором мыши