AGB  ·  Datenschutz  ·  Impressum  







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

Eigene Komponente mit OnClose-Event

Ein Thema von Jasocul · begonnen am 1. Jun 2015 · letzter Beitrag vom 1. Jun 2015
 
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Eigene Komponente mit OnClose-Event

  Alt 1. Jun 2015, 12:06
Also ich weiß nicht, was da nicht funtionieren sollte, denn das funktioniert hier einwandfrei:

Die Komponente
Delphi-Quellcode:
unit MyComponent;

interface

uses
  System.Classes;

type
  TMyComponent = class( TComponent )
  private
    FOnDestroy: TNotifyEvent;
  protected
    procedure NotifyOnDestroy;
  public
    procedure BeforeDestruction; override;
  published
    property OnDestroy: TNotifyEvent read FOnDestroy write FOnDestroy;
  end;

implementation

{ TMyComponent }

procedure TMyComponent.BeforeDestruction;
begin
  NotifyOnDestroy( );
  inherited;

end;

procedure TMyComponent.NotifyOnDestroy;
begin
  if Assigned( FOnDestroy ) then
    FOnDestroy( Self );
end;

end.
und die Form
Delphi-Quellcode:
unit Unit2;

interface

uses
  MyComponent,

  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm2 = class( TForm )
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate( Sender: TObject );
    procedure Button1Click( Sender: TObject );
    procedure Button2Click( Sender: TObject );
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    FMyComponent: TMyComponent;
    procedure CreateMyComponent;
    procedure MyComponentDestroy( Sender: TObject );
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click( Sender: TObject );
begin
  FreeAndNil( FMyComponent );
end;

procedure TForm2.Button2Click( Sender: TObject );
begin
  CreateMyComponent( );
end;

procedure TForm2.CreateMyComponent;
begin
  FreeAndNil( FMyComponent );
  FMyComponent := TMyComponent.Create( Self );
  FMyComponent.OnDestroy := MyComponentDestroy;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TForm2.FormCreate( Sender: TObject );
begin
  CreateMyComponent( );
end;

procedure TForm2.MyComponentDestroy( Sender: TObject );
begin
  if not( csDestroying in Application.ComponentState ) then
    ShowMessage( 'Ich bin dann mal weg!' );
end;

end.
Solange die Anwendung selber nicht beendet wird, erscheint immer die Message.
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
 


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:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz