【问题标题】:Delphi: auto scroll for String GridDelphi:字符串网格的自动滚动
【发布时间】:2011-07-20 02:21:02
【问题描述】:

如何使字符串网格自动滚动?

如果字符串网格不可见(例如在隐藏的框架上),属性“Row”或“TopRow”将无济于事:未选择任何单元格。如果要显示它 - 它的单元格被选中并且“Row”/“TopRow”有效。

试试看。在设计时间。字符串网格:100 行,可见:=false。点击按钮:

StringGrid1.Row := 99; 
StringGrid1.Visible := true. 

并且为字符串网格返回“可见”为真。请看看有什么不同。

谢谢!

【问题讨论】:

  • 只是好奇,如果它不可见,为什么需要自动滚动?
  • 切换框架-->框架和其上的字符串网格-->可见-->滚动在顶部。我需要在底部。

标签: string delphi grid scroll


【解决方案1】:

如果之前从未显示过字符串网格,请在设置 row 之前调用 HandleNeeded

StringGrid1.HandleNeeded;
StringGrid1.Row := 99;

// later
StringGrid1.Visible := True;


最初不可见,字符串网格窗口尚未创建。设置row 设置属性但不能滚动不存在的窗口。

【讨论】:

  • WinControl 的句柄是窗口句柄,要拥有窗口句柄 VCL 必须创建控件的窗口。
  • 错误!!!在“StringGrid1.Row := 99”之前,我更改了列的宽度。如果使用“HandleNeeded”,那么网格线同时具有旧位置和新位置;文字显示不正确!!!
  • @maxfax - 无法通过简单的测试进行复制,抱歉。 StringGrid1.Invalidate 有帮助吗?
【解决方案2】:

当我尝试以下代码时,它似乎在所有三种情况下都可以正常工作,可见、不可见和不可见的父级:

  StringGrid1.TopRow := 5;
  showmessage(inttostr(StringGrid1.TopRow)); //shows 5
  StringGrid1.Visible := false;
  StringGrid1.TopRow := 2;
  showmessage(inttostr(StringGrid1.TopRow)); //shows 2
  StringGrid1.Parent.Visible := false;
  StringGrid1.TopRow := 1;
  showmessage(inttostr(StringGrid1.TopRow)); //shows 1

你是这个意思吗?

【讨论】:

  • 试试看。在设计时间。字符串网格:100 行,可见:=false。单击按钮时: StringGrid1.Row := 99; StringGrid1.Visible := 真。然后为字符串网格返回“可见”为真。请看区别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多