Как создать лупу для рабочего стола?
Материал из DRKB
Как создать лупу для рабочего стола?[править | править код]
// переменные
var
Srect, Drect, PosForme: TRect;
iWidth, iHeight, DmX, DmY: Integer;
iTmpX, iTmpY: Real;
C: TCanvas;
Kursor: TPoint;
begin
// Увеличиваем экран, если приложение не свёрнуто в иконку
if not IsIconic(Application.Handle) then
begin
// Получаем координаты курсора
GetCursorPos(Kursor);
// PosForm представляет прямоугольник с координатами Form (image control).
PosForme := Rect(Form1.Left, Form1.Top,
Form1.Left+Form1.Width, Form1.Top+Form1.Height);
// Показываем magnified screen если курсор за пределами формы.
if not PtInRect(PosForme, Kursor) then
begin
// Далее код можно использовать для увеличения выбранной
// части экрана. С небольшими модификациями его можно
// использовать для уменьшения экрана
iWidth := Image1.Width;
iHeight := Image1.Height;
Drect := Bounds(0, 0, iWidth, iHeight);
iTmpX := iWidth / (Slider.Position * 4);
iTmpY := iHeight / (Slider.Position * 4);
Srect := Rect(Kursor.x, Kursor.y, Kursor.x, Kursor.y);
InflateRect(Srect, Round(iTmpX), Round(iTmpY));
// Получаем обработчик(handle) окна рабочего стола.
C := TCanvas.Create;
try
C.Handle := GetDC(GetDesktopWindow);
// Передаём часть изображения окна в TImage.
Image1.Canvas.CopyRect(Drect, C, Srect);
finally
C.Free;
end;
end;
// Обязательно обрабатываем все сообщения Windows.
Application.ProcessMessages;
end;
end;
Author: Zarko Gajic
Source: Взято из http://forum.sources.ru
ID: 01824