在Delphi中编码,将OnKeyPress事件处理程序附加到TStringGrid:
OnKeyPress事件在用户键入的网格单元格之前触发,实际上已使用已按下的键更新其值.这显然是一个问题,当我想知道,单元格的内容是什么,在这个时刻,如,当用户修改它.
如果您没有考虑每个细节,那么"被黑客入侵"的解决方案很简单:只需从单元格中获取值,并且由于OnKeyPress事件带有Key参数,所以将该值附加到结尾 - 现在您拥有当前值细胞!
假.如果用户选择了单元格中的所有文本(即:"foo")并且他们现在正在键入"b",该怎么办?由于他们选择了文本,因此将删除并替换为字母"b".但是,单元格的值仍将在OnKeyPress中显示为"foo",Key的值将为"b",因此上述逻辑将导致应用程序得出结论,单元格现在包含"foob",我们知道不是真的.
所以. 有谁知道如何解决这个问题?是否有一种方法可以在网格内容更新后对OnKeyPress做出反应,或者可能是在处理程序开始时强制更新的方法?我在这里拼命避免使用OnKeyUp事件,所以除此之外的任何建议都将非常感激.
有没有办法在string grid使用查找对话框中进行文本搜索?我需要找到一个文本,并在找到文本时突出显示它的背景.
谢谢!
我想知道如何以编程方式确定字符串网格的单元格中的数据是否被修改?
我在表单中有一个字符串网格.stringgrid的数据是从数据库加载的.如果用户修改数据,我想更改数据库中的数据.
请分享代码.
谢谢
我正在使用Delphi 7,我想列出字符串网格中给定目录中的所有文件(每行一个文件,1列中的所有文件).我已经搜索了大约一个小时,但是找不到任何关于如何做到这一点的例子,所以你能提供的任何帮助都将受到赞赏.
使用Dephi XE,当用户单击按钮时,我希望能够在StringGrid(SG)中选择单元格(没问题),然后允许用户立即开始键入该单元格.
SG.Row := DesiredRow;
SG.Col := 1;
SG.SetFocus;
Run Code Online (Sandbox Code Playgroud)
这会将所需的单元格设置为蓝色,但用户必须单击要输入的单元格.我希望用户能够在单击按钮后立即开始键入,而无需使用鼠标.
在 Delphi 中,如何创建从 TStringGrid 类派生的类,以便与网格单元关联的 TObject 数组具有更具体的类型,例如用于指定单元格颜色的 TColor?
有一个程序可以创建一个日志文件.
这是它创建的日志文件的示例:

此程序将此日志文件加载到TStringGrid中.日志文件以制表符分隔.单元格可以具有空格"".
我如何使用TStringGrid或替代方案将此类日志文件加载到此程序中?
谢谢!
我有一个包含多行的TStringGrid,其中我实现了某种"只读"行.更准确地说,我不允许用户点击倒数第二行.如果用户点击最后一行,则没有任何反应; 焦点不会移动到该行的单元格.
我有代码(在KeyDown中),一切顺利.但是,如果用户单击顶行然后使用鼠标滚轮向下滚动,最终焦点将移动到倒数第二行.知道如何防止这种情况吗?
我想在TStringGrid中放一个大字符串,其中每个单元格包含来自字符串的4个字符,StringGrid有16列
nc:=1; nr:=1; //nc = number of column . nr = number of raw
while fs.Length>0 do // fs is a large string
begin
if nc>16 then nr:=nr+1; nc:=1;
stringgrid.Cells[nc,nr]:=copy(fs,1,4);
delete(fs,1,4);
nc:=nc+1;
PeekMessage(M, Handle, 0, 0, PM_NOREMOVE); // it prevents "not responding"
end;
Run Code Online (Sandbox Code Playgroud)
我如何让它更快:=)
delphi ×9
tstringgrid ×9
delphi-7 ×1
events ×1
filelist ×1
find ×1
grid ×1
highlighting ×1
inheritance ×1
large-files ×1
logging ×1
loops ×1
onkeypress ×1
scrollwheel ×1
text ×1