gpt4 book ai didi

mysql - 如何突出显示 DBgrid (SMDBGrid) 中单击的单元格中的数据?

转载 作者:行者123 更新时间:2023-11-29 13:14:43 25 4
gpt4 key购买 nike

我在 Delphi 应用程序中使用 SMDBGrid 来显示和编辑来自 MySQL 的查询结果的数据。

我需要一些帮助来了解如何使网格在编辑数据时按照我想要的方式运行。

单元格中的数据最初以白色背景上的黑色字体显示。

  1. 如果我在包含数据的单元格中左键单击一次,该单元格将更改为白色背景上的白色字体(或者数据可能会消失)我看不到数据来编辑它。

  2. 如果我在同一个单元格中再次左键单击,我会在蓝色背景。我可以查看数据并且可以对其进行编辑。

  3. 如果我在同一个单元格中第三次左键单击,我会在屏幕上看到黑色字体白色背景(就像其他单元格一样)。我可以查看数据并且可以对其进行编辑。

  4. 双击单元格一次的行为类似于 (1),双击此后总是表现得像 (2)

问题

如何设置,以便在单元格中左键单击一次即可编辑该单元格而不更改颜色?即,行为类似于上面的 (3),继续在单元格原来具有的任何背景颜色上显示黑色字体。

其他可能相关的信息

运行查询填充网格后,我将其置于编辑模式

  • 查询1.编辑

我在网格中有一个 OnMouseDown 事件,它检测右键单击并显示一个 PopUpMenu,它提供选择并在记录的其他字段中设置值。还有一个 OnGetCellParams 事件,根据这些其他字段中的值设置单元格的背景颜色。为了让弹出菜单正常工作并且右键单击时不显示(内置?)编辑菜单,通过反复试验我设置了

  • PopUpMenu = 我的PopUpMenu
  • dgEditing = true
  • dgAlwaysShowEditor = true
  • dgAlwaysShowSelection = false

但我不太确定我在那里做什么。

无论如何,通过删除 OnMouseDown 和 OnGetCellParams 事件并将 PopUpMenu 设置为 '' 来删除所有这些似乎对左键单击单元格时发生的情况没有影响。数据仍然是白色的。

最佳答案

我现在找到了一种方法来做到这一点,但不确定这是否是正确/最好的方法,因为似乎我必须通过代码来完成我认为会自动发生的事情。无论如何,我通过使用 OnDrawColumnCell 事件获得了该行为。

procedure TFrmDataEntry.SMDBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
//when they click in a cell, temporarily set the background to white and the font to bold black
if (gdSelected in State) then
begin
TDBGrid(Sender).Canvas.Brush.Color := clwhite;
TDBGrid(Sender).Canvas.Font.Style := Font.Style + [fsBold];
TDBGrid(Sender).Canvas.Font.Color := clblack;
end;
TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State); //Update the grid so it takes effect
end;

关于mysql - 如何突出显示 DBgrid (SMDBGrid) 中单击的单元格中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21624789/

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