Witam.
Sprawa wynika z dziedziczenia i tworzenia dynamicznego.. chcąc sobie ułatwić zadanie o ile się da do tworzonego dynamicznie komponentu chciałem przypisać w klasie rodzica TNotifyEvent a potem żeby np. w klasie potomnej nie musieć wyszukiwać komponentu po nazwie próbuję "podmienić/ przypisać" do zmiennej TNotifyEvent dowolna procedurę z klasy dziecka.
Wszystko się ładnie kompiluje ale ... ta podmianka nie wnosi nic nawet jeśli wszystko się dzieje w obrębie jednej klasy. Exe "nie widzi" przypisania wykonanego w stylu poniżej przedstawionego.
Ma ktoś receptę na to?
Na razie robię tak jak w FormShow. Jest pusta forma i:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
public
pButtonOnbClick: PPointer; //zmienna
procedure Button2Click(Sender: TObject);
end;
type
TKlasa = class
private
protected
public
constructor Create();
destructor Destroy();override;
procedure ShowKomunikat;
end;
var
Form1: TForm1;
Klasa: TKlasa;
implementation
{$R *.dfm}
constructor TKlasa.Create();
begin //
end;
destructor TKlasa.Destroy();
begin //
end;
procedure TKlasa.ShowKomunikat();
begin //
ShowMessage('Komunikat z TKlasa');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('Reakcja');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Klasa:= TKlasa.Create;
With TButton.Create(Application) do
begin
Parent:= Self;
Name := 'Button2';
Caption := 'Kliknij';
Left := 100;
Top := 50;
Width := 75;
Height := 25;
// OnClick := Proc_Kliknij;
Visible:= True;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(Klasa);
end;
{
To działa
procedure TForm1.FormShow(Sender: TObject);
var
Event: TNotifyEvent;
begin //
// pButtonOnbClick:= @@OnClick
pButtonOnbClick:= @@TButton(Application.FindComponent( 'Button2' )).OnClick;
Event:= Button2Click;
pButtonOnbClick^:= @Event;
end;
}
procedure TForm1.FormShow(Sender: TObject);
var
Event: TNotifyEvent;
begin //
pButtonOnbClick:= @@TButton(Application.FindComponent( 'Button2' )).OnClick;
Event:= Klasa.ShowKomunikat; // <-- A to nie działa i nie chce się kompilować
pButtonOnbClick^:= @Event;
end;
end.
Pozdrawiam.