How to do this with TObjectList.Sort?

Hello,
I have a TObjectList and this kind of item in the list:
{code}
type
   TListItem = class
                  Code : Integer;
                  Name : string;
               end;
{code}
I need to sort the items by Code and Name simultaneously, with Code in ascending order and Name in descending order.
I'm not sure, but I think TObjectList.Sort is not helpful.
Please, how can I do that?
Thanks.
0
Jose
12/4/2009 9:59:00 PM
embarcadero.delphi.general 4258 articles. 0 followers. Follow

10 Replies
4529 Views

Similar Articles

[PageSpeed] 51

"Jose Alex Miranda" wrote in message news:190083@forums.codegear.com...
> I have a TObjectList and this kind of item in the list:
> {code}
> type
>   TListItem = class
>                  Code : Integer;
>                  Name : string;
>               end;
> {code}
> I need to sort the items by Code and Name simultaneously, with Code in 
> ascending order and Name in descending order.
> I'm not sure, but I think TObjectList.Sort is not helpful.


You can create your own custom sort method.

function SortByCodeName(Item1, Item2: Pointer): Integer;
var
  li1: TListItem absolute Item1;
  li2: TListItem absolute Item2;
begin
  if li1.Code > li2.Code then
    Result := -1
  else if li1.Code < li2.Code then
    Result := 1
  else
    Result := 0;
  if Result = 0 then
    Result := CompareText(li1.Name, li2.Name);
end;

procedure TForm12.Button1Click(Sender: TObject);
begin
  list.Sort(SortByCodeName);
end;

You can create as many different compare functions as you need and pass 
whichever you want in a call to Sort;

If you are using D2010, you can also use the new SortList method which 
allows you to pass an anonymous method instead:

  list.SortList(
    function (Item1, Item2: Pointer): Integer
    var
      li1: TListItem absolute Item1;
      li2: TListItem absolute Item2;
    begin
      if li1.Code > li2.Code then
        Result := -1
      else if li1.Code < li2.Code then
        Result := 1
      else
        Result := 0;
      if Result = 0 then
        Result := CompareText(li1.Name, li2.Name);
    end
  );

end;

-- 
Wayne Niddery (TeamB)
0
Wayne
12/4/2009 10:32:12 PM
<Jose Alex Miranda> wrote in message news:190083@forums.codegear.com...

> I need to sort the items by Code and Name simultaneously, with Code
> in ascending order and Name in descending order. I'm not sure, but I
> think TObjectList.Sort is not helpful.

Yes, that is exactly what you should be using.  You need to pass a callback function to Sort(), and let it decide on the actual ordering.  For example:

{code}
type
  TListItem = class
    Code : Integer;
    Name : string;
  end;

function MySortFunc(Item1, Item2: TListItem): Integer;
begin
  if Item1.Code < Item2.Code then begin
    Result := 1;
  end
  else if Item1.Code = Item2.Code then begin
    Result := AnsiCompareStr(Item1.Name, Item2.Name) * -1;
  end
  else begin
   Result := -1;
  end;
end;

begin

  ...
  MyObjectList.Sort(TListSortCompare(@MySortFunc));
  ...
end;

{code}

-- 
Remy Lebeau (TeamB)
0
Remy
12/4/2009 10:34:57 PM
Hi all,
I'm trying to do the same thing here, but I'm not having any luck.

I'm getting compile error: Undeclared identifier: 'SortByDate'

Function SortyByDate(Item1, Item2 : TStormPosition) : Integer;
//this is declared outside of my classes and just before implementation.

Also, if my TObjectList contains 100 or so items (TStormPosition)... which ones do i input into the SortByDate function....kinda confused on that part.

Here's my code

Type
  TStormPosition = Class
    Lat            : Double;
    Lon            : Double;
    DT             : TDateTime;
    PositionType   : TPositionType;
    Wind           : Integer;
    Gust           : Integer;
    WindRadii      : TObjectList;
  Public
    Constructor Create;
    destructor Dispose;
  end;


procedure TStorm.ExtrapolatePositions;
var
 x : Integer;
 Pos1, Pos2 : TStormPosition;
 IntervalList : TObjectList;
  y: Integer;
