mdiform窗体上有菜单,最左放了treeview1,spliter1,image1占了客户区,程序运行后图片上有印迹,如何解决?

解决方案 »

  1.   

    mdiform窗体上有菜单,最左放了treeview1,spliter1,image1占了客户区,程序运行后图片上有印迹,如何解决?  
      

  2.   

    什么样的印迹啊?
    你的放图片的客户区不用放一个PANEL的吗?这样的话你向右拉动时图片不会被遮住了吗?
      

  3.   

    这需要重载子表单的constructor create()方法,覆盖loaded()和createparams()方法:
    下面代码演示了一子窗体再主窗体上的一PANEL上显示:
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,StdCtrls,ExtCtrls,Menus;type
      TForm2 = class(TForm)
        Image1: TImage;
      private
        FTempParent:TWinControl;  //保存子窗体的父;
        procedure loaded;override;
        procedure CreateParams(var Params: TCreateParams); override;
        { Private declarations }
      public
        constructor create(AOwner:TComponent;AParent:TWinControl);reintroduce;//override;
        //function GetFormMenu:TMainMenu;virtual;abstract;如果要或得窗体菜单,可覆盖该方法。
        //function CanChange:Boolean;virtual;
        { Public declarations }
      end;var
      Form2: TForm2;implementation{$R *.dfm}
    constructor TForm2.create(AOwner: TComponent; AParent: TWinControl);
    begin  //赋予子窗体的父,继承FORM2的构造方法;
      FTempParent:=AParent;
      inherited Create(Owner);
    end;procedure TForm2.CreateParams(var Params: TCreateParams);
    begin
      inherited;
      Params.Style:=params.Style or WS_CHILD; //设置窗体的style
    end;procedure TForm2.loaded;
    begin
      inherited;  //设置子窗体属性;
      align:=alclient;
      BorderStyle:=bsNone;
      BorderIcons:=[];
      Parent:=FTempParent;
      Position:=poDefault;
    end;end.然后在主窗提的USES中包含子窗体单元
    在创建子窗体的事件中这样写:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      form2:tform;
    begin
      if assigned(form2) then
      begin
        form2:=tform2.create(self,panel1);
        form2.Show;
      end;
    end;