AGB  ·  Datenschutz  ·  Impressum  







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

Objekte in einer Liste anzeigen

Ein Thema von dr_gessi · begonnen am 24. Jul 2006 · letzter Beitrag vom 30. Mär 2025
Antwort Antwort
dr_gessi

Registriert seit: 5. Jun 2006
12 Beiträge
 
#1

Objekte in einer Liste anzeigen

  Alt 24. Jul 2006, 17:32
Hallo zusammen,

ich möchte gerne beliebig viele Instanzen eines Objektes in einer Liste darstellen. Dieses Objekt kann dabei aufgebaut sein wie eine Form, beinhaltet also Felder, Buttons, etc.

Meine Frage ist nun, wie kann ich soetwas bewerkstelligen? Welche Klassen muss ich da benutzen?

Anbei ein Screen Shot eines Beispiels (Datenträgerverwaltung unter Windows), wie ich mir es vorgestellt habe. Hier sieht man rechts unten die Auflistung aller Platten. Wie macht man sowas mit Delphi?

Würde mich sehr über Hinweise freuen.

Vielen Dank,
dr_gessi
Angehängte Grafiken
Dateityp: gif bsp_189.gif (33,7 KB, 85x aufgerufen)
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Objekte in einer Liste anzeigen

  Alt 24. Jul 2006, 18:23
Hi,
woran genau scheiterst du denn gerade?
Also an sich ist es ganz einfach. Das was du als Grundlage benötigst ist eine TScrollBox (Zusätzlich). Der Name verrät eigentlich schon grob was dieses Control leistet. Du packst x Controls in diese ScrollBox und kannst hier scrollen (wenn die Kinder größer als der sichtbare Bereich sind).
Ja, wie bei allen Controls wird mit insertControl ein neues Control eingefügt und mittels Controls[i] kannst du auf das i-te Kind des Controls zugreifen.

Was du jetzt eigentlich nur noch machen musst ist dich ein wenig um sauberer Kapselung zu bemühen. Wie gesagt, ein Control kann wieder Controlls aufnehmen. Die TScrollbox ist natürlich schon ein Control (und soll ja auch Sachen aufnehmen). Ziemlich viele der sichtbaren Komponenten sind natürlich auch Controls. Natürlich würden Formulare sich hier eher schlecht machen, was du wahrscheinlich suchst ist ein TPanel. Wie man die benutzt sollte dir grob klar sein. Falls nicht lies einfach ein Tutorial dazu.
TPanel ist ein einfacher Container. Für die Anzeige deines Objekts kannst du am einfachsten eine Klasse von TPanel ableiten. Hier legst du im Konstruktor einfach die anderen Elemente (Buttons, Labels, ...) an. Damit hast du ein Objekt, dass du einfach dyn. erzeugen kannst und da sie von TPanel erben (und damit auch von TControl) kannst du die auch direkt auf andere Controlls (z.B. eine TScrollBox) einfügen.
Um es gleich richtig zu machen solltest du allerdings die Daten gleich von dieser Anzeige trennen. Am Beispiel der Datenträgerverwaltung : Du erstellst mind. zwei Klassen. Die eine speichert nur die Werte. In der Datenträgerverwaltung entspricht dann jeder Datenträger einer Instanz dieser Klasse. Hier werden dann alle Eigenschaften des Datenträger (z.B. Füllstand, Dateisytem, ...) gespeichert.
Deine Darstellung (also der Nachfolger von TPanel) ist dann eine unabhängige Klasse davon. Unabhängig nur in dem Sinn, dass deine Datenträger nicht ihre Darstellung kennen müssen. Dein TPanel Nachfolger dient anders herum auch nur der Visualisierung irgendwelcher Werte und muss nur die Werte kennen (egal wo die herkommen und ob man dafür Datenträger abfragen muss oder nicht).
Der Vorteil liegt darin, dass du durch diese Trennung leicht deine Visualisierung verändern kannst. Du kannst aber auch gleich mehrere verschiedene Anbieten. Ein Beispiel ist wieder durch die Datenträgerverwaltung gegeben, du hast einmal oben diese ausführliche Textliste (ein TListView) und unten halt das Ding mit den eigenen Controls.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
dr_gessi

