![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Модальные формы в 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-форму нельзя показать модально.