Cześć. Mam sobie pewną klasę: TCzytnik.
A w niej m.in.
TCzytnikRead = procedure(Sender: TObject; Str: string) of object;
private
FCzytnikRead: TCzytnikRead;
FLastCzytnikRead: TCzytnikRead;
public
procedure Unprepare;
property OnCzytnikRead: TCzytnikRead read FCzytnikRead write SetCzytnikRead;
Procedura SetCzytnikRead wygląda tak:
procedure TCzytnik.SetCzytnikRead(ACzytnikRead: TCzytnikRead);
begin
if @ACzytnikRead<>@FCzytnikRead then
begin
FLastCzytnikRead:=FCzytnikRead;
FCzytnikRead:=ACzytnikRead;
end;
end;
Czyli po prostu zmiana procedury zdarzeniowej.
Zamysł jest taki, żeby dotychczasowy adres procedury przechować w zmiennej FLastCzytnikRead
Tutaj wszystko gra. Ładnie.
Następnie w pewnym miejscu należy wywołać procedurę Unprepare(żeby przywrócić poprzednią procedurę):
procedure TCzytnik.Unprepare;
begin
if @FLastCzytnikRead<>nil then Self.OnCzytnikRead:=FLastCzytnikRead else
Self.OnCzytnikRead:=DefaultCzytnikRead;
end;
I w tym miejscu już @FLastCzytnikRead ma zupełnie inny adres, niż w SetCzytnikRead. Czemu?
Nigdzie indziej tej zmiennej nie zmieniam.