Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.30;
Скачать: 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 вся ветка

Текущий архив: 2006.04.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
15-1144489557
ХВСЛ
2006-04-08 13:45
2006.04.30
веб-сервер


15-1144155296
Сергей М.
2006-04-04 16:54
2006.04.30
Скрипт сего форума - баги эти затрахали уже ..


2-1144911684
Сергей И
2006-04-13 11:01
2006.04.30
Помогите с событием формы


1-1143211551
Германн
2006-03-24 17:45
2006.04.30
Координаты SubItem в TListView


2-1144731535
Neiroman
2006-04-11 08:58
2006.04.30
Random()