如何给MDI窗口加背景,并在其上放 SpeedButton

deardelphi 2000-08-11 10:18:00
如何给MDI窗口加背景? csdn 中的例子不支持 Delphi5!!!! 怎么办?

Canvas.Draw(0, 0, Image1.Picture.Graphic);

self.brush.bitmap:=image1.picture.bitmap;

都不行。

如何在MDI窗口上放 SpeedButton ?

...全文
121 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
deardelphi 2000-08-12
  • 打赏
  • 举报
回复
背景图的问题以解决了,谢谢 kxy ,ymxxm ,Hank ,yinfudan

可是有没有办法再在背景上放透明 Button 呢? 我的意思是Button要可能分布在整个背景图上。 SpeedButton 放不上去, 而其它的 Button 却是浮在上面的,不能被 MDIChild 覆盖。

也许这很难解决,于是我又想了另一个办法:那就是用一个长驻MDIChild 设为MAX,并隐藏标题条, 然后作为背景和放 Button , 可是又有一个问题:当我把其它的MDIChild从最大化还原时,做背景的MDIChild 也还原了。如何办?
ymxxm 2000-08-11
  • 打赏
  • 举报
回复
A。在Mdi Form 上放置SpeedButton可以先放Toolbar/CoolBar作为载体。
B.查看你的mail
kxy 2000-08-11
  • 打赏
  • 举报
回复
procedure TForm1.FormPaint(Sender: TObject);
var
ClientCanvas : TCanvas;
DC : HDC;
begin
DC := GetDC(ClientHandle);
ClientCanvas := TCanvas.Create;
try
ClientCanvas.Handle := DC;
ClientCanvas.LineTo(width,height);
finally
CLientCanvas.Free;
ReleaseDC(ClientHandle,DC);
end;
end;
>>>如何在MDI窗口上放 SpeedButton ?
什么意思?
yinfudan 2000-08-11
  • 打赏
  • 举报
回复
Hi,

I have a Delphi component which can provide MDI background for
the MDI main window. It's very convenient to use, for example,

ABitmap:=TBitmap.Create;
ABitmap.LoadFromFile('a.bmp');
MDIBackground1.Picture:=ABitmap.bmp;
ABitmap.Free;

The background can also be set at design time.

If you want this component, email me thru yinfudan@yahoo.com,
I will send you the component immediately, on condition that
you give me 50 points.
Hank 2000-08-11
  • 打赏
  • 举报
回复
首先在private中加入函数声明部分,例如:

FClientInstance,FPrevClientProc:TFarProc;
procedure ClientWndProc(var Message:TMessage);

然后加入具体代码:

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;

然后在CREATE时间里面引用:

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

说明:
A、Form1是主表单;
B、Image1的Picture必须是BMP格式

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