Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Cool-Tuc
Beiträge: 100 Registriert: Mi 6. Apr 2011, 17:10
Beitrag
von Cool-Tuc » Mi 6. Jul 2016, 16:10
Hallo alle,
mit der Version 1.4? hat folgende Konstruktion, zum Eintrag in eine ComboBox eine zusäzliche ID zu speichern, funktioniert:
Nun, nach Umstellung auf Version 1.6 funktioniert es leider nicht mehr. Die Fehlermeldung lautet:
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
Beitrag
von Cool-Tuc » Mi 6. Jul 2016, 16:43
...man nenne mir den Sinn
ersetzte ich den Datentyp der Variable "lID" von "Integer" durch "PtrUint" funktioniert es wieder....
udo
theo
Beiträge: 10867 Registriert: Mo 11. Sep 2006, 19:01
Beitrag
von theo » Mi 6. Jul 2016, 17:25
Cool-Tuc hat geschrieben: ...man nenne mir den Sinn
64bit Pointer?
Cool-Tuc
Beiträge: 100 Registriert: Mi 6. Apr 2011, 17:10
Beitrag
von Cool-Tuc » Mi 6. Jul 2016, 21:09
...ist mir schon klar, aber ich dachte einem TObjekt kann ich alles übergeben, bzw. kann jeden Datentyp annehmen...
m.fuchs
Lazarusforum e. V.
Beiträge: 2808 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:
Beitrag
von m.fuchs » Do 7. Jul 2016, 10:23
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
af0815
Lazarusforum e. V.
Beiträge: 6768 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:
Beitrag
von af0815 » Fr 8. Jul 2016, 07:46
Was du willst, wird als Boxing/Unboxing bezeichnet. Siehe
https://en.wikipedia.org/wiki/Object_ty ... ng)#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
Beitrag
von Cool-Tuc » Fr 15. Jul 2016, 17:49
...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
theo
Beiträge: 10867 Registriert: Mo 11. Sep 2006, 19:01
Beitrag
von theo » Fr 15. Jul 2016, 18:10
Einfach probieren bis es klappt..
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;
m.fuchs
Lazarusforum e. V.
Beiträge: 2808 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:
Beitrag
von m.fuchs » Fr 15. Jul 2016, 21:20
Ich weine gleich.
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
Beitrag
von MacWomble » Mo 14. Jan 2019, 20:13
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: 2511 Registriert: Di 19. Jun 2012, 12:54
Beitrag
von Michl » Mo 14. Jan 2019, 20:25
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
Beitrag
von MacWomble » Mo 14. Jan 2019, 20:42
Danke, das funktioniert !
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
pluto
Lazarusforum e. V.
Beiträge: 7192 Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)
Beitrag
von pluto » Mo 14. Jan 2019, 20:45
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
Beitrag
von MacWomble » Mo 14. Jan 2019, 20:50
Aber beim Auslesen oder Anzeigen ändert sich ja trotzdem nichts, oder?
Für weitere Posts bitte die Umleitung:
viewtopic.php?f=10&t=11963&p=107403#p107403 nehmen.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.