Форум: "Основная";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];
ВнизКак создать непрямоугольную форму Найти похожие ветки
← →
firsor (2002-07-17 09:51) [0]Как создать непрямоугольную форму? Я делал так
procedure TForm1.FormCreate(Sender: TObject);
begin
setwindowrgn(Form1.handle,CreateEllipticRgn(1,6,2,9),true)
end;
Но ничего не получилось. Как быть?
← →
Виктор Щербаков (2002-07-17 09:53) [1]Это нужно сделать в методе CreateParams.
← →
firsor (2002-07-17 10:29) [2]А кому принадлежит этот метод...Можно поподробнее
← →
Виктор Щербаков (2002-07-17 10:36) [3]Это виртуальный метод TWinControl. Он может быть переопределен в потомках TWinControl, в том числе и в твоем TForm1.
procedure CreateParams(var Params: TCreateParams); override;
← →
Игорь Шевченко (2002-07-17 11:41) [4]Виктор Щербаков © (17.07.02 09:53)
Это нужно сделать в методе CreateWnd (перекрыв) после inherited
В CreateParams еще нету Handle окна.
← →
Виктор Щербаков (2002-07-17 11:47) [5]Да действительно :(
← →
Игорь Шевченко (2002-07-17 11:53) [6]Виктор Щербаков © (17.07.02 09:53)
Это нужно сделать в методе CreateWnd (перекрыв) после inherited
В CreateParams еще нету Handle окна.
← →
Игорь Шевченко (2002-07-17 12:00) [7]Пардон, сервер сглючил, два раза отправилось :-)
← →
ded_di (2002-07-17 12:21) [8]Попробуй то же самое сделать в ОнПейнт
← →
firsor (2002-07-17 13:42) [9]Я попробовал так:
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;
но выдает ошику типа переполнение стека. Я что то не то делаю.
← →
Игорь Шевченко (2002-07-17 13:48) [10]В 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;
← →
ded_di (2002-07-17 14:10) [11]Ничего не получается потому что CreateEllipticRgn(1,6,2,9) возвращает NULL (по крайней мере у меня). Изменение размеров дает результат.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c