dbgrid中能否象EXCEL那样,当鼠标点选任意单元格中的文字时,可以随意改变该文字的字体和颜色?(100分)

  • 主题发起人 主题发起人 whover
  • 开始时间 开始时间
能是能,不过每次都要去调用ONDRAWDATACELL和TEXTOUT,不如用TOPGRID
 
应该怎么做?
 
在dbGrid中不是有cellclick事件?
不过我觉得调用CustomDrawDataCell和TextOut什么的挺麻烦的(这些例子在坛上很多).
我建议用topgrid控件
 
能不能给我源码?还有topgrid哪里下载?
 
先给我你的电邮,我发给你,有3M多一点.
 
怎样使某几笔资料变色?
你可在 StringGrid 元件的 DrawDataCell 事件中, 依资料的条件性来改变格子或文字的颜色.如 :
OnDrawDataCell(...)
begin
with TStringGrid(Sender) do
begin
if (条件) then
Canvas.TextOut(Rect.Left + 4, Rect.Top + 2, '要显示的文字, 如表格的资料');
end;
而你会看到 StringGrid 的显示资料怎麽有重叠的情况, 那是因为原本StringGrid
要显示的资料与 TextOut 所显示的资料重叠, 解决方法 :
在 Query 元件所加入的栏位(在元件上按右键, 会有 Add Fields...的选单), 在
不要显示资料的栏位的 OnGetText 事件中有一参数设定为 False;
procedure TForm1.Query1Detail1GetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
// 决定在 StringGrid 得知表格资料时, 要不要显示所得到的资料, False -> 不显示
// 就可避免与 TextOut 的文字重叠了
DisplayText : = False;
end;
end;
如果用 Delphi 3 处理很简单.
例如,对表中某字段当其数值小于0时为红字,其他为黑字.
在 StringGrid.OnDrawColumnCell(...) 中:
begin
if TableField.AsInteger < 0 then
StringGrid.Canvas.Font.Color := clRed
else
StringGrid.Canvas.Font.Color := clBlack;
StringGrid.DefaultDrawColumnCell(...);
end;
这样,对 Field 指定的格式仍旧生效,不必重写.
end;
确切的原码找不到了,先消化消化这个.说不定用了TOPGRID这个就用不着了
 
topgrid我找到了,谢谢。但是用topgrid怎么实现以上功能?
 
使用oncellclick就行。
不过不方便。
找个第三方控件吧,像easygrid,topgird,xlgrid
 
给我一份,我的那个在delphi6种不能用
xiezhimin@zjpti.com
 
装上topgrid吧,先看看在说.
onClickCell事件回返回行和列,然后Cell[i,j].color:=你想要的颜色
 
我装上了,但不知道怎样返回行列?
 
tsDBGrid的OnClickCell事件
 
我知道是这个事件,但我不知道命令该怎么写。
 
为什么不回答?
 
没人回答吗?
 
老兄,不要每个问题都问,如果是学习的话要自己探索.
 
接受答案了.
 
后退
顶部