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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Открытие новой формы и закрытие текущей. 
:(
    Опции темы
БелАмор
Дата 9.6.2013, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(bems @  9.6.2013,  05:51 Найти цитируемый пост)
но с другой стороны можно понять людей которые это применяют.

Не могу я понять таких людей. Это примерно как лезть в окно, вырезая решётку автогеном только из-за того, что дверь открывается не внутрь, а наружу. Человеку говоришь: "Ну потяни ты на себя дверь, и всё, никаких проблем..." А он гордо заявляет, что его задача решена, и посему такое решение его вполне устраивает, и добавляет: "Классная штука - автоген, что бы я без него делал? Спасибо тому парню, который мне его дал..."

Цитата(bems @  9.6.2013,  05:51 Найти цитируемый пост)
нехватает в vcl возможности сделать сабж без хаков, чо уж там 

В чем состоит проблема?
В том, что первая создаваемая форма в приложении назначается главной, а потом нельзя назначить главной формой другую?
Ну, так, Application.CreateForm как раз и предназначена для автоматического назначения главной формы. Т.е. человек сначала сам, своими собственными руками назначает главную форму, а потом думает, как бы её переназначить... Это какой-то мазохизм...
Если создавать форму через конструктор, например TPasswordForm.Create, то форма не назначается главной - создавай, отображай, закрывай, уничтожай хоть десяток, а первая созданная через Application.CreateForm будет назначена главной. И переназначать главную форму просто нет необходимости.

PM   Вверх
Illusion Dolphin
Дата 9.6.2013, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Возможно этот вариант не сочетается с не так давно появившемся (ИМХО в Д2005) свойством TApplication.MainFoirmOnTaskBar

Это исправляется без проблем. 

Цитата

но с другой стороны можно понять людей которые это применяют.

Согласен, тут отнюдь не гибкое решение, которое не всегда приминимо, могли бы это уже и исправить. 

Цитата

Ну, так, Application.CreateForm как раз и предназначена для автоматического назначения главной формы. Т.е. человек сначала сам, своими собственными руками назначает главную форму, а потом думает, как бы её переназначить... Это какой-то мазохизм...

У меня в приложении нет главной формы smile Их много и выход происходит когда они все закрылись в любом порядке, тут приходится выкручиваться  smile 


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
bems
Дата 9.6.2013, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(БелАмор @  9.6.2013,  07:38 Найти цитируемый пост)
Классная штука - автоген, что бы я без него делал? Спасибо тому парню, который мне его дал...
это не автоген. скорее согнутая специальным образом заколка

Цитата(БелАмор @  9.6.2013,  07:38 Найти цитируемый пост)
В том, что первая создаваемая форма в приложении назначается главной, а потом нельзя назначить главной формой другую?

вторая половина

Цитата(БелАмор @  9.6.2013,  07:38 Найти цитируемый пост)
Ну, так, Application.CreateForm как раз и предназначена для автоматического назначения главной формы

да знают тут все для чего оно предназначено. но работает неудобно.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
БелАмор
Дата 9.6.2013, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Illusion Dolphin @  9.6.2013,  10:13 Найти цитируемый пост)
У меня в приложении нет главной формы  Их много и выход происходит когда они все закрылись в любом порядке, тут приходится выкручиваться  

Цитата(bems @  9.6.2013,  13:06 Найти цитируемый пост)
да знают тут все для чего оно предназначено.

Я ни в коем случае не отрицаю, что бывают какие-то специфические ситуации, но большинство вопросов по поводу переназначения главной формы связаны с заставками и запросами логинов/паролей, т.е. в большинстве случаев реальной необходимости переназначения нет. Однако, я практически не встречаю советов создавать форму через конструктор, чтобы она не назначалась главной.

PM   Вверх
Illusion Dolphin
Дата 9.6.2013, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

переназначения главной формы связаны с заставками и запросами логинов/паролей

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


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Poseidon
Дата 9.6.2013, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



А по-моему, возникновение необходимости переназначить главную форму - это ошибка в архитектуре. В хорошо продуманных программах такой необходимости нет. Заставка? Она создается и уничтозается отдельно, пока главная форма грузится. Форма логинов? Так эту форму нужно показывать после загрузки главной. В голову вообще не приходят варианты, когда может понадобится переназначение главной формы и что бы это ну никак нельзя было обойти.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
northener
Дата 10.6.2013, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

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



Цитата(Poseidon @  9.6.2013,  23:04 Найти цитируемый пост)
Форма логинов? Так эту форму нужно показывать после загрузки главной. 

