大佬教程收集整理的这篇文章主要介绍了delphi – 如何计算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;
以上是大佬教程为你收集整理的delphi – 如何计算TListBox.ScrollWidth使用的值?全部内容,希望文章能够帮你解决delphi – 如何计算TListBox.ScrollWidth使用的值?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。