Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#20

AW: [OOP] Ableiten von TImage: Wann hat mein Objekt eine Größe?

  Alt 20. Okt 2010, 14:44
Hier mal eine Zusammenfassung der Klassen, die für die Darstellung von "Grafischen Dingen" in Frage kommen:

1.) TGraphicControl
Geeignet, wenn man nur ein graphische Object anzeigen möchte und keine Steuerung über Tastatus oder Maus benötigt.
Man muss von TGraphicControl ableiten und die Methode Paint überschreiben.
Innerhalb von Paint zeichnet man auf das Canvas-Objekt.
Es ist ein Fehler, wenn man ausserhalb der Methode Paint etwas auf den Canvas zeichnet.
2.) TCustomControl
wie TGraphicControl, nur das man zusätzlich ein Window-Handle hat und somit auf Messages von Tastatur und Maus reagieren kann.
3.) TPaintBox
Ableiten von dieser Klasse ist nicht sinnvoll.
Stattdessen benützt man das Event OnPaint um das Zeichnen auf das Formular zu deligieren.
Der Code für das Zeichnen liegt im Formular.
4.) TImage
Ableiten von dieser Klasse ist nicht sinnvoll.
Stattdessen kann man beliebige Bilder aus Dateien, Streams oder TImageList laden.
Man kann das anzuzeigende Bild aus im Formular laden, d.h. schon zur Entwicklungszeit
wird ein Bild (Bitmap, jpeg, Gif,...) zugewiesen
Ausserdem eignet sich TImage auch als gepufferte Anzeige.
Man kann also von Aussen etwas auf das Image zeichnen und es bleibt solange bestehen,
bis man etwas Neues drüber zeichnet oder eine neues Bild lädt.
5.) TPanel
Ein Panel ist eine Ableitung von TCustomControl.
Wenn man den Rahmen, den das Panel mitbringt gebrauchen kann,
dann darf man von TPanel ableiten.
Ansonsten sollte man TCustomControl als Basisklasse verwenden.

Es gibt also 3 Komponenten, von den man ableiten darf:
TGraphicControl, TCustomControl und TPanel
und zwei Komponenten von denen man nicht ableiten darf:
TPaintBox und TImage
Dass manche Programmierer dagegen verstossen bedeutet nicht das es richtig ist.

Und jetzt noch etwas für Turbo-Delphi Programmierer:
da man keine eigene Komponenten installieren kann, ist es besser wenn man nicht eigene Komponenten ableitet sondern TPaintBox oder TImage benützt.
Ich mach' hier mal Schluss; weitere Infos wie man TPaintBox oder TImage richtig benützt ggf. später.
Andreas
  Mit Zitat antworten Zitat