Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> окно авторизации 
:(
    Опции темы
bagos
Дата 26.1.2009, 02:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 17.6.2006

Репутация: нет
Всего: 1



Нужно сделать окно авторизации.
форма - login
форма - main

  Application.CreateForm(TfrmMain, frmMain);
  Application.CreateForm(TfrmLogin, frmLogin);


сделал так:
в login - в онклике кнопки
  ModalResult := mrOk;


в main
procedure TfrmMain.FormShow(Sender: TObject);
begin
  if frmlogin.ShowModal = mrOk then
    AdvSmoothListBox1.Items.Add;
end;

мне нужна такая логика:
если пароль правильный то, форма (main) открывается и выполняется код находящийся в onshow
если неправильный то остается форма логина
если жмем на крестик в логин форме, то программа завершается.
как это реализовать? устал биться.
PM MAIL   Вверх
Akella
Дата 26.1.2009, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Заключай код в тэги код
Вот, почитай

Добавлено через 3 минуты и 24 секунды
Код

в main
procedure TfrmMain.FormShow(Sender: TObject);
begin
  if frmlogin.ShowModal = mrOk then begin
    AdvSmoothListBox1.Items.Add;
  end else begin
    ShowMessage('Пароль неверный');
    Close;//закроется frmMain
  end;


Но это не лучший вариант, т.к. может наступить момент, когда во время работы приложения будет вызвано событие TfrmMain.FormShow и у тебя опять будет показана форма с запросом имени пользователя и пароля.

Добавлено через 8 минут и 42 секунды
Вот мой работающий код. Хотя может быть кто-нибудь ещё лучше подскажет.
Код

procedure TfmNeoba.FormShow(Sender: TObject);
begin
 //Если первый старт, то показывает запрос логина и пароля
 if bFirstStart then begin

   timerUpdate.Interval := iInterval;
   timerUpdate.Enabled := cboxEnableTimer.EditValue;
   if iInterval < 60000 then begin
     cboxEnableTimer.EditValue  := false;
     timerUpdate.Enabled        := false;
      TrayIcon1.BalloonTitle := 'Neoba 2007';
      TrayIcon1.BalloonHint  := 'Ошибка.'+#13+'Неправильно выставлен интервал обновления.';
      TrayIcon1.BalloonTimeout := 10000;
      TrayIcon1.BalloonFlags := bfWarning;
      TrayIcon1.ShowBalloonHint;

   end;

   fmLogon := TfmLogon.Create(Application);
   if fmLogon.ShowModal = mrOk then begin
     FreeAndNil(fmLogon);
   end else begin
     Freel(fmLogon);
   end;
 end;//if bFirstStart then begin
 lbInterval.Caption := IntToStr(timerUpdate.Interval div 60000);
 bFirstStart := false;
end;

PM MAIL   Вверх
Quartz
Дата 26.1.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.6.2008

Репутация: 3
Всего: 4



Я примерно так делаю (код из .dpr):
Код
begin
  Application.Initialize;
  Application.CreateForm(TfmMain, fmMain);
  Application.CreateForm(TDataModule, DataModule);
  Application.CreateForm(TfmLogin, fmLogin);
  //передаем ссылку на объект БД в диалог авторизации...
  fmLogin.Database := DataModule.Database;
  // ... внутри диалога пытаемся подключиться к базе.
  // Если все ОК - создаем остальные формы и запускаем приложение.
  if fmLogin.ShowModal = mrOk then 
  begin 
    Application.CreateForm(TForm1, Form1);
    Application.CreateForm(TForm2, Form2);
    //....
    Application.Run;
  end;
end.

PM MAIL   Вверх
xfoby
Дата 21.2.2009, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 21.2.2009
Где: Анапа

Репутация: нет
Всего: нет



Quartz, немного не так надо ИМХО..

Код

program Prj;

uses
  Forms, Controls,
  Main in 'Main.pas' {wMain},
  Login in 'Login.pas' {wLogin};

{$R *.res}

begin
  Application.Initialize;
  wLogin := TwLogin.Create(Application);
  wLogin.ShowModal;
  if wLogin.ModalResult = mrOk then
    Application.CreateForm(TwMain, wMain);
  wLogin.Free;
  Application.Run;
end.


Ну, а связь с источником хранения входных данных установи, обработав onCreate формы wLogin  smile 

Ах, да, совсем забыл...на форме логина баттону свойство ModalResult выставь mrNone, а по onClick пропиши что-то такое:

Код

...
var
  Pswd: string; // сюда пароль считай по onCreate из источника (БД, IniFile, Запись и т.д.)
...

procedure TwLogin.Button1Click(Sender: TObject);
begin
  if Edit1.Text = Pswd then
    ModalResult := mrOk;
end;


Таким образом ты получишь вечный запрос на ввод пароля, пока не введут верный или не нажмут крестик =)

Это сообщение отредактировал(а) xfoby - 21.2.2009, 08:00
PM MAIL WWW ICQ Skype Jabber   Вверх
Quartz
Дата 28.2.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.6.2008

Репутация: 3
Всего: 4



Цитата(xfoby @  21.2.2009,  07:50 Найти цитируемый пост)
Ну, а связь с источником хранения входных данных установи, обработав onCreate формы wLogin   

1. Что есть "источник хранения входных данных"? 
2. Явный недостаток при таком подходе: отсутствует возможность повторного использования формы (например, в другом проекте).

Цитата(xfoby @  21.2.2009,  07:50 Найти цитируемый пост)
var
  Pswd: string; // сюда пароль считай по onCreate из источника (БД, IniFile, Запись и т.д.)

Клиника...
PM MAIL   Вверх
xfoby
Дата 9.3.2009, 00:43 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 21.2.2009
Где: Анапа

Репутация: нет
Всего: нет



Цитата

1. Что есть "источник хранения входных данных"? 

Файл, где храняться логин(ы) и пароль(ли) пользователя(ей).

Цитата

2. Явный недостаток при таком подходе: отсутствует возможность повторного использования формы (например, в другом проекте).

Да ну? Я привык все формы такого типа хранить в списке доступных, а не автосоздаваемых и почему-то такой проблемы не встречал.
Создаём форму ещё раз по нажатию, к примеру, на ButtonX:

Код

procedure ButtonXClick(Sender: TObject);
begin
  wLogin := TwLogin.Create(Application);
  wLogin.ShowModal;
  if wLogin.ModalResult = mrOk then
    wMainCreate(Sender);
end;

Цитата

Клиника...


Быть может, но грамотней, чем
Цитата

Код

begin
  Application.Initialize;
  Application.CreateForm(TfmMain, fmMain);
  Application.CreateForm(TDataModule, DataModule);
  Application.CreateForm(TfmLogin, fmLogin);
  //передаем ссылку на объект БД в диалог авторизации...
  fmLogin.Database := DataModule.Database;
  // ... внутри диалога пытаемся подключиться к базе.
  // Если все ОК - создаем остальные формы и запускаем приложение.
  if fmLogin.ShowModal = mrOk then 
  begin 
    Application.CreateForm(TForm1, Form1);
    Application.CreateForm(TForm2, Form2);
    //....
    Application.Run;
  end;
end.


Да и проще для выполнения...
ЗЫ: и к чему вообще нервничать, если я ясно написал "ИМХО"

Это сообщение отредактировал(а) xfoby - 9.3.2009, 00:45
PM MAIL WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0648 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.