СообЧа > База Знаний > Программирование > Delphi

Вопрос

Как написать приложение, которое будет являться не обычной формой, например, произвольным bmp-файлом. И чтобы если этот файл не квадратный, то и форма была не квадратной (типа как сделаны программы со скинами). Просто хочется написать оригинальную оболочку для cd, а если просто так делать, то получается не красиво.

Ответ

Для начала надо кинуть на форму TImage и загрузить в него картинку, а свойство Align выставить в "alClient". Потом надо создать регион (тип HRGN) соответствующего вида и применить его к форме при помощи функции SetWindowRgn:

var
a:HRGN;
begin
a:=CreateEllipticRgn(10,10,400,600);//Эллипс, если два последних
//параметра равны — круг
SetWindowRgn(Form1.handle,a,true);


Это можно делать в любом месте программы — т.е. динамически изменять форму окна. Например сделать эллипс, который сжимается и разжимается:

//должна быть описана глобальная переменная fl:Boolean и обработчик
//нажатия на какую либо кнопку, в котором написана строка fl:=true
var
rgn:HRGN;
i:integer;
begin
fl:=false;
while (not fl) do begin
for i:=1 to 200 do begin
rgn:=CreateEllipticRgn(10,10,400,400+i);
SetWindowRgn(Form1.handle,rgn,true);
end;
application.ProcessMessages;
for i:=200 downto 1 do begin
rgn:=CreateEllipticRgn(10,10,400,400+i);
SetWindowRgn(Form1.handle,rgn,true);
end;
end;
end;


Точно так же можно создавать окна любой другой формы, используя функции WinAPI для создания региона. Например
CreatePolygonRgn(var Points; Count, PolyFillMode: Integer): HRgn;
Создает многоугольник с вершинами в TPoints, ЛЮБОЙ формы — думаю, для создания окон он подходит больше всего, хотя… В общем смотри справочник по WinAPI — там всяких таких функций с десяток точно наберется.

Из конференции Expert_FAQ



Copyright © 2000-2004 Сообщество Чайников
Контактная информация