Два режима отображения формы

BuddyQ
Дата: 16.05.2011 14:18:53
Добрый день!
Есть форма, которую в зависимости от контекста нужно показывать либо как дочернее MDI-окно, либо как не обычное модальное.
Режим отображения задается, допустим, передачей логической переменной.

Т.е. теоретически что-то вроде:

Для немодального режима:
frmLiabilityContractsManager := TfrmDocumentManager.Create(Application, False);

Для модального режима:
frmLiabilityContractsManager := TfrmDocumentManager.Create(Application, True);

Подскажите, как правильно написать конструктор для TfrmDocumentManager. Или любой другой путь для решения этой проблемы.
Ramin Hashimzade
Дата: 16.05.2011 14:32:51
  if Edit1.Text <> 'MODAL' then
  begin
     Form2 := TForm2.Create(Application);
     Form2.FormStyle := fsMDIChild;
  end else
  begin
     Form2 := TForm2.Create(Application);
     Form2.ShowModal;
  end;
BuddyQ
Дата: 16.05.2011 14:39:32
Все гениальное просто. Спасибо, Ramin!

P.S. Тему можно закрыть.
Batts
Дата: 12.02.2012 09:37:22
Столкнулся с проблемой отображения (или прорисовки) модального окна -
есть fsMDIChild - форма и необходимость открытия в нем еще одной fsMDIChild формы (в "исходном" режиме - это просто окно редактирования справочника), но уже через ShowModal (это в режиме "выбор значения из справочника" для передачи в "основную Child-форму). При этом хочу, что бы форма появилась в центре (poMainFormCenter) главной формы fsMDIform.
так при ShowModal окно сначала создается (визуально прорисовывается) где-то за пределами главной fsMDIform (над левым верхним углом), и уже потом "перепрыгивает" в центр формы.
Можно ли как-то избавиться от "прыжка" окна, что бы оно сразу в центре и появилось?
Batts
Дата: 12.02.2012 09:40:16
форму открываю (в стандартном New-MDI Application) кодом:


procedure TMDIChild.btn1Click(Sender: TObject);
var
   DlgForm:TMDIChild; (тут любая Child-форма)
begin
   DlgForm:=TMDIChild.Create(self);
   DlgForm.FormStyle:=fsNormal;
   DlgForm.Visible:=False;
   DlgForm.btn1.Destroy;
   DlgForm.Memo1.Text:='&#221;&#210;&#206; &#204;&#206;&#196;&#192;&#203;&#220;&#205;&#206;&#197; &#206;&#202;&#205;&#206;';
   DlgForm.Position:=poMainFormCenter;
   DlgForm.ShowModal;

end;
_Vasilisk_
Дата: 12.02.2012 13:31:28
Batts
DlgForm.Visible:=False;
DlgForm.btn1.Destroy;
Эта порнография зачем?
Batts
Дата: 13.02.2012 01:41:03
_Vasilisk_
Batts
DlgForm.Visible:=False;
DlgForm.btn1.Destroy;

Эта порнография зачем?

иначе "Cannot maek visible window modal". на счет кнопки - так, что бы в окна были разные (btn1Click же...).
а Вы как предлагаете открывать форму без порнографии?
Alex Kuznetsov
Дата: 13.02.2012 07:22:06
Batts
_Vasilisk_
пропущено...
Эта порнография зачем?

иначе "Cannot maek visible window modal". на счет кнопки - так, что бы в окна были разные (btn1Click же...).
а Вы как предлагаете открывать форму без порнографии?

Чтобы не париться с такой порнографией, сделайте две копии формы, одну для модального отображения, другую для немодального.
Код обработки событий выносите в отдельный модуль (unit то-бишь).
Естественно, что это потребует чуть больше работы с точки зрения поддержки приложения, но ИМХО - это более верное решение нежели смена признака модальности формы на лету.
И потом, что будете делать, если к примеру в модельной версии формы понадобится добавить ещё какие-либо элементы управления, которых не должно быть в немодальной?
Batts
Дата: 13.02.2012 08:47:59
Alex Kuznetsov
.........
Чтобы не париться с такой порнографией, сделайте две копии формы, одну для модального отображения, другую для немодального.
Код обработки событий выносите в отдельный модуль (unit то-бишь).
Естественно, что это потребует чуть больше работы с точки зрения поддержки приложения, но ИМХО - это более верное решение нежели смена признака модальности формы на лету.
И потом, что будете делать, если к примеру в модельной версии формы понадобится добавить ещё какие-либо элементы управления, которых не должно быть в немодальной?


У меня была такая идея, но мне показалось правильным всё же оставить 1 форму.
вид формы (modal/child) я определяю добавлением свойства OpenMode, в зависимости от этого и отображаю visible контроллов...
и всё же мне кажется 2 формы тут не нужны. Но, конечно же вариант избавления от "мигания" окон. Спасибо.
_Vasilisk_
Дата: 14.02.2012 02:02:30
Batts
иначе "Cannot maek visible window modal".
В дизайнере Visible := False;
Batts
на счет кнопки - так, что бы в окна были разные
Наследование форм.