Query.AfterScroll(100分)

  • 主题发起人 主题发起人 snail-1
  • 开始时间 开始时间
S

snail-1

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样在Query.AfterScroll之后触发DBGridDrawColumnCell?
 
在Query的AfterScroll事件中
TForm1.Qury1afterScroll(DataSet: TDataSet);
begin
DBGrid.Repaint;
end;
 
用DBGrid.Repaint不行,清不掉DBGridDrawColumnCell处理的东西,如:Canvas.font.color.
 
DBGridDrawColumnCell事件應該是時時刻刻都在觸發的。
本來DBGridDrawColumnCell事件有語句,在Query.AfterScroll
之后必將觸發DBGridDrawColumnCell事件。
 
对不起,可能我没把问题说清楚。我是想通过Query把符合条件记录现实在DBGrid中,然后通过DBgridDrawColumnCell事件把这些符合条件的记录的字体颜色改了,当Query.AfterScroll把滚动条移动后再把这些记录的颜色恢复回去。请指教!
 
应该是在事件中BeforScroll
调用DBgridDrawColumnCell
事件,
在DBgridDrawColumnCell
中写一段恢复的代码
 
触发DBGridDrawColumnCell将所有的都改成一种颜色吧
 
怎样在Query.AfterScroll移动滚动条后再触发DBGridDrawColumnCell。怎样在DBgridDrawColumnCell
中写一段恢复的代码,能具体点吗?
 
说实在的,我还没写过,但这段代码肯定对你有帮助
你可在 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;
 
bswilson您好,您的方法还是不行。当你移动GRID指针时,改变颜色的字体还会留在原处。
 
我也没写过这些代码,我喜欢简单的,所以我用TopGrid,它的每个cell的字体及颜色都好控制
我是实现了的.
 
好象不可以实现 你的功能吧。
 
bswilson: 哪有TopGrid?能给我一个码?
 
给个电邮,大概3M
 
好难,因为你的格子要重画的话,记录必须定位在那里,移动记录又会触发Scroll事件
 
还是找第三方控件吧,有许多非常精彩的!
 
后退
顶部