我想在DBGRID 中输出的数据表,用MOUSE浏览记录,达到HotTrack效果 (30分)

  • 主题发起人 主题发起人 leezezelee
  • 开始时间 开始时间
L

leezezelee

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在DBGRID 中输出的数据表,用MOUSE浏览记录是,
能够实现类似于TABCONTROL的HOTTRACK 的功能,,即MOUSE指向的记录加亮显示;
或是该条记录的背景色与众不同。

以后请注意标题的表达--amo
 
半年都够了
dbgrid首先搞成ownerdraw
然后在mousemove中根据x,y算位置
 
[red][/red][:(!],只要入门者都会,对此拒绝回答,不要老是提这种问你吃了没的问题
 
用InforPower组件做
 
呵呵。。。。有趣,有趣。
 
类似这样?

procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
p: TGridCoord;
begin
p:=DBGrid1.MouseCoord(pp.X, pp.Y);
DBGrid1.SelectedIndex:=p.X;
DBGrid1.DataSource.DataSet.First;
DBGrid1.DataSource.DataSet.MoveBy(p.Y);
end;
 
同意莉莉(Chenlili)的说法 [:D]
 
这个问题有一点点点点点点难度。
先在DBGrid1MouseMove的事件里判断当前鼠标的位置,再根据鼠标的位置判断当前指向那一
条记录(必须调整好dbgrid的高度,显示整数记录数,不然不好判断)
如:
高度:101-105 显示记录集的第三条记录
高度:106-110 显示记录集的第四条记录
高度:110-115 显示记录集的第五条记录
高度:115-120 显示记录集的第六条记录
如果鼠标的位置在第四条记录,而当前记录指针在第六条,则将记录指针上移两条记录。
(如果你不想让dbgrid中的记录指针移动,用DisableControls属性。)
在此事件中调用下面的过程就可以了
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if 某个条件 then
begin
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.Canvas.Font.size := 11;
DBGrid1.Canvas.Brush.Color := clinfobk;
end
else
begin
DBGrid1.Canvas.Font.Color := clWindowText;
DBGrid1.Canvas.Font.size := 9;
DBGrid1.Canvas.Brush.Color := clWindow;
end;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
 
炸么难的题,你才给30分!
 
to jzx:
你说的INFORPOWER组件,在哪个标签下面,是如何实现的呢?
我是弟弟手, 我给你磕头了,(并且是三个),请给我一个详细的例子(代码和说明),OK?

to: Chenlili ,to xianjun;
DbGrid 的ownerdraw,是方法,事件还是属性, 我找里半天也没找到,
我是弟弟手, 我给你磕头了,(并且是三个),请给我一个详细的例子(代码和说明),OK?


to: mlzhou你的'某个条件' 我实在不知道该如何写代码.我是弟弟手, 我给你磕头了,
(并且是三个),请给我一个详细的例子(代码和说明),OK?
 
mlzhou说的不行吗?
OwnerDraw只是一种状态而已,象ListBox等有一个Style可以设, 只有设成Ownerdraw时才会
触发相应的事件。
但DBGrid没有这个东西, 它直接就会触发下面两个事件:OnDrawColumnCell, OnDrawDataCell
你只要在这两个事件里写代码就成了:
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if gdSelected in State then
with DBGrid1.Canvas do
begin
Brush.Color := clRed;
FillRect(Rect);
Pen.Color := clWhite;
Pen.Width := 2;
Rectangle(Rect);
Font.Color := clBlue;
TextOut(Rect.Left + 2, Rect.Top + 2, Field.AsString);
end;
end;
 
InfoPower 是Woll2Woll的组件包,你可以从www.51delphi.com上下载
 
后退
顶部