システムエラーコード1400 ウィンドウ ハンドルが無効です。


執筆:2013.11.04
編集:2013.11.04
編集:2019.04.17

システムエラーコード1400.
ウィンドウ ハンドルが無効です。


このエラーは様々な原因があるため、エラーを発生させたアプリとエラーの直前の操作などから類推するしか方法がありません。


事案1: TMemo と TPageControl の組み合わせで起きるバグ?


TPageControl のバグ?

発生時: 一度も表示されていない TMemoに値をいれるとエラーが起きる
原因: 不明

回避方法
procedure TForm1.FormShow(Sender: TObject);
  var i : integer;
begin
   for i:= PageControl1.PageCount-1 downto 0 do
   begin
      PageControl1.ActivePageIndex := i;
      // PageControl1.Pages[i].Show;
   end;
end;


事案2: ダイアログボックスをParentWindowに設定したまま解放して、メインフォームの最前面状態(FormStyle)を変更した際に発生する

原因

解放するフォームのParentWindowの値が0意外になっている。

対処方法

ダイアログボックスを表示したらParentWindowの値を0にする。

try
  AboutBox.ParentWindow := self.Handle;
  AboutBox.ShowModal;
finally
  AboutBox.ParentWindow := 0;
end;