水平スクロールバーを制御するために設定ScrollWidth
する方法を考え出そうとしています。TListBox
これが私の最初の試みです:
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
それで、私の質問は、リスト ボックスの現在の内容に基づいて、正確に設定できるようにするためにどのコードを使用する必要があるかということです。