Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создать форму без заголовка, Как динамически создать такую форму? 
V
    Опции темы
AlexLogos
Дата 15.2.2011, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



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

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. Что сделать чтоб работало?

PM MAIL   Вверх
z-END
Дата 15.2.2011, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



bsNone не подходит?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
AlexLogos
Дата 15.2.2011, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Спасибо  smile . В моем случае это помогло. А если рамку надо оставить?
PM MAIL   Вверх
superVad
Дата 15.2.2011, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 4
Всего: 15



Это весь код модуля?
А если так - есть ошибка?
Код

HidedForm:=THidedForm.Create(Application);

PM MAIL   Вверх
AlexLogos
Дата 16.2.2011, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Это не весь код модуля, но все что касается этой формы. Ошибка вылетает при попытке создать форму. Компилируется все нормально.
PM MAIL   Вверх
Snowy
Дата 16.2.2011, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



В 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 - добавить рамку, меняющую размер.
PM MAIL   Вверх
AlexLogos
Дата 16.2.2011, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



когда я создаю свой клас 
Код

type TForm = class (Forms.TForm)
end;

то всеравно та же ошибка когда пробую создать форму: Fo:=TForm.Create(Self);
PM MAIL   Вверх
Snowy
Дата 16.2.2011, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



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

Так что наследовать вообще нельзя.
PM MAIL   Вверх
AlexLogos
Дата 16.2.2011, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Ну ты и обманщик  smile . Получается, что придется обойтись без наследования. Твои процедуры работают. буду использовать их. Спасибо большое  smile .
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0581 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.