Formの位置をしていしているのに効かない

解決


ぺん  2010-07-01 23:37:43  No: 38733

FormのFormShowイベントでTop、Leftの値を指定してFormを指定した位置に表示しようと思っています。
最初そのFormを呼び出すとある決まった位置に必ず表示されてしまいます。
(Top,Leftに値を入れた位置ではない)
一度開くと、再度開いたときにはTop,Leftを指定した位置にきます。
FormShowイベントで設定しているのに、なぜこうなってしまうのかわかりません。
なにか他に位置を移動させているものがあるのでしょうか?


Mr.XRAY  2010-07-02 01:02:20  No: 38734

こんにちは.
テストしてみました.
テスト動作確認環境は,Widows XP(SP3) + Delphi 2010 Pro(UP5)です.

(1) 新規にプロジェクトを作成
(2) OnShowに以下のコードを書いた

      procedure TForm1.FormShow(Sender: TObject);
      begin
         Left := 10;
         Top  := 100;
         Width := 300;
      end;

(3) [F9]で実行すると,OnShowで指定した位置とサイズで表示される
(4) プロジェクトを適当なフォルダに保存して,IDEを閉じる
(5) その中のEXEを実行
    OnShowで指定した位置とサイズで表示される
    終了して,再度起動しても同じ.
    
以上です.
ちょっと意地悪かな?


Mr.XRAY  2010-07-02 01:04:34  No: 38735

>ちょっと意地悪かな?

なので,ヒントを

>(1) 新規にプロジェクトを作成

がミソです.もし,これでダメだったら,DelphiのバージョンとOSに関係するのかも? (これも意地悪かな?)


a  2010-07-02 03:52:58  No: 38736

単純にその部分だけのサンプルを作ってみろってことね。
今やってみたが、やっぱりちゃんと指定どおりの動きになる。
どこか他のところが悪さしてるんだろう。


KHE00221  2010-07-02 04:15:34  No: 38737

これは親フォームの話?それとも子フォームの話?

最初に開く場所と  次に開く場所  は同じ?

最初に開く場所  と  次に開く場所  が違って
最初に開いた後に  フォームの位置を指定してしまっている
だけな気がするんだけどね

procedure TForm2.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
begin
    Memo1.Lines.Add ('LEFT:'+IntToStr(Left));
    Memo1.Lines.Add ('TOP:'+IntToStr(Top));
end;

でもして様子をみてみたらどうかな?


べん  2010-07-02 18:06:04  No: 38738

情報足りなくてすいません。
親フォームから子フォームを呼び出すときの話です。

また最初に子フォームを呼び出したときと2回目に呼び出した時の場所は違います。

なので、Showしたあとに親フォームの方で子フォームのTop、Leftに値を入れるようにして、とりあえずは問題なく動作しています。

子フォームFormShowではTop,Leftに値を入れるだけでその処理以外はしていないので、今回親フォームでTop,Leftに値を入れてあげるのと、処理自体は変わらない気がします。
原因はわかりませんが、問題は解決しましたので、解決とします。

ありがとうございます。


tor  2010-07-02 19:29:18  No: 38739

> 原因はわかりませんが
まあ、おそらくMr.XRAYさんは正解を知っていて、
期待通り動くもの(新規作成したフォーム)と動かないもので
どのプロパティが違うのかを比較してみるようアドバイスしたのだと思いますが……

フォームのPositionプロパティは何に設定していますか?
これがpoMainFormCenterとかになっていると、最初のOnShowの後で位置が変更されます。


Mr.XRAY  URL  2010-07-02 22:30:41  No: 38740

こんにちは.

>まあ、おそらくMr.XRAYさんは正解を知っていて、

いや,分かりません.状況によって違うでしょから.
でも私もたまにやってしまうんです.

印刷プレビュー,ワード操作フォームEx,エクセル操作フォームExというのを
提供しているのですが,テストで,メインフォームのボタンクリックで別の
フォームを表示します.

>フォームのPositionプロパティは何に設定していますか?

いつもは,他のプロジェクトをまるごとコピーしているので気づかないのです.
だいたい...Centerにしてテストしていて,
質問された方と同じ現象になってしまうことがあります.
あせると,こんなことでも中々気づきません.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加