AGB  ·  Datenschutz  ·  Impressum  







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

Objektereignisse bei abgeleiteten Klassen

Ein Thema von Jean312 · begonnen am 13. Jan 2016 · letzter Beitrag vom 15. Jan 2016
Antwort Antwort
Seite 1 von 2  1 2      
Jean312

Registriert seit: 1. Dez 2013
55 Beiträge
 
#1

Objektereignisse bei abgeleiteten Klassen

  Alt 13. Jan 2016, 06:18
Hallo,

für eine Anwendung benötige ich erweiterte Eigenschaften für TEdit und TComboBox. Für diese beiden Komponenten habe ich zwei separate units in das Projekt eingebunden, wo die entsprechenden Eigenschaften als Klassenableitung der jeweiligen Hauptkomponenten enthalten sind.

Die Objekte werden zur Laufzeit erzeugt.

Nun möchte ich aber während der Laufzeit die Standard-Ereignisse benutzen, wie z.B. OnChange oder OnClick. Bei den Standard-Komponenten ist das ja kein Problem, klickt man ja nur auf das entsprechende Ereignis im OI und die Prozedur wird angelegt.
Wenn ich aber selbst die Prozedur MeinObjektChange(Sender: TObject) erzeuge, wird das Ereignis OnChange aber nicht ausgelöst. Im Debug-Mode ist im Quelltexteditor auch kein Marker bei dieser selbst erstellten Prozedur.

Ich habe auch versucht, in den Units der beiden abgeleiteten Komponenten, die benötigten Ereignisse OnChange und OnClick als published Property aufzunehmen. Das Ergebnis ist jedoch das gleiche. Auf das jeweils gewünschte Ereignis wird nicht reagiert.

Was mache ich da falsch?
  Mit Zitat antworten Zitat
bepe

Registriert seit: 17. Okt 2006
119 Beiträge
 
#2

AW: Objektereignisse bei abgeleiteten Klassen

  Alt 13. Jan 2016, 07:24
Du musst die Ereignisbehandlungsroutinen auch den entsprechenden Eigenschaften deiner Objekte zuweisen.

Delphi-Quellcode:
...
var
  MeineInstanz: TMeinEdit;
begin
  MeineInstanz := TMeinEdit.Create;
  MeineInstanz.OnChange := MeinObjektChange;
...
Jetzt sind die Marker auch da (Methode ist nicht mehr ungenutzt und wird deshalb nicht mehr entfernt) und dein Edit hat "etwas" zum ausführen wenn das Ereignis eintritt.

mfg,
bp
  Mit Zitat antworten Zitat
Jean312

Registriert seit: 1. Dez 2013
55 Beiträge
 
#3

AW: Objektereignisse bei abgeleiteten Klassen

  Alt 13. Jan 2016, 16:35
Vielen Dank für die Info. Ist das erste Mal, dass ich mich mit einer Klassenableitung beschäftige.
  Mit Zitat antworten Zitat
Jean312

Registriert seit: 1. Dez 2013
55 Beiträge
 
#4

AW: Objektereignisse bei abgeleiteten Klassen

  Alt 14. Jan 2016, 06:08
Sorry, irgendwie verstehe ich es nicht.
Soweit ich gelesen habe, werden die Eigenschaften der vererbten Klasse mitgegeben. Wenn ich also von TEDit eine Ableitung mache und ein property beispielsweise hinzufüge, bin ich davon ausgegangen, dass alle Eigenschaften von TEdit + das hinzugefügte property in der abgeleiteten Klasse verfügbar sind. Irrtum meinerseits oder falsch verstanden?
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: Objektereignisse bei abgeleiteten Klassen

  Alt 14. Jan 2016, 07:01
Wo sollen sie denn 'verfügbar' sein? Im Objektinspektor? Dann muss die Property 'Published' sein.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#6

AW: Objektereignisse bei abgeleiteten Klassen

  Alt 14. Jan 2016, 08:32
