FormのFormShowイベントでTop、Leftの値を指定してFormを指定した位置に表示しようと思っています。
最初そのFormを呼び出すとある決まった位置に必ず表示されてしまいます。
(Top,Leftに値を入れた位置ではない)
一度開くと、再度開いたときにはTop,Leftを指定した位置にきます。
FormShowイベントで設定しているのに、なぜこうなってしまうのかわかりません。
なにか他に位置を移動させているものがあるのでしょうか?
こんにちは.
テストしてみました.
テスト動作確認環境は,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で指定した位置とサイズで表示される
終了して,再度起動しても同じ.
以上です.
ちょっと意地悪かな?
>ちょっと意地悪かな?
なので,ヒントを
>(1) 新規にプロジェクトを作成
がミソです.もし,これでダメだったら,DelphiのバージョンとOSに関係するのかも? (これも意地悪かな?)
単純にその部分だけのサンプルを作ってみろってことね。
今やってみたが、やっぱりちゃんと指定どおりの動きになる。
どこか他のところが悪さしてるんだろう。
これは親フォームの話?それとも子フォームの話?
最初に開く場所と 次に開く場所 は同じ?
最初に開く場所 と 次に開く場所 が違って
最初に開いた後に フォームの位置を指定してしまっている
だけな気がするんだけどね
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;
でもして様子をみてみたらどうかな?
情報足りなくてすいません。
親フォームから子フォームを呼び出すときの話です。
また最初に子フォームを呼び出したときと2回目に呼び出した時の場所は違います。
なので、Showしたあとに親フォームの方で子フォームのTop、Leftに値を入れるようにして、とりあえずは問題なく動作しています。
子フォームFormShowではTop,Leftに値を入れるだけでその処理以外はしていないので、今回親フォームでTop,Leftに値を入れてあげるのと、処理自体は変わらない気がします。
原因はわかりませんが、問題は解決しましたので、解決とします。
ありがとうございます。
> 原因はわかりませんが
まあ、おそらくMr.XRAYさんは正解を知っていて、
期待通り動くもの(新規作成したフォーム)と動かないもので
どのプロパティが違うのかを比較してみるようアドバイスしたのだと思いますが……
フォームのPositionプロパティは何に設定していますか?
これがpoMainFormCenterとかになっていると、最初のOnShowの後で位置が変更されます。
こんにちは.
>まあ、おそらくMr.XRAYさんは正解を知っていて、
いや,分かりません.状況によって違うでしょから.
でも私もたまにやってしまうんです.
印刷プレビュー,ワード操作フォームEx,エクセル操作フォームExというのを
提供しているのですが,テストで,メインフォームのボタンクリックで別の
フォームを表示します.
>フォームのPositionプロパティは何に設定していますか?
いつもは,他のプロジェクトをまるごとコピーしているので気づかないのです.
だいたい...Centerにしてテストしていて,
質問された方と同じ現象になってしまうことがあります.
あせると,こんなことでも中々気づきません.
ツイート | ![]() |