begin
  IntervalList := TObjectList.Create;
  Try
    for x := 0 to Positions.Count - 1 do
    begin
      IntervalList.Clear;
      if x < Positions.Count -1 then
      begin
        Pos1 := TStormPosition(Positions.Items[x]);
        Pos2 := TStormPosition(Positions.Items[x+1]);
        IntervalList := GetIntervalData(Pos1, Pos2); //returns a list of data
      end;                                      //between pos1 and pos2

      //Now add the returned list into the Positions Container
      for y := 0 to IntervalList.Count - 1 do
        Positions.Add(IntervalList.Items[y]);
    end;
  Finally
   //will not compile on the next line
    Positions.Sort(TListSortCompare(@SortByDate));
    IntervalList.Free;
  End;
end;

//Need to sort TObjectList items by Date/Time
Function SortByDate(Item1, Item2: TStormPosition) : Integer;
begin
  if Item1.DT < Item2.DT then
    Result = 1
  else
    Result := -1;
end;



> Yes, that is exactly what you should be using.  You need to pass a callback function to Sort(), and let it decide on the actual ordering.  For example:
> 
> {code}
> type
>   TListItem = class
>     Code : Integer;
>     Name : string;
>   end;
> 
> function MySortFunc(Item1, Item2: TListItem): Integer;
> begin
>   if Item1.Code < Item2.Code then begin
>     Result := 1;
>   end
>   else if Item1.Code = Item2.Code then begin
>     Result := AnsiCompareStr(Item1.Name, Item2.Name) * -1;
>   end
>   else begin
>    Result := -1;
>   end;
> end;
> 
> begin
> 
>   ...
>   MyObjectList.Sort(TListSortCompare(@MySortFunc));
>   ...
> end;
> 
> {code}
> 
> -- 
> Remy Lebeau (TeamB)
0
Bryan
5/7/2010 9:07:21 PM
"Bryan Ray" wrote in message news:240494@forums.embarcadero.com...
> 
> I'm getting compile error: Undeclared identifier: 'SortByDate'
> 
> Function SortyByDate(Item1, Item2 : TStormPosition) : Integer;


Look closely. :)


-- 
Wayne Niddery (TeamB)
0
Wayne
5/8/2010 1:47:18 AM
That's what hours of staring at a computer will do to you.  haha...

Ok, second part of my question. 
If I have several items I need to sort (about 100), how do I use this function properly?
Do I use the oldest date as Item1 and the newest date in Item2? 
Or do I iterate through the TObjectList somehow and input Item1 and Item2 into the function.
I guess I'm not sure on how this is supposed to work.

Many thanks.
Bryan

> {quote:title=Wayne Niddery wrote:}{quote}
> "Bryan Ray" wrote in message news:240494@forums.embarcadero.com...
> > 
> > I'm getting compile error: Undeclared identifier: 'SortByDate'
> > 
> > Function SortyByDate(Item1, Item2 : TStormPosition) : Integer;
> 
> 
> Look closely. :)
> 
> 
> -- 
> Wayne Niddery (TeamB)
0
Bryan
5/8/2010 3:50:11 AM
Bryan Ray wrote:

> Also, if my TObjectList contains 100 or so items (TStormPosition)...
> which ones do i input into the SortByDate function....kinda confused
> on that part.

You don't input anything, in fact you don't ever call your SortByDate
function yourself. The TObjectlist.Sort method will call it with every
pair of objects it needs to compare.

A sort algorithm typically has two things it needs to do: it has to
compare two items to decide which is larger, and it has to swap items
in the list/array/whatever to sort when the comparison shows that the
two items are not in sort order. The way the Delphi list objects
implement the sort is to abstract out the comparison part (which
depends on the kind of item you compare) into a function the programmer
has to provide. The swap part only depends on the structure of the
container (list, array, etc.) and the size of the item, not the kind of
item. For the Delphi list objects those two things are known to the
list, so it can do that without external help.

