[Erledigt] Combobox und Klassen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

[Erledigt] Combobox und Klassen

Beitrag von MacWomble »

Es ist so weit... das nächste Verständnisproblem:

Ich habe ein Objekt Artikel und eine Objektliste ArtikelgruppenListe (mit Objekten Artikelgruppe).
Im Artikel gibt es ein Feld IDArtikelgruppe, welche auf das Feld ID einer Artikelgruppe verweist.

Das ganze soll nun über eine ComboBox verheiratet werden.
Das Einlesen der Artikelgruppenliste in die Combobox mache ich mit:

Code: Alles auswählen

procedure TfrmArtikel.ArtikelgruppenListeErstellen;
var
  i: integer;
begin
  ArtikelgruppenListe := TArtikelgruppenListe.Create();
  ArtikelgruppenListe.ReadAllData;
  for i := 0 to ArtikelgruppenListe.Count - 1 do
  begin
 { Combobox                                        Bezeichnung der Gruppe     Objekt der Gruppe wg. ID}
   cbArtikelgruppe.Items.AddObject(ArtikelgruppenListe.Items[i].Artikelgruppe, ArtikelgruppenListe.Items[i]);
  end;
end;     


Fragen:
1. Wie setze ich die aktuelle Bezeichnung anhand der Artikel.IDArtikelgruppe in das Textfeld der Combobox?

Code: Alles auswählen

cbArtikelgruppe.  { Index des Eintrags mit  dem Wert von} Artikel.IDArtikelgruppe

2. Wie erhalte ich die ID (nicht den Index!) einer Auswahl in der Combobox zurück?

Code: Alles auswählen

Artikel.IDArtikelgruppe := cbArtikelgruppe.Items.Objects[cbArtikelgruppe.ItemIndex].ID;

habe ich versucht, aber da kennt er die ID nicht.

ODER muss ich das ganz anders machen?
Zuletzt geändert von MacWomble am Mo 14. Jan 2019, 20:48, insgesamt 1-mal geändert.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Combobox und Klassen

Beitrag von MacWomble »

Zu Delphi habe ich das wie folgt gefunden, geht aber mit Lazarus nicht (typecast longint Object und asInteger geht da garnicht):

Code: Alles auswählen

// Setzen:
//    Combobox1.Items.AddObject(KundenName.asString,TObject(KundenID.asInteger));
cbArtikelgruppe.Items.AddObject(ArtikelgruppenListe.Items[i].Artikelgruppe, TObject(ArtikelgruppenListe.Items[i].ID.asInteger));
 
// Lesen:
// ID := Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
Artikel.IDArtikelgruppe := Integer(cbArtikelgruppe.Items.Objects[cbArtikelgruppe.ItemIndex]);
 


Code: Alles auswählen

    iID:=  ArtikelgruppenListe.Items[i].ID;
    sBezeichnung:=  ArtikelgruppenListe.Items[i].Artikelgruppe;
    cbArtikelgruppe.Items.AddObject(sBezeichnung, TObject(iID))


geht erwartungsgemäß auch nicht. (Error: Illegal type conversion: "LongInt" to "TObject")
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Combobox und Klassen

Beitrag von Michl »

Typecasting sollte schon gehen,

Code: Alles auswählen

cbArtikelgruppe.Items.AddObject(sBezeichnung, TObject(PtrInt(iID))); 
allerdings frage ich mich, ob du nicht nach einer TDBLookupComboBox (http://wiki.freepascal.org/TDBLookupComboBox) suchst?

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Combobox und Klassen

Beitrag von MacWomble »

Eigentlich wollte ich schon eine Combobox, zumindest eine, wo ich mit einem Objekt und einer Objektliste dran komme.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Combobox und Klassen

Beitrag von sstvmaster »

LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Combobox und Klassen

Beitrag von MacWomble »

Danke !
So funktioniert es:

Einlesen:

Code: Alles auswählen

var
   cID: Cardinal;
...
cbArtikelgruppe.Items.AddObject(sBezeichnung, TObject(IntPtr(cID)));


Auswählen:

Code: Alles auswählen

procedure TfrmArtikel.cbArtikelgruppeChange(Sender: TObject);
begin
  Artikel.IDArtikelgruppe := PtrUInt(cbArtikelgruppe.Items.Objects[cbArtikelgruppe.ItemIndex]);
 end;   


Anzeigen:

Code: Alles auswählen

var
   AIndex: Integer;
...
AIndex := cbArtikelgruppe.Items.IndexOfObject(TObject(PtrInt(Artikel.IDArtikelgruppe)));
  if AIndex >= 0 then
  cbArtikelgruppe.ItemIndex := AIndex;


Das mit den TypeCasts finde ich nicht schlimm, ist noch immer übersichtlich.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Antworten