Und auch das reicht nicht, sie muss auch in der IDE registriert sein.
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
Jean312

Registriert seit: 1. Dez 2013
55 Beiträge
 
#7

AW: Objektereignisse bei abgeleiteten Klassen

  Alt 14. Jan 2016, 16:52
Es geht hier ganz speziell um das OnChange-Ereignis. Die Komponente ist nicht im OI. Die abgeleitete Komponente ist über eine eigene Unit eingebunden.

Code:
type

  { TEditExt }

  TEditExt = Class(TEdit)
  private
    FCanvas:TCanvas;
    FCTextHint:string;
    FRequired:boolean;
    procedure WMPaint(var Message: TWMPaint); message WM_Paint;
    procedure SetCTextHint(const Value:string);
  protected
    procedure WndProc(var Message:TMessage); override;
    procedure Paint; virtual;
    procedure PaintWindow(DC:HDC);override;
    property Canvas:TCanvas read FCanvas;
  public
    constructor Create(AOwner:TComponent);override;
    destructor Destroy; override;
    property CTextHint:string read FCTextHint write SetCTextHint;
    property Required:boolean read FRequired write FRequired Default False;
    procedure PaintRedFrame;
  published
    property onClick;
    property onChange;
  end;


implementation

{ TEditExt }
...
Während der Laufzeit möchte ich dann in der MainUnit auf das OnChange-Ereignis einzelner Tedit-Komponenten (die mit erweiterten Eigenschaften während der Laufzeit erzeugt werden) reagieren.
Und hier komme ich nicht klar, wie das OnChange-Ereignis dann aufgerufen werden kann. Sorry.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#8

AW: Objektereignisse bei abgeleiteten Klassen

  Alt 14. Jan 2016, 18:19
Wenn du eine Klasse entwickelst, die ein bereits verfügbares Objekt darstellen soll und zu diesem Zweck von der Klasse dieses verfügbaren Objekts ableitest, hast du erst einmal eine Komponente, die bereits alle Variablen und Methoden der Ursprungskomponente enthält. Die darin mußt du also nicht noch einmal deklarieren, denn sie sind in der neuen Klasse bereits durch Vererbung vorhanden – also eine 1:1-Kopie. Du mußt hier also nichts aus dem Quellcode der Ursprungsklasse kopieren. Nun möchtest du ein Property hinzufügen. Das fügst du hinzu mit allem was dazu gehört. Ansonsten mußt du nichts weiter hinzufügen. Wenn du in der neuen Klasse geerbte Methoden noch einmal deklarierst, überschreibst du damit die ursprünglichen und mußt sie dann natürlich auch selbst implementieren. Wenn du dagegen vorhandene Methoden lediglich erweitern willst, verwendest du den Befehl inherited. Das würde jetzt aber erst mal zu weit führen.
Delphi-Quellcode:
type
  TEditExt = Class(TEdit)
  private
    fMyProperty : Integer;

    function GetfMyProperty : Integer;
    procedure SetfMyProperty(value: Integer);

  protected
  public
  published
    property MyNewProperty : Integer read GetfMyProperty write SetfMyProperty;
  end;

implementation

function TEditExt.GetfMyProperty : Integer;
begin
  Result := fMyProperty;
end;

procedure TEditExt.SetfMyProperty(value: Integer);
begin
  fMyProperty := Value;
end;
Ob das neue Property nun public oder published ist, bleibt dir überlassen.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

AW: Objektereignisse bei abgeleiteten Klassen

  Alt 14. Jan 2016, 19:27
Und denk an DeddyH seine Worte ('Registrieren').
  Mit Zitat antworten Zitat
Jean312

Registriert seit: 1. Dez 2013
55 Beiträge
 
#10

AW: Objektereignisse bei abgeleiteten Klassen

  Alt 15. Jan 2016, 04:52
Wie kann ich aber das OnChange-Ereignis für diese abgeleitete Komponente nutzen? OnChange ist doch von der übergeordneten Klasse TEdit mit vererbt worden?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:49 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