unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ExtCtrls, jpeg;
type
TForm1 = class(TForm)
Label1: TLabel; //Это метка для отображения времени
Timer1: TTimer; //Это таймер - с помощью него мы отображаем время
Image1: TImage; //Компонент Image - нужен для вывода рисунка на форме
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{Для перемещения формы вне заголовка объявляем процедуру}
procedure WMNCHitTest(var M:TWMNCHitTest);message wm_NCHitTest;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{Для перемещения формы вне заголовка описываем процедуру}
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited;
if M.Result = htClient then
M.Result := htCaption;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
hsWindowRegion, hsWindowRegion2: integer;
p: array [0..11] of TPoint;
begin
p[0].x:=30; p[0].y:=40;
p[1].x:=80; p[1].y:=70;
p[2].x:=95; p[2].y:=20;
p[3].x:=110; p[3].y:=70;
p[4].x:=160; p[4].y:=40;
p[5].x:=130; p[5].y:=85;
p[6].x:=260; p[6].y:=230;
p[7].x:=110; p[7].y:=100;
p[8].x:=95; p[8].y:=200;
p[9].x:=80; p[9].y:=100;
p[10].x:=30; p[10].y:=130;
p[11].x:=60; p[11].y:=85;
hsWindowRegion:=CreatePolygonRgn(P,12,Alternate);
hsWindowRegion2:=CreateEllipticRgn(50,50,140,120);
CombineRgn(hsWindowRegion, hsWindowRegion, hsWindowRegion2, rgn_or);
SetWindowRgn(Handle, hsWindowRegion, true);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption:=TimeToStr(Time);
end;
end.
Код является частью программы на языке Delphi, которая создает оконную форму с меткой (Label1) для отображения времени и таймером (Timer1) для обновления времени. Форма также имеет компонент Image (Image1), который нужен для вывода рисунка на форме.
Когда форма создается (в процедуре FormCreate), программа создает регион (регистр) window, используя функцию CreatePolygonRgn, и комбинирует его с эллиптическим регионом, созданным с помощью функции CreateEllipticRgn. Затем она устанавливает этот регион для формы с помощью функции SetWindowRgn.
Когда таймер отсчитывает секунды (в процедуре Timer1Timer), программа обновляет текст метки Label1, чтобы отображать текущее время.
Кроме того, в коде есть процедура WMNCHitTest, которая позволяет перемещать форму вне заголовка окна. Это достигается с помощью обработки сообщения WM_NCHITTEST, которое отправляется системой при попытке клиентского ввода (например, мышью) в область формы. В этом случае программа изменяет результат на htCaption, чтобы форма могла быть перемещена вне заголовка окна.
|