Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Использовать компоненты, но не использовать Forms.pas


Страницы:   1 2

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 - это потомок формы


Кто сказал?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо