Вопрос
Как написать приложение, которое будет являться не обычной формой, например, произвольным 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 Сообщество Чайников
Контактная информация