Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Einfache array sortier routine (https://www.delphipraxis.net/80042-einfache-array-sortier-routine.html)

EWeiss 2. Nov 2006 01:10


Einfache array sortier routine
 
Welche Sortier Routine könnte man nutzen um ein Array
mit einträgen in der ComboBox zu vergleichen und zu sortieren.

Mein problem habe die ComboBox auf Sort = true gestellt
jetzt stimmen logischerweise die Arrays zu den Einträgen nicht mehr.

Jemand ein kleines Beispiel ?

EDIT:
Oder stellt die ComboBox etwas ähliches wie in VB zur verfügung?
Delphi-Quellcode:
Combo1.ItemData(Combo1.NewIndex)
Leider habe ich da nichts gefunden.
gruß

Sunlight7 2. Nov 2006 03:26

Re: Einfache array sortier routine
 
Auch schon so früh Unterweges? :mrgreen:

Du könntest mit Hier im Forum suchenAddObject Pointer mit Mini-Klassen hinzufügen, um die Daten synchron zu halten, wenn es das ist, was Du möchtest.

EWeiss 2. Nov 2006 05:26

Re: Einfache array sortier routine
 
Zitat:

Zitat von Sunlight7
Auch schon so früh Unterweges? :mrgreen:

Du könntest mit Hier im Forum suchenAddObject Pointer mit Mini-Klassen hinzufügen, um die Daten synchron zu halten, wenn es das ist, was Du möchtest.

Hab den Quelltext mal hochgeladen..
Kann dann ein anderer machen :zwinker:

gruß

Sunlight7 2. Nov 2006 05:39

Re: Einfache array sortier routine
 
Welchen Quellcode hochgeladen?
Meinst du das? Fremde Menüs steuern
Das mußt Du aber auch dazu sagen :wink:

EWeiss 2. Nov 2006 05:54

Re: Einfache array sortier routine
 
Zitat:

Zitat von Sunlight7
Welchen Quellcode hochgeladen?
Meinst du das? Fremde Menüs steuern
Das mußt Du aber auch dazu sagen :wink:

Jaaaa bin langsam müd da macht man schon mal Fehler :lol:

greets

Der_Unwissende 2. Nov 2006 08:29

Re: Einfache array sortier routine
 
Zitat:

Zitat von Sunlight7
Du könntest mit Hier im Forum suchenAddObject Pointer mit Mini-Klassen hinzufügen, um die Daten synchron zu halten, wenn es das ist, was Du möchtest.

Hi,
eigentlich solltest du eher nach Hier im Forum suchenAddItem suchen. Das du etwas hochgeladen hast und nicht weiter drüber sprichst ist natürlich durch die Uhrzeit zu rechtfertigen, aber da auch andere in diesem Thread landen könnten, die ein Ähnliches Problem haben, wäre es doch nett hier auch etwas genaueres zu sagen.

Was das Problem ganz allgemein angeht, so kennt Delphi einen recht schönen Weg. Eine ComboBox greift auf ein TStrings-Objekt zurück, dieses Objekt verwaltet dabei eine Liste von Strings. Zu jedem Eintrag (String) kann eine Referenz auf ein beliebiges Objekt (hier wirklich Instanz einer Klasse) übergeben werden. Ein Array ist somit nicht nötig. Diese Zuordnung (String, Objekt) bleibt auch beim Sortieren erhalten. Genau genommen wird auch nur das TStrings-objekt sortiert.
Dieser Ansatz ist übrigens ein sehr Objekt-Orientierter, da das TStrings-Objekt all diese Eigenschaften schön kapselt und wiederverwendet werden kann (und wird, u.A. in der TListView), aber auch dir zur Verfügung steht (TStringList, THashedStringList, eigene Nachfahren der abstrakten Klasse TStrings).

Gruß Der Unwissende

EWeiss 2. Nov 2006 17:43

Re: Einfache array sortier routine
 
Zitat:

Zitat von Der_Unwissende
Zitat:

Zitat von Sunlight7
Du könntest mit Hier im Forum suchenAddObject Pointer mit Mini-Klassen hinzufügen, um die Daten synchron zu halten, wenn es das ist, was Du möchtest.

Hi,
eigentlich solltest du eher nach Hier im Forum suchenAddItem suchen. Das du etwas hochgeladen hast und nicht weiter drüber sprichst ist natürlich durch die Uhrzeit zu rechtfertigen, aber da auch andere in diesem Thread landen könnten, die ein Ähnliches Problem haben, wäre es doch nett hier auch etwas genaueres zu sagen.

Was das Problem ganz allgemein angeht, so kennt Delphi einen recht schönen Weg. Eine ComboBox greift auf ein TStrings-Objekt zurück, dieses Objekt verwaltet dabei eine Liste von Strings. Zu jedem Eintrag (String) kann eine Referenz auf ein beliebiges Objekt (hier wirklich Instanz einer Klasse) übergeben werden. Ein Array ist somit nicht nötig. Diese Zuordnung (String, Objekt) bleibt auch beim Sortieren erhalten. Genau genommen wird auch nur das TStrings-objekt sortiert.
Dieser Ansatz ist übrigens ein sehr Objekt-Orientierter, da das TStrings-Objekt all diese Eigenschaften schön kapselt und wiederverwendet werden kann (und wird, u.A. in der TListView), aber auch dir zur Verfügung steht (TStringList, THashedStringList, eigene Nachfahren der abstrakten Klasse TStrings).

Gruß Der Unwissende

Danke werde ich in der nächsten zeit mal in Angriff nehmen
kenne mich mit dem TStrings-Object nicht aus muss mich also erst mal schlau machen.
Denke aber mal das diese zur selben zeit gefüllt werden muss sobald die einträge der Combo hinzugefügt werden.

gruß

Der_Unwissende 3. Nov 2006 07:30

Re: Einfache array sortier routine
 
Zitat:

Zitat von EWeiss
Denke aber mal das diese zur selben zeit gefüllt werden muss sobald die einträge der Combo hinzugefügt werden.

Hier findest du einfach die Trennung zwischen den Daten und der Repräsentation. Die Combobox zeigt einfach nur Strings auf eine bestimmte Art und Weise an, wo die herkommen / wo die gespeichert werden ist dabei nichts, was die Combobox selbst macht. Diese greift dafür einfach auf eine Struktur zurück, die eben nur diese Aufgabe hat. Da kommt dann die TStrings-Klasse ins Spiel. Dies ist eine abstrakte Klasse, hier kann also auch jede Instanz zugrunde liegen, die alle abstrakten Methoden dieser Klasse implementiert (und die anderen erbt).
Wenn du also der Combobox einen Eintrag hinzufügst, dann passiert (für dich transparent) nichts anderes, als dass dieser String in ein TStrings-Objekt abgelegt wird. Wie gesagt, für dich ist das zwar transparent, aber du hast auch die Möglichkeit direkt auf dieses TStrings-Objekt zuzugreifen. Diese Möglichkeit kannst du dann dazu nutzen, eine Referenz mit einem String zu verknüpfen (eine Verknüpfung, die dann immer aufrecht erhalten wird, auch beim Vertauschen einzelner Elemente in dem TStrings-Objekt).

Wenn du also sagst, dass das TStrings-Objekt zur selben Zeit wie die Combobox gefüllt werden muss, hast du natürlich recht, aber das ist eh die Aufgabe der Combobox, dafür zu sorgen. Diese verwaltet (komfortabler Weise) für dich ein eigenes TStrings Objekt. Nicht dass es falsch rüberkam und du denkst/dachtest, dass du zusätzlich ein TStrings-Objekt neben der Combobox bemühen solltest.

Gruß Der Unwissende

EWeiss 3. Nov 2006 08:32

Re: Einfache array sortier routine
 
Zitat:

Nicht dass es falsch rüberkam und du denkst/dachtest, dass du zusätzlich ein TStrings-Objekt neben der Combobox bemühen solltest.
Genau das habe ich gedacht!

gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 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