Announcement

Collapse
No announcement yet.

Wie kann ich nach mehreren Elementen in TList Record Object sortieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie kann ich nach mehreren Elementen in TList Record Object sortieren

    Hi @all <p>
    <B>
    Nach mehereren Elementen in einem TList Record Object sortieren
    </B>
    <P>
    1.) nach Layer <BR>
    2.) nach Footprint <BR>
    3.) nach Artnr <BR>
    <P>
    Recordstruktur
    <P>
    <PRE>
    var gvTemp : TDataCab;

    {************************************************* **********************}
    type TDataCab = class(TList)
    private
    fID : Integer;
    fDesignator : String;
    fFootprint : String;
    fMidX : String;
    fMidY : String;
    fRefX : String;
    fRefY : String;
    fPadX : String;
    fPadY : String;
    fLayer : String;
    fRotation : String;
    fValue : String;
    fArtnr : String;
    fComment : String;
    fVarHubt : String;
    fVarStd : String;

    function GetData(Index: Integer): TDataCab;
    procedure SetData(Index: Integer; const Value: TDataCab);

    public
    constructor Build;
    destructor Eleminate;
    property ID:Integer read fID write fID;
    property Designator:String read fDesignator write fDesignator;
    property Footprint:String read fFootprint write fFootprint;
    property MidX:String read fMidX write fMidX;
    property MidY:String read fMidY write fMidY;
    property RefX:String read fRefX write fRefX;
    property RefY:String read fRefY write fRefY;
    property PadX:String read fPadX write fPadX;
    property PadY:String read fPadY write fPadY;
    property Layer:String read fLayer write fLayer;
    property Rotation:String read fRotation write fRotation;
    property Value:String read fValue write fValue;
    property Artnr:String read fArtnr write fArtnr;
    property Comment:String read fComment write fComment;
    property VarHubt:String read fVarHubt write fVarHubt;
    property VarStd:String read fVarStd write fVarStd;
    property Items[Index:Integer]:TDataCab read GetData write SetData; default;

    end;

    <P>
    {************************************************* *********************}
    type TListSortCompare = function (Item1, Item2: Pointer): Integer;
    {************************************************* *********************}

    {************************************************* *********************}
    function SortToLayer(Item1,Item2:Pointer): Integer; {TListSortCompare}
    begin
    result := CompareStr(TDataCab(Item1).Layer,TDataCab(Item2).L ayer);
    end;
    {************************************************* *********************}
    function SortToFootprint(Item1,Item2:Pointer): Integer; {TListSortCompare}
    begin
    result := CompareStr(TDataCab(Item1).Footprint,TDataCab(Item 2).Footprint);
    end;
    {************************************************* *********************}
    function SortToArtikelnr(Item1,Item2:Pointer): Integer; {TListSortCompare}
    begin
    result := CompareStr(TDataCab(Item1).Artnr,TDataCab(Item2).A rtnr);
    end;
    {************************************************* *********************}

    gvTemp.Sort(SortToLayer);
    gvTemp.Sort(SortToFootprint);
    gvTemp.Sort(SortToArtikelnr);

    </PRE>

    Wenn ich nun diese 3 Routinen aufrufe wird aber seperat entweder nach 1 2 oder 3 sortiert. Wäre für jede Hilfe Dankbar. Möchte aber eine verkettete sortierung.

    mfg Jan Ohlmann

  • #2
    Hi<BR>
    hat nimand eine Idee?
    <p>
    grüsse Ja

    Comment


    • #3
      Was ist da denn schwierig dran? Du moechtes primaer nach Layer, sekundaer nach Footprint und tertiaer nach Artnr sortieren?
      <pre>
      function SortToLayerFootPrintArtnr(Item1,Item2:Pointer): Integer; {TListSortCompare}
      begin
      Result := CompareStr(TDataCab(Item1).Layer,TDataCab(Item2).L ayer);
      if Result = 0 then
      begin
      Result := CompareStr(TDataCab(Item1).Footprint,TDataCab(Item 2).Footprint);
      if Result = 0 then
      Result := CompareStr(TDataCab(Item1).Artnr,TDataCab(Item2).A rtnr);
      end;
      end

      Comment

      Working...
      X