MDI程序中的模态窗口问题.(30分)

  • 主题发起人 主题发起人 epic
  • 开始时间 开始时间
E

epic

Unregistered / Unconfirmed
GUEST, unregistred user!
1.弹出一个非MDIChildren的子窗体,总是被遮住;
2.在一个MDIChildren子窗体上弹出一个对话框(application.messagebox),也被遮住.
应该怎么解决?
 
被谁遮住:
如果是你的窗口遮住,看看自己的窗口FormStyle属性是否为fNormal.
 
1、改写CreateParams
unit Anchor;

interface

uses
; Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
; StdCtrls;

type
; TAnchorForm = class(TForm)
; private
; ; FParentForm : TForm;
; protected
; ; procedure CreateParams(VAR Params: TCreateParams); override;
; public
; ; property ParentForm :TForm read FParentForm write FParentForm;
; ; constructor Create(Sender: TComponent);override;
; end;

var
; AnchorForm: TAnchorForm;

implementation

{$R *.DFM}

constructor TAnchorForm.Create(Sender:TComponent);
begin
; if Sender is TForm then
; ; FParentForm := Sender as TForm
; else
; ; FParentForm := nil;

; inherited Create(Sender);
end;

procedure TAnchorForm.CreateParams(VAR Params: TCreateParams);
begin
; Inherited CreateParams(Params);
; if assigned(FParentForm) then
; ; Params.WndParent := FParentForm.Handle;
end;

end.

创建的时候,
with TAnchorForm.Create(ParentForm) do
; ShowModal;

就一定会放在ParentForm上面,不会被其他窗口遮住。

你也可以将TAnchorForm作为父类,你的其他窗口从它继承,
省得每次都写CreateParams过程。

2、用
MessageBox(ParentForm.Handle,...)不要用
Application.MessageBox。
 
不行也给分吧,好象用MDI就是不行,不用MDI就没事.
 
后退
顶部