Как рисовать линии (или ещё что-нибудь) на экране (TDesktopCanvas)
// Пример рисует две горизонтальные линии на экране используя TDesktopCanvas.program TrinitronTraining;
uses
Messages, Windows, Graphics, Forms;
type
TDesktopCanvas = class(TCanvas)
private
DC : hDC;
function GetWidth:Integer;
function GetHeight:Integer;
publicconstructor Create;
destructor Destroy; override;
publishedproperty Width: Integer read GetWidth;
property Height: Integer read GetHeight;
end;
{ Объект TDesktopCanvas }function TDesktopCanvas.GetWidth:Integer;
begin
Result:=GetDeviceCaps(Handle,HORZRES);
end;
function TDesktopCanvas.GetHeight:Integer;
begin
Result:=GetDeviceCaps(Handle,VERTRES);
end;
constructor TDesktopCanvas.Create;
begininherited Create;
DC := GetDC(0);
Handle := DC;
end;
destructor TDesktopCanvas.Destroy;
begin
Handle := 0;
ReleaseDC(0, DC);
inherited Destroy;
end;
const
YCount = 2;
var
desktop : TDesktopCanvas;
dx,dy : Integer;
i : Integer;
F : array[1..YCount] of TForm;
function CreateLine(Y : Integer) : TForm;
begin
Result := TForm.Create(Application);
with Result dobegin
Left := 0;
Top := y;
Width := dx;
Height := 1;
BorderStyle := bsNone;
FormStyle := fsStayOnTop;
Visible := True;
end;
end;
procedure ProcessMessage;
var
Msg : TMsg;
beginif PeekMessage(Msg, 0, 0, 0, PM_REMOVE) thenif Msg.message = WM_QUIT then
Application.Terminate;
end;
begin
desktop := TDesktopCanvas.Create;
try
dx := desktop.Width;
dy := desktop.Height div (YCount+1);
finally
desktop.free;
end;
for i:=1 to YCount do
F[i]:=CreateLine(i*dy);
Application.NormalizeTopMosts;
ShowWindow(Application.Handle, SW_Hide);
for i:=1 to YCount do
SetWindowPos(F[i].Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOACTIVATE+SWP_NOMOVE+SWP_NOSIZE);
{
следующие строки используются для того, чтобы не останавливаться
repeat
ProcessMessage;
until false;
}
Sleep(15000);
for i:=1 to YCount do
F[i].Free;
end.
Для рисования линий на TDesktopCanvas можно использовать следующие методы:
Метод MoveTo: этот метод перемещает текущую позицию каранда рисования в конкретную точку.
Метод LineTo: этот метод рисует линию от текущей позиции каранда рисования до указанной точки.
Вот пример, как рисовать два горизонтальных линия на TDesktopCanvas:
procedureDrawLines;varx,y:Integer;beginwithdesktopdobeginBrush.Color:=clWhite;// установка цвета кисти в белыйPen.Color:=clBlue;// установка цвета каранда в синийMoveTo(0,0);// перемещение текущей позиции каранда рисования в точку (0, 0)LineTo(desktop.Width,0);// рисование линии от точки (0, 0) до точки (desktop.Width, 0)MoveTo(0,desktop.Heightdiv2);LineTo(desktop.Width,desktop.Heightdiv2);end;end;procedureMain;begin// создание экземпляра TDesktopCanvasdesktop:=TDesktopCanvas.Create;try// установка размера канвасаdx:=desktop.Width;dy:=desktop.Heightdiv(YCount+1);// рисование двух горизонтальных линий на канвасеDrawLines;// освобождение экземпляра TDesktopCanvasdesktop.Free;end;end.
В этом примере мы создаем экземпляр TDesktopCanvas и устанавливаем его размер с помощью свойств Width и Height. Затем мы рисуем два горизонтальных линия на канвасе с помощью методов MoveTo и LineTo.
Обратите внимание, что вам нужно вызвать процедуру DrawLines после создания экземпляра TDesktopCanvas и до освобождения его.
Также, если вы хотите рисовать более сложные формы или графику, вам может потребоваться использовать другие методы рисования, такие как Ellipse, Rectangle, Polygon и т.д., в зависимости от вашей конкретной необходимости.
Статья описывает способ рисования линий на экране с помощью класса TDesktopCanvas в Delphi, используя пример программы TrinitronTraining.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.