[Erledigt] Combobox und Klassen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

[Erledigt] Combobox und Klassen

Beitragvon MacWomble » 14. Jan 2019, 16:16 [Erledigt] Combobox und Klassen

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 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
 
Beiträge: 771
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.1 Cinnamon / CodeTyphon LAB Version 6.80 / FP 3.3.1 SVN Rev 41791 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon MacWomble » 14. Jan 2019, 18:05 Re: Combobox und Klassen

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.
MacWomble
 
Beiträge: 771
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.1 Cinnamon / CodeTyphon LAB Version 6.80 / FP 3.3.1 SVN Rev 41791 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon Michl » 14. Jan 2019, 20:08 Re: Combobox und Klassen

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; 
Michl
 
Beiträge: 2320
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon MacWomble » 14. Jan 2019, 20:27 Re: Combobox und Klassen

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.
MacWomble
 
Beiträge: 771
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.1 Cinnamon / CodeTyphon LAB Version 6.80 / FP 3.3.1 SVN Rev 41791 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon sstvmaster » 14. Jan 2019, 20:31 Re: Combobox und Klassen

OS: Windows 7 32/64bit
Lazarus 2.0.0, 32bit
Lazarus 2.1.0 Trunk 3.3.1, 32bit
sstvmaster
 
Beiträge: 153
Registriert: 22. Okt 2016, 22:12
OS, Lazarus, FPC: Lazarus 2.0 + 2.1.0 Trunk 3.3.1 / Win32, Windows 7 32+64bit | 
CPU-Target: 32Bit
Nach oben

Beitragvon MacWomble » 14. Jan 2019, 20:48 Re: Combobox und Klassen

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.
MacWomble
 
Beiträge: 771
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.1 Cinnamon / CodeTyphon LAB Version 6.80 / FP 3.3.1 SVN Rev 41791 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried