Вниз
Скачать: CL | DM;

Срочно надо! Вопрос по нестандартным формам   Найти похожие ветки 

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.013 c
1-60630
andreyz
2002-08-06 05:13
2002.08.19
Иконки в гриде


1-60689
Брат
2002-08-06 09:57
2002.08.19
Компонента


1-60731
maxim2
2002-08-07 06:31
2002.08.19
Как сделать цикл пока не нажата клавиша?


1-60565
^SANYA
2002-08-07 12:17
2002.08.19
IE...: Как поймать получение фокуса ввода адресной строкой IE?


1-60625
@andrew
2002-08-08 16:27
2002.08.19
И еще вопрос по MDI. Как сделать так, чтобы и папа




   Наверх