AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Eigenes Objekt welches TLabel, TImage nutzt

Ein Thema von hedie · begonnen am 2. Feb 2016 · letzter Beitrag vom 3. Feb 2016
Antwort Antwort
Seite 1 von 2  1 2   
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#1

Eigenes Objekt welches TLabel, TImage nutzt

  Alt 2. Feb 2016, 09:55
Hallo zusammen

Ich stehe vor folgendem Problem:
Um ein schönes, ansprechendes Menu zu erstellen, möchte ich mit TImage und TLabel ein paar "Buttons" machen.
Dies habe ich bisher manuell gelöst. Einzelne Images und Labels auf die Form gezogen und entsprechend Code dazu geschrieben.

Nun würde ich dies jedoch gerne in ein eigenes Objekt verpacken.
Dazu habe ich mir gedacht, dass mich meinem Objekt mitteile, wie viele Buttons ich habe, bzw. mittels objekt.AddButton einen neuen hinzufügen kann.

Zum Thema Objekterstellung habe ich mich hier eingelesen:
https://de.wikibooks.org/wiki/Progra...d_Destruktoren
http://www.delphi-treff.de/object-pa...n-und-objekte/

Dies sollte kein grösseres Problem darstellen.

Was mir jetzt jedoch noch nicht ganz klar ist, ob ich denn innerhalb meines Objektes auch Objekte vom Typ TLabel, TImage und z.B. TStringlist instanzieren darf?

Darf ich z.B. auch sowas machen:

Delphi-Quellcode:
unit myObject;

interface

type
  TmyObject = class
    constructor Create;
  private
    FHooverImage: TImage; //<--- Timage
    FIcon: TImage;
    FText: TLabel; //<--- Label
    FHeight
    procedure SetHeight(Height:integer);
  public
    property Height: integer read FHeight write SetHeight;
  end;
FIcon, FText und FHooverImage würde ich dann im TmyObject.Create mittels FIcon := TImage.Create instanzieren.

Falls nicht, wie macht man dies in meinem Fall?


Danke schonmal
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 2. Feb 2016, 10:05
Grundsätzlich kann man so machen allerdings würde man eine geeignete Basisklasse wählen. In diesem Fall würde sich ein TPanel o.ä. anbieten.
Im Konstruktor musst Du Deine Subkomponenten erzeugen Wenn Du Dein Objekt als Owner nimmst, kannst Du auf einen Destruktor für die Freigabe der Komponenten verzichten.
Markus Kinzler
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#3

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 2. Feb 2016, 10:13
Grundsätzlich kann man so machen allerdings würde man eine geeignete Basisklasse wählen. In diesem Fall würde sich ein TPanel o.ä. anbieten.
Im Konstruktor musst Du Deine Subkomponenten erzeugen Wenn Du Dein Objekt als Owner nimmst, kannst Du auf einen Destruktor für die Freigabe der Komponenten verzichten.
Du meinst, das wenn ich ein TPanel als Basisklasse wähle, und darin meine Images uns Labels platziere, werden diese alle automatisch durch den Destruktor des TPanel wieder freigegeben?

Bei FIcon := TImage.Create();
übergebe ich da am besten "self"?
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#4

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 2. Feb 2016, 10:14
Und damit man es überhaupt auf die Form drauf bekommt, muß es mindestens von TComponent oder TWinControl erben, bzw. einer anderen Container-Komponente (wie z.B. dem TPanel, wo man andere Komponenten drin aufnehmen kann)

TLabel und TImage malen nur selber auf das Canvas des Parent, was man auch selber machen kann, also z.B. von TPaintBox erben und im Paint den Text und ein TBitMap (oder eine andere Grafikkomponente) auf dessen Canvas drauf malen.

Zitat:
Du meinst, das wenn ich ein TPanel als Basisklasse wähle, und darin meine Images uns Labels platziere, werden diese alle automatisch durch den Destruktor des TPanel wieder freigegeben?
Ja, alles was von TComponent oder Nachfahren erbt, wird durch dessen Owner freigegeben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#5

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 2. Feb 2016, 20:56
Vielen Dank!

