gpt4 book ai didi

delphi - 失去焦点时保持 InPlaceEditor 突出显示

转载 作者:行者123 更新时间:2023-12-03 15:25:47 25 4
gpt4 key购买 nike

当网格失去焦点到另一个非模态表单时,Delphi XE2 中是否有一种方法可以保留 StringGrid 中 InPlaceEditor 的突出显示?

我当前的 StringGrid 选项是:

enter image description here

如果没有,我本来希望使用下面的代码在失去焦点后保留当前单元格的突出显示,但是当单元格不再是当前单元格时,我在保留单元格突出显示方面遇到了一些问题。

我是否需要在下面的代码中添加“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}

编辑:下面的屏幕截图阐明了它今天的表现。我希望当前单元格在失去焦点时比底部屏幕截图更清晰

enter image description here

最佳答案

如果您希望保持 goAlwaysShowEditor 选项处于启用状态并仅突出显示始终显示的编辑器,则需要访问 InplaceEditor 属性。这需要对字符串网格类进行子类化并更改就地编辑器的颜色,默认情况下是 TCustomMaskEdit 控件类。
在此代码中显示了如何更改就地编辑器的颜色编辑器,取决于字符串网格
何时获得焦点:

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;

以及聚焦和未聚焦网格状态的结果:

enter image description here

关于delphi - 失去焦点时保持 InPlaceEditor 突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11923754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com