procedure tmain.createwnd; begin inherited createwnd; fnewclientproc:=makeobjectinstance(clientwndproc); foldclientproc:=pointer(getwindowlong(clienthandle,gwl_wndproc)); setwindowlong(clienthandle,gwl_wndproc,longint(fnewclientproc)); end;procedure tmain.clientwndproc(var message:tmessage); begin case message.Msg of wm_erasebkgnd: begin callwindowproc(foldclientproc,clienthandle,message.msg,message.wparam,message.lparam); fdrawdc:=twmerasebkgnd(message).dc; drawtiled; message.Result:=1; end; wm_vscroll,wm_hscroll: begin message.Result:=callwindowproc(foldclientproc,clienthandle,message.msg,message.wparam,message.lparam); invalidaterect(clienthandle,nil,true); end; else message.Result:=callwindowproc(foldclientproc,clienthandle,message.msg,message.wparam,message.lparam); end; end;procedure tmain.drawtiled; var row,col:integer; cr,ir:trect; numrows,numcols:integer; begin getwindowrect(clienthandle,cr); ir:=image1.clientrect; numrows:=cr.bottom div ir.bottom; numcols:=cr.right div ir.right; with image1 do for row:=0 to 4 do for col:=0 to 7 do bitblt(fdrawdc,col*picture.width,row*picture.height,picture.width,picture.height,picture.bitmap.canvas.handle,0,0,srccopy); end;
begin
inherited createwnd;
fnewclientproc:=makeobjectinstance(clientwndproc);
foldclientproc:=pointer(getwindowlong(clienthandle,gwl_wndproc));
setwindowlong(clienthandle,gwl_wndproc,longint(fnewclientproc));
end;procedure tmain.clientwndproc(var message:tmessage);
begin
case message.Msg of
wm_erasebkgnd:
begin
callwindowproc(foldclientproc,clienthandle,message.msg,message.wparam,message.lparam);
fdrawdc:=twmerasebkgnd(message).dc;
drawtiled;
message.Result:=1;
end;
wm_vscroll,wm_hscroll:
begin
message.Result:=callwindowproc(foldclientproc,clienthandle,message.msg,message.wparam,message.lparam);
invalidaterect(clienthandle,nil,true);
end;
else
message.Result:=callwindowproc(foldclientproc,clienthandle,message.msg,message.wparam,message.lparam);
end;
end;procedure tmain.drawtiled;
var
row,col:integer;
cr,ir:trect;
numrows,numcols:integer;
begin
getwindowrect(clienthandle,cr);
ir:=image1.clientrect;
numrows:=cr.bottom div ir.bottom;
numcols:=cr.right div ir.right;
with image1 do
for row:=0 to 4 do
for col:=0 to 7 do
bitblt(fdrawdc,col*picture.width,row*picture.height,picture.width,picture.height,picture.bitmap.canvas.handle,0,0,srccopy);
end;
fdrawdc:hdc;
procedure drawtiled;
procedure clientwndproc(var message:tmessage);
procedure createwnd;override;
to wedical(秋雨) :加一个panel,mdi窗口就无法打开其他窗口了,打开了根本看不到。
谢谢所有的人。加分!