Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Nach ABC ordnen (https://www.delphipraxis.net/40898-nach-abc-ordnen.html)

ferby 25. Feb 2005 18:35

Re: Nach ABC ordnen
 
Hallo,

warum ich die Labels tauschen muss ist kompliziert....

ich habe mir was geschrieben was für mich eigentlich gehen müsste nur irgendwie geht es nicht???

Delphi-Quellcode:
procedure TDatenbank.button_abcClick(Sender: TObject);
var
i,i2,z:integer;
begin
  for i:=1 to speicher do for i2:=speicher downto i do
  if hauptnamelabels[i2].caption>hauptnamelabels[i2+1].caption then
  begin
    z:=hauptnamelabels[i2+1].top;
    hauptnamelabels[i2+1].top:=hauptnamelabels[i2].top;
    hauptnamelabels[i2].top:=z;
  end;

end;
speicher ist die anzahl der labels.............
hauptnamelabels ist array of tlabel

es sotiert sich alles ganz komisch... wo ist mein denkfehler??

Nikolas 25. Feb 2005 18:42

Re: Nach ABC ordnen
 
Formatier deinen Text doch mal etwas besser:
Delphi-Quellcode:
for i:=1 to speicher do for i2:=speicher downto i do
ist recht unleserlich.

Hier
Hat Daniel ein sehr gutes Tutorial zum Sortieren geschrieben, da müsste ein passender Algorhytmus für dich dabei sein. {Bubble o.Ä.)-

ferby 25. Feb 2005 18:52

Re: Nach ABC ordnen
 
Hallo,

ich verwende von seiner Seite den Bubble-Sort Algorithmus.....

ferby 25. Feb 2005 20:19

Re: Nach ABC ordnen
 
hallo,

kann mir jemand vileicht weiterhelfen... ich grübel jetzt schon eine halbe stunde nach.... und kapier nicht warum das nicht hinhaut....

Khabarakh 25. Feb 2005 21:02

Re: Nach ABC ordnen
 
Delphi-Quellcode:
if 'a'>'B' then
  ShowMessage('Stringvergleiche sind nicht ohne!');
Benutze Lowercase(string1)>Lowercase(string2).

ferby 25. Feb 2005 21:13

Re: Nach ABC ordnen
 
hallo,

hab ich auch schon ausprobiert, es geht nicht....

Nikolas 26. Feb 2005 20:33

Re: Nach ABC ordnen
 
Mach doch wirklich was in diese Richtung:
Delphi-Quellcode:
var
sortiert, nichtsortiert: TSTringlist;
i,cnt: integer;
str: string;
begin

sortiert:= TSTringlist.Create;
nichtsortiert:= TSTringlist.Create;

sortiert.sorted:=true;

for i:=1 to AnzahlDerLabel do
begin
sortiert.add(      Tlabel(FindComponent('Label' + IntToStr(i))).Caption);
Nichtsortiert.add( TLabel(findcomponent('Label'+inttostr(i))).caption );
end;

for i:=0 to AnzahlDerLabel-1 {!} do
begin
str := sortiert[i]; // in str steht jetzt die Caption, die alphabetisch geordnet an iter Stelle steht
cnt := nichtsortiert.Indexof(str); // Oben gefundene Caption steht auf dem cnt-ten Label.
// Das passende Label wird an die richtige Stelle gesetzt
Tlabel(FindComponent('Label' + IntToStr(cnt+1))).top :=30+ i*40;
end;
Da musst du dir auch keine Sorgen über die Sortierung machen.

Edit: Tags vergessen.

ferby 27. Feb 2005 12:31

Re: Nach ABC ordnen
 
hallo,

danke.

GJungbluth 6. Feb 2006 12:27

Re: Nach ABC ordnen
 
moin,
man kann auch dbtext benutzen in einem DBCtrlGrid
das ist viel eleganter.

Sidorion 6. Feb 2006 12:53

Re: Nach ABC ordnen
 
Wenn man 2 Strings vergleicht werden diese Zeichenweise verglichen. Damit ist die '12' kleiner, als die '2' und kommt desshalb nach vorne, da '1'<'2'
Grundsätzlich gibt es zei Lösungen für Dein Problem:
1. Du benennnst alle Label um, und zwar indem Du bei den Nummern Nullen einschiebst, sodass die StringLÄNGE aller gleich ist. z.B.: 'Label1' -> 'Label01' (falls max. 2 Stellen 01-99) oder 'Label1'->'Label001' (falls drei Stellen 001-999).
2. Du schreibst Dir eine eigene Compare-Funktion, die den numerischen Teil deiner Strings separat behandelt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:58 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz