Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как создать непрямоугольную форму


firsor ©   (2002-07-17 09:51:00) 

Как создать непрямоугольную форму? Я делал так
procedure TForm1.FormCreate(Sender: TObject);
begin
setwindowrgn(Form1.handle,CreateEllipticRgn(1,6,2,9),true)
end;
Но ничего не получилось. Как быть?


ded_di   (2002-07-17 14:10:00) [1]

Ничего не получается потому что CreateEllipticRgn(1,6,2,9) возвращает NULL (по крайней мере у меня). Изменение размеров дает результат.


Игорь Шевченко   (2002-07-17 13:48:00) [2]

В CreateParams делать НЕЛЬЗЯ.
Так как при обращении к Form.Handle в этом методе он вызывается рекурсивно.

Попробуйте:

procedure TForm1.CreateWnd;
begin
inherited;
if HandleAllocated then
setwindowrgn(handle,CreateEllipticRgn(1,6,2,9),true);
end;

И напоследок - не стоит в методах объекта обращаться к переменным этого объекта:

procedure TForm1.CreateWnd;
begin
setwindowrgn(Form1.handle,CreateEllipticRgn(1,6,2,9),true);
^^^^^
end;



firsor   (2002-07-17 13:42:00) [3]

Я попробовал так:
procedure TForm1.CreateWnd;
begin
setwindowrgn(Form1.handle,CreateEllipticRgn(1,6,2,9),true);

end;
и
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
setwindowrgn(Form1.handle,CreateEllipticRgn(1,6,2,9),true);

end;

но выдает ошику типа переполнение стека. Я что то не то делаю.


ded_di   (2002-07-17 12:21:00) [4]

Попробуй то же самое сделать в ОнПейнт


Игорь Шевченко   (2002-07-17 12:00:00) [5]

Пардон, сервер сглючил, два раза отправилось :-)


Игорь Шевченко   (2002-07-17 11:53:00) [6]

Виктор Щербаков © (17.07.02 09:53)

Это нужно сделать в методе CreateWnd (перекрыв) после inherited
В CreateParams еще нету Handle окна.


Виктор Щербаков   (2002-07-17 11:47:00) [7]

Да действительно :(


Игорь Шевченко   (2002-07-17 11:41:00) [8]

Виктор Щербаков © (17.07.02 09:53)

Это нужно сделать в методе CreateWnd (перекрыв) после inherited
В CreateParams еще нету Handle окна.


Виктор Щербаков   (2002-07-17 10:36:00) [9]

Это виртуальный метод TWinControl. Он может быть переопределен в потомках TWinControl, в том числе и в твоем TForm1.

procedure CreateParams(var Params: TCreateParams); override;


firsor   (2002-07-17 10:29:00) [10]

А кому принадлежит этот метод...Можно поподробнее


Виктор Щербаков   (2002-07-17 09:53:00) [11]

Это нужно сделать в методе CreateParams.


Наверх

Титульная страница Поиск, карта сайта Написать письмо