Форум: "Начинающим";
Текущий архив: 2013.04.28;
Скачать: [xml.tar.bz2];
ВнизАккуратный выход Найти похожие ветки
← →
thely (2012-10-17 11:23) [0]Подскажите как поаккуратней выйти из проги при не верном пароле.
пароль проверяем в датамодуле, который создается первым, затем главная форма. При ошибке пароля выполняю Application.Terminate, все равно выдается ошибка.
← →
Palladin © (2012-10-17 11:38) [1]если выдается ошибка значит никак, сиди в проге дальше
← →
И. Павел © (2012-10-17 11:49) [2]> [0] thely (17.10.12 11:23)
Лучше вынесите авторизацию куда-нибудь (в отдельную функцию) и вызывайте из главного файла программы (тот, который с расширением dpr/droj). Если авторизация не прошла, то и остальные формы можно не создавать. Для того, чтобы открыть этот главный файл и что-то в нем дописать, выберите в меню Project —> View source. Ошибка выдается, т.к. Application->Terminate просто просит программу завершиться тогда, когда та освободиться от остальных действий.
← →
Ega23 © (2012-10-17 11:55) [3]
> Лучше вынесите авторизацию куда-нибудь (в отдельную функцию)
> и вызывайте из главного файла программы
Чем лучше-то?
← →
thely (2012-10-17 11:59) [4]не получится вынести. датамодуль придется создать, для того чтобы пароль в БД поглядеть. По Halt наверно совсем грубо выходить?
Вызов Application.Terminate присваивает Application.Terminated=false ?
← →
Inovet © (2012-10-17 12:00) [5]При неуспешной авторизации в интерфейсе оставить только элементы для заваершения программы и авторизации, ну ещё там всякие хелпы, "О программе..." и прочее не имеющее отношения к работе с базой.
← →
thely (2012-10-17 12:03) [6]в общем я понимаю так: вызвав Application.Terminate, прога все равно продолжает запускаться, приз авершениии инициализации она закрывается. следовательно ошибка возникает из - за того, что чтото не убивается?
во написал, сам не понял
← →
Inovet © (2012-10-17 12:04) [7]> [6] thely (17.10.12 12:03)
> в общем я понимаю так: вызвав Application.Terminate, прога
> все равно продолжает запускаться
Так главная форма, поди, не создана ещё?
← →
И. Павел © (2012-10-17 12:08) [8]> Чем лучше-то?
Концептуально. У меня класс датамодуля обычно содержат методы, упрощающие работу с БД (и стараюсь переносить этот класс из программы в программу, хоть он и обрастает новыми элементами). А авторизация — это отдельная законченная операция. Хотя, кончено, все зависит от подхода.
← →
thely (2012-10-17 12:08) [9]Application.Initialize;
Application.Title := "";
SplashForm := TSplashForm.Create(Application);
SplashForm.Show;
SplashForm.Update;
Application.CreateForm(TdmMain, dmMain);
Application.CreateForm(TfmMain, fmMain);
Application.CreateForm(TdlgFilter, dlgFilter);
SplashForm.Hide;
SplashForm.Free;
if not Application.Terminated then
begin
Application.MainFormOnTaskbar := True;
Application.Run;
end;
Проверка пароля идет в dmMain в методе Create. при несоответствии вызывается Application.Terminate. Ошибка возникает при Application.Run
← →
thely (2012-10-17 12:22) [10]в общем разобрался.
был переопределен метод
procedure TfmMain.FormCreate(Sender: TObject);
begin
Screen.OnActiveFormChange:=UpdateWindowForm;
надо было его поставить в nil. Ошибка исчезла
← →
Ega23 © (2012-10-17 12:26) [11]
> И. Павел © (17.10.12 12:08) [8]
>
> > Чем лучше-то?
>
> Концептуально. У меня класс датамодуля обычно содержат методы,
> упрощающие работу с БД (и стараюсь переносить этот класс
> из программы в программу, хоть он и обрастает новыми элементами).
> А авторизация — это отдельная законченная операция. Хотя,
> кончено, все зависит от подхода.
Ну и чем тебе наличие методов мешает? Не, я понимаю, что гуй грузить не следует. Но датамодуль-то чем помешал?
Тем более, что авторизация (как правило) требует коннекта к БД.
← →
И. Павел © (2012-10-17 12:51) [12]> Ну и чем тебе наличие методов мешает?
Ну я описал причины в [8]. Прежде всего — универсальность датамодуля, чтобы использовать его в других программах с минимумом изменений. Других причин нет. Если вам недостаточно — ни кто не запрещает объединить авторизацию и датамодуль.
← →
Ega23 © (2012-10-17 13:08) [13]
> Прежде всего — универсальность датамодуля, чтобы использовать
> его в других программах с минимумом изменений.
А не проще ли вынести те самые методы в отдельный класс? И уже его создавать в рамках датамодуля? Датамодуль - это, по-сути, просто контейнер для "всякого".
← →
Плохиш © (2012-10-17 13:12) [14]
> thely (17.10.12 12:08) [9]
1. Создать в TdmMain свойство Connected и выставить его в true при успешном подключении.
2. Проверить свойство и при false не выполнять оставшиеся строки программы. Всё завершится само.
← →
Ega23 © (2012-10-17 13:28) [15]
> 1. Создать в TdmMain свойство Connected и выставить его
> в true при успешном подключении.
> 2. Проверить свойство и при false не выполнять оставшиеся
> строки программы. Всё завершится само.
Угу, так и делаю.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.04.28;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.002 c