Быстрое тестовое приложение в Delphi 2007 с использованием следующего (более разумного) кода показывает, что ListView
перестает отображать символы Ansi на 88-8
, длина которого составляет 259 символов.
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
, но покажет вам полный текст в виде подсказки в одну строку, если вы наведете на нее указатель мыши. (Конечно, прочитать все это невозможно, если у вас нет нескольких широких мониторов, потому что вы не можете прокрутить окно подсказки.)
Невозможно сказать, что не так с вашим OwnerDraw
кодом (если он у вас есть), потому что вы его не выкладывали. Простая установка OwnerDraw := True;
ничего не делает без предоставления события для рисования.
Просто как комментарий: я бы переосмыслил ваш дизайн на вашем месте. Это ужасно с точки зрения пользовательского интерфейса, и я могу продемонстрировать, почему. Измените приведенный выше код на исходное значение 690
и запустите код. Вы увидите, что ширина первого столбца действительно достаточна для отображения всего, даже если текст останавливается в одной и той же точке (88-8
). Однако обратите внимание, как далеко вам нужно прокручивать страницу, чтобы найти вторую колонку? Если бы я использовал ваше программное обеспечение, это бы воняло.
Было бы намного лучше, IMO, отображать небольшое количество текста в заголовке и отображать полный текст в метке или элементе управления заметками, если пользователь щелкает по нему, чтобы указать, что он действительно хочет прочитать все это или отобразить его. во всплывающем окне.
person
Ken White
schedule
09.11.2013