当网格失去焦点到另一个非模态形式时,Delphi XE2中是否有一种方法可以在StringGrid中保留InPlaceEditor的高亮?
我当前的StringGrid选项是:

如果没有,我原本希望在失去焦点后使用下面的代码来保留当前单元格的一个亮点,但是当它们不再是当前单元格时,它会有一些问题,使单元格突出显示.
我是否需要在下面的代码中添加"else"以将颜色更改回非选定单元格上的原始颜色?有什么警告吗?
procedure TForm1.sgMultiDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if (ACol = sgMulti.Col) and (ARow = sgMulti.Row) then
begin
sgMulti.Canvas.Brush.Color := clYellow;
sgMulti.Canvas.FillRect(Rect);
sgMulti.Canvas.TextRect(Rect, Rect.Left, Rect.Top, sgMulti.Cells[ACol, ARow]);
if gdFocused in State then
sgMulti.Canvas.DrawFocusRect(Rect); user
end;
end; { sgMultiDrawCell}
Run Code Online (Sandbox Code Playgroud)
编辑:下面的屏幕截图阐明了它今天的表现.我想当前的细胞,当失去焦点时,比底部屏幕捕获更清晰

如果要保持goAlwaysShowEditor启用该选项并仅突出显示始终显示的编辑器,则需要访问该InplaceEditor属性.这需要子类化您的字符串网格类并更改inplace编辑器的颜色,这是默认的TCustomMaskEdit控件类.
在此代码中显示了如何更改inplace编辑器的颜色,具体取决于字符串网格何时
聚焦:
type
TStringGrid = class(Grids.TStringGrid)
private
procedure CMEnter(var Message: TCMEnter); message CM_ENTER;
procedure CMExit(var Message: TCMExit); message CM_EXIT;
protected
function CreateEditor: TInplaceEdit; override;
end;
implementation
{ TStringGrid }
procedure TStringGrid.CMEnter(var Message: TCMEnter);
begin
inherited;
if Assigned(InplaceEditor) then
TMaskEdit(InplaceEditor).Color := $0000FFBF;
end;
procedure TStringGrid.CMExit(var Message: TCMExit);
begin
inherited;
if Assigned(InplaceEditor) then
TMaskEdit(InplaceEditor).Color := $0000A6FF;
end;
function TStringGrid.CreateEditor: TInplaceEdit;
begin
Result := inherited;
if Focused then
TMaskEdit(Result).Color := $0000FFBF
else
TMaskEdit(Result).Color := $0000A6FF;
end;
Run Code Online (Sandbox Code Playgroud)
聚焦和未聚焦网格状态的结果: