Por que TForm.Handle é um getter em vez de um campo?
Eu estava depurando um bug complicado recentemente. Isso foi causado pelo acesso a um sistema inexistenteForm.Handle
(ponteiro com garbaged). O bug se revelou de uma maneira bastante inesperada para mim - acessando FormsHandle
causou redimensionamentos e republicações.
Eu esperaria acessarForm.Handle
por um ponteiro de lixo retornaria um pouco de lixo THandle. Esperando que oHandle
é criado uma vez na criação do formulário e permanece o mesmo até que o formulário seja destruído.
Por que é assim queTForm.Handle
não é um campo que é inicializado na criação do formulário e é acessado via
property Handle: Integer read FHandle;
, mas é um getter
property Handle: Integer read GetHandle;
que cria o identificador e até a janela (CreateWnd
) no primeiro acesso?