Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Модальные формы в MDI [D7]


Дырчик ©   (2006-04-12 07:51:00) 

Из MDI формы пытаюсь открыть форму модально - вылетает ошибка "Cannot make a visible window modal". Кто-нибудь знает в чем проблема?


Мессер   (2006-04-13 11:02:00) [1]

Второй способ более простой но обладает побочным действием procedure TMainForm.CreateMDIModal;
var
 Child: TMDIChild;
begin
 { create a new MDI child window }
 Child := TMDIChild.Create(Application);
 Child.FormStyle := fsNormal;
 Child.Visible:=False;
 Child.Position:=poScreenCenter;
 Child.ShowModal;
end;

форма перед тем как появится модально появляется в другом месте,  и только потом становиться допустим в центре экрана - это связано с тем, что MDI в момент создания сразу появляется и чтоб показать модально ее надо сначала скрыть. Получается некоторый эффект мерцания.
см ниже


Мессер   (2006-04-13 10:51:00) [2]

Обычная форма имеет два конструктора один для MDI режима другой для обычного поведения формы
Разберись сам:

unit uCF;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
 TfCF = class(TForm)
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   { Private declarations }
 protected
   procedure CreateParams(var Params : TCreateParams); override;
   procedure Loaded; override;
 public
   { Public declarations }
   isChild : boolean;
   constructor Create (AOwner: TComponent); override;
   constructor CreateChild(AOwner: TComponent); virtual;
 end;

 TChildFormClass = class of TfCF;

var
 fCF: TfCF;

implementation

{$R *.DFM}

constructor TfCF.Create(AOwner: TComponent);
begin
 isChild:=False;
 inherited;
end;

constructor TfCF.CreateChild(AOwner: TComponent);
begin
 isChild:=True;
 Inherited Create(AOwner);
 FormStyle:=fsMDIChild;
end;

procedure TfCF.CreateParams(var Params: TCreateParams);
begin
 inherited;
end;

procedure TfCF.Loaded;
begin
 inherited;
 if isChild then
 begin
   BorderStyle:=bsSizeable;
   BorderIcons:=[biSystemMenu,biMinimize,biMaximize];
   Position:=poDesigned; // poDefault;
 end else
     begin
       BorderStyle:=bsSizeToolWin;
//        BorderStyle:=bsSizeable;
       BorderIcons:=[biSystemMenu];
       Position:=poDesigned; // poDefault;
//        Position:=poScreenCenter;
     end;
end;

procedure TfCF.FormClose(Sender: TObject;
 var Action: TCloseAction);
begin
 if isChild then Action:=caFree;
end;

end.


Плохиш   (2006-04-12 11:03:00) [3]


> Кто-нибудь знает в чем проблема?

В 17й строке.


Сергей М.   (2006-04-12 09:03:00) [4]

Тогда можно.
Но на момент вызова метода ShowModal() показываемая модально форма должна иметь св-во Visible = False.


Дырчик   (2006-04-12 08:14:00) [5]

А если рна не MDIchild a Normal, но вызывается из MDIForm?


Сергей М.   (2006-04-12 08:11:00) [6]

MDI-child-форму нельзя показать модально.


Наверх

Титульная страница Поиск, карта сайта Написать письмо