AGB  ·  Datenschutz  ·  Impressum  







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

OnChange in eigener Komponente implementieren

Ein Thema von Poelser · begonnen am 2. Sep 2008 · letzter Beitrag vom 2. Sep 2008
Antwort Antwort
Poelser

Registriert seit: 21. Apr 2008
Ort: Europa
145 Beiträge
 
Delphi 10.4 Sydney
 
#1

OnChange in eigener Komponente implementieren

  Alt 2. Sep 2008, 17:27
Moin,

ich habe eine kleine Komponente (ein Datumscontrol)), die ich um ein OnChange erweitern möchte. So sieht ihre Deklaration aus:
Delphi-Quellcode:
type
  TDateEditPrevNext = Class(TPanel)
    DateEdit: TDateEdit;
    Procedure DateEditExit(Sender: TObject);
    Procedure ButtonPrevClick(Sender: TObject);
    Procedure ButtonNextClick(Sender: TObject);
  private
    // Es gibt keinen optisch passenden Button, aber ein Panel tut's auch
    ButtonPrev: TPanel;
    ButtonNext: TPanel;
    function GetDate: TDate;
    procedure SetDate(Datum: TDate);
  public
    property Date: TDate read GetDate write SetDate;
    Constructor Create(AOwner: TComponent); override;
    Destructor Destroy; override;
  end;
Wenn ich den Weg über
Delphi-Quellcode:
  private
...
    FOnChange: TNotifyEvent;
...
  published
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
gehe, funktioniert das nicht. TPanel hat ja auch kein OnChange, dass hier durchgereicht werden könnte.

Aber wie implementiere ich das richtig?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: OnChange in eigener Komponente implementieren

  Alt 2. Sep 2008, 17:37
In dem Moment, wo OnChange ausgelöst werden soll, schreibst Du
Delphi-Quellcode:
if Assigned(FOnChange) then
  FOnChange(self);
FOnChange muss im Konstruktor natürlich mit nil belegt werden, sonst gibt es u.U. Probleme.

[edit] Rächtschraibfäller [/edit]
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
Poelser

Registriert seit: 21. Apr 2008
Ort: Europa
145 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: OnChange in eigener Komponente implementieren

  Alt 2. Sep 2008, 18:03
Danke, funktioniert jetzt mit

Delphi-Quellcode:
...
  private
...
    procedure DateChanged(Sender: TObject);
...

constructor TDateEditPrevNext.Create(AOwner: TComponent);
begin
  FOnChange := nil;
...
  DateEdit.OnChange := Self.DateChanged; // DAS hatte gefehlt!
...

procedure TDateEditPrevNext.DateChanged(Sender: TObject);
begin

  if Assigned(FOnChange) then
  begin
    FOnChange(Self);
  end;

end;
Ich hoffe, dass da nicht noch eine Falle versteckt ist...
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: OnChange in eigener Komponente implementieren

  Alt 2. Sep 2008, 18:12
Zitat von DeddyH:
FOnChange muss im Konstruktor natürlich mit nil belegt werden, sonst gibt es u.U. Probleme.
Beim erstellen einer neuen Instanz wird diese komplett mit 0-en gefüllt. Eine Initialisierung auf 0 oder nil ist daher nicht notwendig.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: OnChange in eigener Komponente implementieren

  Alt 2. Sep 2008, 18:14
Das hab ich auch immer gedacht, bis ich mal vor längerer Zeit eines Besseren belehrt wurde (D3 oder D4, weiß ich nicht mehr). Außerdem schadet es ja nicht, die Initialisierung selbst vorzunehmen.
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


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