あるフォームを2回目呼び出したら動かないのですが?

解決


altlegend  2011-04-05 23:10:14  No: 40421  IP: 192.*.*.*

一応、すべてコンパイルできたのですが、動きがおかしいところがあるので、また質問させてください。

タイマーを使って同じフォームを何回か使うんですが、delphi7ではうまく動いていました。
2009を買ったときにコンパイルしたら2回目に「無効/非表示ウィンドウにはフォーカスを設定できません」と出ます。
手動でも、2回目呼び出すと同じ表示が出ます。
その表示を消して、ボタンで動かすと実行できるんですが、理由分かりますか。
この表示が出るのは、一つだけです。
その他のものは何回使っても、問題ありません。

編集 削除
 2011-04-05 23:13:37  No: 40422  IP: 192.*.*.*

SetFocusメソッドあたりが何か悪いことをしていると思います。
FormのOnShow、OnCreate辺りでSetFocusをしているところがあったら、
はずしてみて様子を見たらどうでしょうか。

編集 削除
D  2011-04-06 01:09:37  No: 40423  IP: 192.*.*.*

フォームやコントロールが非表示になっていたりEnabledがFalseになっている時にSetFocusを呼ぶとそのメッセージが出ます。
ちなみにdelphi 7でもこのメッセージは出るはずです。

なのでSetFocusを呼ぶ時にSetFocusできるかどうかをチェックしてみてはどうでしょうか。

  if (CanFocus) then begin
    SetFocus;
  end;

編集 削除
altlegend  2011-04-06 06:50:10  No: 40424  IP: 192.*.*.*

formを消すのに、次のようなコードにしていました。
Form1 := Nil;

これを
close;
に変えたら、問題なくなりました。

昔、教えてもらったままで放置してました。
今までは問題なかったんですがね。

ありがとうございました。

編集 削除