FORM上的TIMAGE控件(50分)

  • 主题发起人 主题发起人 向前
  • 开始时间 开始时间

向前

Unregistered / Unconfirmed
GUEST, unregistred user!
1、一个FORM,在其上放一个TIMAGE,然后设置其PICTURE属性为一个位图,
该IMAGE的ALIGN为ALCLIENT,就是覆盖整个FORM,是吗?由于这个位图比较小,
它只是出现在该FORM的中间,请问怎样让IMAGE自动将该图复制很多份然后填充整个FORM呢?
2、一个FORM上放了一个TIMAGE,还有一个GROUPBOX,好象TIMAGE上的图形只能显示在FORM
上,而GROUPBOX则把这幅图给遮挡住了,怎么办?现在想让这幅图即做FORM的背景图案,
又做GROUPBOX的背景图案,怎么办
 
把你的Image.visible 设置为 False;
在 Form 里加上
Private
WMPaint(Var Msg:Tmessage);Message WM_Paint;
响应重绘消息
TForm1.WMPaint(Var Msg:Tmessage);
Begin
Canvas.Brush.Bitmap:=image1.Picture.Bitmap;
Canvas.Rectangle(Canvas.cliprect);
Canvas.Brush.Bitmap:=nil;
Inherited;
End; 可以了.
 
GGCAT
的程序可以写成响应Form.OnPaint即可。即
procedure TForm1.FormPaint(Sender: TObject);
begin
with Canvas do begin
Brush.Bitmap := Image1.Picture.Bitmap;
FillRect(ClipRect);
Brush.Bitmap := nil;
end;
end;
 
JohnsonGuo:
OnPaint 会产生重复响应,导致绘制错误,不信你把窗口拖到屏幕外然后再拖进来。
 
把GroupBox变成透明的:
procedure TForm1.FormCreate(Sender: TObject);
begin
with GroupBox1 do SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle,
GWL_EXSTYLE) or WS_EX_TRANSPARENT);
end;

最好在OnPaint里显示背景(因为当GroupBox设为透明后用WM_PAINT和WM_ERASEBKGND都有问题):
procedure TForm1.FormPaint(Sender: TObject);
begin
with Canvas do begin
Brush.Bitmap := Image1.Picture.Bitmap;
FillRect(ClipRect);
Brush.Bitmap := nil;
end;
end;

 
JohnsonGuo:不好意思,刚才打开这个帖子去吃饭了,回来没有刷新,没有看到你的帖子:)
GGCAT:
>>OnPaint 会产生重复响应,导致绘制错误,不信你把窗口拖到屏幕外然后再拖进来。
我试了,没问题啊。
 
JohnsonGuo:
对不起,确实没问题,因为用的是 FillRect,
而我用的是 Rectangle, 没有考虑边的问题,会导致部分边界无法重绘
哎,没面子......
 
偶觉得如果图象小的话可能看不出来,
FillRect(ClipRect)应该是从该rect的左上角开始填充吧,
而ClipRect是需要repaint的矩形,那么当ClipRect的left不是
正好落在一个填充图的边缘上这样恐怕要出问题,

望文生疑,还请指教

//btw:直接在create里将brush.bitmap指定为image就可以实现
// form填充了吧?
 
GGCAT:
大家研究研究而已,呵呵。
 
多人接受答案了。
 
后退
顶部