delphi – 在失去焦点时保持InPlaceEditor高亮显示
发布时间:2020-12-15 09:25:11 所属栏目:大数据 来源:网络整理
导读:当网格失去焦点到另一个非模态形式时,Delphi XE2中是否有一种方法可以在StringGrid中保留InPlaceEditor的高亮? 我当前的StringGrid选项是: 如果没有,我原本希望在失去焦点后使用下面的代码来保留当前单元格的一个亮点,但是当它们不再是当前单元格时,它会有
当网格失去焦点到另一个非模态形式时,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} 编辑:下面的屏幕截图阐明了它今天的表现.我想当前的细胞,当失去焦点时,比底部屏幕捕获更清晰 解决方法
如果要保持启用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; 聚焦和未聚焦网格状态的结果: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |