Вниз
Скачать: CL | DM;

Модальные формы в MDI   Найти похожие ветки 

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

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


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

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


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

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


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

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


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


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

В 17й строке.


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

Обычная форма имеет два конструктора один для 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-13 11:02) [6]

Второй способ более простой но обладает побочным действием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 в момент создания сразу появляется и чтоб показать модально ее надо сначала скрыть. Получается некоторый эффект мерцания.
см ниже



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
1-1142968017
Dust
2006-03-21 22:06
2006.04.30
IniFile не создаётся и не записывается, и не понятно почему...


3-1141715751
neat
2006-03-07 10:15
2006.04.30
Обновление грида после Update


2-1144846775
dima_kds
2006-04-12 16:59
2006.04.30
Excel


2-1144932563
dera
2006-04-13 16:49
2006.04.30
Как решить проблему?


2-1144901581
Rubey
2006-04-13 08:13
2006.04.30
Очистка таблицы




   Наверх