如何加一个背景图片,其位于最低层. 
在打开MDI子窗体时, 不能被图片遮住.

解决方案 »

  1.   

    使MDI窗口有一个背景图象或使它平铺 
    --------------------------------------------------------------------------------
    主窗体中定义变量: 
    FClientInstance : TFarProc; 
    FPrevClientProc : TFarProc; 
    { MDI的背景代码 } 
    procedure TMainForm.ClientWndProc(var Message: TMessage); 
    var 
    Dc : hDC; 
    Row : Integer; 
    Col : Integer; 
    begin 
    with Message do 
    case Msg of 
    WM_ERASEBKGND: 
    begin 
    Dc := TWMEraseBkGnd(Message).Dc; 
    // 在DC上平铺图象 
    for Row := 0 to ClientHeight div Image1.Picture.Height do 
    for Col := 0 to ClientWidth div Image1.Picture.Width do 
    BitBlt(Dc, 
    Col * Image1.Picture.Width, 
    Row * 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; 
    - 在主窗体的OnShow事件中加入以下代码: // MDI背景平铺代码,与WndProc链接 
    FClientInstance := MakeObjectInstance(ClientWndProc); 
    FPrevClientProc := Pointer(GetWindowLong(ClientHandle,GWL_WNDPROC)); 
    SetWindowLong(ClientHandle,GWL_WNDPROC,LongInt(FClientInstance));