![]() |
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:
Jetzt habe ich eine Funktion, die den Ordinalwerten einen String zuordnet:
type FruchtTyp = (Banane, Apfel, Birne, Kiwi);
Delphi-Quellcode:
Wie kann ich alle Werte (Anzahl variabel, hab keine Lust jedesmal alle Comboboxen zu aktualisieren^^) über die Funktion FruchtTypToStr in eine ComboBox hinzufügen?
function FruchtTypToStr(FruchtTyp: FruchtTyp): String;
begin Case FruchtTyp of Banane: FruchtTypToStr := 'Banane'; Apfel: FruchtTypToStr := 'Apfel'; Birne: FruchtTypToStr := 'Birne'; Kiwi: FruchtTypToStr := 'Kiwi'; end; end; 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. |
Re: Kompletten Type in Combobox, Variable Werte
Zitat:
Delphi-Quellcode:
ord(high(FruchtTyp)) //=Index des letzten Elements
succ(ord(high(FruchtType))) // = Anzahl der Elemente |
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:
Gibts eine Umkehrfunktion von ord?for I := 0 to succ(ord(high(FruchtTyp))) - 1 do begin Showmessage(FruchttypToStr(ord(i))); end; |
Re: Kompletten Type in Combobox, Variable Werte
Versuch es mal mit
Delphi-Quellcode:
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.
Showmessage(FruchttypToStr(FruchtTyp(i)));
|
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.
|
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:
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... |
Re: Kompletten Type in Combobox, Variable Werte
Zitat:
Zitat:
Zitat:
Zitat:
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:
Bei neueren Delphi-Versionen geht auch dies:
var
ft: FruchtTyp; for ft := low(FruchtTyp) to high(FruchtTyp) do begin Showmessage(FruchttypToStr(ft)); end;
Delphi-Quellcode:
var
ft: FruchtTyp; for ft in FruchtTyp do begin Showmessage(FruchttypToStr(ft)); end; |
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:
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
function High(var X: Type): Integer;
Ich nehme alles zurück und behaupte das Gegenteil! Abgesehen vom succ succ(ord(high(FruchtTyp))) = ord(high(FruchtTyp) + 1 :) |
Re: Kompletten Type in Combobox, Variable Werte
Hallo,
schau mal ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 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-2025 by Thomas Breitkreuz