Tag für Items in Listbox

Für Fragen von Einsteigern und Programmieranfängern...

Tag für Items in Listbox

Beitragvon malabarista » 8. Mär 2017, 10:14 Tag für Items in Listbox

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 ?
malabarista
 
Beiträge: 226
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon m.fuchs » 8. Mär 2017, 10:53 Re: Tag für Items in Listbox

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
m.fuchs
 
Beiträge: 1687
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.6, FPC 3.0) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon malabarista » 8. Mär 2017, 12:02 Re: Tag für Items in Listbox

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 ?
malabarista
 
Beiträge: 226
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon m.fuchs » 8. Mär 2017, 12:21 Re: Tag für Items in Listbox

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
m.fuchs
 
Beiträge: 1687
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.6, FPC 3.0) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon malabarista » 8. Mär 2017, 12:35 Re: Tag für Items in Listbox

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.
malabarista
 
Beiträge: 226
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

Beitragvon m.fuchs » 8. Mär 2017, 13:38 Re: Tag für Items in Listbox

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
m.fuchs
 
Beiträge: 1687
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.6, FPC 3.0) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon wp_xyz » 8. Mär 2017, 15:45 Re: Tag für Items in Listbox

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]);
wp_xyz
 
Beiträge: 2274
Registriert: 8. Apr 2011, 08:01

Beitragvon m.fuchs » 8. Mär 2017, 15:57 Re: Tag für Items in Listbox

Ich weine gleich. Warum werden solche Hacks immer wieder als Lösung angeboten?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
 
Beiträge: 1687
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.6, FPC 3.0) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon af0815 » 8. Mär 2017, 16:52 Re: Tag für Items in Listbox

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).
af0815
 
Beiträge: 3266
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon malabarista » 8. Mär 2017, 17:50 Re: Tag für Items in Listbox

Nachdem ich nun das Stichwort "addobjects" hatte, habe ich hier eine verständliche Anleitung dazu gefunden:
https://www.tweaking4all.com/software-d ... addobject/
malabarista
 
Beiträge: 226
Registriert: 11. Jun 2016, 11:16
Wohnort: Konstanz
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0 | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

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

porpoises-institution
accuracy-worried