救命!如何在DBgrid中加上背景图(100分)

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

shopman

Unregistered / Unconfirmed
GUEST, unregistred user!
救命 啊!救命 啊!救命 啊!

咕鲁...... 咕鲁...... 咕鲁......


背景图.... 背景...图 背...........

 
继承一个TCustomDBGrid,Override它的Paint方法,画上你的背景后在inherited
 
不知是否有这样的控件:当把它放到一个可视控件上时,它就接管parent控件的
paint方法,然后画上背景后inherited原来的paint方法。
 
好象无这方面的控件。
 
亲爱的 huizhang.

你能再详细些吗? 谢谢!
 
TDBGrid <- TCustomDBGrid <- TCustomGrid
上面是TDBGrid的继承关系,其画格子的部分是在TCustomGrid中的Paint中解决的。
你可以将TDBGrid的声明完全抄下来,加上一个BkImage属性,重写Paint事件:

TMyDBGrid = class(TCustomDBGrid)
private
fBKImage: TBitmap;
procedure SetBKImage(value: TBitmap);
protected
procedure Paint; Override;
public
...
published
constructor Create(AOwner: TComponent); Override;
Destructor Destroy; Override;
property BkImage: TBitmap read fBKImage write SetBKImage;
...
end;

具体代码参考TCustomGrid.Paint的方法, SetBKImage后要调用Invalidate.
constructor TMyDBGrid.Create;
begin
inherited Create(AOwner);
fBKImage := TBitmap.create;
end;
destructor TMyDBGrid.Destroy;
begin
fBKImage.Free;
inherited;
end;
procedure TMyDBGrid.SetBKImage(Value: TBitmap);
begin
fBKImage.Assign(Value);
invalidate;
end;
procedure TMyDBGrid.Paint;
var DrawRect: TRect;
begin
if Assigned(fBKImage) then
begin
DrawRect := 计算背景大小;
canvas.StretchDraw(DrawRect, fBKImage); //从fBKImage中复制图像到Grid的Canvas上;
end;
inherited;
end;
 
会长的方法有问题吧,因为在paint时画好背景后,再inherited就会又覆盖掉已画
好的背景,Dbgrid显示数据时是先清空格子再显示数据的。
 
try <a href="http://202.102.26.55/del_comp/Express%20Grid%20V1_D234C134.zip"> this </a>
 
to fx, 我写的那段代码是有问题, 作天打开Grids.PAS一看,确实是覆盖掉了背景
具体覆盖是在TCustomGrid.Paint中的子过程DrawCell中使用了FillRect把已经画
好了的背景覆盖了。
解决办法是把TCustomGrid.Paint的那段原代码全部抄到继承的Paint方法中来,
只需要把FillRect改换成CopyRect从BKImage的对应位置复制一块小矩形即可绘出
背景。不过如果是hilighted需要特殊处理。

如果你不希望继承空件,也可以在OnDrawColumeCell使用CopyRect画背景
 
黔驴技穷无可奈何,百尺杆头难进一尺。


小生谢过绪位援手之情,绪位之手笔令小生感慨万千‘cj’E 文炉火纯青、
‘huizhang’道行深不可测,哎! 望其项背而不能仰也!
承蒙‘huizhang’指点小生迷津,无奈小生悟性不高、根骨欠佳终难领悟
其中妙旨有负‘huizhang’之厚望。再者‘huizhang’能否以博大之胸怀度小生
以成仁,成全小生大愿者。

不情之请

谅小生天资愚钝

shopman
 
多人接受答案了。
 
to huizhang:
你好:
我很急,想知道如何在DBgrid中加上背景图,能把你的 Grid.pas 贴给我吗?
谢谢。
slxiaodong@163.com
 
后退
顶部