Ne er hat recht, er macht nix falsch ist ein BUG in TCustomListView, der ist sogar noch in XE3 drinne...
das liegt am (ViewStyle = vsReport) der in TCustomListView.ColumnsShowing abgefragt wird.
ist die spaltengröße <= ColumnTextWidth rast er jedesmal ins UpdateColumns,
das macht die Verlangsamung. Müssen nicht mal mehrere Spalten definiert sein.
Also
UpdateColumn
und
UpdateColumns (bei mehreren spalten)
sind die Bösewichte
Delphi-Quellcode:
procedure TListItem.SetCaption(
const Value:
string);
begin
if Value <> Caption
then
begin
FCaption := Value;
if not Owner.Owner.OwnerData
then
{$IFDEF CLR}
ListView_SetItemText(
Handle,
Index, 0, IntPtr(Integer(LPSTR_TEXTCALLBACK)));
{$ELSE}
ListView_SetItemText(
Handle,
Index, 0, LPSTR_TEXTCALLBACK);
{$ENDIF}
if ListView.ColumnsShowing
and
(ListView.Columns.Count > 0)
and
(ListView.Column[0].WidthType <= ColumnTextWidth)
then
ListView.UpdateColumns;
//hier passierts
if ListView.SortType
in [stBoth, stText]
then
ListView.AlphaSort;
end;
end;
bei mehreren Spalten ist der Aufrufende
Delphi-Quellcode:
procedure TSubItems.SetColumnWidth(Index: Integer);
var
ListView: TCustomListView;
begin
ListView := Owner.ListView;
if ListView.ColumnsShowing and
(ListView.Columns.Count > Index) and
(ListView.Column[Index].WidthType = ColumnTextWidth) then
ListView.UpdateColumn(Index); //hier....
end;
Ne vernünftige alternative ohne Spaltenbreite auf 0 zu setzen sehe ich leider nicht