- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试弄清楚如何在 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, 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 使用哪些值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13643698/
我正在使用 Delphi XE4,下面是我的示例应用程序。 unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.S
如果您的列表框包含许多项目并且您需要选择例如项目,则项目的选择会变得很痛苦。通过手动单击和选择 400 个项目。 有没有一种优雅的方法可以使用某个“ 通过模式函数 选择项目”从列表框中选择项目? 最佳
我在我的数据库中用 MYDAC 组件创建了一个表并添加了数据。我如何从该表中提取列中的这些值? 我试过了,但没用; MyQuery1.Close; MyQuery1.SQL.Text :='SEL
当选择一个项目(按住鼠标左键)并将鼠标移到列表框之外时,我需要更改列表框滚动的速度。要复制该行为,请执行以下操作: 将列表框拖放到表单上(+- 250 x 200 奇数)。不要让它太大,否则滚动条在底
我一直在尝试使用 TListBox 控件、绘制图像和更改字体样式等。我想稍微加强一下,并尝试通过缩进和多级缩进来更多地操作项目。 看看这张图片以获得更好的想法: 这个想法是列表中位于起始项和结束项之间
我在 Delphi 中为 TListBox 有一个自定义 style,我可以在其中简单地更改 Text 属性喜欢 lb_item.StylesData['location'] := 'New Text
我正在使用 TListBox 组件来显示带有 CheckBoxes 的列表。 它在 iOS 上运行良好,但在 Android 上滚动时会产生小的延迟。 乍一看,我认为这是因为每个 TListBoxIt
我有一个TListBox,每个项目都有控件,例如TEdit、TComboBox、TSwitch等, 右对齐。此列表中有大约 20 项,因此它超出了屏幕,因此用户需要滚动(通过滑动手指)才能到达底部。
我想通过将列表框与其他两个列表框进行比较来清理列表框。 Listbox1 将包含项目的大列表 Listbox2 会有我想从 listbox1 中删除的词 Listbox3 将包含必须存在的强制性单词才
我正在 Lazarus 上开发一个电子书管理器,但我在使用一个我从未使用过的组件 (TListBox) 时遇到了一些麻烦。在名为 CategoryList 的 TListBox 上,我有这些项目: L
我正在使用 XE7 和 FMX。 我的问题是 TListbox 的 OnChange-Event 无法正确处理多选(它不会在每次发生更改时触发)。 重现步骤: 创建一个 FMX 应用程序并将 TLis
我正在创建一个多设备 FireMonkey 应用程序,我想在选择 TListBox 项目时更改其颜色。 如何在 Rad Studio XE7 中完成此操作? 最佳答案 打开位图样式设计器(请参阅 RA
查看代码: function ShowItem(MyData: TMyData): TListItem; var vListItem: TListItem; begin vListItem :
我有一种记录类型。我想在 TListbox 中添加该记录类型的变量,并在 TListbox 的单击事件上检索它。是否可以?如果是的话怎么办? 我使用添加它 lstbox.AddItem(data,my
我正在将 ListBox.Style := lbOwnerDrawFixed 与 OnDrawItem 一起使用: procedure TForm1.ListBox1DrawItem(Control:
简短版本:有没有办法单独控制或修改LisBox项目?例如,分别将其 Visible 属性设置为 False。我在搜索时在Fire Monkey中发现了TListBoxItem类,但我不想使用Fire
是否有使用 TListBox 获得“OnChange”类型功能的技巧?我可以对组件进行子类化并添加属性等,然后仅在索引更改时执行 OnClick 代码...我还可以使用表单级别变量来破解它以存储当前索
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwner
在 DelphiXE 中,我使用 tFileOpenDialog 选择一个文件夹,然后在 tListBox 中列出该文件夹中的所有 *.jpg 文件。我允许将列表项拖放到列表中进行自定义排序,以便稍后
这就是我从本地服务器上的列表中获取一些项目的方法。 我认为它仍然需要一些重构(抱歉,我是 Delphi 的初学者),但是我想更好地理解为什么 ListItem colors 没有被改变。 我做了一些调
我是一名优秀的程序员,十分优秀!