Combobox Zusatzeintrag

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Cool-Tuc
Beiträge: 100
Registriert: Mi 6. Apr 2011, 17:10

Combobox Zusatzeintrag

Beitrag von Cool-Tuc »

Hallo alle,
mit der Version 1.4? hat folgende Konstruktion, zum Eintrag in eine ComboBox eine zusäzliche ID zu speichern, funktioniert:

Code: Alles auswählen

cmbCombo.Items.AddObject(sTemp, TObject(lID))

Nun, nach Umstellung auf Version 1.6 funktioniert es leider nicht mehr. Die Fehlermeldung lautet:

Code: Alles auswählen

Illegal type conversion: "Longint" to "TObject"

Setze ich an Stelle "lID" eine feste Zahl ein, gibt es keine Fehlermeldung mehr...

Wo ist der Denkfehler?

Danke

udo

Cool-Tuc
Beiträge: 100
Registriert: Mi 6. Apr 2011, 17:10

Re: Combobox Zusatzeintrag

Beitrag von Cool-Tuc »

...man nenne mir den Sinn :shock: :?:

ersetzte ich den Datentyp der Variable "lID" von "Integer" durch "PtrUint" funktioniert es wieder....

udo

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Combobox Zusatzeintrag

Beitrag von theo »

Cool-Tuc hat geschrieben:...man nenne mir den Sinn :shock: :?:


64bit Pointer?

Cool-Tuc
Beiträge: 100
Registriert: Mi 6. Apr 2011, 17:10

Re: Combobox Zusatzeintrag

Beitrag von Cool-Tuc »

...ist mir schon klar, aber ich dachte einem TObjekt kann ich alles übergeben, bzw. kann jeden Datentyp annehmen...

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Combobox Zusatzeintrag

Beitrag von m.fuchs »

Da denkst du völlig falsch. Einem TObject soll man eigentlich nur ein TObject oder einem Nachfahren davon übergeben. Wenn du hier einfach so eine Zahl reinhaust ist das Murks.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Combobox Zusatzeintrag

Beitrag von af0815 »

Was du willst, wird als Boxing/Unboxing bezeichnet. Siehe https://en.wikipedia.org/wiki/Object_type_(object-oriented_programming)#Boxing

In Dephi wurde es früher so benutzt wie du sagst (ich kenne es von D3-D7), da waren die Typen von der Länge im Speicher auch passend. Die Länge des Zeigers von TObject war genauso lange wie das was man dort eingetragen hat, damit war der Zugriff über einen einfachen Cast möglich. Ist aber auch nicht mit jedem Typ gegangen und man musste wissen was man tut.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Cool-Tuc
Beiträge: 100
Registriert: Mi 6. Apr 2011, 17:10

Re: Combobox Zusatzeintrag

Beitrag von Cool-Tuc »

...bekomme ich leider nicht hin, irgendwie laufe ich immer auf einen "typconversion" - Fehler wenn ich den Wert wieder auslesen möchte...
Hat vit. jemand einen kleinen CodeSchnipsel, wie ich einen einfachen ID-Wert (zusätzlich/unsichtbar) in die Combo hineinbekomme und wieder auslesen kann?

Danke

Udo

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Combobox Zusatzeintrag

Beitrag von theo »

Einfach probieren bis es klappt.. :lol:

Code: Alles auswählen

var Valu:Cardinal;
begin
  Valu:=13;
  ComboBox1.Items.AddObject('test',TObject(IntPtr(Valu)));
  ShowMessage(IntToStr(PtrUInt(ComboBox1.Items.Objects[0])));
end

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Combobox Zusatzeintrag

Beitrag von m.fuchs »

Ich weine gleich. :cry:
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

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 Zusatzeintrag

Beitrag von MacWomble »

Und wie setze ich dann die Combobox auf den richtigen Eintrag wenn ich valu 13 habe?
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 Zusatzeintrag

Beitrag von Michl »

MacWomble hat geschrieben:Und wie setze ich dann die Combobox auf den richtigen Eintrag wenn ich valu 13 habe?
z.B.

Code: Alles auswählen

  AIndex := ComboBox1.Items.IndexOfObject(TObject(PtrInt(Valu)));
  if AIndex >= 0 then
    ComboBox1.ItemIndex := AIndex;   

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 Zusatzeintrag

Beitrag von MacWomble »

Danke, das funktioniert !
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Combobox Zusatzeintrag

Beitrag von pluto »

Einfach probieren bis es klappt.

Und warum es nicht gleich richtig machen und z.b. eine Extra Klasse nehmen?
Dann wäre es einfacher und Strukturierter....

Code: Alles auswählen

 
  TMyObject = class
    MeinFeld:Integer;
   ...
  end;
 
var
  MyObject:TMyObject;
begin
  MyObject:=TMyObject.Create;
  MyObject.MeinFeld:=64;
  ComboBox1.Items.AddObject('Name',MyObject);
 


Das geht immer und das kann man sehr schön noch weiter Optimieren.
MFG
Michael Springwald

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 Zusatzeintrag

Beitrag von MacWomble »

Aber beim Auslesen oder Anzeigen ändert sich ja trotzdem nichts, oder?

Für weitere Posts bitte die Umleitung: https://www.lazarusforum.de/viewtopic.p ... 03#p107403 nehmen. :shock:
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Antworten