AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TComponentList.Sort Problem

Ein Thema von berens · begonnen am 2. Okt 2006 · letzter Beitrag vom 2. Okt 2006
Antwort Antwort
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#1

Re: TComponentList.Sort Problem

  Alt 2. Okt 2006, 11:50
Hallo berens,

TList.Sort erwartet einen Zeiger auf eine einfache (nicht lokale) Funktion, keine Methode.

Versuche es einmal mit diesen Änderungen:

Delphi-Quellcode:
// TMyListSortCompare = function (Item1, Item2: Pointer): Integer of object; // nicht mehr benötigt

TBar= class(TMyPanel)
private
public
  ID: integer;
  intSort: integer;
  :
end;

Tfoo= class(TMyPanel)
private
// FCompareListItems:TMyListSortCompare; // ersetzt
  FCompareListItems:TListSortCompare; // neu
// function CompareSortID(Item1, Item2: Pointer): Integer; // nicht mehr benötigt
  :
public
  ComponentList: TComponentList;
  :
  constructor Create(_Owner: TComponent); override;
end;

// neu (ersetzt alte Methode)
function CompareSortID(Item1, Item2: Pointer): Integer;
begin
  if Assigned(Item1) and Assigned(Item2) then
    Result := TBar(Item1).intSort - TBar(Item2).intSort
  else
    Result := 0;
end;

constructor Tfoo.Create(_Owner: TComponent);
begin
  inherited Create(_Owner);
  :
  ComponentList := TComponentList.Create(True);
  FCompareListItems:= CompareSortID;
  :
end;

{ durch neue Routine ersetzt
function Tfoo.CompareSortID(Item1, Item2: Pointer): Integer;
begin
  if not Assigned(Item1) or not Assigned(Item2) then begin
    Result := 0;
    Exit;
  end;
  if (TBar(Item1).intSort < TBar(Item2).intSort) then begin
    Result := -1; // i1 < i2
  end else begin
    if (TBar(Item1).intSort = TBar(Item2).intSort) then begin
      Result := 0; // i1 = i2
    end else begin
      Result := 1; // i1 > i2
    end;
  end;
end;
}


procedure Tfoo.Sort;
begin
  if ComponentList.Count > 1 then begin
// ComponentList.Sort(TListSortCompare(@FCompareListItems)); // ersetzt
    ComponentList.Sort(FCompareListItems); // neu
  end;
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz