Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Neues Datenfehld bei TlistItem einer Listview (https://www.delphipraxis.net/68007-neues-datenfehld-bei-tlistitem-einer-listview.html)

mimi 23. Apr 2006 10:07


Neues Datenfehld bei TlistItem einer Listview
 
Hallo,
ich habe da ein kleins problem: ich möchte gerne in einem TlistItem zwei Stringobjekte abspeichern einmal einer der angezeigt wird(caption, ist ja schon vorhanden) und einen neuen z.b. str oder so.

wie Kann ich dem TListItem ein daten objekt hinzufügen ?

Ich möchte gerne den langen dateinamen in str speichern und nur den Dateinamen(also ohne pfad und erweiterung) in der Listview anzeigen.

(das kürtzen geht schon nur das ablegen des langen dateinamens geht noch nicht).

Und ich möchte eigentlich keine weitere liste hinzufügen müssen, ich habe schon zwei listen: TlistView und TImageList.

Kennt einer von euch eine möglichkeit dies zu erreichen ?

Vielen Dank im vorraus für eure ausführlichen antworten *G*

chaosben 23. Apr 2006 10:51

Re: Neues Datenfehld bei TlistItem einer Listview
 
Hi mimi!

Ich sehe da mindestens 2 Möglichkeiten.

1. Du leitest dir von TListItem eine Klasse ab, die deine zusätzlichen Wünsche befriedigt.
Delphi-Quellcode:
type
  TaMimiListItem = class(TListItem)
  private
    FLongPath : String;
  published
    property LongPath : String read FLongPath write FLongPath;
  end;
Diese Methode hat den Vorteil, das sie später recht einfach nutzbar ist, du bei der Zuweisung kontrollieren kannst, obs den Pfad überhaupt gibt(...) und dieses Vorgehen OOP-konform ist.

2. Du nutzt die "Data"-Eigenschaft der TListItem-Klasse. Das läuft dann so wie beim VST.
Delphi-Quellcode:
type
  TListItemData = record
    LongPath : String;
    //usw. Wenns nur ein Datenfeld ist, muss es kein Record sein
  end;
  PListItemData = ^TListItemData;
//...

//Neuer Listitem
var
  Li : TListItem;
  Data : PListItemData;
begin
  Li:=ListView1.Items.Add;
  New(Data);
  Li.Data:=Data;
  Data.LongPath:='c:\foo\bar.c';
end;
Hier musst du nun dran denken, das OnDeletion-Ereignis des Listviews zu bedienen um die Daten wieder freizugeben.

mimi 23. Apr 2006 14:13

Re: Neues Datenfehld bei TlistItem einer Listview
 
ich habe die erste lösung genommen es kommt jetzt jedes mal wenn ich auf die eigenschaft zugreifen möcht eine zugriefverletzung:
Delphi-Quellcode:
    with TExtListItem(lvFocus.Selected) do begin
hast du eine idee wie ich die wegbekommen kann ?
ich vermute ich muss die klasse installisieren, nur wie ?

TExtListItem ist wie folgt definiert:
Delphi-Quellcode:
unit extListItem;

interface

uses ComCtrls;

type
  TExtListItem = class(TListItem)
  private
    FLongPath : String;
  published
    property LongPath : String read FLongPath write FLongPath;
  end;
 
implementation

end.

chaosben 23. Apr 2006 15:25

Re: Neues Datenfehld bei TlistItem einer Listview
 
[ot]
Zitat:

Zitat von mimi
ich vermute ich muss die klasse installisieren, nur wie ?

installisieren ... was für ein schönes Wort ;)
[/ot]

Sorry, mein Fehler.
Natürlich legt lvFocus nur TListItems an und keine erweiterten. Also muss da ein Fehler kommen. (Mann, bin ich blöd)

Du hast jetzt 2 Möglichkeiten:
1. Du verfolgst den jetzigen weiter und leitest dir ein neues TListView ab, welches sich mit deinen TExtListItems auskennt.

2. Du nutzt den obigen 2. Vorschlag. (Was wahrscheinlich sinnvoller und bedeutend schneller ist.)

Und sorry für den halb[fertigen|falschen] Vorschlag.

mimi 23. Apr 2006 16:03

Re: Neues Datenfehld bei TlistItem einer Listview
 
danke für den hinweis, drauf hätte ich auch selbst kommen können.

du meinst also: einfach eine neue listview ab, also sowas:
TmyListView( TmyListItems)

chaosben 23. Apr 2006 20:16

Re: Neues Datenfehld bei TlistItem einer Listview
 
Zitat:

Zitat von mimi
TmyListView( TmyListItems)

Nein, das wird so nicht gehen.

Fang mal lieber so an:
Delphi-Quellcode:
type TMyListView = class(TCustomListView)
//oder
type TMyListView = class(TListView)
Aber: Da wird wahrscheinlich einige Zeit ins Land gehen bis deine Klasse funktioniert. Wenn du OOP üben willst, dann kannst du das gern tun. Wenn du dagegen bald zu einem Ergebnis kommen willst, nutze lieber die Data-Eigenschaft von TListItem

mimi 29. Apr 2006 16:28

Re: Neues Datenfehld bei TlistItem einer Listview
 
muss ich dann wohl. naja für mein zweck reicht eigentlich auch die Data eigenschaft !


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz