Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2010, 12:22   #1
r00xus
Пользователь
 
Регистрация: 12.02.2008
Сообщений: 12
По умолчанию Форма с авторизацией пользователя после появления главной формы

Здравствуйте коллеги. При запуске приложения появляется форма для ввода логина и пароля. Раньше было так:
Код:
procedure TMainForm.FormShow(Sender: TObject);
begin
   LogonForm := TLogonForm.Create(nil);
   LogonForm.ShowModal;
end;
то есть LogonForm появляется до появления главной формы.
А теперь нужно чтобы она появлялась после появления главной. Как такое реализовать?
r00xus вне форума Ответить с цитированием
Старый 13.01.2010, 12:26   #2
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Как вариант - создать неактивный таймер, по событию FormShow его запустить, в OnTimer деактивировать этот таймер и выполнить приведённый пример кода.
Greek9000 вне форума Ответить с цитированием
Старый 13.01.2010, 12:29   #3
r00xus
Пользователь
 
Регистрация: 12.02.2008
Сообщений: 12
По умолчанию

это первое что пришло на ум... но нехорошо как-то...
r00xus вне форума Ответить с цитированием
Старый 13.01.2010, 12:39   #4
zmey31313
Форумчанин
 
Регистрация: 19.11.2009
Сообщений: 155
Сообщение

Через событие OnClick по главной форме, т. е. после нажатия на главную форму, блокировать её и выводить окно формы с авторизацией пользователя, хотя лучше сделать через OnActivate.
По всем вопросам связанным с Делфи или Паскаль обращайтесь, чем смогу тем и помогу.
Помог жми на весы!!!
dmi83206389@mail.ru
zmey31313 вне форума Ответить с цитированием
Старый 13.01.2010, 12:42   #5
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Странно...
У меня форма новая показывается после отображения главной ...

Код:
procedure TfrmMain.FormShow(Sender: TObject);
begin
  // накидал по-быстрому...
  frmDel := TfrmDel.Create(nil);
  frmDel.ShowModal;
end;
Тем не менее, попробуйте сделать вот так:

Код:
procedure TfrmMain.FormShow(Sender: TObject);
begin
  while not frmMain.Visible do begin
    Application.ProcessMessages;
  end;
  LogonForm := TLogonForm.Create(nil);
  LogonForm.ShowModal;
end;

Последний раз редактировалось Greek9000; 13.01.2010 в 12:57.
Greek9000 вне форума Ответить с цитированием
Старый 13.01.2010, 13:45   #6
r00xus
Пользователь
 
Регистрация: 12.02.2008
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Greek9000 Посмотреть сообщение
Странно...
У меня форма новая показывается после отображения главной ...
Application.ProcessMessages не помогло... все равно LogonForm появляеться первой блокуя появление главной. у вас Delphi какой версии? не могли бы вы выложить пример если не трудно...
r00xus вне форума Ответить с цитированием
Старый 13.01.2010, 14:46   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Код:
procedure TForm1.FormActivate(Sender: TObject);
begin
Form2:=TForm2.Create(Application);
Form2.ShowModal;
Form2.Free;
end;
mihali4 вне форума Ответить с цитированием
Старый 14.01.2010, 06:21   #8
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Цитата:
Application.ProcessMessages не помогло... все равно LogonForm появляеться первой блокуя появление главной. у вас Delphi какой версии? не могли бы вы выложить пример если не трудно...
К сожалению, выложить проект не могу - он рабочий, да к тому же он содержит нестандартные компоненты и соединение с БД и поэтому у Вас вряд ли запустится.
На пустом проекте наблюдается Ваш эффект (модальная форма отображается до главной).
Я попытался в своём закомментировать OnCreate главной формы - "Ваш эффект" не появился. Затем на тестовую главную форму накидал основные компоненты, которые были в рабочем проекте - опять тишина.
Текст проекта:
Код:
program dbrpl;

uses
  Forms,
  uMain in 'uMain.pas' {frmMain},
  DumpMaker in 'DumpMaker.pas',
  SchemeUtils in 'SchemeUtils.pas',
  uCrypt in 'uCrypt.pas',
  DataMngUtils in 'DataMngUtils.pas';

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
end.
т.е. абсолютно стандартный.

Так что - будем искать...

З.Ы.

Нашёл!
У меня на форме лежит компонент TFormStorage из библиотеки RXLib. Он нужен для сохранения текущего состояния формы (размер, положение и т.д.). У него есть свойство Active. Обычно у меня оно всегда выставлено как False, но в этот раз я торопился и забыл его сбросить, поэтому оно осталось равным True (по-умолчанию). Этот компонент сохранил состояние главной формы (wsMaximized). Он же восстанавливает это состояние во время создания формы. А при восстановлении делает что-то, что заставляет отобразиться главную форму до начала выполнения FormShow.
Что бы разобраться, что же конкренто отображает форму внутри компонента - потребуется некоторое время.
Пока же Вы можетет просто воспользоваться данным знанием без его понимания.
Единственный минус этого метода в том, что в системной папке создастся ini-файл (по-моему с именем Вашего экзешника).

Последний раз редактировалось mihali4; 14.01.2010 в 19:21.
Greek9000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прилодение без главной формы Altera Общие вопросы Delphi 5 25.10.2009 17:40
Обращение из формы в dll к элементу главной формы (delphi) a_n_n_a Помощь студентам 3 10.05.2009 04:00
Плавное появления формы Claster Помощь студентам 4 12.11.2008 23:59
как поменять текст в лабел главной формы MAcK Общие вопросы .NET 8 08.05.2008 12:42
Скрытие главной формы во время работы приложения Gorin Общие вопросы Delphi 7 23.08.2007 19:44