Вот с этим никак не согласен. Приложения требующие проверку учетной записи своего пользователя как правило довольно большие и их загрузка занимает довольно заметное время. Так зачем его тратить, если проверка даст отрицательный результат? Представте себе Winlogon, который проверяет учетную запись пользователя после полной загрузки ОС! Это конечно не полностью адекватный пример, но почти. Ведь трудно себе представить Дельфи-приложение, которое после "загрузки" главной формы ещё не готово выполнять все свои функции, если авторизация пройдет успешно.


Цитата(Illusion Dolphin @  9.6.2013,  21:27 Найти цитируемый пост)
Заставку хорошо бы делать на винапи (т.к. VCL не многопоточный) в отдельном потоке, чтобы не мешать загрузке приложения.

Примеру от Юрия Зотова на Королевстве уже почти 4 года. (А может быть и больше).


Цитата(БелАмор @  9.6.2013,  19:59 Найти цитируемый пост)
Однако, я практически не встречаю советов создавать форму через конструктор, чтобы она не назначалась главной.

Ещё при царе горохе в демках в поставке Дельфи появился пример создания Splash Screen. В проекте MastApp.dpr
И советы посмотреть этот пример я встречал неоднократно. И сам советовал. Но воз и ныне там. Гугль и иже с ним возвращает только советы кульхацкеров уровня песочницы. :(
Хотя этот пример даже содержит хелп файл (правда на аглицком), в котором чёрным по белому написано:
The Splash screen appears when MASTAPP starts. MASTAPP.DPR calls TSplashForm.Create to create the splash screen and the instance of the application, calls SplashForm.Show to display the form while all other MASTAPP forms are created, and calls SplashForm.Update to display the application's "Loading ..." message on the form.
When all MASTAPP forms are created, MASTAPP.DPR calls SplashForm.Hide to hide the Splash screen display.

И никаких проблем с MainForm.

Это сообщение отредактировал(а) northener - 10.6.2013, 01:42


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
bems
Дата 10.6.2013, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Poseidon @  9.6.2013,  23:04 Найти цитируемый пост)
В голову вообще не приходят варианты, когда может понадобится переназначение главной формы
ну это от узости кругозора



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Poseidon
Дата 10.6.2013, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



Цитата(northener @  10.6.2013,  01:24 Найти цитируемый пост)
Приложения требующие проверку учетной записи своего пользователя как правило довольно большие и их загрузка занимает довольно заметное время. Так зачем его тратить, если проверка даст отрицательный результат?
А кто говорит о том, что нужно сначала все загружать, а потом спрашивать логин? Создаем главную форму - создаем форму ввода логина и показываем ее - если логин проходит, грузим все что нам надо для работы. Создание главной формы не говорит о том, что нам тут же надо и все загружать сразу.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
northener
Дата 10.6.2013, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

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



Цитата(Poseidon @  10.6.2013,  10:40 Найти цитируемый пост)
Создание главной формы не говорит о том, что нам тут же надо и все загружать сразу.


Ну не скажи. Раз главное окно программы показано, то среднестатистический пользователь считает, что ему уже можно нажимать на всякие пупочки в этом окне чтобы получить желаемый результат. А если основной функционал программы ещё не загружен, то вышеуказанный пользователь очень огорчится когда у него ничего не выйдет smile



--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
northener
Дата 11.6.2013, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

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



Или я неправильно понял:
Цитата(Poseidon @  10.6.2013,  10:40 Найти цитируемый пост)
Создаем главную форму - создаем форму ввода логина и показываем ее - если логин проходит, грузим все что нам надо для работы. 

Где в таком случае размещаем создание и показ формы ввода логина? 



--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Poseidon
Дата 11.6.2013, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



Цитата(northener @  11.6.2013,  01:07 Найти цитируемый пост)
Где в таком случае размещаем создание и показ формы ввода логина?

northener, шутки шутим? 
Цитата(Poseidon @  10.6.2013,  10:40 Найти цитируемый пост)
Создаем главную форму - создаем форму ввода логина и показываем ее - если логин проходит, грузим все что нам надо для работы.


Код

program Project1;

uses
  Vcl.Forms, Vcl.Controls,
  Unit1 in 'Unit1.pas' {MainForm},
  Unit2 in 'Unit2.pas' {LoginForm};

{$R *.res}

begin
  Application.Initialize;

  LoginForm:= TLoginForm.Create(Application);
  if LoginForm.ShowModal = mrOk then
  begin
    Application.CreateForm(TMainForm, MainForm);
    Application.Run;
  end;
end.


Код

procedure TLoginForm.OKButtonClick(Sender: TObject);
begin
  if (True) then // логин прошел
    ModalResult:= mrOk
  else // логин НЕ прошел
    ModalResult:= mrCancel
end;




--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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