最近、複雑なバグをデバッグしていました。Form.Handle
存在しない(ガベージ ポインター)にアクセスしたことが原因でした。このバグは、私にとってかなり予想外の方法で明らかになりました。フォームにアクセスするHandle
と、サイズ変更と再描画が発生しました。
ガベージ ポインターによるアクセスForm.Handle
は、ガベージ THandle を返すだけだと思います。Handle
がフォームの作成時に一度作成され、フォームが破棄されるまで同じままであることを期待しています。
質問
なぜそうなのか、それTForm.Handle
はフォームの作成時に初期化され、経由でアクセスされるフィールドではありません
property Handle: Integer read FHandle;
、しかしゲッターです
property Handle: Integer read GetHandle;
CreateWnd
最初のアクセス時にハンドルとウィンドウ()さえ作成しますか?