Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Вниз

Правильно завершить Приложение при создании   Найти похожие ветки 

 
Kacnep ©   (2005-10-03 08:54) [0]

Всем доброе время суток.
Тут такой вопрос родился. Как при запуске программы ЕДИНЫЖДЫ проверив какое либо условие определиться работать программе дальше или завершить ее работу. Условие может быть довольно сложное. Пусть например при запуске нужно дать пользователю выбрать OpenDialog"ом какой нибудь файл. И если он нажал Cancel в диалоге то заершить работу программы. Как известно в методе формы OnCreate завершить приложение нельзя. Я последней строкой прописывал  PostMessage(f_Main.Handle,WM_User+1,0,0); и в обработчике процедуры OnAfterCreate закрывал приложение.
Может кто нить привести свои примеры или что нить умнее этого? Спасибо.


 
ZeroDivide ©   (2005-10-03 09:08) [1]

О чем ты?

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.Terminate;
end;

Все работает.


 
Kacnep ©   (2005-10-03 09:55) [2]

Не уверен...

 with TIniFile.Create(ChangeFileExt(Application.ExeName,".ini")) do begin
   Global_DBConnection_String:=ReadString("Settings","DB",ExtractFilePath(Application.ExeName));
   Free;
 end;
 with TOpenDialog.Create(Self) do begin
   Filter:="Файлы данных (*.mdb)|*.mdb|All files (*.*)|*.*";
   InitialDir:=ExtractFilePath(Global_DBConnection_String);
   Options:=Options+[ofFileMustExist];
   Title:="Укажите файл данных...";
   DBNAME:=ExtractFileName(Global_DBConnection_String);
   if DBNAME<>"" then FileName:=DBNAME;
   if Execute then begin
     Global_DBConnection_String:="Provider=Microsoft.Jet.OLEDB.4.0;"+
           "Data Source="+FileName+";"+
           "Persist Security Info=False;";
   //        "Jet OLEDB:Database Password="+c_DBPASSWORD;
     DBNAME:=FileName;
   end
   else Application.Terminate;// Global_DBConnection_String:="";
   Free;
 end; //with opendialoig
//  PostMessage(f_Main.Handle,WM_User+1,0,0);


Программа вываливается с Эксепшеном ApplicationError. Подозреваю с обращением к несозданым или удаленным объектам.
Вот так то.... :(
Код вроде совсем простой - ошибок ДУМАЮ нет.


 
Kacnep ©   (2005-10-03 09:58) [3]

Забыл добавить.
Это все в ОнКреате главной формы. А в методе который вызывыается постмессаджем я спокойно БЕЗ ошибки закрываю приложение.


 
y-soft ©   (2005-10-03 10:47) [4]

>Kacnep ©   (03.10.05 08:54)  

Проверяйте свое условие еще до создания форм и запуска главного цикла и в случае невыполнения просто используйте Halt

Т.к. в момент проверки никакого распределения ресурсов еще не произошло, то ничего страшного не произойдет. По этой же причине срабатывать будет очень быстро

program MyProject;

uses
 Forms,
 ...;

{$R *.RES}

begin
 if not CheckCondition() then
   Halt;

 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.


Можно сделать еще проще - поместить проверку условия (вместе с вызовом Halt) в секцию Initialization какого-то специального модуля и поместить его первым в Uses своего DPR


 
Kacnep ©   (2005-10-03 11:37) [5]

О! Это уже ближе к теме...
В приведенном примере такой вопрос - Если я работаю с АДО,ДБ компонентами а также использую ОПЕНДИАЛОГи нормально ли это в модуле ДПР? По поводу секции Initialization вопрос такойже.
Спасибо.


 
Kacnep ©   (2005-10-03 12:28) [6]

Ну хотя бы подскажите КАК "ВЫ" в своих проектах от этого избавляетесь?
Я убрал ошибку но не так как хотелось бы просто убрал создание дата модуля :(
 Application.Initialize;
 Application.CreateForm(Tf_Main, f_Main);
 ///Application.CreateForm(Tdm, dm);

 Application.Run;


 
y-soft ©   (2005-10-03 12:33) [7]

>Kacnep ©   (03.10.05 11:37) [5]

Если я работаю с АДО,ДБ компонентами а также использую ОПЕНДИАЛОГи нормально ли это в модуле ДПР? По поводу секции Initialization вопрос такойже

Если функция проверки не используют объекты, которые на момент проверки еще не существуют, то нормально. Вообще в таких процедурах стараются использовать "быстрые" средства, т.е. по максимуму работать с WinAPI...

И с диалогами открытия файлов, и с ADO, и с доступом к БД это возможно...


 
y-soft ©   (2005-10-03 12:46) [8]

>Kacnep ©   (03.10.05 12:28) [6]

Ошибка при загрузке DataModule говорите?

Следующие ошибки:

1. Указывают в строке соединения абсолютный путь
2. Указывают, что соединение должно установиться сразу же после загрузки

Естественно, в этом случае указанный файл найти не удается, и выскакивает исключение :)

Лечится очень просто: не указывайте явно пути к базам и не устанавливайте в свойствах Connected := True. Делайте это в OnCreate: сначала проверку на существование базы, потом, если база отсутствует, запрос пользователю, чтобы указал путь. Только потом Connected := True...


 
Kacnep ©   (2005-10-03 12:51) [9]

Большое Спасибо за исчераывающий ответ. В принципе если никто не дополнит то тема закрыта.
Проверю обязательно ибо обе эти ошибки наличиствуют (2. - У меня проверка если законектен то отконектиться, прописать полученый в опенфайлдиалог путь и законектиться).
В общем все понятно. Еще раз спасибо y-soft.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.04 c
1-1127884477
AdLeR
2005-09-28 09:14
2005.10.23
Генерация отчетов в Excel


3-1125946201
Капа
2005-09-05 22:50
2005.10.23
Уникальность полей одним запросом


1-1127899053
UnDISCOvery
2005-09-28 13:17
2005.10.23
Менеджер проектов - список модулей по алфавиту. Как?


1-1127903858
Суслик
2005-09-28 14:37
2005.10.23
Скрытие колонок TStringGrid


14-1128106554
Pazitron_Brain
2005-09-30 22:55
2005.10.23
Спутник+LAN+Интернет=Всем интернет.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский