Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 301
  • Last Modified:

How to sort items of ListBox ?

Is it a way to sort the items of a ListBox
starting the caracter n°6 ?
Example:
no sorted :      --->          sorted

22005Armageddon          22007Akkenaton
22006Babouchka   --->    22005Armageddon
22007Akkenaton           22006Babouchka
22008Godzilla            22008Godzilla

Thanks for your help.
0
nk51
Asked:
nk51
1 Solution
 
BlackManCommented:
You will have to set the Sorted property to False and then sort the strings prior to adding them to the ListBox.
0
 
erajojCommented:
Hi,
Here's a way of sorting the way you want (postsort):

type
  TStringsSortCompare = function (List: TStrings; Item1, Item2: Integer): Integer;

function SortTrail6( List: TStrings; Item1, Item2: Integer): Integer;
var
  s1, s2: string;
begin
  s1 := List[ Item1 ]; Delete( s1, 1, 5 ); s2 := List[ Item2 ]; Delete( s2, 1, 5 );
  Result := CompareText( s1, s2 );
end;

function SortStrings( List: TStrings; SortProc: TStringsSortCompare ): Boolean;
  procedure QuickSort(L, R: Integer);
  var
    I, J, P: Integer;
  begin
    repeat
      I := L;
      J := R;
      P := (L + R) shr 1;
      repeat
        while SortProc(List, I, P) < 0 do Inc(I);
        while SortProc(List, J, P) > 0 do Dec(J);
        if I <= J then
        begin
          List.Exchange(I, J);
          Inc(I);
          Dec(J);
        end;
      until I > J;
      if L < J then QuickSort(L, J);
      L := I;
    until I >= R;
  end;
begin
  if Assigned( List ) then
  begin
    Result := True;
    QuickSort( 0, List.Count - 1 );
  end else Result := False;
end;

Here's how to use it:

procedure TForm1.Button1Click(Sender: TObject);
begin
  SortStrings( ListBox1.Items, SortTrail6 );
end;

/// John
0
 
binkzzCommented:
What you could do is make an invisible little listbox,
take the numbers of the original items and put the in the
other listbox, then copy the listbox2 to the listbox
and making sure the original listbox hasn't got the sorted
property set to true.

Hope this helps,
Tom
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
interCommented:
Hi,
The best way -at least mine- is to store that kind of values in Objects property of the TListBox's Lines property. Example,
Say you want to add the things above to a ListBox(or TStringList)

var
  Idx : integer;
begin
  ListBox1.Items.Clear;
  ListBox1.Items.Sorted := true;
  ListBox1.Lines.Add('Armageddon',Pointer(22005));
  ListBox1.Lines.Add('Babouchka',Pointer(22006));
  ListBox1.Lines.Add('Akkenaton',Pointer(22007));
  ListBox1.Lines.Add('Godzilla',Pointer(22008));
  //now assume you want to find what is the number associated with Godzilla
  if ListBox1.Lines.Find('Godzilla', idx) then
  begin
     ShowMessage(ListBox1.Lines[idx]+' has value' +
         IntToStr(Integer(ListBox1.Lines.Objects[idx])));
  end;
end;
regards, igor
0
 
nk51Author Commented:
I think erajoj has proposed the best nearest solution for my problem.
Thinks to you ERAJOJ !

0
 
nk51Author Commented:
I want to say :
thAnks to you ERAJOJ !
of course

And thanks to others for your solutions.
0
 
erajojCommented:
Hi,
What do you mean "nearest"?
If you do not think it's a complete solution, don't accept it.
I do not like providing semicrappy answers.
What else do you want?
If you wanted a TListBox decendant with automatic sorting
to replace the original one, you could just ask, you know.
That's what we're here for. :-)

/// John
0
 
nk51Author Commented:
I want to say :
thAnks to you ERAJOJ !
of course

And thanks to others for your solutions.
0
 
nk51Author Commented:
Don't panic Erajoj !
Your solution is the solution I waited !
Nearest was regarding the other answers.
If a solution is bad or doesn't correspond to what I'm waiting, I refuse it !

NK51 (-;
0
 
erajojCommented:
Good!
Just what I wanted to know.
Can't keep track of the qualifications of all of you, you know.
No panic, just don't like to rob the points of people when my
answers are mediocre.

/// John
0
 
nk51Author Commented:
Ok, no problem.
And I have only a few point to ask questions,
so I'm prudent with the reward.

   |
(-;|]
   |
0

Featured Post

[Webinar On Demand] Database Backup and Recovery

Does your company store data on premises, off site, in the cloud, or a combination of these? If you answered “yes”, you need a data backup recovery plan that fits each and every platform. Watch now as as Percona teaches us how to build agile data backup recovery plan.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now