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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно (!) создать форму? 
V
    Опции темы
Тутанхамец
Дата 22.10.2006, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



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

Код

program Project1;

uses
  Forms, Unit1 in 'Unit1.pas' {Form1};

{$R *.res}
var
  MyForm:TForm;
begin
 // Application.Initialize;
  MyForm:=TForm.Create(Application);
  MyForm.Width:=100;
  MyForm.Height:=100;
//  Application.Run;
  MyForm.showmodal;
  MyForm.Free;
end.


Вопрос. Насколько правильно я это делаю? Нужны ли вызовы Initialize и  Run? Если нужны, то перед showmodal или после?

И есть ли способы сделать это лучше? 

Заранее благодарен. 


PM MAIL   Вверх
Matematik
Дата 22.10.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



Код

MyForm := nil
try
  MyForm :=TForm.Create(Application);
  MyForm.Width:=100;
  MyForm.Height:=100;
  MyForm.showmodal;
finally
  MyForm.Free;
end

все
PM MAIL WWW ICQ   Вверх
digs
Дата 22.10.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Matematik
Ну и конструкция!
если уверен, что TForm.Create ошибок не даст, надо ставить эту строку до try, а если есть вероятность ошибки, тогда то что в finally... ну сам понимаешь
PM MAIL   Вверх
Matematik
Дата 22.10.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



Цитата(digs @  22.10.2006,  11:45 Найти цитируемый пост)
тогда то что в finally... ну сам понимаешь 

не понимаю
PM MAIL WWW ICQ   Вверх
DarlkElfTen
Дата 22.10.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

MyForm := nil
try
  MyForm :=TForm.Create(Application);
  MyForm.Width:=100;
  MyForm.Height:=100;
  MyForm.showmodal;
finally
  MyForm.Free;
end


Цитата

MyForm :=TForm.Create(Application);
-создание формы

Цитата

finally
  MyForm.Free;

это ведь если она создана можно вызывати?
=> он сказал, что  нада делатьпримерно так

Код

MyForm := nil
MyForm :=TForm.Create(Application);
try
  MyForm.Width:=100;
  MyForm.Height:=100;
  MyForm.showmodal;
finally
  MyForm.Free;
end

--------------------
"Две башни"
PM MAIL ICQ   Вверх
digs
Дата 22.10.2006, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Matematik
Что тут не ясного? Если TForm.Create даст ошибку, то в разделе finally будет конструкция nil.Free
PM MAIL   Вверх
Тутанхамец
Дата 22.10.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Спасибо всем, про try я как-то не подумал.

А MyForm:=nil обязательно? Если TForm.create выполнится, то в MyForm будет форма. Если не выполнится, то nil. Или я не прав?
PM MAIL   Вверх
DarlkElfTen
Дата 22.10.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



не понял
а при взове nill.free  не будет аксес вуалэишн ???
если будет то  в моем посте правильный кодеГ)
--------------------
"Две башни"
PM MAIL ICQ   Вверх
Alexeis
Дата 22.10.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Тутанхамец @  22.10.2006,  12:14 Найти цитируемый пост)
MyForm:=nil

Нужно для того, чтобы знать выделена ли память под форму или нет. Если выделена, то ее нужно освободить, если нет, нельзя освобождать иначе будет ошибка "Access violation read adress nnnn...."

Добавлено @ 12:46 
Цитата(DarlkElfTen @  22.10.2006,  12:38 Найти цитируемый пост)
а при взове nill.free  не будет аксес вуалэишн ???

Не так! 
TForm.free;

Добавлено @ 12:51 
код VCL
Код

procedure TObject.Free;
begin
  if Self <> nil then
    Destroy;
end;



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
DarlkElfTen
Дата 22.10.2006, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



дык, так в итог у формы нилл !!!!!!!!
--------------------
"Две башни"
PM MAIL ICQ   Вверх
digs
Дата 22.10.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(DarlkElfTen @  22.10.2006,  12:38 Найти цитируемый пост)
не понял
а при взове nill.free  не будет аксес вуалэишн ???
если будет то  в моем посте правильный кодеГ)

У тебя все нормально. Я говорил про конструкцию:

Код

MyForm := nil    
try    
  MyForm :=TForm.Create(Application);    
  ...
finally    
  MyForm.Free;    
end

PM MAIL   Вверх
Тутанхамец
Дата 22.10.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Всё. Понял. Спасибо.
PM MAIL   Вверх
Bose
Дата 23.10.2006, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



только лучше не  
Код

MyForm.Free;    


а

Код

MyForm.Release;    


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

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

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

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

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


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

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


 




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


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

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