大佬教程收集整理的这篇文章主要介绍了delphi – 当TDBGrid.DefaultDrawing为false时,如何对Full Row Selected TDBGrid进行正确的所有者绘制?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
procedure TDbGridTestForm.mygridDrawcolumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; column: Tcolumn; State: TGridDrawStatE); begin if gdSELEcted in State then begin // mygrid.DrawCellHighlight(Rect,State,Col,Row); mygrid.Canvas.brush.Color := clHighlight; mygrid.Canvas.Font.Color := clHighlightText; mygrid.Canvas.FillRect(Rect); end; mygrid.DefaultDrawcolumnCell(Rect,DataCol,column,StatE); end;
让我疯狂的是,我不会使用DefaultDrawcolumnCell代码绘制焦点指示(高亮颜色和焦点矩形),我确信我应该调用DrawCellHighlight而不是执行上面我正在做的FillRect hack.
如果我打开DefaultDrawing,我会得到一组毛刺(奇怪的字体绘画问题),如果我将其关闭,我会得到另一组毛刺(即使在gdSELEcted时也没有突出显示).
DBGrids.pas DefaultDrawcolumnCell中的代码除了绘制文本外什么都不做.很明显,如果你自己接管所有绘图代码,你应该做更多.但是,DBGrids.pas所依赖的Grids.pas中内置的高亮绘图代码并非设计为从此上下文调用.我无法弄清楚我是否应该直接调用DrawCellHighlight(如上所示),并计算Col和Row值,或者我是否应该编写自己的TCustomGrid.DrawCellHighlight复杂版本来手动处理所有各种情况.
当然,这是如此简单,明显,我只是忽略它.我必须关闭DefaultDrawing,因此我必须完全从我的所有者绘制事件中绘制,并且我必须能够在主题服务不可用时运行,并且我必须在主题服务可用时使用它们.所以我需要直接调用TCustomGrid.DrawCellHighlight(我不知道如何),或者我需要完全重新实现它.
type tHackGrid = class(tDBGrid); procedure TTDbGridTestForm.myGridDrawcolumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; column: Tcolumn; State: TGridDrawStatE); begin if gdSELEcted in State then begin tHackGrid(mygrid).DrawCellHighlight(Rect,column.Index,0); end; mygrid.DefaultDrawcolumnCell(Rect,StatE); end;
以上是大佬教程为你收集整理的delphi – 当TDBGrid.DefaultDrawing为false时,如何对Full Row Selected TDBGrid进行正确的所有者绘制?全部内容,希望文章能够帮你解决delphi – 当TDBGrid.DefaultDrawing为false时,如何对Full Row Selected TDBGrid进行正确的所有者绘制?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。