- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当您有一个 TDBGrid,全行选择,并且始终显示选择(即使没有聚焦时),并且您想要完全由所有者绘制它时,您可以选择已弃用的事件 OnDrawDataCell
,和一个新事件 DrawColumnCell
,我选择了后者并尝试这样做:
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 (而且我不知道如何),或者我需要完全重新实现它。
最佳答案
由于您需要自己实现主题支持,因此最好调用 DrawCellHighlight。即使行号没有提供给 OnDrawColumnCell,它看起来也没有被 DefaultDrawColumnCell 代码使用,因此您不必尝试在内部计算它:
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, State, Column.Index, 0);
end;
mygrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
关于delphi - 当 TDBGrid.DefaultDrawing 为 false 时,如何对选定的全行 TDBGrid 进行正确的所有者绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9468791/
当您有一个 TDBGrid,全行选择,并且始终显示选择(即使没有聚焦时),并且您想要完全由所有者绘制它时,您可以选择已弃用的事件 OnDrawDataCell ,和一个新事件 DrawColumnCe
我是一名优秀的程序员,十分优秀!