![]() |
Integer in ListItem eines ListViews speichern
Hallo #,
irgendwie stehe ich auf dem Schlauch. Ich fülle ein ListView mit Konstanten. Jeder Konstante ist ein Text zugeordnet. Wie bekomme ich die Konstante als verstecktes Feld mit rein. Data geht nicht. Bsp.
Delphi-Quellcode:
Heiko
const
C_X1 = 1; C_X2 = 2; ListItem:= ListView.Items.Add; ListItem.Caption:= ConstAsText(C_X1); // ConstAsTexti st meine ListItem.Data:= ?? order wo soll C_X1 hin ? |
Re: Integer in ListItem eines ListViews speichern
![]() bzw.
Delphi-Quellcode:
type
TConstHolder = class public FConst: integer; end; var ch:TConstHolder ; begin ch:= TConstHolder.Create; ch.FConst:= C_X1; ListItem.Data:= ch; end; |
Re: Integer in ListItem eines ListViews speichern
OK,
erzeugt aber memory leaks, falls die Klassen nicht im FormDestroy freigegeben werden. Heiko |
Re: Integer in ListItem eines ListViews speichern
Nun das muss man dann noch machen,is schon klar sollte nur ein gerüst sein...
Alternativ kanst du den integer als Pointer in Data Speichern... |
Re: Integer in ListItem eines ListViews speichern
Ist jetzt ungetestet sollte aber gehen
Delphi-Quellcode:
var
Item : TListItem; i : integer; Begin ... Item.Data := Pointer(i); ... i := Integer(Item.Data); |
Re: Integer in ListItem eines ListViews speichern
@DennisHB:Das führt aber zu einem schönen Bombenhagel! Da i nach Ende der Methode futsch ist.
|
Re: Integer in ListItem eines ListViews speichern
;)
und ausserdem wollte ich Konstanten benutzen, da klappt das eh nicht. Muss ich das halt über die Klasse machen. Schade, dass TListItem kein Tag hat. Heiko |
Re: Integer in ListItem eines ListViews speichern
:) MÖP es geht - nu auch getestet - n Pointer is doch nix anderes als ne Zahl (Integer? evtl Unsigned?)
Man kann ja auch Objecte an ein xyz.Tag hängen (eben umgekehrt)
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm1 = class(TForm) lv: TListView; Button1: TButton; procedure Button1Click(Sender: TObject); procedure lvSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Item : TListItem; begin item := lv.Items.Add; Item.Data := Pointer(45); Item.Caption := 'Test'; end; procedure TForm1.lvSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); begin If Assigned(Item) then Caption := IntTostr(Integer(Item.Data)); end; end. |
AW: Re: Integer in ListItem eines ListViews speichern
Zitat:
Recht es aus, wenn ich beim Beenden des Programmes
Delphi-Quellcode:
mache oder muss ich die Liste durchgehen und die ganzen Einträge nebst dem in Data gespeicherten Integer von Hand "beseitigen"?
procedure TForm1.Destroy(Sender: TObject);
begin lv.clear; end; Ich selbst weiß es leider nicht, kann es mir nicht herleiten und möchte nicht um es herauszufinden mittels try and error FastMemory dazunehmen. Gruß und Dank, Alex |
AW: Integer in ListItem eines ListViews speichern
Wenn Du wirklich Pointer(45) einträgst, was willst Du denn da freigeben? Hier wurde ja nur ein harter Cast dazu verwendet, eine Zahl in einer Pointer-Property zu hinterlegen, der Pointer selbst zeigt ja ins Nirwana. Von daher wäre es sogar gefährlich, eine Freigabe zu versuchen, da man gar nicht weiß, auf welchen Speicher man eigentlich zeigt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz