![]() |
Klasse zur Darstellung einer Ampel.
Liste der Anhänge anzeigen (Anzahl: 1)
hallo Zusammen,
ich habe die Hausaufgabe bekommen, eine Anwendung zum Darstellen und Steuern einer Ampel zu programmieren. Ansich gar kein Problem (Meine derzeitige Lösung befindet sich im Attachment), aber nun habe ich erfahren, dass Steuerung und Darstellung mit jeweils einer Klasse realisiert werden sollen. Da ich noch nicht wirklich eigene Klassen (bis auf die Formularsklasse ^^) mit Delphi geschreiben habe, wollte ich fragen, ob mir wer nen Tip geben kann, wie ich das am besten Angehe. Ich habe mir gedacht, dass ich das Panal, sowie die Images der Ampel in eine eigenen Klasse ablege und diese dann dem Mainformular hinzfüge. Aber wie genau mache ich das und wie greife ich dann darauf zu?! Ein klein wenig Beispielcode wäre mir sehr angenehm. liebe Grüße, Phill |
Re: Klasse zur Darstellung einer Ampel.
Hi,
hab mir jetzt ehrlich gesagt deine Implentierung noch nicht angeschaut, aber trotzdem sollte folgendes dir helfen: Eigene Klassen zu erzeugen ist sehr einfach (die Schwierigkeit liegt im sinnvollen Design, aber das ist ein anderes Thema). Du kannst die anlegen wie jeden Datentyp, eine Formular-Klasse kann dir hier als (von Delphi aut. erzeugtes) Beispiel dienen
Delphi-Quellcode:
Das was Du hier siehst ist der Aufbau einer leeren (eigenen) Klasse, mit allen möglichen Schutzklassen. Klassen sollten immer so aufgebaut werden, dass nach außen nur das sichtbar ist, was wirklich sichtbar sein muss. Die Sichtbarkeit Private ist dabei wirklich privat. Alles was hier steht kann nur vom gleichen Objekt (Instanz der Klasse) gelesen werden. Von außen ist gar kein direkter Zugriff auf solche Variablen oder Methoden möglich. Auch Nachfahren der Klasse haben keinen Zugriff auf Variablen/Methoden die hier deklariert werden.
type
TDeineKlasse = class(<VORFAHR_KLASSE>) private // private Variablen und Methoden protected // geschützte Variablen und Methoden public // öffentliche Variablen und Methoden published // Veröffentlichte Eigenschaften end; Protected ist weniger restriktiv, alles was hier steht ist für Instanzen der gleichen Klasse sowie alle Nachfahren sichtbar. Hast Du also zwei Exemplare von TDeineKlasse, können diese auf die protected Variablen des jeweils anderen Exemplar zugreifen. Eine Instanz von TForm1 kann das aber z.B. nicht. Alles was öffentlich ist, ist auch wirklich für jeden Sichtbar. Alles was public ist kann von jedem gelesen/geschrieben (Variablen/Eigenschaten) oder aufgerufen (Methoden) werden. Die Veröffentlichung verhält sich genauso wie der öffentliche Bereich, alle Eigenschaften die Du hier aufführst werden aber auch im Objekt Inspektor angezeigt und können somit zur Design-Zeit verändert werden (nur wichtig wenn Du die Komponente installierst). Bei den fertigen Formularen findest Du noch einen Bereich zwischen dem start der Klasse und private, indem alle Komponenten und Ereignisse, die Du zur Designzeit setzt auftauchen. Dieser Bereich sollte nie von Dir verändert/benutzt werden. Alles was hier steht entspricht von der Sichtbarkeit published. Dieser Bereich wird aber von Delphi verwaltet und sollte deswegen nicht von Dir verwendet werden. Eine neue Instanz einer klasse erzeugst Du mit dem Aufruf des Konstruktors (Create). Ist die Klasse ein Nachfahre von TControl, so kann sie auch angezeigt werden. Dazu kannst Du einfach ihre Eigenschaft Parent setzen oder die Funktion insertControl der Komponente aufrufen, auf dem die Instanz angezeigt werden soll. Das ganze als Beispiel:
Delphi-Quellcode:
Die Methode hier könnte jetzt zu deinem Formular gehören (z.B. beim Druck eines Button oder so). Wichtig ist, dass self hier auch eine sichtbare Komponente (also z.B. ein Formular oder ein Panel) referenziert. Du könntest es z.B. auch durch Form1 ersetzen (wobei deine Formulare hoffentlich bessere Namen haben).
type
// Neue Klasse die von TPanel erbt // hier keine neuen Eigenschaften hinzugefügt TMeineKlasse = class(TPanel) end; ... var instanz: TMeineKlasse; begin instanz := TMeineKlasse.Create(self); instanz.Width := 100; instanz.Heigth := 50; instanz.Left := 8; instanz.Right = 8; self.insertControl(instanz); end; Ja, was Du da siehst ist, wie Du zur Laufzeit eine Instanz erzeugst, ihre Eigenschaften einfach setzt (kannst natürlich auch andere setzen!) und sie dann anzeigst. Gruß Der Unwissende |
Re: Klasse zur Darstellung einer Ampel.
Vielen Danke.. ich schaue es mir nachher mal an und gebe dann Auskunft darüber, ob alles geklappt hat :)
|
Re: Klasse zur Darstellung einer Ampel.
Liste der Anhänge anzeigen (Anzahl: 1)
So es hat Prima geklappt ... nur bin ich jetzt ein wenig stuzig. Ich habe ein paar Variablen im private-Bereich meiner neuen Klasse deklariert, kann aber trotzdem ohne Probleme vom Hauptformular direckt auf sie zugreifen. Von Java und C++ kenne ich es so, dass ich auf solche Variablen nur per get und set Methoden zugreifen kann.
Warum ist das hier so?! (neue Code hängt hinten drann) |
Re: Klasse zur Darstellung einer Ampel.
Ein Klassentutorial gibt es auch bei mir:
![]() |
Re: Klasse zur Darstellung einer Ampel.
Zitat:
Delphi-Quellcode:
deklarieren.
strict private
Das gibts aber erst seit Delphi 2006 (oder 2005 :gruebel: ) |
Re: Klasse zur Darstellung einer Ampel.
Alles klar...
vielen Dank für die ganze Wahrheit :). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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