Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Kompletten Type in Combobox, Variable Werte (https://www.delphipraxis.net/127892-kompletten-type-combobox-variable-werte.html)

ChEeTaH 20. Jan 2009 20:37


Kompletten Type in Combobox, Variable Werte
 
Hi
in meinem Programm muss der Benutzer aus einer festgelegten Anzahl von Werten eines selbst definierten Typs auswählen.
ich habe eine Combobox, die ich gerne mit Werten dieses Typs füttern möchte.

Beispiel:

Delphi-Quellcode:
type FruchtTyp = (Banane, Apfel, Birne, Kiwi);
Jetzt habe ich eine Funktion, die den Ordinalwerten einen String zuordnet:

Delphi-Quellcode:
function FruchtTypToStr(FruchtTyp: FruchtTyp): String;
begin
  Case FruchtTyp of
   Banane: FruchtTypToStr := 'Banane';
   Apfel: FruchtTypToStr := 'Apfel';
   Birne: FruchtTypToStr := 'Birne';
   Kiwi: FruchtTypToStr := 'Kiwi';
  end;
end;
Wie kann ich alle Werte (Anzahl variabel, hab keine Lust jedesmal alle Comboboxen zu aktualisieren^^) über die Funktion FruchtTypToStr in eine ComboBox hinzufügen?
Gibts es eine Art Count Methode? Dann könnte ich mit einer simplen For-Schleife alle Einträge hinzufügen.


2. Problem:
Wie finde ich heraus, was der Benutzer ausgewählt hat? Meine Combobox ist nach Alphabet geordnet.

Danke schonmal.

taaktaak 20. Jan 2009 21:00

Re: Kompletten Type in Combobox, Variable Werte
 
Zitat:

Gibts es eine Art Count Methode?
Delphi-Quellcode:
     ord(high(FruchtTyp))   //=Index des letzten Elements
succ(ord(high(FruchtType))) // = Anzahl der Elemente

ChEeTaH 21. Jan 2009 06:22

Re: Kompletten Type in Combobox, Variable Werte
 
Danke für die schnelle Antwort.
Wie kann ich das mit einer For schleife lösen?
Delphi-Quellcode:
   
for I := 0 to succ(ord(high(FruchtTyp))) - 1 do
begin
  Showmessage(FruchttypToStr(ord(i)));
end;
Gibts eine Umkehrfunktion von ord?

DeddyH 21. Jan 2009 08:04

Re: Kompletten Type in Combobox, Variable Werte
 
Versuch es mal mit
Delphi-Quellcode:
Showmessage(FruchttypToStr(FruchtTyp(i)));
Wobei es etwas unglücklich ist, dass der Parameter genauso wie der Typ heißt, daher benennt man Typen ja in der Regel mit einem "T" als Präfix.

SirThornberry 21. Jan 2009 08:15

Re: Kompletten Type in Combobox, Variable Werte
 
Wenn du dir einfach eine Funktion schreibst der du die TStrings der Combobox übergibst musst du auch nur diese eine Funktion pflegen. Für jede Combobox eine eigene Schleife finde ich übertrieben und unglücklich.

HenKst 21. Jan 2009 08:25

Re: Kompletten Type in Combobox, Variable Werte
 
Schade Daddy war mal wieder schneller, aber hab trotzdem noch was senfähnliches was ich dazu abgeben kann:)

Zitat:

Zitat von ChEeTaH
Delphi-Quellcode:
   
for I := 0 to succ(ord(high(FruchtTyp))) - 1 do
begin
  Showmessage(FruchttypToStr(ord(i)));
end;

Die Schleife dürfte so nicht functionieren.
ord(high(FruchtTyp)) ist ja schon der index des letzten Elements, davon succ ist dieser Index +1, gibts also nicht.

Ich weiss sowieso nicht was succ von nem ord bzw ord von nem integer bewirken soll.

high(FruchtTyp) gibt schon nen integer zurück, davon ord ist eigentlich wenig sinnig.
und succ(i) ist = i+1...

Uwe Raabe 21. Jan 2009 08:49

Re: Kompletten Type in Combobox, Variable Werte
 
Zitat:

Zitat von HenKst
Die Schleife dürfte so nicht functionieren.

Doch! Na ja, fast.

Zitat:

Zitat von HenKst
ord(high(FruchtTyp)) ist ja schon der index des letzten Elements, davon succ ist dieser Index +1, gibts also nicht.

Deswegen zieht er ja auch 1 davon ab!

Zitat:

Zitat von HenKst
Ich weiss sowieso nicht was succ von nem ord bzw ord von nem integer bewirken soll.

succ gibt einfach den nächst höheren Wert der übergenen Variablen zurück. Bei einem Integer ist das wieder ein Integer, bei einem Aufzählungstyp ist das auch wieder dieser Typ.

Zitat:

Zitat von HenKst
high(FruchtTyp) gibt schon nen integer zurück, davon ord ist eigentlich wenig sinnig.
und succ(ord(i)) ist = i+1...

high(FruchtTyp) gibt keinen Integer zurück, sondern einen FruchtTyp - genauer gesagt, den höchsten FruchtTyp.

Die Funktionen succ, pred, high und low geben alle genau den Typ zurück, dere ihnen übergeben wurde. Pascal's Typsicherheit läßt grüßen.

Ich gestehe aber zu, daß die Schleifengrenze unnötig kompliziert angegeben wurde (mal abgesehen davon, daß ord(I) natürlich nicht geht):

Delphi-Quellcode:
var
  ft: FruchtTyp;

for ft := low(FruchtTyp) to high(FruchtTyp) do
begin
  Showmessage(FruchttypToStr(ft));
end;
Bei neueren Delphi-Versionen geht auch dies:

Delphi-Quellcode:
var
  ft: FruchtTyp;

for ft in FruchtTyp do
begin
  Showmessage(FruchttypToStr(ft));
end;

HenKst 21. Jan 2009 09:00

Re: Kompletten Type in Combobox, Variable Werte
 
okay das -1 hatte ich mal creativ überlesen :roll:

In der delphi hilfe steht aber eindeutig
Delphi-Quellcode:
function High(var X: Type): Integer;
War einfach mal davon ausgegangen das das pauschal gilt und nicht getestet/weitergelesen, aus dem was weiter unten steht könnte man schliessen das tatsächlich der Typ zurückgegeben wird :D

Ich nehme alles zurück und behaupte das Gegenteil!

Abgesehen vom succ

succ(ord(high(FruchtTyp))) = ord(high(FruchtTyp) + 1 :)

nahpets 21. Jan 2009 11:04

Re: Kompletten Type in Combobox, Variable Werte
 
Hallo,

schau mal hier, ansonsten sollte das über RTTI und TypeInfo gehen, ohne das Du eine "Übersetzungstabelle" pflegen musst.


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