@wloochacz: pamiętaj, że LCL choć podobne do VCL, to jednak jest zbudowane inaczej. No i też o tym, że ten wątek dotyczy LCL, a nie VCL, bo najwyraźniej ten fakt przeoczyłeś. ;)
Masz za przykład żywcem wyciągnięty kod z LCL, dotyczący właściwości FocusControl
dla komponentu TLabel
:
TCustomLabel = class(TGraphicControl)
private
FFocusControl: TWinControl;
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure SetFocusControl(Value: TWinControl);
published
property FocusControl: TWinControl read FFocusControl write SetFocusControl;
end;
{..}
procedure TCustomLabel.SetFocusControl(Value : TWinControl);
begin
if Value <> FFocusControl then
begin
if FFocusControl <> nil then
FFocusControl.RemoveFreeNotification(Self);
FFocusControl:= Value;
if Value <> nil then
Value.FreeNotification(Self);
end;
end;
procedure TCustomLabel.Notification(AComponent : TComponent; Operation : TOperation);
begin
inherited Notification(AComponent, Operation);
if (AComponent = FFocusControl) and (Operation = opRemove) then
FFocusControl := nil;
end;
I to jest wszystko dotyczące notyfikacji, co jest niezbędne do poprawnego działania. Chyba że deweloperzy biblioteki komponentów wg Ciebie nie potrafią poprawnie używać kodu, który sami napisali?
Jeśli o mnie chodzi, to notyfikacje są oprogramowane poprawnie i nic więcej (prócz powyższego) nie potrzeba.