Einzelnen Beitrag anzeigen

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