AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Abgeleitetes TListitem zufügen

Ein Thema von tigerman33 · begonnen am 10. Dez 2005 · letzter Beitrag vom 20. Jul 2007
Antwort Antwort
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#1

Abgeleitetes TListitem zufügen

  Alt 10. Dez 2005, 15:14
Schönen Samstag euch allen,

ich habe eine von TListItem abgeleitete Klasse geschrieben, die ein bestimmtes Interface implementiert, mit dem sie über Änderungen an ihrem Daten-Objekt informiert wird.
Das Problem ist nun, diese in die Items des entsprechenden ListViews einzufügen, denn alle standardmäßig hierfür zur Verfügung gestellten Methoden erzeugen jeweils ein eigenes Item und führen dann anschließend maximal noch ein Assign mit dem als Parameter übergebenen Listitem aus (siehe z.B. TListItems.AddItem).
Genau das will ich aber ja nicht, denn dann wäre ja meine eigene Klasse wieder außen vor und würde über die angesprochenen Änderungen nicht benachrichtigt werden.

Hat vielleicht jemand eine Idee, was ich da machen könnte?
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Abgeleitetes TListitem zufügen

  Alt 10. Dez 2005, 20:09
Hallo Christian,

ich glaube du zäumst das Pferd von hinten auf. Die ListView ist in erster Linie ein Instrument zur Visualisierung. Deine Daten solltest du in einer nicht visuellen Komponente halten. Wenn deine ListView virtuell ist, dann kann dein Datenobjekt die ListView zum Neuzeichnen auffordern und du kannst auf eventuelle Zustandsänderungen im jeweiligen event handler reagieren. Das mit den eigenen Items kann nicht funktionieren, da die Items vom common control intern verwaltet werden - und dort kennt man keine Delphi Objekte.

Grüße vom marabu
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Abgeleitetes TListitem zufügen

  Alt 10. Dez 2005, 20:23
Hi,

was meinst du mit das Pferd von hinten aufzäumen? Also meine Daten liegen nicht direkt im Listitem, sondern in einer Extra-Klasse, die über ein Interface mit diversen Beobachtern, u.a. auch dem Listitem kommunizieren soll:
Delphi-Quellcode:
type TObservantLVItem = class(TListItem, ITaskObserver)
     protected
       function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
       function _AddRef: integer; stdcall;
       function _Release: integer; stdcall;
     public
       procedure TaskActed(Task: TTask; AnAction: TTaskAction);
       procedure TaskPropertyChanged(Task: TTask; AProp: TTaskProperty);
     end;
Aber wie du sagst, wird das ja wohl nicht funktionieren.
Zum virtuellen Listview habe ich in der OH nichts gefunden, kann mich aber erinnern das schon mal irgendwo gesehen zu haben (Alzheimer schlägt wieder zu) Hat jemand einen Tipp, nach welchen Stichwörtern ich da suchen muss?
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Abgeleitetes TListitem zufügen

  Alt 10. Dez 2005, 21:08
Von hinten oder am falschen Ende - ein ListItem ist kein aktives Objekt und du kannst es auch nicht zu einem solchen machen. Alle Aktivität geht von der View als Container aus, das Item selbst ist völlig passiv. Deshalb kannst du es auch nicht zu einem Observer machen.

Der virtuellen ListView fügst du keine Items zu, sondern setzt einfach OwnerData auf TRUE und ListItems.Count auf die gewünschte Anzahl - alles andere geht ereignis-gesteuert. Das prominenteste Ereignis ist ListView.OnData, aber was schreibe ich - schau dir doch die kleine Demo an.

Grüße vom marabu
Angehängte Dateien
Dateityp: zip lv-demo_618.zip (4,0 KB, 198x aufgerufen)
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Abgeleitetes TListitem zufügen

  Alt 11. Dez 2005, 10:43
Vielen, vielen Dank.

Jetzt hab ich auch verstanden was du meinst! Die virtuelle Listview macht ja eigentlich genau das, was ich will.
Eine Frage dazu hab ich aber noch: Muss ich durch die zusätzlichen Event-Aufrufe mit größeren Geschwindigkeits-Einbußen rechnen?

BTW: Hattest du die Demo schon irgendwo rumliegen, oder hast du das jetzt extra geschrieben? Das ist ja viel mehr als nur eine Demo, das ist ja sogar richtig nützlich.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Abgeleitetes TListitem zufügen

  Alt 11. Dez 2005, 11:00
Hi Christian,

ich denke es wird bei ListItems.Count einen sehr niedrig liegenden break even point geben. Über diesem Wert solltest du deutliche Geschwindigkeitsvorteile bemerken. Ich habe mir nie die Mühe gemacht das genau zu untersuchen, da für mich die virtuelle ListView die natürliche Form ihrer Anwendung ist.

Die Demo habe ich nicht zwischen 20:23 und 21:08 Uhr geschrieben, aber der Zeitaufwand lag in dieser Größenordnung. Wenn sie dir etwas gebracht hat, dann freue ich mich.

Grüße vom marabu
  Mit Zitat antworten Zitat
bennle

Registriert seit: 22. Jul 2005
Ort: Kehl
139 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Abgeleitetes TListitem zufügen

  Alt 25. Feb 2007, 15:51
Hallo,
Supi, ich glaube das kann ich verwerten, allerdings verstehe ich noch nicht ganz wie der Seperator festgelegt wird. Bei meiner Datei funktioniert dies nämlich nicht richtig und ich wollte dies mal überprüfen.
Kannst du mir auf die Sprünge helfen?

Gruß
Benny
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Abgeleitetes TListitem zufügen

  Alt 20. Jul 2007, 19:11
Hallo Benny,

tut mir sehr leid, aber ich habe deinen Beitrag erst jetzt und nur zufällig entdeckt.

Der Delimiter wird beim Ereignis OnCreate() der Form als Semikolon festgelegt. Wäre es keine Demo, dann sollte man den Delimiter bei jeder Datei-Operation (Neu, Öffnen, Speichern) angeben können.

Verlegene Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:48 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