Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Delphi - Назначение главной формы

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

ASGASG



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Автор статьи http://www.delphinotes.ru/2013/10/delphi_29.html пишет о создании главной формы после прохождения авторизации.  

Цитата:
PrepareMainForm – создаёт главную форму приложения, ей будет передано управление в Application.Run сразу после выхода из приведённого обработчика.

Каким образом можно передать управление любой форме (сделать главной) в Application.Run ?
Точнее, что надо сделать при создании формы, чтоб Application.Run передал ей управление?

Всего записей: 15 | Зарегистр. 04-01-2008 | Отправлено: 16:24 25-02-2014 | Исправлено: ASGASG, 16:26 25-02-2014
A_V

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
достаточно всего лишь вызвать  
 Application.CreateForm(TFormX, FormX);
если до этого через  Application.CreateForm не было создано ни одной формы (датамодуль не считается) то она и станет главной.
 т.е главная форма - это тупо первая созданная через Application.CreateForm
 
 
можно в принципе выставить принудительно и другую, даже если MainForm уже установлен:  

Код:
 
procedure SetAsMain(Instance: TForm);
 
  procedure ChangeAppWindow(const Handle: THandle; const SetAppWindow, RestoreVisibility: Boolean);
  var
    Style: Integer;
    WasVisible, WasIconic: Boolean;
  begin
    Style := GetWindowLong(Handle, GWL_EXSTYLE);
    if (SetAppWindow and (Style and WS_EX_APPWINDOW = 0)) or
       (not SetAppWindow and (Style and WS_EX_APPWINDOW = WS_EX_APPWINDOW)) then
    begin
      WasIconic := Winapi.Windows.IsIconic(Handle);
      WasVisible := IsWindowVisible(Handle);
      if WasVisible or WasIconic then
        ShowWindow(Handle, SW_HIDE);
      if SetAppWindow then
        SetWindowLong(Handle, GWL_EXSTYLE, Style or WS_EX_APPWINDOW)
      else
        SetWindowLong(Handle, GWL_EXSTYLE, Style and not WS_EX_APPWINDOW);
      if (RestoreVisibility and WasVisible) or WasIconic then
      begin
        if WasIconic then
          ShowWindow(Handle, SW_MINIMIZE)
        else
          ShowWindow(Handle, SW_SHOW);
      end;
    end;
  end;
begin
  PPointer(@Application.MainForm)^ := Instance;
  if Application.MainFormOnTaskBar then
     SetWindowLong(Instance.Handle, GWL_EXSTYLE, GetWindowLong(Instance.Handle, GWL_EXSTYLE) or WS_EX_NOACTIVATE);
   ChangeAppWindow(Instance.Handle, not Application.MainFormOnTaskBar, not Application.MainFormOnTaskBar);
end;
 

 
но вообще это хак, лучше так не делать )

Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 17:53 25-02-2014 | Исправлено: A_V, 17:56 25-02-2014
ASGASG



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Огромное спасибо за разъяснение и пример кода-хака.

Всего записей: 15 | Зарегистр. 04-01-2008 | Отправлено: 20:17 25-02-2014
Big17

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У нас в приложениях окно авторизации появляется уже на фоне главного окна. Если авторизация не прошла - все приложение закрывается.

Всего записей: 147 | Зарегистр. 30-09-2003 | Отправлено: 00:25 28-02-2014
LadyOfWood

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
procedure ShowSplash;
begin
  SplashForm := TSplashForm.Create(nil);
  SplashForm.Show;
  SplashForm.Update
end;
 
begin
  Application.MainFormOnTaskBar := true;
  ShowSplash;
  Application.Initialize;
  Application.Title := 'Title';
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.

Как вариант.

Всего записей: 620 | Зарегистр. 16-09-2003 | Отправлено: 17:33 19-04-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Delphi - Назначение главной формы


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru