Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.29;
Скачать: CL | DM;

Вниз

Как создать непрямоугольную форму   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
4-95604
Yerba
2002-05-20 23:46
2002.07.29
Bitmap -> Icon


8-95453
Dorex
2002-03-22 11:16
2002.07.29
Как разбить BMP на квадраты?


3-95253
Alenka
2002-07-09 10:31
2002.07.29
Запомнить значение в текущей ячейки


14-95501
Партизан
2002-07-01 14:14
2002.07.29
Емулятор.


7-95590
VJar
2002-05-12 12:50
2002.07.29
Скрытие значков рабочего стола