Форум: "Основная";
Текущий архив: 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