Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.04.28;
Скачать: CL | DM;

Вниз

Аккуратный выход   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.007 c
3-1289205363
VikOss
2010-11-08 11:36
2013.04.28
ClientDataSet


4-1264961719
ProgRAMmer Dimonych
2010-01-31 21:15
2013.04.28
Получить шрифт заголовка окна без обращения к реестру


15-1356813003
Юрий
2012-12-30 00:30
2013.04.28
С днем рождения ! 30 декабря 2012 воскресенье


15-1356769502
Undertacker
2012-12-29 12:25
2013.04.28
Как прочитать сохраненные файлы Оперы-мини?


15-1356553802
Юрий
2012-12-27 00:30
2013.04.28
С днем рождения ! 27 декабря 2012 четверг