Einzelnen Beitrag anzeigen

Der_Unwissende

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

Re: Klasse zur Darstellung einer Ampel.

  Alt 19. Jan 2007, 15:57
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:
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;
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.
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:
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;
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).
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
  Mit Zitat antworten Zitat