Registriert seit: 5. Jun 2006
12 Beiträge
 
#3

Re: Objekte in einer Liste anzeigen

  Alt 24. Jul 2006, 18:55
Hallo Unwissender,

ich bedanke mich für Deine super ausführliche Antwort! Da steckt also doch ein klein bisschen mehr Arbeit drin, als ich zuvor vermutet habe. Trotzdem gefällt mir der Ansatz.

Liebe Grüße,
dr_gessi
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: Objekte in einer Liste anzeigen

  Alt 24. Jul 2006, 20:44
Klingt ehrlich gesagt nach mehr als es ist.
An sich ist es nur recht schwer auf Beiträge zu antworten, die so allgemein gehalten sind wie deine. Du solltest immer so konkret wie möglich dein Problem beschreiben. Bei deiner Frage ist es einfach für die anderen Leute im Forum schwer zu antworten, da du nicht sagst woran genau du eigentlich scheiterst. Wenn du etwas mehr zu dem sagst was dein Ansatz ist (oder ob du gar keinen hast) und wie gut deine Kenntnisse im jeweiligen Gebiet sind, dann hilft das in der Regel deutlich mehr Ergebnisse zu bekommen. Ist nur als Tipp für's nächste Mal zu verstehen!

Freu mich jedenfalls, wenn ich dir helfen konnte!
  Mit Zitat antworten Zitat
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
277 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Objekte in einer Liste anzeigen

  Alt 30. Mär 2025, 11:17
Wenn ich solche Objekte aus der Liste lösche, werden die da nur in der Liste gelöscht oder auch imSpeicher, das heißt, werden dann die Objekte frei gegeben oder nur die Listeneinträge während die Objekte an sich im Speicher verbleiben?

Wenn sie aus dem Speicher radikal entfernt werden, wie lassen sich die Objekte dann dür spätere Widerverwendung zwichenspeichern?
  Mit Zitat antworten Zitat
Alallart

Registriert seit: 8. Dez 2015
156 Beiträge
 
#6

AW: Objekte in einer Liste anzeigen

  Alt 30. Mär 2025, 14:23
Ich kenne die neusten Versionen von Delphi nicht, deshalb ist meine Antwort nur bedingt zu beachten.

Also, zumindest früher, war das so, dass du dich selbst um die Freigabe kümmern musstest. Wenn du also TStringList klassisch nutzt, also an ein Item ein Objekt dranhängst, musst du es auch vor dem löschen des Items freigeben.

Anders sieht es bei TObjectList. Hier wir das Objekt beim löschen des Items automatisch gelöscht.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#7

AW: Objekte in einer Liste anzeigen

  Alt 30. Mär 2025, 15:21
Wenn du also TStringList klassisch nutzt, also an ein Item ein Objekt dranhängst, musst du es auch vor dem löschen des Items freigeben.
Mittlerweile kann man das über das Property OwnsObjects steuern.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.910 Beiträge
 
Delphi 12 Athens
 
#8

AW: Objekte in einer Liste anzeigen

  Alt 30. Mär 2025, 18:39
Ich weiß nicht, woher plötzlich die TStringList kommt. Die ist in dem Zusammenhang kaum sinnvoll, seit es generische Listen gibt.

Eine Möglichkeit hier sind Frames. Der Vorteil ist, dass man einen Frame visuell editieren kann. Dann erstellt man für jeden Listeneintrag einen solchen Frame und packt diese Frames in die schon genannte TScrollbox.

Hier kommt das vermutlich aufgrund der Controls nicht in Frage, aber ich habe damals zur Demonstration, wie man so etwas selbst zeichnen kann, ein Periodensystem geschrieben:
https://www.delphipraxis.net/132375-...-beta-6-a.html
Das ist nun 16 Jahre her und heute würde ich das sicher anders schreiben, aber man lernt dazu. Vielleicht ist es ja trotzdem interessant.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
277 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Objekte in einer Liste anzeigen

  Alt 30. Mär 2025, 20:47
Ah, alles klar, Danke Euch beiden, da werde ich meinen Code darauf anpassen
  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 05:34 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