Главная страница
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.038 c
2-1144856051
mfender
2006-04-12 19:34
2006.04.30
Запуск программы из внешней программы и перехват парметров первой


15-1144732818
Alkid
2006-04-11 09:20
2006.04.30
С Днём рождения! 11 апреля.


15-1144306042
Knight
2006-04-06 10:47
2006.04.30
Excel


15-1144568982
Andy BitOff
2006-04-09 11:49
2006.04.30
Посоветуйте ноутбук


4-1139473833
som
2006-02-09 11:30
2006.04.30
Добавление пользователя домена