Элемент управления TButton
является оболочкой для элемента управления Win32 Button. Он использует систему сообщений Windows для работы на нем. И основной метод для этого, TControl.Perform()
, имеет встроенную защиту от отправки сообщений, если Self
равно nil
:
function TControl.Perform(Msg: Cardinal; WParam: WPARAM; LParam: LPARAM): LRESULT;
var
Message: TMessage;
begin
Message.Msg := Msg;
Message.WParam := WParam;
Message.LParam := LParam;
Message.Result := 0;
if Self <> nil then // <-- here
WindowProc(Message);
Result := Message.Result;
end;
Caption
- это свойство, установщик которого использует не виртуальные методы TControl.GetText()
и TControl.SetText()
, которые можно безопасно вызывать для объектов nil
, поскольку их функциональные возможности зависят от отправки различных сообщений (WM_GETTEXTLEN
и WM_SETTEXT
) к элементу управления, и задействовать только локальные переменные или переданные параметры. Таким образом, фактический объект не доступен, когда nil
, таким образом, нет сбоя.