Einzelnen Beitrag anzeigen

4dk2

Registriert seit: 4. Sep 2007
176 Beiträge
 
#9

AW: TListView - viele Daten - viel Zeit ...

  Alt 16. Jul 2014, 15:36
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
  Mit Zitat antworten Zitat