用下面这段代码就可以在MDI主窗口中放图片了。... ... private { Private declarations } FClientInstance, FPrevClientProc : TFarProc; procedure ClientWndProc(var Message: TMessage); ...procedure TForm1.FormCreate(Sender: TObject); begin FClientInstance:= MakeObjectInstance(ClientWndProc); FPrevClientProc:= Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC)); SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance)); end;procedure TForm1.ClientWndProc(var Message: TMessage); var MyDC:hDC; Ro,Co:Word; begin //在窗体上画背景 if message.Msg<>WM_ERASEBKGND then begin message.Result := CallWindowProc(FPrevClientProc,ClientHandle, message.Msg,message.wParam,message.lParam); exit; end; MyDC := TWMEraseBkGnd(Message).DC; for Ro := 0 to ClientHeight div Image1.Picture.Height do begin for Co := 0 TO ClientWIDTH div Image1.Picture.Width do begin BitBlt(MyDC, Co*Image1.Picture.Width, Ro*Image1.Picture.Height, Image1.Picture.Width, Image1.Picture.Height, Image1.Picture.Bitmap.Canvas.Handle, 0, 0, SRCCOPY); message.Result:= 1; end; end;end;
Image的align属性设为alClient,贴我的 代码给你看看,可以自适应窗体的,不过好像跟上面的一样: procedure TFrmMain.FormCreate(Sender: TObject); begin Image1.Picture.LoadFromFile(extractFilePath(paramStr(0)) + 'photos\world.bmp'); FClientInstance := MakeObjectInstance(ClientWndProc); FPrevClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC)); SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance)); end; procedure TfrmMain.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;
Application.CreateForm(TSVRaddsp, SVRaddsp);//打开MDI子窗口
spda.Enabled:=false;//按纽变为不可点击
lockwindowupdate(0);
...
private
{ Private declarations }
FClientInstance, FPrevClientProc : TFarProc;
procedure ClientWndProc(var Message: TMessage);
...procedure TForm1.FormCreate(Sender: TObject);
begin
FClientInstance:= MakeObjectInstance(ClientWndProc);
FPrevClientProc:= Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));
SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance));
end;procedure TForm1.ClientWndProc(var Message: TMessage);
var
MyDC:hDC;
Ro,Co:Word;
begin //在窗体上画背景
if message.Msg<>WM_ERASEBKGND then begin
message.Result := CallWindowProc(FPrevClientProc,ClientHandle, message.Msg,message.wParam,message.lParam);
exit;
end;
MyDC := TWMEraseBkGnd(Message).DC;
for Ro := 0 to ClientHeight div Image1.Picture.Height do begin
for Co := 0 TO ClientWIDTH div Image1.Picture.Width do begin
BitBlt(MyDC, Co*Image1.Picture.Width, Ro*Image1.Picture.Height,
Image1.Picture.Width, Image1.Picture.Height,
Image1.Picture.Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
message.Result:= 1;
end;
end;end;
--------------------------
这句话是什么意思?直接放在Image控件里就可以啊(如果你做的是MDI)
(showmodal)是可以,但那样就违反了我的布局了。
----------------------------------------------
你不是希望子窗体显示在图片上面么?如何违反你的布局
procedure TFrmMain.FormCreate(Sender: TObject);
begin
Image1.Picture.LoadFromFile(extractFilePath(paramStr(0)) + 'photos\world.bmp');
FClientInstance := MakeObjectInstance(ClientWndProc);
FPrevClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));
SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance));
end;
procedure TfrmMain.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;