![]() |
Datenbank: - • Version: - • Zugriff über: -
Nach ABC ordnen
Hallo,
Ich habe 99 Labels mit Namen untereinander. Ich möchte das diese Labels nach dem ABC sotiert werden. Es müssen die Labels + inhalt sotiert werden, nicht deren Inhalt! Die Labels sind durchnummeriert von Label1 Label2 Label3 . . . . Label99 Wie mach ich das? Wenn Label1.caption:='Bertl' und label2.caption:='Anton' dann möchte ich nicht das Label1.caption:='Anton' ist und Label2.caption:='Bertl' sondern das die beiden label die positionen ändern..... kann mir wer weiterhelfen? danke! |
Re: Nach ABC ordnen
Schreib dir alle Namen in eine Stringlist. Dadurch hast du eine eineindeutige Zuordnung zwischen Namen und Nummern (falls es keine doppelten Namen gibt). Jetzt nimmst du eine andere Stringlist, setzt sorted auf true und füllst sie mit allen Namen. Jetzt gehst du die durch, nimmst dir einen Namen schaust in der ersten Liste nach dem passenden Label und setzt es an die passende Stelle auf dem Form und du bist fertig.
|
Re: Nach ABC ordnen
Das steht bei Datenbanken, steht eine Datenbank da hinter? Dann würde ich datensensitive DBLabels nehmen und das Eintragen der Abfrage überlassen, wie es sich auch gehört.
|
Re: Nach ABC ordnen
Hai ferby,
irgendwie verstehe ich denn Sinn der Aktion nicht :gruebel:. Warum ist es denn wichtig das ein Label an einer bestimmten Position steht? Zitat:
das würde in diesem Fall sicher nichts nutzen. Ein DBLabel bekommt seinen Inhalt ja von einer TDataSource. Und diese gibt immer nur den aktiven Datansatz einer Tabelle wieder. Es würde also in allen DBLables der selbe Inhalt stehen. |
Re: Nach ABC ordnen
Zitat:
Als ferby, TQuery verwenden und eine "order by" benutzen. |
Re: Nach ABC ordnen
Zitat:
Zitat:
Und bei 99 Labels stellt sich die Frage, ob man nicht besser eine Tabelle (Listview, StringGrid) oder eine Liste (ListBox) nimmt. Ich wäre schon zu faul diese 99 Labels auf der Form zu plazieren. :? |
Re: Nach ABC ordnen
Allgemein ist es irgendwie daneben, Labels für die Anzeige zu verwenden, und die Labels dann rumzuschieben. Da würde ich wohl eher mit einem "blinden" Memo arbeiten (also ein Memo welches disabled ist, keinen Rand, etc., damit es nicht wie ein Memo aussieht). Dann kannst du die Elemente auch gleich sortieren.
Greetz alcaeus |
Re: Nach ABC ordnen
Zitat:
|
Re: Nach ABC ordnen
Zitat:
Greetz alcaeus |
Re: Nach ABC ordnen
Und was soll er machen, wenn er so seine Sprach-Steuerung macht?
OK, dann braucht man sicher nicht sortieren. Ich wollte nur aufzeigen, dass es Fälle gibt, wo man etwas so löst. Bei meinen Buttons geht es zum Beispiel darum, eine schnelle Artikelauswahl zu ermöglichen. Dafür genügen drei Randbedingungen. Zwei davon werden über Button dargestellt. Diese erzeuge ich allerdings dynamisch, da ich vorher nicht mal weiß, wie viele erforderlich sind. Das hätte auch mit ComboBox gelöst werden. Da dauert die Auswahl aber länger. Beim Verkauf am Telefon ein echter Unterschied. |
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:
speicher ist die anzahl der labels.............
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; hauptnamelabels ist array of tlabel es sotiert sich alles ganz komisch... wo ist mein denkfehler?? |
Re: Nach ABC ordnen
Formatier deinen Text doch mal etwas besser:
Delphi-Quellcode:
ist recht unleserlich.
for i:=1 to speicher do for i2:=speicher downto i do
![]() Hat Daniel ein sehr gutes Tutorial zum Sortieren geschrieben, da müsste ein passender Algorhytmus für dich dabei sein. {Bubble o.Ä.)- |
Re: Nach ABC ordnen
Hallo,
ich verwende von seiner Seite den Bubble-Sort Algorithmus..... |
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.... |
Re: Nach ABC ordnen
Delphi-Quellcode:
Benutze Lowercase(string1)>Lowercase(string2).
if 'a'>'B' then
ShowMessage('Stringvergleiche sind nicht ohne!'); |
Re: Nach ABC ordnen
hallo,
hab ich auch schon ausprobiert, es geht nicht.... |
Re: Nach ABC ordnen
Mach doch wirklich was in diese Richtung:
Delphi-Quellcode:
Da musst du dir auch keine Sorgen über die Sortierung machen.
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; Edit: Tags vergessen. |
Re: Nach ABC ordnen
hallo,
danke. |
Re: Nach ABC ordnen
moin,
man kann auch dbtext benutzen in einem DBCtrlGrid das ist viel eleganter. |
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 09:28 Uhr. |
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