开发工具:Delphi 6
遇到的情况:form1上有一个image1(Align=alClient),有一个toolbar1,
一开始,form1.FormStyle=fsNormal,运行,窗体显示正常;但是,当我把form1.FormStyle设置为fsMDIForm后,运行,
iamge1与toolsbar1之间竟然空出一段距离,
据观察,宽度等于toolsbar1的Height。这是为什么呢?是否是Delphi 6的bug?要怎样解决呢?

解决方案 »

  1.   

    你查找一下关于MDI窗体“背景图片”的处理。
    这方面的贴子很多的。
      

  2.   

    你把image1往上提
    最上面
    然后你在看看
      

  3.   

    靠!为什么结账的帖子竟然全给删了!csdn的管理员真是@#$@#$#$
    怎么不去删没结帐的?
      

  4.   

    你是不是想给MDIForm作个背景啊?如果是的,那么明确告诉你这样做是不行的.
    如果在Delphi3上用,那么连那个Image也出不来!你现在好歹还能看到个Image也真是运气够好的了!! :)
    这种问题的解决你可以:
    1、去找一个叫MDIBackground的控件,它可以用于在MDIForm上加背景图;
    2、手工绘图。
      

  5.   

    to sunware() :
    !!真的?太夸张了吧!不过我发现了一个办法,就是加一个panel,问题可以解决,
    但是,加panel后,所有的子窗体都显示不出来,有什么办法吗?
      

  6.   

    unit unitForm1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls;type
      TForm1 = class(TForm)
        Image1: TImage;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        FClientInstance,
          FPrevClientProc: TFarProc;
        procedure ClientWndProc(var Message: TMessage);  public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.ClientWndProc(var Message: TMessage);var
      MyDC: hDC;
      Ro, Co: Word;
    begin
      with Message do
        case Msg of
          WM_ERASEBKGND:
            begin
              MyDC := TWMEraseBkGnd(Message).DC;
              for Ro := 0 to ClientHeight div Image1.Picture.Height do
                for Co := 0 to ClientWIDTH div Image1.Picture.Width do
                  BitBlt(MyDC, Co * Image1.Picture.Width, Ro * Image1.Picture.Height,
                    Image1.Picture.Width, Image1.Picture.Height,
                    Image1.Picture.Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
              Result := 1;
            end;
          else
            Result := CallWindowProc(FPrevClientProc, ClientHandle, Msg, wParam, lParam);
        end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      FClientInstance := MakeObjectInstance(ClientWndProc);
      FPrevClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));
      SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance));
    end;end.
      

  7.   

    上是在mdi加背景
    但安你这么那么说的把Align=alTop就行呀
      

  8.   

    to grail_(grail_) :设成altop确实不错,可是下面又空了啊!
    用panel不错,可是要怎么把子窗体显示出来呢?
      

  9.   

    你可以放个panel align=alclient
    在panel上放这个image align=alclient
    就不会有缝隙了
      

  10.   

    to ilikeff8(迷茫) :
    我用过这个方法,确实不会有空隙,但是子窗体显示不了了。
    要怎么办?
      

  11.   

    有了,刚刚又试了一下,这样绝对可以了,其实很简单Image1.Align先设为alNoneprocedure TForm1.FormShow(Sender: TObject);
    begin
      Self.OnResize(Sender);
    end;procedure TForm1.FormResize(Sender: TObject);
    begin
      image1.Left:=0;
      image1.Width:=Self.ClientWidth;
      image1.Top:=0;
      image1.Height:=Self.ClientHeight;
    end;