关于MDI主窗口背景的问题(100分)

  • 主题发起人 主题发起人 娃娃
  • 开始时间 开始时间

娃娃

Unregistered / Unconfirmed
GUEST, unregistred user!
我已经知道如何在MDI窗口上画背景,我想知道
如何能让用户自己选择背景图。

能在程序再次启动时生效,或者即时生效更好。
 
让用户选择自己喜欢的背景图,存INI或注册表。
 
写在INI或注册表里,Form Create时加载。
 
窗体上放一个Timage控件image1,选择图片!
private
{ Private declarations }
FClientInstance, FPrevClientProc : TFarProc;
PROCEDURE ClientWndProc(VAR Message: TMessage);
procedure CreateMDIChild(const Name: string);
public
{ Public declarations }
end;

var
MainForm: TMainForm;

implementation

{$R *.DFM}

uses ChildWin, About;
PROCEDURE TMainForm.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;
 
选择,保存,这些我知道怎么做,可是关键不知道在
什么事件中载入图片,在OnCreate中,会造成窗体画
不出来,至于说用Timer,我想还是不用了。

有没有朋友成功过的?
 
用程序加载呀!简单!
 
怎么加载?在什么事件中载入图片?

即时改变呢?
 
在MDI上放一panel,一切OK
 
即时加载非常的好,效率高
 
在Image1 中载入新的图片,刷新一下窗口。
 
如何刷新窗口?而且如果程序关闭后重新启动,如何解决图片的加载问题?
 
还有一点就是加载JPG文件以后,改变窗口大小的时候为什么总是出错?
 
>>我已经知道如何在MDI窗口上画背景,

已经实现到了这一步了?选择图片应该不难吧?
应该是在onCreate事件中。
 
你可以试试在OnCreate中载入图片试试,不行的。
会造成窗口MDI客户区画不出来!

(所用画客户区的过程同wwolf兄)
 
得解,原来是不能动态载入JPG文件,BMP的可以,不知道有没有
朋友解决了这个问题?
 
多人接受答案了。
 
后退
顶部