Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - einzelne TYPE Elemente in ComboBox darstellen
abi - Fr 16.04.04 09:09
Titel: einzelne TYPE Elemente in ComboBox darstellen
Hallo
ich habe mir einen Type deklariert z.B. Elemente. Dieser sicht so aus
TYPE Elemente = (aa, bb, cc, dd, ee, ff, gg);
Dann kommt
Liste :Elemente;
Jetzt habe ich noch zwei RadioButton, wenn ich jetzt denn RadioButton1 drücke soll in meiner ComboBox die ersten 3 Elemente vom Element angezeigt werden.
Wenn ich RadioButton2 drücke dann alle Elemente.
Hätte auch eine Idee aber igendwie komme ich da auch nicht weiter.
Ich wollte jetzt mit meine Elemente in TList schreiben und dann in der ComboBox ausgeben. Aber ich weiss nicht wie ich meine Elemente in die TList bekomme.
maximus - Fr 16.04.04 10:23
Moin.
Die elemente eines enum types in eine TList zu schreiben macht keinen sinn, da es im prinzip normale zahlen sind. in diesem fall
Elemente = (0,1,2,3,4,5,6);
und da TList für referenz-typen gedacht ist. Du kannst aber sehr wohl die names der elemente aus der RTTI auslesen und sie in eine stringListe schreiben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| uses typInfo;
TYPE Elemente = (aa, bb, cc, dd, ee, ff, gg);
var sl:TStringList; ElementInfo: PTypeData; ... ElementInfo:= TypeInfo(Elemente); for I := low(Elemente ) to high(Elemente) do sl.add(GetEnumName(ElementInfo, I)); ... showMessage(sl[integer(cc)]); |
so in etwa sollte es gehen...kann sein das bugs drinn sind, habs aus dem kopf geschrieben.
Genau so könntest du es auch direkt in die comboBox schreiben.
abi - Fr 16.04.04 10:42
Hi Markus
schon mal danke werde des gleich mal ausprobieren aber
leider hab ich mal wieder die hälfte vergessen, denn ich will in meine Elemente Zahlen einfügen, des geht aber nicht.
Denn der erste Zeichen muss ein Buchstabe sein.
Will aber kein Buchstabe als erste Ziffer haben.
Dann hab ich noch was anderes. Ich lese denn Text aus meiner ComboBox. Jetzt möchte ich je nach dem was dort drin steht was bestimmtes aus geben.
Also habe ich eine Case einweisung gemacht. Hier mal kurz mein Code.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| testauto.Autotest1.ComboBox2.Text := 'Auflösung wählen'; text := testauto.Autotest1.ComboBox1.Text; if text = 'C2' then begin a := 1; end; StrList := TStringList.Create; case Bustyp of CANopen: begin case text of C2: begin StrList.CommaText := '0012 0013 0014 0015 0016'; testauto.Autotest1.ComboBox2.Items := StrList; end; end; end; end; |
Danke und bis später.
Moderiert von
Motzi: Code- durch Delphi-Tags ersetzt.
abi - Fr 16.04.04 10:51
ich bins nochmal bin gerade dabei deinen Code einzutippen, denn ich echt gut finde.
Denn ich hab erst mit Delphi angefangen und kenne mich noch nicht sogut aus.
Mein Programm sagt erkennt die Bezeichnung PtypeData nicht.
Und ich hab von der auch noch nie was gehört, muss ich davor noch was machen.
Ciao
maximus - Fr 16.04.04 10:54
| Zitat: |
Dann hab ich noch was anderes. Ich lese denn Text aus meiner ComboBox. Jetzt möchte ich je nach dem was dort drin steht was bestimmtes aus geben.
Also habe ich eine Case einweisung gemacht. Hier mal kurz mein Code. |
Was willst du mir damit sagen? ...sieht nicht so aus als ob das zum thema gehört. Ich seh da weder Elemente noch Enums nur strings (die du übrigens nicht in case anwiesungen benutzen kannst)
PS: Wer ist Markus?
maximus - Fr 16.04.04 10:57
| abi hat folgendes geschrieben: |
ich bins nochmal bin gerade dabei deinen Code einzutippen, denn ich echt gut finde.
Denn ich hab erst mit Delphi angefangen und kenne mich noch nicht sogut aus.
Mein Programm sagt erkennt die Bezeichnung PtypeData nicht.
Und ich hab von der auch noch nie was gehört, muss ich davor noch was machen.
Ciao |
Ich seh grad, dass du delphi 5 hast :cry: ...weiss nicht ob und wie die unit typInfo dort heisst? evtl. hast du pech! aber eine RTTI gabs damals ja auch schon, sonst wären DFMs ja garnicht möglich.
Vielleicht weiss ja jemand wie das damals ging :?:
abi - Fr 16.04.04 11:03
Hi Maximus
da hast du wohl recht, das dort nur String sind, aber des liegt daran das ich mein Element nicht in die Box bekommen hab. Denn wenn ich dies Schaffe kommt statt dem String das Element hinein.
Und wenn erst mal mein Element drin ist, kann ich mit meiner Case anweisung.
Über meine Elemente gehen, des ist jetzt nur ne Notlösung. Sonst kann ich nicht weiter machen.
Deshalb hat des für mich schon was mit dem Thema zutuchen, ich hoffe du weisst jetzt wie ich des meine.
Und mit dem Markus hab ich mich verschrieben, sorry. Bin irgendwie noch leicht im Bett.
maximus - Fr 16.04.04 11:37
Wenn in comboBox zB:
aa
bb
cc
dd
...
drinn stehr, dann wäre es ein leichtes, den itemIndex zum TElement type zu casten:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var actElement:TElement; procedure TFomr1.ComboBoxChanded(sender:TObject); begin actElement := TElement(comboBox.itemIndex); ... case actElement of aa: bla; bb: blub; else showMessage('Ungültig'); end; end; |
abi - Fr 16.04.04 11:54
Danke nochmal
genau des wollte ich haben, jetzt muss ich nur noch meine Elemente in die ComboBox bekommen und es ist perfekt.
du hast geschrieben das bei Typen immer ein T davor geschrieben wird.
hab des jetzt ohne T gemacht, denn mit T gehts nicht.
nur noch kurz zur erklärung, ich muss doch Element schreiben, da mein actElement sich auf bezieht.
Da ich es mit den Elementen vergleich die dort drin stehen, oder?
Mercy du hast mir sehr geholfen
:dance: :dance:
maximus - Fr 16.04.04 12:15
| abi hat folgendes geschrieben: |
Danke nochmal
genau des wollte ich haben, jetzt muss ich nur noch meine Elemente in die ComboBox bekommen und es ist perfekt.
|
Das steht oben, such bei dir mal nach der unit typInfo, oder ähnlichen
| Zitat: |
du hast geschrieben das bei Typen immer ein T davor geschrieben wird.
|
Ist ein standard, den du auch benutzen solltest, damit andere deinen code besser verstehen
| Zitat: |
hab des jetzt ohne T gemacht, denn mit T gehts nicht.
|
Das T musst du natürlich überall schreiben, auch bei der typ-deklaration
| Zitat: |
nur noch kurz zur erklärung, ich muss doch Element schreiben, da mein actElement sich auf bezieht.
|
Ja genau, oder dann halt TElement, wenn du es geändert hast!!!
| Zitat: |
Da ich es mit den Elementen vergleich die dort drin stehen, oder?
|
Versteh die frage nicht
| Zitat: |
Mercy du hast mir sehr geholfen
|
immer gerne :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!