AGB  ·  Datenschutz  ·  Impressum  







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

Eigenes Objekt welches TLabel, TImage nutzt

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

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

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 3. Feb 2016, 09:14
Vielen Dank für deine Antwort.
Leider ist diese Thematik noch ein bisschen Neuland für mich.

Bei einem OnClick von einem Objekt wie z.B einem TLabel kann ich ja auch eine externe Prozedur zuweisen.
Wie wird dass dan da gelöst?
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
44.063 Beiträge
 
Delphi 12 Athens
 
#12

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 3. Feb 2016, 09:40
Bei einem OnClick von einem Objekt wie z.B einem TLabel kann ich ja auch eine externe Prozedur zuweisen.
Nein, kann man nicht.

Es muß immer eine "Methode" (Prozedur in irgendeiner Klasse) sein, welche einen Parameter vom Typ TObjekt hat.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
hedie

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

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 3. Feb 2016, 09:41
Danke

Jetzt habe ich es verstanden!
Einfach die Funktion noch innerhalb der Klasse z.B. im "private" Bereich bekannt machen.
Dann gehts
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
 
#14

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 3. Feb 2016, 09:42
Und dann heisst das auch Methode
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
 
#15

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 3. Feb 2016, 10:07
Hier noch das Ergebnis

Eine Klasse um Menus zu erzeugen.
Dynamisch beliebige Buttons hinzufügen
mit definiertem Spacing und hoover Bildern.

Zudem kann beim AddButton noch angegeben werden ob er von oben her oder von unten hinzugefügt werden soll

Es handelt sich um meine erste selbst geschriebene Klasse.
Miniaturansicht angehängter Grafiken
menu.png  
Angehängte Dateien
Dateityp: zip Menu.zip (991,2 KB, 4x aufgerufen)
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#16

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 3. Feb 2016, 10:20
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.
Man kann schon was machen, um ein Ereignis in einer Klasse zu erzeugen und in einer aufrufenden Unit auf dieses Ereignis zu reagieren. Ich verwende als Beispiel immer gerne das, was ich ständig mache: Im Datenmodul, das die Datenbank-Zugriffskomponenten enthält, ein Ereignis erzeugen, wenn bestimmte Tabellen gesrcollt werden, um auf diese Weise in der Statusbar der Mainform gewisse Informationen über den ausgewählten Record anzeigen zu lassen.

Schritt 1: Du deklarierst in der Klassen-Unit außerhalb der Klassen-Deklaration einen Ereignis-Typ:
Delphi-Quellcode:
UNIT UnitData;

INTERFACE

USES
  SysUtils, StrUtils, Classes, DBAccess, IBC, DB, MemDS;

TYPE // Das wird außerhalb der Klasse deklariert
  TUpdateStatusbarEvent = Procedure of Object;
  ...
TYPE // ab hier beginnt dann die eigentliche Klasse
  TDatMod = CLASS(TDataModule)
  ...
end.
Schritt 2: Damit hast du nun einen neuen Typ namens TUpdateStatusbarEvent . Nun deklarierst du eine Variable von diesem Typ im Private-Abschnitt:
Delphi-Quellcode:
...
  PRIVATE { Private-Deklarationen }
    Var
      fUpdateStatusbar : TUpdateStatusbarEvent;
...
end.
Schritt 3: Danach erzeugst du ein Property im Public-Bereich:
Delphi-Quellcode:
...
  PUBLIC { Public-Deklarationen  }
...
    Property OnUpdateStatusbar : TUpdateStatusbarEvent read fUpdateStatusbar write fUpdateStatusbar;
...
end.
Schritt 4: In deiner aufrufenden Unit, in der etwas passieren soll, weist du nun dieses Ereignis deines Objekts (deiner Klasse) einer Methode deiner aufrufenden Unit zu, hier der Aktualisierung der Statusbar:
Delphi-Quellcode:
Procedure TFormMain.FormCreate(Sender: TObject);
begin
  ..
  DatMod.OnUpdateStatusbar := StatusBarAktuell; // DatMod ist hier die Variable für die Instanz des Datenmoduls
  ..
end;
Schritt 5: Um nun im Datenmodul ein Ereignis auszulösen, verwende ich folgenden Code genau dort, wo das Ereignis ausgelöst werden soll, z.B. in der AfterScroll-Ereignisbehandlung:
Delphi-Quellcode:
Procedure TDatMod.View_LogAccessAfterScroll(DataSet: TDataSet);
begin
  If Assigned(fUpdateStatusbar) Then fUpdateStatusbar;
end;
In meiner Hauptform wird nun immer dann, wenn sich in dieser Tabelle der Datensatzzeiger ändert (gescrollt wird), die private Methode StatusBarAktuell; aufgerufen.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#17

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 3. Feb 2016, 10:42
In Perlsaus Schritt für Schritt Anleitung fehlt mMn nur ein Schritt/Punkt (ich glaube genau der mit dem der TE sein Problem hatte), was ist "StatusBarAktuell" bzw. wo ist das wie definiert (Schon klar, ist eine Methode von TFormMain). Vielleicht könnte Perlsau das noch ergänzen, dann wäre das Mini-Tutorial zum Methodenzeiger komplett.
Ralph
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#18

AW: Eigenes Objekt welches TLabel, TImage nutzt

  Alt 3. Feb 2016, 10:49
"StatusBarAktuell" ist, wie ich oben bereits bemerkte, eine private Methode der aufrufenden Unit, hier der Mainform. Was gibt es da noch zu erklären? Das, was in dieser Methode passiert, sind Einträge in die Statusbar der Mainform. Wie man eine private Methode deklariert und implementiert, ist doch hier nicht das Thema, oder? Vermutlich möchte der TE an dieser Stelle gar keine Statusbar aktualisieren, sondern was ganz anderes ausführen? Welche Rolle sollte das spielen? Oder anders gefragt: Was ist dir denn jetzt tatsächlich noch unklar? Wie die Deklaration oder die Implementation einer Methode auszusehen hat? Zudem steht es dir jederzeit frei, meine kleine Anleitung zu ergänzen, wenn du meinst, da fehle noch etwas. Aus meiner Sicht fehlt da gar nichts:
  1. Du hast eine Klassen-Unit, in der ein Ereignis ausgelöst wird.
  2. Des weiteren hast du eine aufrufende Unit, in der auf dieses Ereignis reagiert werden soll.
  3. In der aufrufenden Unit erstellst du eine Methode – eine Procedure oder eine Function im Private- oder Public-Abschnitt –, der du dieses Ereignis zuweist oder die du dem Ereignis zuweist, wie auch immer.

Es handelt sich also um eine allgemeine Erklärung, die anhand eines quasi beliebigen Beispiels (das, das ich verwende, habe ich bereits mehrfach auf Platte, das finde ich leicht, weil's immer im Datenmodul ist, und das muß ich nicht hier reintippen, sondern kann Copy&Paste verwenden) ein Schritt-für-Schritt-Tuturial darstellt. Ansonsten ist die Wahl des Beispiels gewissermaßen unerheblich. Eine allgemeine Erklärung beschreibt eine Vorgehensweise, die bei vielen verschiedenen Situationen angewendet werden kann. So hab ich hier z.B. auch eigene Klassen, die Ereignisse auslösen (Datenmodul ist keine "eigene" Klasse, die hab ich nicht selbst bzw. nicht vollständig selbst geschrieben). Ich bin mir ziemlich sicher, daß jeder, der diese Anleitung Schritt für Schritt befolgt, zum gewünschten Ergebnis gelangt.

Geändert von Perlsau ( 3. Feb 2016 um 11:02 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 20:15 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