Hat wunderbar geklappt!
Sobald ich fertig bin, werde ich den Code bzw. die Klasse veröffentlichen.

Nur noch etwas beschäftigt mich.
Ich würde gerne ausserhalb des Objekts eine Prozedur definieren, welche ich innerhalb meines Objekts aufrufen kann.

Sinn und Zweck soll sein, dass wenn jemand auf ein Image klickt und somit den Button betätigt,
soll dies der Anwender aussehalb meines Objektes erfahren, indem seine zuvor definierte Prozedur aufgerufen wird.

Nun weiss ich jedoch nicht, wie ich eine solche Variable definieren soll, damit ich schlussendlich meine Prozedur übergeben kann.

myObject.OnClickProzedur := MeineEigeneProzedur; Innerhalb meines Objektes möchte ich dann einfach folgendes tun:

if assigned(OnClickProzedur) then OnClickProzedur(self);
Hoffe jemand kann mir helfen.
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 2. Feb 2016, 21:16
siehe Delphi-Referenz durchsuchenTNotifyEvent
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#7

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 3. Feb 2016, 06:30
Danke, das habe ich bereits versucht:

Delphi-Quellcode:
type TmyObject = class(TPanel)
  private
    ...
    FOnButtonClick:TNotifyEvent;
  public
    property OnButtonClick: TNotifyEvent read FOnButtoClick write FOnButtoClick;
    ...
end;

...

procedure MeineFunktion;
begin
  ShowMessage(inttostr(Form1.test.ButtonActive));
end;

...

var
  test:TmyObject
...
  test.onButtonClick := MeineFunktion;
Dies gibt mir eine Fehlermeldung:

"Inkompatible Typen: Methodenzeiger und reguläre Prozedur"
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#8

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 3. Feb 2016, 06:54
Stimmt ja auch. TNotifyEvent ist ein Zeiger auf ein ein 'Procedure of Object', deine 'MeineFunktion' nur eine Prozedur.

Erstelle Dir eine Klasse mit einer Methode 'MeineFunktion'.

Ich würde aber eher ein TFrame verwenden: Ist einfacher, finde ich. Das muss man nicht erst als Komponente registrieren. Man hat aber trotzdem den Vorteil, sich das im Designer zurecht schubsen zu können.
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#9

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 3. Feb 2016, 07:06
Stimmt ja auch. TNotifyEvent ist ein Zeiger auf ein ein 'Procedure of Object', deine 'MeineFunktion' nur eine Prozedur.

Erstelle Dir eine Klasse mit einer Methode 'MeineFunktion'.

Ich würde aber eher ein TFrame verwenden: Ist einfacher, finde ich. Das muss man nicht erst als Komponente registrieren. Man hat aber trotzdem den Vorteil, sich das im Designer zurecht schubsen zu können.
"MeineFunktion" ist ausserhalb des Objekts bzw. der Klasse.

Wenn ich im Public Bereich der Klasse

procedure MeineFunktion; schreibe, dann meldet er "Ungenügende Forward-oder External-Deklaration"
Wie kann ich dem Compiler mitteilen, dass diese Prozedur erst später definiert wird und zwar von ausserhalb der Klasse?

Zum Thema TFrame.
Ich benötige ein TLabel als Grundlage, da es mir als Container für meine Objekte dient und ich zudem
damit die Hintergrundfarbe anpassen kann.

TFrame kenne ich noch nicht und weiss nicht ob es damit genau so einfach gewesen wäre.
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 3. Feb 2016, 07:29
MeineFunktion kann bzw. soll ja auch außerhalb der Klasse sein, aber dafür eine Methode einer anderen Klasse. Deine ist eine sog. "reguläre Prozedur", das ist etwas anderes.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:27 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