Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Аккуратный выход [D2005, XP]


thely ©   (2012-10-17 11:23:00) 

Подскажите как поаккуратней выйти из проги при не верном пароле.
пароль проверяем в датамодуле, который создается первым, затем главная форма. При ошибке пароля выполняю Application.Terminate, все равно выдается ошибка.


Ega23   (2012-10-17 13:28:00) [1]


> 1. Создать в TdmMain свойство Connected и выставить его
> в true при успешном подключении.
> 2. Проверить свойство и при false не выполнять оставшиеся
> строки программы. Всё завершится само.


Угу, так и делаю.


Плохиш   (2012-10-17 13:12:00) [2]


> thely   (17.10.12 12:08) [9]

1. Создать в TdmMain свойство Connected и выставить его в true при успешном подключении.
2. Проверить свойство и при false не выполнять оставшиеся строки программы. Всё завершится само.


Ega23   (2012-10-17 13:08:00) [3]


> Прежде всего — универсальность датамодуля, чтобы использовать
> его в других программах с минимумом изменений.


А не проще ли вынести те самые методы в отдельный класс? И уже его создавать в рамках датамодуля? Датамодуль - это, по-сути, просто контейнер для "всякого".


И. Павел   (2012-10-17 12:51:00) [4]

> Ну и чем тебе наличие методов мешает?

Ну я описал причины в [8]. Прежде всего — универсальность датамодуля, чтобы использовать его в других программах с минимумом изменений. Других причин нет. Если вам недостаточно — ни кто не запрещает объединить авторизацию и датамодуль.


Ega23   (2012-10-17 12:26:00) [5]


> И. Павел ©   (17.10.12 12:08) [8]
>
> > Чем лучше-то?
>
> Концептуально. У меня класс датамодуля обычно содержат методы,
>  упрощающие работу с БД (и стараюсь переносить этот класс
> из программы в программу, хоть он и обрастает новыми элементами).
>  А авторизация — это отдельная законченная операция. Хотя,
>  кончено, все зависит от подхода.


Ну и чем тебе наличие методов мешает? Не, я понимаю, что гуй грузить не следует. Но датамодуль-то чем помешал?
Тем более, что авторизация (как правило) требует коннекта к БД.


thely   (2012-10-17 12:22:00) [6]

в общем разобрался.
был переопределен метод
procedure TfmMain.FormCreate(Sender: TObject);
begin
 Screen.OnActiveFormChange:=UpdateWindowForm;

надо было его поставить в nil. Ошибка исчезла


И. Павел   (2012-10-17 12:08:00) [7]

> Чем лучше-то?

Концептуально. У меня класс датамодуля обычно содержат методы, упрощающие работу с БД (и стараюсь переносить этот класс из программы в программу, хоть он и обрастает новыми элементами). А авторизация — это отдельная законченная операция. Хотя, кончено, все зависит от подхода.


thely   (2012-10-17 12:08:00) [8]

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


Inovet   (2012-10-17 12:04:00) [9]

> [6] thely   (17.10.12 12:03)
> в общем я понимаю так: вызвав Application.Terminate, прога
> все равно продолжает запускаться

Так главная форма, поди, не создана ещё?


thely   (2012-10-17 12:03:00) [10]

в общем я понимаю так: вызвав Application.Terminate, прога все равно продолжает запускаться, приз авершениии инициализации она закрывается. следовательно ошибка возникает из - за того, что чтото не убивается?
во написал, сам не понял


Inovet   (2012-10-17 12:00:00) [11]

При неуспешной авторизации в интерфейсе оставить только элементы для заваершения программы и авторизации, ну ещё там всякие хелпы, "О программе..." и прочее не имеющее отношения к работе с базой.


thely   (2012-10-17 11:59:00) [12]

не получится вынести. датамодуль придется создать, для того чтобы пароль в БД поглядеть. По Halt наверно совсем грубо выходить?
Вызов Application.Terminate присваивает Application.Terminated=false ?


Ega23   (2012-10-17 11:55:00) [13]


> Лучше вынесите авторизацию куда-нибудь (в отдельную функцию)
> и вызывайте из главного файла программы

Чем лучше-то?


И. Павел   (2012-10-17 11:49:00) [14]

> [0] thely   (17.10.12 11:23)

Лучше вынесите авторизацию куда-нибудь (в отдельную функцию) и вызывайте из главного файла программы (тот, который с расширением dpr/droj). Если авторизация не прошла, то и остальные формы можно не создавать. Для того, чтобы открыть этот главный файл и что-то в нем дописать, выберите в меню Project —> View source. Ошибка выдается, т.к. Application->Terminate просто просит программу завершиться тогда, когда та освободиться от остальных действий.


Palladin   (2012-10-17 11:38:00) [15]

если выдается ошибка значит никак, сиди в проге дальше


Наверх

Титульная страница Поиск, карта сайта Написать письмо