Delphi-PRAXiS
Seite 1 von 2  1 2      

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 TListItem um Eigenschaften erweitern (https://www.delphipraxis.net/2551-tlistitem-um-eigenschaften-erweitern.html)

mika 29. Jan 2003 08:12


TListItem um Eigenschaften erweitern
 
Hallo,

ich habe ein ListView mit Einträgen zu erstellen, alles ja nicht so
schwierig :) aber mein problem ist das jedes ListItem einen Eintrag in der
Datenbank darstellt. Nun habe ich das immer bisher so gelöst das ich in der
Data Eigenschaft einen Pointer auf einen RecordDatensatz im Speicher
gesetzt habe in dem meine zusätzlichen Daten stehen. Nun habe ich manchmal
aber das Problem das der Zeiger nicht mehr stimmt oder die Aktualisierung
im Speicher fehlschlug. Mir kam die Idee das TListItem zu erweitern und
meine Daten da mit abzuspeichern.

Im simpelsten Beispiel wie folgt

Delphi-Quellcode:
type
  TMyListItem = Class(TlistItem)
    Auftrag : Integer;
  end;

Var
  myListItem := TMyListItem
aber wenn ich dann sage

Delphi-Quellcode:
  myListItem := ListView1.Items.Add;
sagt er mir das TListItem und TMyListItem unterschiedlich sind, was kann
man denn da machen? Ist das ganze überhaupt möglich? Ich hoffe doch sehr
da sich meine Probleme mit der Speichersynchronisation damit in Luft
auflösen würden.


danke schon im voraus, mika

mika 29. Jan 2003 09:50

CommCtrls
 
Hallo, ich habe jetzt mal probiert meine eigenschaften die ich brauche
direkt in der Typdeklaration von TListItem in der Unit CommCtrls.pas
einzutragen, aber ohne erfolg, wenn ich probiere die property aufzurufen
sagt er mir die eigenschaft würde nicht existieren :(


im Pivate Abschnitt
FAuftrag : Integer

im Public Abschnitt
property Auftrag: Integer read FAuftrag write FAuftrag

Sharky 29. Jan 2003 10:38

Re: CommCtrls
 
Zitat:

Zitat von mika
... direkt in der Typdeklaration von TListItem in der Unit CommCtrls.pas einzutragen ...

Abgesehen davon das es immer sehr schlecht ist in den original .pas etwas zu ändern......

Hast Du die CommCtrls auch neu compiliert?

Luckie 29. Jan 2003 11:06

Re: CommCtrls
 
Zitat:

Zitat von mika
direkt in der Typdeklaration von TListItem in der Unit CommCtrls.pas
einzutragen

*grusel* *schüttel*

Leite dir dein eigene Komponente von TListview ab und erweiter sie um dir gewünschten Eingenschaften, Methoden.

mika 29. Jan 2003 11:28

Mika
 
Hi,

hab auch grad gemerkt das es nicht grad ne witzige idee ist die quellen zu
verändern, jetzt speichert er zwar meine daten gewünscht ab, aber er
meckert an der shellctrls rum :( wie leite ich denn meine klasse von
Tlistview ab? ich will das ja in der form benutzen.

ausserdem brauch ich ja daten pro eintrag, geht das wenn ich mir ne
tlistview ableite? ich bin der meinung der beste weg wäre ne abgeleitete
Klasse von TListItem, aber das will nicht gehen :evil:

hat da nicht jemand ne idee wie ich mir mein eigenes listitem erstelle
was ich in der listview anzeige?

Luckie 29. Jan 2003 11:36

Mit der Komponentenentwicklung habe ich auch nicht sehr viel Erfahrung (, um genau zu sein gar keine, siehe meine Homepage :roll:). Ich würde an deiner Stelle einfach mal Im Forum suchen bzw. am all seits beliebten Volkssport "googlen" teilnehmen. :mrgreen:

mika 29. Jan 2003 11:55

Mika
 
HI Luckie,

ich hab auch nicht soviel ahnung davon, aber ich hab jetzt probiert eine
struktur von listitem zu erstellen, die auf meine abgeleitete klasse
aufbaut und die per sendmessage ins listview reinzupusten, aber dann
gibts ne AV :evil: hat nicht vielleicht jemand hier schon mal sowas
gemacht?? Sakura?

Gegoogelt hab ich schon wie wild, und ich hab auch schon im forum (auch
in anderen) gesucht, bevor ich diesen thread erstellt habe.
Vielleicht bin ich ja einfach zu blöd die richtigen keywords rauszusuchen.


Mika

Christian Seehase 29. Jan 2003 13:27

Moin Mika,

das Beispiel aus Deinem Eingangsposting kann nicht funktionieren, da Du versuchst einem Objekt vom Typ einer abgeleiteten Klasse ein Objekt der Basisklasse zuzuordnen.
Da i.d.R. aber Basisklassen weniger enthalten, als die abgeleiteten wird diese Zuweisung verweigert (umgekehrt ginge es).
Man könnte das wohl durch einen Typecast erzwingen, aber dadurch würde das Ergebnis immer noch nicht funktionieren, da ja das mit Add hinzugefügte ListViewItem ein Standard ListViewItem ist.

Den TCustomListView zu diesen Zwecken abzuleiten und mit geänderten TListViewItems auszustatten kommt mir allerdings ausgesprochen aufwändig vor.

Das das mit der Eigenschaft Data nicht 100%ig funktioniert kommt mir komisch vor. Da scheint irgendwo ein Fehler vorzuliegen, denn normaler Weise funktioniert das, so wie Du es beschrieben hast, problemlos.

Es wäre wahrscheinlich einfacher hier anzusetzen, als eine neue Kompo zu bauen.

Daniel B 29. Jan 2003 16:27

Wieso soll/kann das mit einem Integer klappen? Warum kein String?

Grüsse, Daniel :hi:

mika 31. Jan 2003 07:52

Mika
 
Hallo,

an sich ist mit der Eigenschaft Data eines TListItem nichts verkehrt, nur
habe ich ab und an Probleme mit der Verwaltung von dynamischen Array's,
wenn ich probiere den Zeiger meiner Variablen laut der Eigenschaft Data
des ListItems neu zu setzen dann bekomme ich ab und an eine AV :(

aber ich habe mir jetzt überlegt den Index des Elements in der Eigenschaft
Tag zu speichern und dann einfach das Element so aufzurufen.

Mal sehen wie das klappt :)



mfg, mika


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 Uhr.
Seite 1 von 2  1 2      

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