![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использовать компоненты, но не использовать Forms.pas
DevilDevil © (2007-05-05 22:16:00)Мне интересно, есть ли в Delphi такая возможность. Есть что-то типа DataModule, на который можно брасать и настраивать компоненты, но при этом не использовать модуль Forms (не создавать и не запускать Application, ...). TComponent - это не TControl, поэтому форма ему не нужна. TDataModule - это потомок формы. Делать по аналогии с KOL достаточно сложно; нет ли более простого способа?
DevilDevil (2007-05-06 23:38:00) [21]ТАК ПРАВИЛЬНО:
try
DataModule1 := TDataModule1.Create(NIL);
except
on E : Exception do ... ; // показать ошибку
try
DataModule1.Free;
except
end;
Halt;
end;
TRY
try
DataModule1.Run(); // <-- Моё
except
on E : Exception do ... ; // показать ошибку
end;
FINALLY
try
DataModule1.Free;
except
end;
END;
Leonid Troyanovsky (2007-05-06 21:13:00) [22]
> DrPass © (06.05.07 20:30) [16]
> не будет создан, и делать free в секции finally отнюдь не
> кошерно), но может быть внутри блока try...except, ести
Разница лишь в том, что try..except допускает существование
жизни после смерти. Путем reraise.
--
Regards, LVT.
DrPass (2007-05-06 20:30:00) [23]
> сейчас я спрашиваю, как корректно связать Finally и Except
Конструктор должен вызываться передблоком try..finally ***.Free; end (т.к. при исключении в конструкторе объект не будет создан, и делать free в секции finally отнюдь не кошерно), но может бытьвнутри блока try...except, ести тебе так хочется. Что тут непонятного?
Плохиш (2007-05-06 17:41:00) [24]
> DevilDevil © (06.05.07 17:21) [14]
Ты уже давно здесь мелькаешь, но так до сих пор не соизволил хоть что-нибуть прочитать...
PS. Странно, что ветка всё ещё не в начинающих...
DevilDevil (2007-05-06 17:21:00) [25]сейчас я спрашиваю, как корректно связать Finally и Except, не упуская возможности отловить ошибку в OnCreate. Недопонимаю, поэтому и спрашиваю :)
Loginov Dmitry (2007-05-06 15:29:00) [26]> А как быть в "моём" случае?
А что особенного в твоем случае?
Что, Дельфи под рукой нету проверить?
DevilDevil (2007-05-06 15:17:00) [27]> И Create должно стоять ПЕРЕД try.
А если raise произойдёт в TDataModule1.OnCreate() ?
> Будет. Не путай try-finally-end с try-except-end.
Хм... Я скорее всего что-то путаю...
raise только генерирует "сообщение об ошибке". А само сообщение выскакивает
try
raise
except
on E : Exception do ... ; // <-- ЗДЕСЬ
end;
В Application.Run try..except есть, поэтому сообщения об ошибках raise мы видим. А как быть в "моём" случае?
Loginov Dmitry (2007-05-06 14:58:00) [28]> Ты не поверишь, но на дельфи иногда пишут приложения без
> GUI, соответственно и без Forms.Application
охотно верю
Юрий Зотов (2007-05-06 13:37:00) [29]> DevilDevil © (06.05.07 11:57) [5]
И Create должно стоять ПЕРЕД try.
Зюзя (2007-05-06 13:37:00) [30]Вот так:
DataModule1 := TDataModule1.Create(NIL);
try
DataModule1.Run(); // <-- Моё
finally
DataModule1.Free;
end;
1) Т.е. если в коде будет raise, то сообщения об ошибке не будет?
Будет. Не путай try-finally-end с try-except-end.
2) А Какие там могут быть грабли?
Какие угодно. Кто ж тебя знает, что у тебя там в DataModule реализовано, и как ты этим пользуешься.
Вот, например, Application инициализируется в модуле Controls, так что, если этот модуль у тебя в проекте подключен, то и Application у тебя будет, независимо от того, используешь ли ты его, или нет.
То есть, граблей может быть много. Но, ты же сам понимаешь, что про все возможные грабли и способы их обхода тебе никто не расскажет. Так что, если так уж очень хочется, будь готов к неожиданностям. (Я не пугаю, я просто предупреждаю). "Ищущий да обрящет" (С)
jack128 (2007-05-06 13:16:00) [31]Loginov Dmitry © (06.05.07 12:06) [6]
Нафик нужно такое приложение без объекта Application?
Ты не поверишь, но на дельфи иногда пишут приложения без GUI, соответственно и без Forms.Application
DevilDevil (2007-05-06 13:05:00) [32]> Loginov Dmitry © (06.05.07 12:06) [6]
Движок. Планирую лет так через надцать.
Loginov Dmitry (2007-05-06 12:06:00) [33]Че дурью маешься? Нафик нужно такое приложение без объекта Application? Че с ним делать-то?
DevilDevil (2007-05-06 11:57:00) [34]> Зюзя (06.05.07 10:27) [4]
Спасибо. Так?
try
DataModule1 := TDataModule1.Create(NIL);
DataModule1.Run(); // <-- Моё
finally
DataModule1.Free;
end;
1) Т.е. если в коде будет raise, то сообщения об ошибке не будет?
2) А Какие там могут быть грабли?
Зюзя (2007-05-06 10:27:00) [35]Как минимум, надо все это в try-finally-end.
А вообще, естественно, работать будет.
Интересно, почему ты решил что нет?
Но только запомни: если ты отходишь от модели Win32 приложения, реализованной разработчиками Borland, то все грабли, которые ты встретишь на этом пути - твои личные проблемы.
То есть, делай что хочешь. Но потом не жалуйся.
Leonid Troyanovsky (2007-05-06 10:15:00) [36]
> DevilDevil © (06.05.07 09:38) [2]
> Тогда зачем создаются строки ?
Если звезды зажигаются, значит это кому-нибудь надо.
> Хочешь сказать, я могу тупо написать:
Нет. Надо писать остро.
> и всё будет корректно работать?
Что есть "корректно"?
--
Regards, LVT.
DevilDevil (2007-05-06 09:38:00) [37]хм... согласен, не потомок.
Тогда зачем создаются строки ?
Application.Initialize;
Application.CreateForm(TDataModule1, DataModule1);
Application.Run;
Хочешь сказать, я могу тупо написать:
DataModule1 := TDataModule1.Create(NIL);
DataModule1.Run(); // <-- Моё
DataModule1.Free;
и всё будет корректно работать?
Loginov Dmitry (2007-05-05 22:36:00) [38]> TDataModule - это потомок формы
Кто сказал?