unit Indexobj;

interface

uses Contnrs,parseinf,dialogs,controls,SysUtils;

type
Tdriver = class
    public
    HWID,
         Dir,
         Inffile,
         Manufactor,
         Date,Ver,
         Name:pansichar;
         //DP:integer;
         DPack:pansichar;
    end;


    Tdrivers = class(TObjectList)
  private
    function GetItems(Index: Integer): Tdriver;
    procedure SetItems(Index: Integer; const Value: Tdriver);
  public
    property Items[Index: Integer]: Tdriver read GetItems write SetItems; default;
    procedure SortByVER();
    procedure SortByDate();
    function Add2(input:TDriver):TDriver;
  end;



implementation



{ Tdriverlist }

function Tdrivers.GetItems(Index: Integer): Tdriver;
begin
Result := Tdriver(inherited GetItem(Index));
end;

procedure Tdrivers.SetItems(Index: Integer; const Value: Tdriver);
begin
inherited SetItem(Index, Value);
end;

function CompareDates(D1, D2: Pointer): integer;
var date1,date2:tdate;
begin
//try

ShortDateFormat:='MM/DD/YYYY';
DateSeparator:='/';
if length(Tdriver(D1).date)>2 then
  date1:=StrToDate(Tdriver(D1).date)
else
date1:=0;

if length(Tdriver(D2).date)>2 then
date2:=StrToDate(Tdriver(D2).date)
else
date2:=0;

//except ShowMessage(Tdriver(D1).date) end;//ShowMessage(Tdriver(D2).date) end;


  if date1<date2 then
      Result:=1
    else Result:=-1;

  if date1=date2 then
    Result:=0;
//showmessage(Tdriver(D1).DataVer+'  '+Tdriver(D2).DataVer);
//try
//Result := CompareTver(GetTver(Tdriver(D1).date),GetTver(Tdriver(D2).date))
//except ShowMessage(Tdriver(D1).DataVer+'___'+Tdriver(D2).DataVer) end;


//Result := CompareText(Btn1.Caption, Btn2.Caption);  //функция CompareText – стандартная, сравнивает две строки.
//Если первая строка больше, возвращает значение больше 0,
//если равны – возвращает 0, если вторая больше, то возвращает отрицательное число
end;

procedure Tdrivers.SortByDate();
begin

inherited Sort(@CompareDates);

end;

function CompareVers(D1, D2: Pointer): integer;
begin

//showmessage(Tdriver(D1).DataVer+'  '+Tdriver(D2).DataVer);
//try
Result := CompareTver(GetTver(Tdriver(D1).Ver),GetTver(Tdriver(D2).Ver))
//except ShowMessage(Tdriver(D1).DataVer+'___'+Tdriver(D2).DataVer) end;


//Result := CompareText(Btn1.Caption, Btn2.Caption);  //функция CompareText – стандартная, сравнивает две строки.
//Если первая строка больше, возвращает значение больше 0,
//если равны – возвращает 0, если вторая больше, то возвращает отрицательное число
end;




procedure Tdrivers.SortByVER();
begin
inherited Sort(@CompareVers);
end;

function Tdrivers.Add2(input:TDriver):TDriver;
//var r1:TDriverIndex;
begin
   result := tdriver.Create;
   inherited add(result);
   //result := (inherited Add) as TDriver;
   result.HWID:=input.HWID;
   result.Dir:=input.Dir;
   result.Inffile:=input.Inffile;
   result.Manufactor:=input.Manufactor;
   result.Name:=input.Name;
   result.Date:=input.Date;
   result.Ver:=input.Ver;
   //result.DP:=input.DP;
   result.DPack:=input.DPack;

end;


end.
 