Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eigener OnExit - wie? (https://www.delphipraxis.net/150787-eigener-onexit-wie.html)

HeikoAdams 27. Apr 2010 07:46


Eigener OnExit - wie?
 
Hallo,
ich versuche grade mit TD in einem Ahnen-Fenster einen eigenen OnExit-Event zu schreiben, den ich dann in den Erben nutzen kann.
Den Event habe ich wie folgt deklariert:
Delphi-Quellcode:
type
  TChildFormNoReg = class(TChildFormNoData)
  ...
    procedure CheckFieldIsRequired(Sender: TObject);
  ...
Komischerweise wird der Event aber nicht in der Auswahlliste des Objektinspektors für T(DB)Edits angezeigt. :wiejetzt:
Trage ich den Event von Hand im Objektinspektor beim OnExit ein, ist Sender komischerweise nil :wall:

Ideen, wie das Problem zu lösen ist??

berens 27. Apr 2010 10:23

Re: Eigener OnExit - wie?
 
Delphi-Quellcode:
type
  TForm4 = class(TForm)
    DBEdit1: TDBEdit;
    procedure Wird_Angezeigt(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure Wird_Nicht_Angezeigt_1(Sender: TObject);
  public
    { Public-Deklarationen }
    procedure Wird_Nicht_Angezeigt_2(Sender: TObject);
  end;
Es werden nur Prozeduren vor "private" in der Liste zur Auswahl angezeigt. Die Anderen kann man natürlich trotzdem per Hand zuweisen.

HeikoAdams 27. Apr 2010 11:27

Re: Eigener OnExit - wie?
 
Meine Prozedur ist vor "private" deklariert und wird in den Erben trotzdem nicht in der Auswahlliste angezeigt :gruebel:

David Martens 27. Apr 2010 22:42

Re: Eigener OnExit - wie?
 
Vielleicht gehts ja so: http://www.delphipraxis.net/internal...t.php?t=112420

So hab ich (allerdings in Delphi 2006) ein OnAfterCreate und ein OnAfterShow implementiert. Die Sieht man aber nicht im Objektinspektor dazu muß man das Ganze in eine neue Komponente gießen.

Was da nicht steht: WM_AFTERSHOW ist eine eigene Konstante mit WM_USER + 1; Zu WM_USER halt deinen eigenen Offset draufrechnen, da die Nummer eindeutig sein muß. Ich hab z.B.: 300 und 301 genommen.

Im Grunde setzt du mit PostMessage eine Programmweite "Nachricht" ab, die sich in die Systemnachrichten einreiht:

Delphi-Quellcode:
interface
type
  Txyz = class(...)
  public
    property OnAfterShow : TNotifyEvent read FOnAfterShow write FOnAfterShow;
  end;

const
  WM_AFTERSHOW = WM_USER + 300;

implementation

procedure Txyz.WndProc(var Msg: TMessage);
begin
  case Msg.Msg of
    WM_AFTERSHOW:
      begin
        if assigned(FOnAfterShow) then
          FOnAfterShow(Self);             // hier wird die zugewiesene Funktion ausgeführt
      end;
  end;
  inherited;
end;
Das geht natürlich auch für alle möglichen anderen Events.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 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