如何给MDI主窗口加背景图?(50分)

  • 主题发起人 guoguo2000
  • 开始时间
G

guoguo2000

Unregistered / Unconfirmed
GUEST, unregistred user!
[?]我做了一个多文档的程序,但不知道如何给主窗口加上背景图。
那位大侠知道,请帮小妹一把,多谢多谢!:)
 
D

djh_djh

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure Tmain_frm.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;
drawtitle;
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_frm.createwnd;
begin
inherited CreateWnd;
FNewClientProc:=MakeObjectInstance(ClientWndProc);
FOldClientProc:=Pointer(GetWindowLong(ClientHandle,GWL_WNDPROC));
SetWindowLong(ClientHandle,GWL_wndproc,longint(Fnewclientproc));
end;

procedure Tmain_frm.drawtitle;
var
row,col:integer;
CR,IR:TRect;
NumRows,NumCols:integer;
rect1,rect2:TRect;
bitmap:TBitMap;
bitmap2:tbitmap;
begin
GetWindowRect(ClientHandle,CR);
bitmap:=TBitMap.create;
bitmap2:=Tbitmap.create;
try
bitmap.LoadFromFile(SysPath+'image/SAFDA.bmp');
bitmap2.LoadFromFile(SysPath+'image/bkADFE.bmp');
StretchBlt(FDrawDC,0,0,
ClientWidth,ClientHeight,bitmap2.canvas.Handle,0,0,bitmap2.width,bitmap2.height,SRCCOPY);
IR:=bitmap.Canvas.ClipRect;
numrows:=CR.Bottom div IR.Bottom;
NumCols:=CR.Right div IR.Right;
for row:=0 to Numrows+1do
for col:=0 to Numcols+1do
begin
if (((row mod 2)=1) and ((col mod 2)=0)) or
(((row mod 2)=0) and ((col mod 2)=1))
then
continue;
bitblt(FDrawDC,col*bitmap.width*3,row*bitmap.height*4,
bitmap.width,bitmap.height,bitmap.canvas.Handle,0,0,srccopy)
end;
finally
bitmap.Free;
bitmap2.free;
end;

end;
 

疾风之猫

Unregistered / Unconfirmed
GUEST, unregistred user!
1.定义一个公共变量 Bitmap:TBitmap;
2.在form1的create事件里:
Bitmap:=TBitmap.Create;
Bitmap.LoadFromFile('wall.bmp');
3.在form1.paint事件里输入:
procedure TForm1.FormPaint(Sender: TObject);
var
x, y: Integer;
begin
y := 0;
while y < Heightdo
begin
x := 0;
while x < Widthdo
begin
Canvas.Draw(x, y, Bitmap);
x := x + Bitmap.Width;
end;
y := y + Bitmap.Height;
end;
end;
 
Y

yangjj

Unregistered / Unconfirmed
GUEST, unregistred user!
这些方法都不好,最好的方法是直接用控件,我有一个MDIWALLP,可以发给你,
相当好用,带源码,支持D1-D6,很好用!很棒!
 
H

Huzzz

Unregistered / Unconfirmed
GUEST, unregistred user!
简单,有人问过的,在FORM上放一个IMAGE(将VISIBLE设为FALSE),并加载一幅图
(必须是BMP),在ONSHOW中添加代码:
procedure TForm1.FormShow(Sender: TObject);
begin
Brush.Bitmap := Image1.Picture.Bitmap;
end;
(对MDI和非MDI均适用)
 
H

Huzzz

Unregistered / Unconfirmed
GUEST, unregistred user!
如果不要求平铺,则更简单:
不用添加代码,直接设置Image1.Center := True, Image1.Align := alClient就行了。
 
V

vine

Unregistered / Unconfirmed
GUEST, unregistred user!
用第三方控件:
MDI Wallpaper v2.0.0
墙纸构件,可将Form背景填充为指定图案,多种填充方式,使用简单。
http://www.delphibyte.com/download/softdown.php?softid=30&amp;url=http://61.132.118.165/soft/delphi/Delphi/uestc/Delphi/mdiwallp.zip
 
G

guoguo2000

Unregistered / Unconfirmed
GUEST, unregistred user!
疾风之猫的方法很好,代码也不多!
Huzzz的第一个在onshow中添加代码的方法也不错,但不知道能不能让位图以拉伸方式显示?
第二个设置属性的方法简单实用,但有些局限性,如果主窗口没有快捷菜单时可以,
但有快捷菜单时,图不能全铺。
由于我现在时间太紧djh_djh的方法我还没有试,以后有空一定用用!
Vine和yangjj的第三方控件我也有意试一下,因为我还没有用过第三方控件呢!
如果有空可以发给我,我的信箱是g.qy@263.net,
我没想到提个小问题,会有那么多热心的朋友帮助我!这次给的分太少了,还望各位见谅!
下次提问时一定多奉送些分!再次感谢各位!!:)
 

Similar threads

顶部