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

delphi – 如何计算TListBox.ScrollWidth使用的值?

发布时间:2020-12-15 03:55:42 所属栏目:大数据 来源:网络整理
导读:我正在尝试研究如何在TListBox上设置ScrollWidth来控制水平滚动条.这是我的第一次尝试: program ListBoxSizing;uses Math,Forms,StdCtrls;var Form: TForm; ListBox: TListBox;procedure BuildForm;begin //Form.Font.Size := 9; Form.ClientWidth := 200;
我正在尝试研究如何在TListBox上设置ScrollWidth来控制水平滚动条.这是我的第一次尝试:
program ListBoxSizing;

uses
  Math,Forms,StdCtrls;

var
  Form: TForm;
  ListBox: TListBox;

procedure BuildForm;
begin
  //Form.Font.Size := 9;
  Form.ClientWidth := 200;
  Form.ClientHeight := 100;
  ListBox := TListBox.Create(Form);
  ListBox.Parent := Form;
  ListBox.SetBounds(0,Form.ClientWidth,Form.ClientHeight);
  ListBox.Items.Add('ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ');
end;

procedure SetScrollWidth;
var
  i,MaxWidth: Integer;
begin
  MaxWidth := -1;
  for i := 0 to ListBox.Items.Count-1 do
    MaxWidth := Max(MaxWidth,ListBox.Canvas.TextWidth(ListBox.Items[i]));
  if MaxWidth<>-1 then
    ListBox.ScrollWidth := MaxWidth;
end;

begin
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm,Form);
  BuildForm;
  SetScrollWidth;
  Application.Run;
end.

这是水平滚动条尽可能向右移动的结果:

注意最终字符的最后部分是如何被切断的.

现在,如果我们取消注释更改表单字体大小的行,它看起来像这样:

现在,似乎在后续的TextWidth调用中没有考虑到字体大小的变化.

所以,我的问题是,我需要使用什么代码才能根据列表框的当前内容准确设置ScrollWidth.

解决方法

procedure SetScrollWidth;
var
  I,MaxWidth: Integer;
begin
  MaxWidth := -1;
  // assign control's font to canvas
  ListBox.Canvas.Font := ListBox.Font;
  for I := 0 to ListBox.Items.Count - 1 do
    MaxWidth := Max(MaxWidth,ListBox.Canvas.TextWidth(ListBox.Items[I]));
  // consider non-client area
  if MaxWidth <> -1 then
    ListBox.ScrollWidth := MaxWidth + ListBox.Width - ListBox.ClientWidth;
end;

(编辑:李大同)

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

    推荐文章
      热点阅读