Форум: "Основная";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];
ВнизСрочно надо! Вопрос по нестандартным формам Найти похожие ветки
← →
I__am (2002-08-07 19:59) [0]Доброй ночи всем! Мастера, подскажите плз, как мне сделать нестандартную форму, например окно в форме овала или треугольника или вообще в форме рисунка? Заранее благодарю!
← →
V.Turecky (2002-08-07 20:34) [1]Почитай это:
Уже и не помню откуда информация.
ЭЛЛИПСОВИДНОЕ ОКНО
--------------------------------------------------------------------------------
Для начала нужно обеспечить возможность пользователю перемещать окно, хватаясь за клиентскую область, а не за заголовочную, т.к. полосы заголовка, собственно, у нас нет.
Сначала в частных объявлениях (после слова private) объявляем процедуру:
private
procedure WMNCHitTest(var M:TWMNCHitTest);message wm_NCHitTest;
Затем в разделе implementation описываем её так:
implementation
{$R *.DFM}
procedure TForm1.WMNCHitTest(var M:TWMNCHitTest);
begin
inherited;
if M.Result=htClient then M.Result:=htCaption;
end;
Далее самое главное. По созданию окна (событие OnCreate) пишем следующий код:
procedure TForm1.FormCreate(Sender: TObject);
var
hsWindowRegion:Integer;
begin
hsWindowRegion:=CreateEllipticRgn(50,50,350,200);
SetWindowRgn(Handle,hsWindowRegion,true);
end;
Как это сделано?
Сначала мы объявляем переменную типа Integer, называем её hsWindowRegion.В неё в дальнейшем мы поместим дескриптор созданного региона. Затем, с помощью функции CreateEllipticRgn создаём регион эллипсовидной формы. В скобках ей указываем координаты для построения эллипса. В зависимости от того, какие значения вы укажите, такого размера и создастся ваш эллипс. После того, как регион создан, осталось только применить его к форме. Это делается с помощью следующего кода:
SetWindowRgn(Handle,hsWindowRegion,true);
Вышеуказанной функции в качестве параметров нужно указать три вещи. Это:
1) дескриптор окна,
2) дескриптор применяемого региона и
3) указать будет ли перерисован регион (true - истина, false - ложь)
← →
Слесарь Матерящийся (2002-08-07 20:34) [2]Можно поискать компонент TSkinForm или подобный.
Если особые навороты не требуются -- можно обойтись Win API:
CreateRectRgn(), CreateRoundRgn() ,... -- создать регионы
затем CombineRgn() -- скомбинировать
и, наконец, SetWindowRgn() -- назначить регион для окна.
← →
I__am (2002-08-08 18:54) [3]Бошое пасиба! Очень помогли!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c