Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1350564355
nikomp
2012-10-18 16:45
2013.04.28
чтение/запись компонентов


15-1356642898
ННН
2012-12-28 01:14
2013.04.28
Подскажите программу для перехвата DEBUG-сообщений.


2-1348601853
Pcrepair
2012-09-25 23:37
2013.04.28
Почему то не работает TClientSocket (RAD2010)


15-1356364173
Es
2012-12-24 19:49
2013.04.28
ADO, ошибка в провайдере MSDAORA при select... for update


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский