Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Создать форму без заголовка


Автор: AlexLogos 15.2.2011, 18:10
Народ, подскажите плиз. Хочу динамически создать форму без заголовка. Когда-то для формы непосредственно в проекте писал
Код

procedure CreateParams(var Params: TCreateParams); override; //обьяввить процедуру в public

////////////////////

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do
    Style := (Style OR WS_POPUP) AND NOT WS_DLGFRAME; 
end;

форма создается без заголовка.
А как это сделать для формы которая создается динамически?
Я пробовал создать новый клас формы
Код

type THidedForm = class (TForm)
     procedure CreateParams(var Params: TCreateParams); override;
end;

//////////////
procedure THidedForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do
    Style := (Style OR WS_POPUP) AND NOT WS_DLGFRAME; 
end;
/////////////////////
FM:=THidedForm.Create(Application);

но когда я ее создаю возникает ошибка: Resource THidedForm not found. Что сделать чтоб работало?

Автор: z-END 15.2.2011, 18:18
bsNone не подходит?

Автор: AlexLogos 15.2.2011, 18:26
Спасибо  smile . В моем случае это помогло. А если рамку надо оставить?

Автор: superVad 15.2.2011, 20:47
Это весь код модуля?
А если так - есть ошибка?
Код

HidedForm:=THidedForm.Create(Application);

Автор: AlexLogos 16.2.2011, 17:09
Это не весь код модуля, но все что касается этой формы. Ошибка вылетает при попытке создать форму. Компилируется все нормально.

Автор: Snowy 16.2.2011, 17:33
В VCL есть строгая проверка на имя класса TForm.
Любая форма, имя класса которой отличается от TForm требует dfm файл.
Если так уж хочется создавать форму без использования визуального дизайнера, то есть 2 варианта:
1. Создать переменную типа TForm.
2. Создать свой класс TForm = class(Forms.TForm)

Что касается рамки: Params можно установить через SetWindowLong
Код

SetWindowLong(form.Handle, GWL_STYLE, GetWindowLong(form.Handle, GWL_STYLE) xor WS_CAPTION or WS_THICKFRAME);
  SetWindowPos(form.Handle, 0, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE + SWP_FRAMECHANGED);
- WS_CAPTION - убрать шляпу
+ WS_THICKFRAME - добавить рамку, меняющую размер.

Автор: AlexLogos 16.2.2011, 17:45
когда я создаю свой клас 
Код

type TForm = class (Forms.TForm)
end;

то всеравно та же ошибка когда пробую создать форму: Fo:=TForm.Create(Self);

Автор: Snowy 16.2.2011, 17:47
Обманул, обманул...  smile 
Проверяется не по имени, а строго на класс.
Код
if (ClassType <> TForm)

Так что наследовать вообще нельзя.

Автор: AlexLogos 16.2.2011, 17:58
Ну ты и обманщик  smile . Получается, что придется обойтись без наследования. Твои процедуры работают. буду использовать их. Спасибо большое  smile .

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)