AGB  ·  Datenschutz  ·  Impressum  







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

Klasse zur Darstellung einer Ampel.

Ein Thema von Evian · begonnen am 19. Jan 2007 · letzter Beitrag vom 21. Jan 2007
Antwort Antwort
Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#1

Klasse zur Darstellung einer Ampel.

  Alt 19. Jan 2007, 14:31
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
Angehängte Dateien
Dateityp: zip ampel_342.zip (518,9 KB, 17x aufgerufen)
-> www.Phillsoft.de

Ich bin nun Mathematiker, aber meine Freundin bleibt trotzdem unberechenbar!
  Mit Zitat antworten Zitat
Der_Unwissende

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

Re: Klasse zur Darstellung einer Ampel.

  Alt 19. Jan 2007, 14: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
Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#3

Re: Klasse zur Darstellung einer Ampel.

  Alt 19. Jan 2007, 20:16
Vielen Danke.. ich schaue es mir nachher mal an und gebe dann Auskunft darüber, ob alles geklappt hat
-> www.Phillsoft.de

Ich bin nun Mathematiker, aber meine Freundin bleibt trotzdem unberechenbar!
  Mit Zitat antworten Zitat
Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#4

Re: Klasse zur Darstellung einer Ampel.

  Alt 21. Jan 2007, 22:06
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)
Angehängte Dateien
Dateityp: zip code_176.zip (297,7 KB, 7x aufgerufen)
-> www.Phillsoft.de

Ich bin nun Mathematiker, aber meine Freundin bleibt trotzdem unberechenbar!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Klasse zur Darstellung einer Ampel.

  Alt 21. Jan 2007, 22:10
Ein Klassentutorial gibt es auch bei mir: http://delphitutorials.michael-puff.de
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Klasse zur Darstellung einer Ampel.

  Alt 21. Jan 2007, 22:19
Zitat von Evian:
Ich habe ein paar Variablen im private-Bereich meiner neuen Klasse deklariert, kann aber trotzdem ohne Probleme vom Hauptformular direckt auf sie zugreifen.
Der Unwissende hat di hier nur die halbe Wahrheit geschildert. Definierst du unterschiedliche Klassen in der gleichen Unit, so können die untereinander sehr wohl auf deren private Eigenschaften und Methoden zugreifen. Willst Du auch das verhindern, so solltest Du den privaten Bereich mit
strict private deklarieren.

Das gibts aber erst seit Delphi 2006 (oder 2005 )
  Mit Zitat antworten Zitat
Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#7

Re: Klasse zur Darstellung einer Ampel.

  Alt 21. Jan 2007, 22:29
Alles klar...

vielen Dank für die ganze Wahrheit .
-> www.Phillsoft.de

Ich bin nun Mathematiker, aber meine Freundin bleibt trotzdem unberechenbar!
  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 02:50 Uhr.
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