如何更换并立即刷新MDIFORM的背景图片?(15分)

  • 主题发起人 主题发起人 snmailbox
  • 开始时间 开始时间
S

snmailbox

Unregistered / Unconfirmed
GUEST, unregistred user!
我在MDIFORM的ONCREATE中的代码:
Bitmap:=TBitmap.create;
Bitmap.loadfromfile('c:/aaa.bmp');
brush.bmp := Bitmap;

我需要让用户能自己更换图片,并立即显示,我试了很久没能实现,谁知道怎么解决?
环境为DELPHI 5.
 
你先 Bitmap.Picture := nil
再用 LoadFromFile
 
用panel上面加一个image,很爽的,试试吧
 
to QSmile
BitMap无Picture属性

to 王公子
panel会遮住所有的MDICHILD窗口,你没试过吗?

请注意:我用的是DELPHI 5.

 
刚才试了一下,可以啊!
我的背景图片放在image2中。用了下面的代码,你参考一下:
if SetupForm.showModal=mrok then begin
image2.Picture.LoadFromFile(p_BackGroundBmp);
SendMessage(Handle,wm_paint,0,0);
Invalidate;
end;
怎么加背景的代码,自己到大富翁上查吧!
 
to wfzha
你要在DELPHI 5的MDIMAIN窗口试试,难道能行吗?
image会挡在MDICHILD窗口前面的。
 
不是用直接用image中的位图,加mdi背景的代码dfw上有。要用自己的窗口处理函数
private
{ Private declarations }
FClientInstance,FPrevClientProc:TFarProc;
PROCEDURE ClientWndProc(VAR Message: TMessage);
......


procedure TMainForm.FormCreate(Sender: TObject);
begin
FClientInstance := Classes.MakeObjectInstance(ClientWndProc);
FPrevClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));
SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance));
end;


procedure TMainForm.ClientWndProc(var Message: TMessage);

var MyDC : hDC;
begin
with Message do
case Msg of
WM_ERASEBKGND:
begin
MyDC := TWMEraseBkGnd(Message).DC;
StretchBlt(MyDC,
0 , 0 , ClientWidth , ClientHeight ,
Image2.Picture.Bitmap.canvas.Handle ,
0, 0 ,Image2.Picture.Width, Image2.Picture.Height,
SRCCOPY);
Result := 1;
end;
WM_PAINT:begin
InvalidateRect(CLientHandle,nil,True);
Message.Result:=CallWindowProc(FPrevClientProc,ClientHandle,Message.Msg,Message.WParam,Message.LParam);
Result :=0;
end;
else
Result := CallWindowProc(FPrevClientProc, ClientHandle, Msg, wParam, lParam);
end;
end;
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部