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 ComboBox.Items.AddObject? (https://www.delphipraxis.net/2369-combobox-items-addobject.html)

Delphi-Coder 20. Jan 2003 11:13


ComboBox.Items.AddObject?
 
Hallo,
ich brauch mal wieder eure Hilfe! Ich möchte eine ComboBox mit AddObject füllen!
Das Programm holt sich aus einer DB Namen,Vornamen und PersonenID von bestimmten Personen! Nach dem Anwählen soll er die PersonenID in eine andere DB schreiben. Die PersonenID soll aber nicht in der ComboBox stehen.
Wie kann ich die Namen,Vorname (als String) und die PersonenID (als Objekt) mit AddObject in die ComboBox einfügen? Und wie kann ich das Objekt des gewählten Eintrages wieder auslesen?

Ok, vielen Dank!

Bis denne!
Delphi-Coder

MrSpock 20. Jan 2003 12:03

Hallo Delphi-Coder,

falls die ID ein Integer Wert ist, kann man sich einen Trick zu nutze machen, der darauf basiert, dass ein TObject nicht anderes als eine Adresse ist.

Delphi-Quellcode:
...
    cb1.Items.AddObject(Table1Vorname.AsString
                      +' '
                      +Table1Nachname.AsString,
                      TObject(ID));
   { ID des ersten Eintrages anzeigen }
   ShowMessage(IntToStr(Integer(cb1.Items.Objects[0])));
Du castest die ID einfach als TObject. Und beim Auslesen kehrst du die Umwandlung um. Wenn du lieber eine saubere Lösung hättest :mrgreen: , sag bescheid, die kann ich auch liefern.

Delphi-Coder 20. Jan 2003 12:10

Danke für die schnelle Hilfe! Diese Lösung reicht mir schon! Ich werd's gleich mal probieren...

Delphi-Coder

EDIT: Hat alles funktioniert... Danke :D

Papaschlumpf73 25. Aug 2017 14:20

AW: ComboBox.Items.AddObject?
 
Warum geht das eigentlich mit Integer und nicht mit Int64? Hier mal ein Beispiel - als Ergebnis kommt immer ein 32bit-Integer (max. 10 Stellen) raus...

Delphi-Quellcode:
var S,R: Int64;
begin
S:=123456789012345;
ListBox1.Items.Clear;
ListBox1.Items.AddObject('Testeintrag', TObject(S));
R:=Int64(ListBox1.Items.Objects[0]);
showmessage(R.ToString);
end;

Sherlock 25. Aug 2017 14:30

AW: ComboBox.Items.AddObject?
 
Weil man davon ausgeht, nicht mehr als maxInt Einträge zu benötigen, und somit nur halb so viel Speicherplatz benötigt als mit Int64 vielen Einträgen... ;)

Sherlock

Papaschlumpf73 25. Aug 2017 14:34

AW: ComboBox.Items.AddObject?
 
Schade, ich habe nur ca. 100 Einträge. Die Referenz-ID aus einem anderen System sind jedoch Int64. Zu blöd…

Aviator 25. Aug 2017 15:29

AW: ComboBox.Items.AddObject?
 
Du könntest dir natürlich auch eine Klasse bauen die den Wert enthält. Eventuell kannst du da ja noch ein paar zusätzliche Werte mit reinpacken. Ansonsten wäre eine klasse wohl etwas overkill.

Uwe Raabe 25. Aug 2017 15:37

AW: ComboBox.Items.AddObject?
 
Zitat:

Zitat von Papaschlumpf73 (Beitrag 1379477)
Warum geht das eigentlich mit Integer und nicht mit Int64?

Geht schon - wenn du das Projekt auf Zielplattform 64-Bit-Windows compilierst.

himitsu 25. Aug 2017 19:07

AW: ComboBox.Items.AddObject?
 
Oder du machst das, wie es in der VCL eigentlich vorgesehn ist?

Bau dir ein Datenobjekt, pack da deine ID rein und häng dieses Objekt an das Item. :roll:

Papaschlumpf73 26. Aug 2017 15:51

AW: ComboBox.Items.AddObject?
 
Danke für die Tipps...


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