Форум: "Начинающим";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];
ВнизМодальные формы в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c