Tag für Items in Listbox

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Tag für Items in Listbox

Beitrag von malabarista »

Ich habe eine normale Listbox mit vielen Items.
Es wäre schön, wenn ich jedem Item eine Nummer (=Tag) mitgeben könnte, aber offiziell hat ein Item kein Tag.
Nun könnte ich diese Nummer zwar in das Item selbst ans Ende stellen (in Klammern z.B.), - das sieht aber sehr hässlich und unübersichtlich aus.

Gibt es vielleicht doch noch eine Möglichkeit einem Item einen Tag mitzugeben ?

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: Tag für Items in Listbox

Beitrag von m.fuchs »

Was willst du denn genau machen?
Du kannst ein Objekt an jedes Item hängen. Mit

Code: Alles auswählen

ListBox1.AddItem('BlaFasel', MyObject); 

Zugriff erfolgt über

Code: Alles auswählen

ListBox1.Items.Objects[123];
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Tag für Items in Listbox

Beitrag von malabarista »

Ich bekomme die Fehlermeldung: incompatible Type got "longint",expected "Array of Const"

Code: Alles auswählen

 einheit.Items.add(z,dsnr);


Wenn ich einen record übergebe, folgt immer noch die Meldung ... expected "Array of Const".
Kann man denn nur Konstante übergeben, keine Variablen ?

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: Tag für Items in Listbox

Beitrag von m.fuchs »

Ich habe weder etwas von LongInt geschrieben noch von Records. Ich sprach von Objekten.

Wenn du auch mal meine Frage beantworten könntest was du genau vorhast, wäre es sicherlich möglich dir detailliertere Empfehlungen zu geben.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Tag für Items in Listbox

Beitrag von malabarista »

Ist ein Record kein Object ?

Was ich vorhabe ?
Ich möchte zu jedem Item eine Nummer, die auf einen Eintrag in einer speziellen Datei hinweist, speichern.

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: Tag für Items in Listbox

Beitrag von m.fuchs »

malabarista hat geschrieben:Ist ein Record kein Object?

Ja. Siehe auch https://www.delphi-treff.de/object-pasc ... d-objekte/

malabarista hat geschrieben:Was ich vorhabe ?
Ich möchte zu jedem Item eine Nummer, die auf einen Eintrag in einer speziellen Datei hinweist, speichern.

Klasse, nun weiß ich wirklich genau Bescheid. Leute, lasst euch doch nicht immer alles aus der Nase ziehen. Mehr Input für mehr Output.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Tag für Items in Listbox

Beitrag von wp_xyz »

Zunächstmal musst du statt Add die Methode AddObject aufrufen, der man neben dem Text auch einen Pointer auf ein TObject mitgeben kann. Wenn du jetzt anstelle eines TObject eine Integer-Zahl einträgst, meckert der Compiler, zu Recht, denn ein Pointer ist etwas anderes als ein Integer. Nachdem intern aber alles nur Nullen und Einsen sind, kann man dem Compiler den Integer als TObject unterjubeln, wenn beide Datentypen gleich viele Bytes groß sind. Dafür gibt es den Integer-Typ PtrInt (oder PtrUInt (für vorzeichenlose Zahlen) - beide Typen sind immer so groß wie ein Pointer, egal ob man mit einem 32-Bit oder 64-Bit Betriebssystem arbeitet. Wenn du nun schreibst TObject(a), wobei a vom Typ PtrInt ist, nimmt der Compiler die in a steckenden Nullen und Einsen und betrachtet sie als Pointer bzw als TObject. Wenn deine Zahlen kein PtrInt sind, schreibst du noch PtrInt(a) vornedran, so dass der Compiler den Integer a so erweitert, dass er so groß ist wie ein PtrInt.

Code: Alles auswählen

einheit.Items.AddObject(z, TObject(PtrInt(dsnr)));

Das Tag liest du dann später mit der entsprechenden Typumwandlung von TObject zu PtrInt aus der Eigenschaft Objects[] aus:

Code: Alles auswählen

dsnr := PtrInt(einheit.Items.Objects[i]);

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: Tag für Items in Listbox

Beitrag von m.fuchs »

Ich weine gleich. Warum werden solche Hacks immer wieder als Lösung angeboten?
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: Tag für Items in Listbox

Beitrag von af0815 »

m.fuchs hat geschrieben:Ich weine gleich. Warum werden solche Hacks immer wieder als Lösung angeboten?

Weil das lange Zeit das einfachste Boxing bzw. Unboxing war, besonders bei den alten Delphiversionen.

Ich habe das auch jahrelang so gelernt und mit guten Gewissen gemacht. Erst mit aufkommen der Crosscompiler und 32/64Bit habe ich mich rasch umgewöhnt, weils ganz einfach rasch ins Auge gehen kann. Und ein gebranntes Kind scheut das heisse Eisen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Tag für Items in Listbox

Beitrag von malabarista »

Nachdem ich nun das Stichwort "addobjects" hatte, habe ich hier eine verständliche Anleitung dazu gefunden:
https://www.tweaking4all.com/software-d ... addobject/

Antworten