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 Standard TListView eigenes TListItem zuweisen - wie? (https://www.delphipraxis.net/147618-standard-tlistview-eigenes-tlistitem-zuweisen-wie.html)

s-off 12. Feb 2010 13:29


Standard TListView eigenes TListItem zuweisen - wie?
 
Ich habe für Testzwecke die Klasse TMyListItem von TListItem abgeleitet.
Zur Laufzeit möchte ich nun eine Instanz von TListView erzeugen, die aber nicht auf TListItem zugreifen soll, sondern auf meine eigene TMyListItem-Klasse.
Wie stelle ich das am schlausten an?

Bernhard Geyer 12. Feb 2010 13:48

Re: Standard TListView eigenes TListItem zuweisen - wie?
 
So geht das nicht. Du hast bei TListItem einen Pointer-Property zur Verfügung an das du alles mögliche hängen kannst.

s-off 12. Feb 2010 14:38

Re: Standard TListView eigenes TListItem zuweisen - wie?
 
Okay, das mit der ListView war nur ein Beispiel. Was mache ich bei Klassen, die nicht über so eine flexible Eigenschaft verfügen?
Aus Deiner Aussage 'So geht das nicht.' entnehme ich, dass ich sämtliche Interna der Klasse anpassen müsste.

Jemand eine andere Idee?

mimi 12. Feb 2010 16:15

Re: Standard TListView eigenes TListItem zuweisen - wie?
 
Es gibt zwei einfache Möglichkeiten:
01: Du leitest von TListItems ab, wie jetzt auch. Allerdings musst du dann auch von TListView ableiten. Da sonst deine Klasse nicht genutzt werden kann bzw. wird. Z.B beim hinzufügen. Diese Methoden müsstest du überschreiben. Ebenfalls solltest du das Property Items überschreiben bzw. Anpassen

02: Viel leichter geht das über die Data Eigenschaft. Ich glaube bei der ListView war das ein Pointer. Es kann aber auch ein TObject sein. Dann kannst du einfach eine eigene Klasse erstellen und der Data Eigenschaft des ListItems hinzufügen.

Die Klasse muss das schon bereit stellen, sonst stehst du vor einem Problem. Es kommt immer auf dein Vorhaben an. Mit der WinApi lässt sich auch einiges erreichen. Z.B. kann man damit Komponenten zu einem OpenDialog hinzufügen. Meinst du sowas ?

Bernhard Geyer 12. Feb 2010 16:35

Re: Standard TListView eigenes TListItem zuweisen - wie?
 
Zitat:

Zitat von s-off
Okay, das mit der ListView war nur ein Beispiel. Was mache ich bei Klassen, die nicht über so eine flexible Eigenschaft verfügen?

Normal einfach eine Ableitung machen. Aber TListView wird nicht mit deinem abgeleiteten TListItems arbeite so das hier nicht so einfach vorgegangen werden kann.

s-off 12. Feb 2010 19:28

Re: Standard TListView eigenes TListItem zuweisen - wie?
 
Okay, danke für Eure Antworten. Ich habe keinen konkreten Anwendungsfall dafür; wollte nur wissen, ob das generell möglich ist.

Hawkeye219 12. Feb 2010 20:24

Re: Standard TListView eigenes TListItem zuweisen - wie?
 
Hallo,

bei der Komponente TListView gibt es das Ereignis OnCreateItemClass, über das eine eigene Klasse für Listenelemente bereitgestellt werden kann. Zumindest in Delphi 2006 liegt dieses Ereignis leider noch im protected-Bereich der Klasse, so dass ein Überschreiben der ListView-Klasse notwendig ist. Bei neueren Delphi-Version sollte das Ereignis im Objektinspektor sichtbar sein - zumindest ab Delphi 2009 gilt das.

Ach ja: beim TreeView heißt das Ereignis "OnCreateNodeClass".

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 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