Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



окно в виде звезды

Если вы хотите создать самое необычное окно, тогда нужно будет подготовить для него оболочку (например в PhotoShop'е). На рисунке показан пример с часами. Здесь используется один эллипсовидный и один многоугольный регион. По центру окна выведена метка, в которой показывается текущее время. Как это всё сделать рассмотрим подробнее.
Общий вид модуля может быть примерно таким:
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.
Как это сделано?
По созданию окна создаём два региона, их дескрипторы помещаем в переменные hsWindowRegion, hsWindowRegion2. Для многоугольного региона создаём массив точек. Для каждого элемента массива - для каждой точки - указываем координаты по осям Х & Y. Комбинируем регионы в режиме rgn_or, чтобы области объединились:
CombineRgn(hsWindowRegion,hsWindowRegion,hsWindowRegion2,rgn_or);
Устанавливаем созданный регион:
SetWindowRgn(Handle,hsWindowRegion,true);
Чтобы в метке показывалось системное время, делаем следующее: выносим компонент Timer - он выполняет указанный код спустя заданное количество (в свойстве Interval) миллисекунд. Оставим значение этого свойства без изменения, равным 1000 миллисекунд - это 1 секунда. А по событию OnTimer напишем следующее:
Label1.Caption:=TimeToStr(Time);
Time - функция, выдающая текущее время.
TimeToStr - функция переводящая время в текстовую строку
Так как интервал у таймера равен одной секунде, то текущее время будет постоянно обновляться. В итоге - часы идут!



<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS