Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Tlist - Probleme (https://www.delphipraxis.net/70558-tlist-probleme.html)

Coder 31. Mai 2006 21:34


Tlist - Probleme
 
ALso ich bin dabei eine Liste mit mehreren Typen zu erstellen.
Und zwar:
a) Name: String
b) Date: Integer (jo, ich weiß)
c) Size: Integer
d) Std.: Byte

Sinn des ganzen soll später sein, daß ich die Liste nach a, b ,c oder d aufsteigend oder absteigend sortieren kann. [sodaß immer Name2, Date2 und Size2 zusammen bleiben = ihr wißt, was ich meine?]

Jetzt find ich in meinem Delphi Buch [Walter Doberenz,Delphi 6 Grundlagen und Profiwissen] nur eine vorgefertigte Lösung zu Tlist, bei der sich leider Anpassungs~ / Implementierungsschwierigkeiten [neues, leeres Proj.] zeigen.

Gibt es irgendwo etwas verständliches?

Kann ich Listen einfach so per Befehl sortieren?

(Oder muß ich das sowieso coden = dann mach ich das mit Arrays.)

Danke.

SirThornberry 31. Mai 2006 21:35

Re: Tlist - Probleme
 
die Sortierung musst du fast immer coden, schließlich weiß eine TList die ja nur Pointer aufnimmt nicht was hinter den Pointern für eine Struktur liegt und kann somit auch nicht danach sortieren.

semo 31. Mai 2006 21:48

Re: Tlist - Probleme
 
du erstellst dir pro Datensatz ein Record und fügst einen Zeiger auf diesen record in die TList ein.

sortieren kannst du dann ganz einfach, indem du die Funktionen
CompareText für das Sortieren von Strings
Beispiel:
Delphi-Quellcode:
CompareText(record.nam, record.name);
und

CompareValue
Delphi-Quellcode:
CompareValue(record.nummer, record.nummer);
nutzt.

_frank_ 31. Mai 2006 22:42

Re: Tlist - Probleme
 
ich hab da mal mein TList-Beispiel geupdated (tlistsort.zip)
(hatte das schon länger mal vor...)

http://www.fw-web.de/units.htm

Gruß Frank

SirThornberry 31. Mai 2006 22:43

Re: Tlist - Probleme
 
@computer-glossar.de: Anstelle eines Records und eines Pointers auf diesen Record kann er auch gleich ein Object nehmen. Ist nur eine Frage der Gewohnheit.

Coder 31. Mai 2006 22:54

Re: Tlist - Probleme
 
halt, Stop!

ich wollte ne leichtere Anleitung zu Tlist.
Das is ja noch komplizierter :D

Danke natürlich.
Aber gibt es da vielleicht einfache Codebeispiele oder ne richtig gute Seite, die das erklärt?
war schon auf dsds


Edit: was kann ich denn nehmen?

webcss 31. Mai 2006 23:10

Re: Tlist - Probleme
 
Schau Dir doch mal das hier genauer an (ObjectList bzw. ObjectList Template) ist wahrscheinlich genau das was du brauchst.
der vorteil bei verwendung von TObject liegt unter adnderem darin, das du die enthaltenen daten auch innerhalb des objects weiter aufbereiten kannst usw. was halt mit objecten so alles geht.

Coder 1. Jun 2006 09:16

Re: Tlist - Probleme
 
äh, das macht es leider auch nicht einfacher.
Ich kann wohl rudimentäre Sachen in Dephi "programmieren" - aber das mit den Tlist ist mir noch fremd.
Daher suche ich verständliche Anleitungen dazu.
und das mit den Tlist-Objekten scheint mir noch komplizierter. (hab versucht zu verstehen, was diese object.pas und der Funktionsaufruf macht)

mhh, gibts da nix einfacheres für Tlist?

also, daß ich einfach

Delphi-Quellcode:
_______Name____Datum_______Size_____Std
1      Jens   23.07.72    187       1   
2      Marc   04.01.75    175       1
3      Tina   12.02.74    167       2
4      Jan    27.06.71    195       1
5      Elke   08.12.72    170       2
jeweils nach Name, Geb.-Datum Körpergröße oder Geschlecht sortieren kann?


gibts da keine einfachere Möglichkeit?
Vielleicht auch was richtig erklärendes (für Neuling verständliches Tutorial/pdf/page) zu Tlist?
mir ist das mit den Pointern, Klassen und Records, die ich dann dazu bräuchte noch unklar.
Noch verschwommener wird es, wenn es dann um das Sortieren gehen soll :I