-- 
Peter Below (TeamB)  
Don't be a vampire (http://slash7.com/pages/vampires), 
use the newsgroup archives :
http://codenewsfast.com
http://groups.google.com
0
Peter
5/8/2010 7:34:23 AM
Thanks Peter.
Regards,
Bryan
> 
> You don't input anything, in fact you don't ever call your SortByDate
> function yourself. The TObjectlist.Sort method will call it with every
> pair of objects it needs to compare.
> 
> A sort algorithm typically has two things it needs to do: it has to
> compare two items to decide which is larger, and it has to swap items
> in the list/array/whatever to sort when the comparison shows that the
> two items are not in sort order. The way the Delphi list objects
> implement the sort is to abstract out the comparison part (which
> depends on the kind of item you compare) into a function the programmer
> has to provide. The swap part only depends on the structure of the
> container (list, array, etc.) and the size of the item, not the kind of
> item. For the Delphi list objects those two things are known to the
> list, so it can do that without external help.
> 
> -- 
> Peter Below (TeamB)  
> Don't be a vampire (http://slash7.com/pages/vampires), 
> use the newsgroup archives :
> http://codenewsfast.com
> http://groups.google.com
0
Bryan
5/8/2010 1:02:56 PM
"Bryan Ray" wrote in message news:240597@forums.embarcadero.com...
> That's what hours of staring at a computer will do to you.  haha...
>
> Ok, second part of my question.
> If I have several items I need to sort (about 100), how do I use this 
> function properly?
> Do I use the oldest date as Item1 and the newest date in Item2?
> Or do I iterate through the TObjectList somehow and input Item1 and Item2 
> into the function.
> I guess I'm not sure on how this is supposed to work.


The call to Sort takes care of this - it implements the sort algorithm and 
calls your SortByDate (or any other you provide) to compare two items. All 
you need to do is to decide how to compare your objects. Return -1 if item 1 
is less than item 2, 1 if greater, 0 if equal.

-- 
Wayne Niddery (TeamB)
0
Wayne
5/8/2010 1:07:22 PM
Thanks Wayne.
Bryan

> The call to Sort takes care of this - it implements the sort algorithm and 
> calls your SortByDate (or any other you provide) to compare two items. All 
> you need to do is to decide how to compare your objects. Return -1 if item 1 
> is less than item 2, 1 if greater, 0 if equal.
> 
> -- 
> Wayne Niddery (TeamB)
0
Bryan
5/8/2010 7:24:40 PM
//For ascending sort
function SortByCodeName(Item1, Item2: Pointer): Integer
var
  li1, li2: TListItem ;
begin
  li1:= TListItem (Item1);
  li2:= TListItem (Item2);

Result := CompareText(li1.Code, li2.Code);
if Result = 0 then Result := CompareText(li1.Name, li2.Name);
end;

//For descending sort code and ascending sort name
function SortByCodeName(Item1, Item2: Pointer): Integer
var
  li1, li2: TListItem ;
begin
  li1:= TListItem (Item1);
  li2:= TListItem (Item2);
if li1.Code > li2.Code then
Result := -1 //invers return for CompareText,CompareStr,CompareValue
else if li1.Code < li2.Code then
Result := 1
else
Result := 0;
if Result = 0 then Result := CompareText(li1.Name, li2.Name);
end;

//you can use CompareValue for integer double, TDateTime
//In same button/action/click header grid
list.sort(SortByCodeName)




> {quote:title=Jose Alex Miranda wrote:}{quote}
> Hello,
> I have a TObjectList and this kind of item in the list:
> {code}
> type
>    TListItem = class
>                   Code : Integer;
>                   Name : string;
>                end;
> {code}
> I need to sort the items by Code and Name simultaneously, with Code in ascending order and Name in descending order.
> I'm not sure, but I think TObjectList.Sort is not helpful.
> Please, how can I do that?
> Thanks.
0
Sopcu
9/11/2011 2:55:55 PM
Reply:

Similar Artilces:

delphi.general
Sorry if this is "out of topic"! but since some days ago I can't read the group *embarcadero.public.delphi.language.delphi.general* Does anybody know if there's something wrong with it? Or maybe is my reader? (Thunderbird) I get this messagge when I try to read the latest messages: Error! newsgroup server responded:no such article found Perhaps the article has expired <692702@forums.embarcadero.com> (33145) Click here to remove all expired articles sergio wrote: > Sorry if this is "out of topic"! but since some days ago I can'...

What generals generally do
Reading a McChrystal thread elsewhere, I came across someone quoting a US general http://en.wikipedia.org/wiki/Smedley_Butler > I spent 33 years and four months in active military service and > during that period I spent most of my time as a high class thug for > Big Business, for Wall Street and the bankers. In short, I was a > racketeer, a gangster for capitalism. I helped make Mexico and > especially Tampico safe for American oil interests in 1914. I helped > make Haiti and Cuba a decent place for the National City Bank boys to > collect revenues in. I ...

Question about sorting a TObjectList
Hello, In order to sort a TObjectList I wrote the function below. The list can have items of different types but it can only be sorted if all items are TItem. The problem is that I need to know the type of items and raise an exception during sort process if some of them are not TItem. The code below will not compile. Any idea? Thanks. (Using D2009) {code} function CompareByName(item1, item2 : Pointer): Integer; var I1 : TItem; I2 : TItem; begin if not (item1 is TItem) or not (item2 is TItem) then raise EErrorInList.Create('Invalid list.'); ... I1 :=...

delphi.general Timer
This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. --JivePart=_202d5.zeB8CwDOH5aMJzMl Content-Type: text/plain; charset="Utf-8" For Paolo Valle --JivePart=_202d5.zeB8CwDOH5aMJzMl Content-Type: application/octet-stream; name="SubroutineTimer.pas" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="SubroutineTimer.pas" dW5pdCBTdWJyb3V0aW5lVGltZXI7DQoNCmludGVyZmFjZQ0KDQpwcm9jZWR1cmUgU3RhcnRTdWJy b3V0aW5lVGltZXI7DQpmdW5jdGlvbiBHZXRTdWJSb...

Sorting a TObjectList by object property
I need to sort a list of objects by the object property "Addr", which is a word item. The Object has a lot of other properties and methods etc, but I need to make sure that they are in sequential order by Addr in the list after processing. The list is implemented as a TObjectList and I am using Delphi7 for this project. I have googled this and found an old thread where Wayne Niddery and Remy Lebeau gave different solutions. The thread URL is: https://forums.embarcadero.com/message.jspa?messageID=238358 Wayne defined a general sorting function like this: {code} function...

Delphi XE7 sorting a TStringList
Hi, I use a TStringList with property sorted := TRUE but the result is unexpected eg. the items (sorted) are : "1033216057","10/08/2015","30/12/1899",,,, "1034427614","10/08/2015","01/01/2014",,,, "-1036990773","10/08/2015","30/12/1899",,,, "-103955158","10/08/2015","30/12/1899",,,, "1040585906","10/08/2015","30/12/1899",,,, "104936271","10/08/2015","30/12/1899",,,, "-1053258048","10/08/201...

dw sort and sort
PB 10.2 When you create a datawindow you can choose "rows", "sort". In the SQL there is also a tab page "sort". Probably the tab-page sort in SQL is only when retrieving the data. The tabpage sort is used you call the dw_sort() function. Is this correct? Is the "rows", "sort" called automatically after the data is retrieved? Thanks Eric On 18 Aug 2006 03:24:30 -0700, ontsnapt <ontsnapt@hotmail.com> wrote: >PB 10.2 > >When you create a datawindow you can choose "rows", "sort". In the ...

Delphi and Delphi for .Net
It seems that Delphi for .Net is slower than Delphi Win32 native applicaiton. I would like to know is it true all .Net application is slower than Win32 native applicaiton or it is Delphi for .Net only. Your information is great appreciated, Inung On 2011-06-21 18:20:17 +0100, Inung Huang said: > It seems that Delphi for .Net is slower than Delphi Win32 native applicaiton. > I would like to know is it true all .Net application is slower than > Win32 native applicaiton or it is Delphi for .Net only. If you are only running the code in the application once then, yes, yo...

How to sort or filter compiler messages in Delphi ?
I'm just wondering if its possible to sort or filter warning and error messages in Delphi > {quote:title=Gilbert Padilla wrote:}{quote} > I'm just wondering if its possible to sort or filter warning and error > messages in Delphi Sounds like a Bad Idea. Fix the problems instead! Otherwise, press CTRL+O, and then O. It inserts your current settings. You can turn stuff off there. {$A8,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N-,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1} {$MINSTACKSIZE $00004000} {$MAXSTACKSIZE $00100000} {$IMAGEBASE $00400000} {$APPTYPE GUI} {$WARN S...

Code completion in Delphi 200x and sorting
Hi, This is now bothering me long enough to ventilate my feelings. I use(d) Delphi 7 and now use Delphi 2007. Class completion (ctrl-shift-c) is a feature I use a lot. The thing is that Delphi 2007 tries to create the methods in alphabetical order. This gets messy (eg. constructor destructor in the middle of a unit). I want methods together that belong together. Result: I see myself moving almost every method to the end of the unit. *Waste of time.* Why not make this 'feature' optional? Maybe it's optional by using some regedit hack that I don't know of. Can s...

EVarriantTypeCast error delphi language general
I uploaded above subject to the attachment space.with test.zip. If somebody coul have a look at the test i prepared. Since overall QuickReport does work, i could not guess what is going on here. Thanks in advance to have a look at the attached test i made and hopefully somebody can find the issue. Regards. Lieven Hi xxx, If nothing works, it could mean that somewhere a mistake was made.lol. For the uploaded to public attachment test.zip solution below. Regards Lieven {Sql code} QryPtDat1.Sql.Clear; QryPtDat1.Sql.Add('SELECT D."Names", ...

How to sort records in Delphi DBGrid [Edit]
I need to alphabetically sort records in the TDBGrid at run-time I don't want to sort records from the Table or Dataset because that is my main sort index. I can't seem to work this out can someone help please? I am using Delphi 7 it really works for me. Edited by: unit4 P on Aug 11, 2012 3:10 PM Edited by: unit4 P on Aug 11, 2012 4:38 PM On 12/08/2012 9:38 AM, unit4 P wrote: > I need to alphabetically sort records in the TDBGrid at run-time > I don't want to sort records from the Table or Dataset because that is my main sort index. > > I can't se...

borland.public.delphi.database.general not fond
Hello. My problem is I am trying to connect to a newsgroup that I have configured in Outlook Express 6, under Windows XP and appears this as follows mistake : 411 Group borland.public.delphi.database.general not found. Setup: Count: newsgroups.borland.com Server: newsgroups.borland.com Protocol: NNTP Port: 119 Security (SSL): 0 Error Number: 411 Code: 800ccca5 With the newsgroup of Newsgroups.borland.com before it could enter the group borland.public.delphi.database.general, This is for all groups that begin with borland. I hope you can hel...

General bootstrap questions: Delphi 7, pascal
Hi, This might be a bit inchoherant. I am sorry of that is the case but I have inherited a collection of languishing Delphi Projects in Pascal. I do not know Pascal and this is nearly my into to Delphi. Delphi 7 is running in a Windows XP VirtualMachine instance. The project in question uses several third party libraries / tools. Basically, I don't know where to start so I'll start at the beginning and hope you guys can help. I first inherited these projects almost two years ago. For the most part they work. There is one project, however, that needs to have a few "mag...

TObjectList sort throwing an Access Violation after running
Hi, I have been trying to get my custom sort routine to run on my TObjectList that contains a custom object of a TProvider. I did some looking around on the internet about how to do my own custom sort and found a post on [stackoverflow|http://stackoverflow.com/questions/4784306/delphi-trouble-sorting-a-tobjectlist]. However when I write my code as follows {code} // Creating my TObject list of TProviders Result := TObjectList<TProvider>.Create(False); // Populating my object list with values from my unordered dictionary for MyProvider in FDictionary.Values do Re...

General question on the concept of integer handling in Delphi 2009
I found in system.pas new names "NativeInt" and "NativeUInt". According to all computer languages worldwide, Integer (and Cardinal) is *already* a native integer that represents the CPU register for best performance etc... What will happen in Delphi 2010 Win64 ??? I don't want to change Integer to NativeInt in my code thousand times to get adequate performance. > {quote:title=Ralf Stocker wrote:}{quote} > I found in system.pas new names "NativeInt" and "NativeUInt". Interesting. > According to all computer languages wor...

Delphi component for computing general linear mixed models ??
Are there any statistical software available for Delphi for computing General linear mixed models so that having a data sampler and analyser also may run statistics directly on group of humans observed pr minute basis that should be compared together ?? For you old-timers here is a hint as to what the subject is about: http://www.google.com/search?hl=en&q=%22General+linear+mixed+models%22 --JohnH Have you looked at http://www.dewresearch.com/ which has some useful code for that sort of thing? /Matthew Jones/ Alf Christophersen wrote: > Are there any statistical softw...

borland.public.delphi.database.general not fond #2
Hello. My problem is I am trying to connect to a newsgroup that I have configured in Outlook Express 6, under Windows XP and appears this as follows mistake : 411 Group borland.public.delphi.database.general not found. Setup: Count: newsgroups.borland.com Server: newsgroups.borland.com Protocol: NNTP Port: 119 Security (SSL): 0 Error Number: 411 Code: 800ccca5 With the newsgroup of Newsgroups.borland.com before it could enter the group borland.public.delphi.database.general, This is for all groups that begin with borland. I hope you can hel...

A general question about supporting offline databases
I am a bit of a newbie with Delphi databases, we've been using Delphi for 15 years but we have always used a proprietary binary data format. We now want to switch to an SQL file format. For now we're working with SQLITE, so the Java and C# guys in our shop can read the file too. We have all the latest tools now, XE5 with FireDAC, Datasnap, REST etc. I am very, very impressed with what we can do now. Currently, we have a Delphi desktop app that controls the data file, and use XMLRPC calls from the clients to send and receive transactions. We have what we call a "refresh&...

SEPA components for Delphi with Source Code (Delphi 5
Hi all, in the european union change next year the Bankingformat to the SEPA Format. All peoples and companies must change the bankingssoftware and the costumer data form acountnummers in the new IBAN and BIC numbers. See: http://www.arma-it.de/shop/artikelueber.php?wgruppeid=211&wgruppe_offen=211 Functions: - generate SEPA XML'S - Calc IBAN - BIC Database (DE,AT and CH) Questions: vertrieb@arma-it.de PS: Bankinssoftware for Develpoers (Germany only) http://www.arma-it.de/shop/artikelueber.php?wgruppeid=212&wgruppe_offen=212 El 26/10/13 21:38, A...

Delphi and virus, or virus and Delphi.
Hi all. There is some discussion about a 'new' virus, that targets Delphi (and developers). The article is in danish: <http://www.version2.dk/artikel/11833-delphi-udviklere-jages-af-ny-type-malware> but refers to this article: <http://news.cnet.com/8301-27080_3-10312628-245.html> From the Danish article POV, it seems like Delphi itself is vunerable, which is not true. As far as i can see, is the attack vector, injection of (source) code in the 'Sysconst' unit. What's going on? -- Best regards Stig Johansen Perhaps checking other thre...

Delphi 2007 to Delphi 7
I've written a class in Delphi 2007 that is not supported in Delphi 7. What would be the best way to achive what I've done in Delphi 2007 in Delphi 7? Thanks, Tom type BondConstants = class { Bond Types } type BondType = record const TREASURY = 3; AGENCY = 0; CORP = 1; MUNI = 2; SBA = 5; MBS = 4; CMO = 6; end; { Day Count Methods } type DayCount = record const ACTUAL_360 = 2; ACTUAL_365 = 1; ACTUAL_ACTUAL = 1; d30_360 = 0; ...

Delphi XE / Delphi 2010
Hello! I noticed that Embarcadero® Delphi® 2010 Version is not on the list of products on Embarcadero page. Or is it still possible to buy it? Will RAD Studio XE compile programs written in Delphi 2010 without problems.? Thanks. Am 13.09.2010 09:04, schrieb Petra Nemec: > Will RAD Studio XE compile programs written in Delphi 2010 without problems.? As always you will probably have to recreate the projects as the import is still a bit -- special. Christian Hello! Does anybody know if it is still possible to get a Delphi2010 trial version (if yes where)? ...

Delphi 4 to Delphi 2009
Hello, Thanks to all who answered my previous question. That was a great help. And atlast our client agreed to upgrade our delphi version from 4 to Delphi 2009. *Sigh*. But before that, I need to give the estimation and cost regarding the migration to delphi 2009. Can anyone tell me is there any tool to migrate from delphi 4 to delphi 2009 or just I need to compile our Delphi 4 application in Delphi 2009. I have read from the delphi 2009 feature matrix that Delphi 1 through Delphi 2007 import is possible in delphi 2009. But i am not that sure considering the size of our application. ...

Web resources about - How to do this with TObjectList.Sort? - embarcadero.delphi.general

Resources last updated: 2/16/2016 1:40:00 PM