如果是mdi窗口,可以用以下的例子:
由于mdi主窗口的特性,使用普通onpaint和使用timage等方法都不会产生作用。下面将用编写一个简单的mdi程序来介绍如何实现。
第一步:打开delphi(delphi 1,2,3都可以),创建一个新的工程。
第二步:将form1的formstyle设置为fsmdiform,设置成mdi的主窗口。
第三步:在form1上增加一个image元件,并选择要设置的背景到image的picture中。
第四步:在form1的private中定义:
fclientinstance,
fprevclientproc : tfarproc;
procedure clientwndproc(var message: tmessage);
第五步:在实现(implementation)中加入上述过程的具体内容:
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;
第六步:在form1的创建事件中加入:
fclientinstance := makeobjectinstance(clientwndproc);
fprevclientproc := pointer(getwindowlong(clienthandle, gwl_wndproc));
setwindowlong(clienthandle, gwl_wndproc, longint(fclientinstance));
上面的步骤已经完成了mdi主窗口背景图案的设置,下面可以增加一个mdichild窗口,实现mdi程序。
第七步:新增加一个form,并将formstyle设置为fsmdichild。
现在你可以编译运行这个程序,你会发现,image元件并不会在form上显示出来,但是整个form的客户区域被image中的图像所铺满。
如何使 mdichildform正常关闭
为何我用 delphi 写的 mdi child window 无法 close ? 请各位先进指教一下,是否
我那个 property 设错了 ?
请在 mdi child 的 onclose() 事件中加入这列程式
action := cafree;
例如:
procedure tfrom2.formclose(sender: tobject;
var action: tcloseaction);
begin
action := cafree;
end;