加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 当水平滚动条移动时,实时更新StringGrid?

发布时间:2020-12-15 09:27:12 所属栏目:大数据 来源:网络整理
导读:在Delphi 2010中,我需要显示一个网格,该网格具有一个大约15列x5行的水平滚动条. 我选择使用StringGrid. 但是,当鼠标按钮向下拖动水平滚动条时,我希望网格实时滚动. 显示的StringGrid组件不会实时滚动.它等待直到释放鼠标按钮才更新列并在必要时滚动. 此外,水
在Delphi 2010中,我需要显示一个网格,该网格具有一个大约15列x5行的水平滚动条.

我选择使用StringGrid.

但是,当鼠标按钮向下拖动水平滚动条时,我希望网格实时滚动.

显示的StringGrid组件不会实时滚动.它等待直到释放鼠标按钮才更新列并在必要时滚动.

此外,水平滚动条按钮(就是所谓的)与列数不成比例.并且当在底行上的向下箭头移动到右下一列的顶部时…

这些似乎是常见的需求,所以我很惊讶不在TStringGrid中找到它们.

围绕这两个问题的任何建议?我可以使用DbGrid或其他标准组件,但我倾向于不使用商业网格,如果我可以避免它.而且我不会使用共享软件或免费软件……

TIA

解决方法

对于第一个问题,您可以在设计时或运行时在StringGrid的 Options中设置goThumbTracking:

StringGrid1.Options := StringGrid1.Options + [goThumbTracking];

对于第三个问题,您可以使用控件的键盘事件处理程序提供所需的功能.一个例子;

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  StringGrid: TStringGrid;
begin
  StringGrid := Sender as TStringGrid;
  case Key of
    VK_DOWN:
      if StringGrid.Row = StringGrid.RowCount - 1 then begin
        Key := 0;
        StringGrid.Row := StringGrid.FixedRows;
        if StringGrid.Col = StringGrid.ColCount - 1 then
          StringGrid.Col := StringGrid.FixedCols
        else
          StringGrid.Col := StringGrid.Col + 1;
      end;
    VK_UP:    //...;
    VK_RIGHT: //;
    VK_LEFT:  //;
  end;
end;

对于第二个问题,滚动代码似乎埋藏在TCustomGrid的私有方法中.我不知道如何实现这一目标..

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读