次の(より合理的な)コードを使用した Delphi 2007 の簡単なテスト アプリケーションは、259 文字の長さである でListView
Ansi 文字の表示を停止することを示しています。88-8
procedure TForm4.FormCreate(Sender: TObject);
var
s: string;
i: Integer;
Item: TListItem;
begin
s := '';
for i := 0 to 89 do
s := s + '-' + IntToStr(i);
// Set the width of the first column so there's room for all
ListView1.Columns[0].Width := ListView1.Canvas.TextWidth(s) + 10;
Item := ListView1.Items.Add;
Item.Caption := s;
Item.SubItems.Add(s);
// Display length of string actually displayed, which
// is one short of the total length (the final '9' in '89'
// is truncated), in the form's caption.
Caption := IntToStr(Length(s) - 1);
end;
これに (Windows API で必要な) ヌル ターミネータを追加すると、260 文字になります。これは、MSDN のドキュメントによると、表示されるテキストの最大長です。メンバーはさらに保存できますが、LVITEM.pszText
表示されません。
(リンクを提供してくれた @SertacAkyuz のおかげで、見つける必要はありませんでした。)
これは、RegEdit を使用して自分で確認できます。その制限を超えるレジストリ値を見つけます (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Arbiters\AllocationOrder
たとえば、すぐに見つかりました)。RegEdit は、Data
列をどれだけ広くドラッグしても表示を切り捨てますが、マウスをその上に置くと、1 行のヒントで全文が表示されます。(もちろん、ヒントウィンドウをスクロールすることはできないので、複数のワイドモニターを持っていないと、すべてを読むことはできません.)
コードを投稿していないため、コードの何が問題なのかを言うことは不可能OwnerDraw
です (もしあれば)。描画を行うためのイベントを提供しないと、設定するだけでOwnerDraw := True;
は何もしません。
コメントとして:私があなただったら、あなたのデザインを再考します. これは UI の観点からはひどいものであり、その理由を説明できます。上記のコードを元の690
値に変更して、コードを実行します。テキストが同じポイントで停止しているにもかかわらず、最初の列がすべてを表示するのに十分な幅に実際に設定されていることがわかります ( 88-8
)。ただし、2 番目の列を見つけるためにスクロールし続けなければならないことに注意してください。私があなたのソフトウェアを使用していたら、それは悪臭を放つでしょう。
IMO、キャプションに少量のテキストを表示し、ユーザーがクリックして実際にすべてを読みたい、または表示したいことを示す場合は、ラベルまたはメモ コントロールに全文を表示する方がはるかに良いでしょう。ポップアップウィンドウで。