还是关于MDI背景的问题(20分)

  • 主题发起人 主题发起人 jobsxy
  • 开始时间 开始时间
J

jobsxy

Unregistered / Unconfirmed
GUEST, unregistred user!
我看了WZS的一行解决和傅贵的方法,有一个问题这些解决方法都是
对BMP文件进行的,由于我需在背景放置一整幅的图,用BMP太大转换成JPG
格式则上述两种方法均不能行,特求解
 
给你个变通的方法:

var
Form1: TForm1;
bit:TJPEGImage;
tempbmp:Tbitmap;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
tempbmp:=TBitmap.Create;
bit:=TJPEGImage.create;
bit.LoadFromFile('c:/windows/clouds.jpg');
tempbmp.Assign(bit);
Form1.Brush.Bitmap:=tempbmp;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
bit.free;
tempbmp.free;
end;

 
用brush方法有时会出问题,还是自己画吧。
 
门兴大侠:我听朋友说,JPG文件是压缩格式,文件小调入内存速度快,但是需要
解压因此在内存的占用空间同BMP文件是一样,而且JPG解压所费时间已经抵销文件
小而节约的时间。不知这种说法对否?
 
不能给你完全正确的解答,但我认为这种看法是有道理的。 :)
但现在的机器速度是没必要比较二者的区别的。

门欣
 
可以通过下列程序例程实现MDI主窗口丰富的背景:
1、将Form1设置为fsMDIForm;
2、在Form1的Private中定义:
FClientInstance,FPrevClientProc:TFarProc;
Procedure ClientWndProc(Var Message:TMessage);
3、在Form1中增加一个Timage组件,将待设置的背景加到Timage的Picture中;
4、过程Procedure ClientWndProc(Var Message:TMessage)内容:
Procedure 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
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:=CallWindowsProc
(FPrevClientProc,ClientHandle,Msg,wParam,lParam);
end;
end;
5、在Form1的OnCreat事件中加入:
FClientInstance:=MakeObjectInstance(ClientWndProc);
FPrevClientProc:=Pointer(GetWindowsLong(ClientHandle,GWL_WndProc));
SetWindowsLong(ClientHandle,GWL_WndProc,LongInt(FClientInstance);
6、试试看!
 
不用写代码的方法:
在Form上放一个Panel,把Image放在Panel上
 
温剑风方法的结果是image平铺,就像windows桌面壁纸的平铺效果一样(在win98中)
 
多人接受答案了。
 
如何实现背景的居中?
 
后退
顶部