Delphi-PRAXiS
Seite 1 von 2  1 2      

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 mit Objekten (https://www.delphipraxis.net/109271-combobox-mit-objekten.html)

Mike_on_Tour 27. Feb 2008 11:06


Combobox mit Objekten
 
Hallo zusammen,

ich möchte eine Ländertabelle in eine Combobox eintragen und später nach einem Eintrag suchen.

Die Ländertabelle besteht aus dem Namen und der Abkürzung des Landes, also z.B.:

Deutschland - DEU
Italien - ITA
Frankreich - FRA

Der Eintrag in die ComboBox erfolgt so:

Delphi-Quellcode:
  ComboBox.Items.Clear;
Table.First;
while (not Table.EOF) do begin
  Combobox.Items.AddObject (Table.FieldByName('Landname').AsString,
                            TObject(Table.FieldByName('LandKurz').AsString));
  Table.Next;
end;
In der Combobox wird auch nur der Names des Landes angezeigt.

Wenn ich jetzt einen Listeneintrag auswähle, möchte ich gern die Abkürzung des Landes ermitteln.

Delphi-Quellcode:
LandKurz := String (ComboBox.Items.Objects[ComboBox.ItemIndex]);
Das funktioniert aber nicht.

Auch die Positionierung auf ein Land über die Abkürzung klappt nicht:

Delphi-Quellcode:
sLand := 'DEU';
ComboBox.ItemIndex := ComboBox.Items.IndexOfObject (TObject (sLand));
Kann mir jemand auf die Sprünge helfen ?

Mike

mkinzler 27. Feb 2008 11:10

Re: Combobox mit Objekten
 
Kommt ein Fehler?

Mike_on_Tour 27. Feb 2008 11:31

Re: Combobox mit Objekten
 
Nein, es kommt kein Fehler.

Bei
Delphi-Quellcode:
LandKurz := String (ComboBox.Items.Objects[ComboBox.ItemIndex]);
kam z.B. ein Textfragment "age", wenn ich Deutschland selektiere.

Und bei
Delphi-Quellcode:
sLand := 'DEU';
ComboBox.ItemIndex := ComboBox.Items.IndexOfObject (TObject (sLand));
ist das Ergebnis -1.

Und ich weiß nicht warum.

Union 27. Feb 2008 11:41

Re: Combobox mit Objekten
 
Was soll dabei rauskommen wenn Du einen String in ein TObject umwandelst? So gehts from Prinzip her:
Delphi-Quellcode:
var
   s : Pointer;
   sl : TStringList;
begin
   sl := TStringList.Create;
   s := StrNew(PChar('Hallo'));
   sl.AddObject('Eins', s);
   ShowMessage(PChar(sl.Objects[0])); // --> 'Hallo'
StrDispose(PChar(sl.Objects[0]));

mkinzler 27. Feb 2008 11:41

Re: Combobox mit Objekten
 
.Objects verwaltet nur Zeiger. Du musst die eigentlich Objekte selber verwalten. Das Objekt, welches du adressierst besteht dann ja nicht mehr, bzw. hat dann einen anderen Inhalt.

peterlepan 27. Feb 2008 11:46

Re: Combobox mit Objekten
 
Hi!

Kann es sein, dass die Objekte in der Combo leer sind?
Ich habe gerade versucht den Quelltext auf meiner Maschine laufen zu lassen, nur mit festen Strings statt Strings aus einer Datenbanktabelle. Das Ergebnis war eine Fehlermeldung vom Compiler, dass dieses Typecasting (auf TObject) nicht funktioniert.

Wenn ich nil-Werte auf TObject gecastet habe, läuft zumindest das Füllen der Combo, allerdings sind die Objekte dann leer.

Das Casten eines String auf ein TObject erinnert an das Boxing unter .NET, Du schriebst aber in der Überschrift etwas von Win32.

Wenn ich Objekte an eine TStringList oder eine TComboBox anhänge, schreibe ich mir dazu eine Mini-Klasse, die die erforderlichen Felder beinhaltet. Ist sicher für ein Feld erst einmal ein ziemlicher Aufwand, geht aber aus meiner Sicht nicht anders.

Gruß

Peter

Union 27. Feb 2008 11:49

Re: Combobox mit Objekten
 
Zitat:

Zitat von eterlepan
geht aber aus meiner Sicht nicht anders

Hast Du meinen Beitrag gelesen? Natürlich kann man sich auch einen Mini StringKlasse für sowas schreiben, aber für einmaligen Einsatz zu aufwänding.

peterlepan 27. Feb 2008 12:08

Re: Combobox mit Objekten
 
Hallo Union!

Deine Lösung habe ich erst nach dem Posten gesehen, für den String ist das natürlich eleganter.
Mit einer Klasse hat man die Möglichkeit zusätzliche Infos mit im Objekt unterzubringen.

Peter

Mike_on_Tour 27. Feb 2008 12:09

Re: Combobox mit Objekten
 
@peterlepan:
Zitat:

Das Casten eines String auf ein TObject erinnert an das Boxing unter .NET, Du schriebst aber in der Überschrift etwas von Win32.
Es ist Win32.

Die kleine Miniklasse wollte ich mir eben ersparen. Wenn es keine andere Lösung gibt, werde ich es so machen. Aber vielleicht gibt es ja doch noch eine Lösung.

Union 27. Feb 2008 12:12

Re: Combobox mit Objekten
 
Zitat:

Wenn es keine andere Lösung gibt, werde ich es so machen. Aber vielleicht gibt es ja doch noch eine Lösung
Noch einer der die Beiträge nicht liest :warn:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.
Seite 1 von 2  1 2      

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