Auch wenn's bequem klingt - was es aber nicht ist, weil ich seit 1 Woche daran runmdokter -
kann nicht jemand Beispielcode passend dazu schreiben, bitte?
Oder wenigstens auf ne wirklich verständliche Anleitung verweisen?

Danke auch für Eure bisherige Mithilfe!

marabu 1. Jun 2006 09:54

Re: Tlist - Probleme
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Jens,

statt der Delphi-Tags kannst du die Pre-Tags verwenden, wenn du dein Tabellen-Layout rüber bringen willst. Im Anhang eine kleine Demo für dein Sortierproblem.

Grüße vom marabu

webcss 1. Jun 2006 10:56

Re: Tlist - Probleme
 
Ich kann Dir trotzdem das ObjectList-Template nur empfehlen. Lad Dir aus dem obigen link die objlist_tmpl.pas runter und versuchs mit dem Code:
Delphi-Quellcode:
unit DeineUnit;

interface

uses Contnrs;

type
   TEintrag = class(TObject)
   private
      FName       : string;
      FDatum      : integer;
      FSize       : integer;
      FStd        : integer;
   public
      property Name       : string read FName write FName;
      property Datum      : integer read FDatum write FDatum;
      property Size       : integer read FSize write FSize;
      property Std        : Integer read FStd write FStd;
    end;

   _LIST_ITEM_ = TEintrag;
   
{$DEFINE TYPED_LIST_TEMPLATE}
{$INCLUDE objlist_tmpl.pas}

   TEintragList = _LIST_;
Der Compiler ersetzt dann quasi _LIST_ITEM_ durch deine Object-Klasse und _LIST_ durch deine Listenklasse, wie handgetippt nur eben automatisch. Superpraktisch das :thumb:

alcaeus 1. Jun 2006 11:00

Re: Tlist - Probleme
 
Nur zur Information: ich bastle gerade an einer sortierbaren Variante der Objectlist, bei der du die Elemente eben sortieren kannst. Realisiert wird das ueber eine Callback-Funktion, d.h. du musst eine Funktion schreiben, die zurueckgibt ob der erste Wert groesser ist als der Zweite. So wird die Liste eben sortiert wie du es willst :)

Greetz
alcaeus

shmia 1. Jun 2006 12:17

Re: Tlist - Probleme
 
Für dein Problem wäre ein MemoryDataset sehr gut geeignet.
Ein MemoryDataset verhält sich so wie ein TTable, kann aber zusätzlich nach jedem Feld sortiert werden.
Weiterer Vorteil: man kann einfach ein DBGrid zur Visualisierung und zum Editieren verwenden.
http://www.torry.net/pages.php?id=572

Coder 2. Jun 2006 17:17

Re: Tlist - Probleme
 
Ich werde wohl unvorhergesehener Weise erst ab Montag wieder dazu kommen, denn leider bin ich aufgrund des Studiums und Seminaren bisher noch nicht dazugekommen mir Eure Angebote genauer anzuschauen.
Das o.g. Sortprog.pas gefiel mir aber schon sehr gut (kurz).

Dennoch möchte ich mich schon mal bei allen bedanken und frohe Pfingsttage/ Freitage wünschen.

Aber ich gebe Rückmeldung :D
Bis dann

r3v0 16. Aug 2007 14:14

Re: Tlist - Probleme
 
Hallo zusammen,

Ich habe ein Problem mit der Sortierung einer meiner TLists.

Und zwar will ich sie nach 4 verschiedenen kriterien sortierne.
3 klappen eins nicht.

Edit: Das erste Also Text Aufsteigend Klappert nicht!!!!!

Sieht einer evtl den fehler?
Delphi-Quellcode:
function CompareNames(Item1, Item2: Pointer): Integer;
begin
  Result := CompareText(Inhaltcsvdateikaputt(Item1).Bildname, Inhaltcsvdateikaputt(Item2).Bildname);
end;

function CompareTextDown(Item1, Item2: Pointer): Integer;
begin
  Result := CompareText( Inhaltcsvdateikaputt(Item2).Bildname, Inhaltcsvdateikaputt(Item1).Bildname);
end;

function CompareBetrag(Item1, Item2: Pointer): Integer;
begin
  Result := trunc(Inhaltcsvdateikaputt(Item1).Betrag - Inhaltcsvdateikaputt(Item2).Betrag);
end;

function CompareBetragDown(Item1, Item2: Pointer): Integer;
begin
  Result := trunc(Inhaltcsvdateikaputt(Item2).Betrag - Inhaltcsvdateikaputt(Item1).Betrag);
end;

procedure Tfrminhaltcsv.RadioGroup1Click(Sender: TObject);
begin
  sortlistefalsch;
end;

procedure Tfrminhaltcsv.sortlistefalsch;
begin
   case RadioGroup1.ItemIndex of
      0 : lst.Sort(@CompareText);
      1 : lst.Sort(@CompareTextDown);
      2 : lst.Sort(@CompareBetrag);
      3 : lst.Sort(@CompareBetragDown);
   end;
   fuelleGridFalsch;
end;

r3v0 16. Aug 2007 20:46

Re: Tlist - Probleme
 
Zitat:

Zitat von r3v0
Hallo zusammen,

Ich habe ein Problem mit der Sortierung einer meiner TLists.

Und zwar will ich sie nach 4 verschiedenen kriterien sortierne.
3 klappen eins nicht.

Edit: Das erste Also Text Aufsteigend Klappert nicht!!!!!

Edit2: Okay Okay! Scheiß copy und paste fehler :P

Ich habe einfach die sortierung mit dem falschen namen aufgerufen!
Schade das delphi da nicht meckert aber naja jetzt klappert alles!
kann manja als bsp drin stehen lassen :)

Sieht einer evtl den fehler?
Delphi-Quellcode:
function CompareNames(Item1, Item2: Pointer): Integer;
begin
  Result := CompareText(Inhaltcsvdateikaputt(Item1).Bildname, Inhaltcsvdateikaputt(Item2).Bildname);
end;

function CompareTextDown(Item1, Item2: Pointer): Integer;
begin
  Result := CompareText( Inhaltcsvdateikaputt(Item2).Bildname, Inhaltcsvdateikaputt(Item1).Bildname);
end;

function CompareBetrag(Item1, Item2: Pointer): Integer;
begin
  Result := trunc(Inhaltcsvdateikaputt(Item1).Betrag - Inhaltcsvdateikaputt(Item2).Betrag);
end;

function CompareBetragDown(Item1, Item2: Pointer): Integer;
begin
  Result := trunc(Inhaltcsvdateikaputt(Item2).Betrag - Inhaltcsvdateikaputt(Item1).Betrag);
end;

procedure Tfrminhaltcsv.RadioGroup1Click(Sender: TObject);
begin
  sortlistefalsch;
end;

procedure Tfrminhaltcsv.sortlistefalsch;
begin
   case RadioGroup1.ItemIndex of
      0 : lst.Sort(@CompareNames);
      1 : lst.Sort(@CompareTextDown);
      2 : lst.Sort(@CompareBetrag);
      3 : lst.Sort(@CompareBetragDown);
   end;
   fuelleGridFalsch;
end;


grenzgaenger 16. Aug 2007 22:40

Re: Tlist - Probleme
 
hallo coder,

an deiner stelle, würde ich dennoch die tobjectlist bevorzugen, da du dich dannn (in den standardeinstellungen) nicht um solche dinge kümmernmusst, wie speicherallokation und speicherfreigabe und ausserdem kannste deinen einzelnen objekten überlassen, wie sie die schlüssel generieren.

aber mal jetzt zum kernpunkt deiner frage...

du hast 'n 4 stufigen gruppenwechsel, von aussen nach innen, um den von innen nach aussen zu sortieren, muste in von innen nach aussen sortieren... und zwar so oft du 'n gruppenwechsel hast... allso mal hier 'n quellcode, von deiner tobjectlist, welche dir das sortierne übernimmt...

Delphi-Quellcode:
tol.sort(g1.gl, g2,gl);
tol.sort(g1.k, g2,l);
tol.sort(g1.g, g2.g);
tol.sort(g1.n, g2.n);
und schon haste deine sortierung so aufbereitet, wie du es dir wünscht :-)

noch einen schönen abend und viel erfolg
gg

edit: sorry, hab dein problem erst jetzt erkannt... das machste am besten über 'n case...

Delphi-Quellcode:
case sortmode of
 1: tol.sort(g1.gl, g2,gl);
 2: tol.sort(g1.k, g2,l);
 3: tol.sort(g1.g, g2.g);
 4: tol.sort(g1.n, g2.n);
 else
 fehlermeldung;
end;
das andere klateratatsch, bleibt das selbe... musst nur statt 'n gruppenwechsel, einfach sortieren... 'mmmhh, ist das easy ... :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz