私は、モニタの設定にもかかわらず、特定のマウス位置でフォームを開くように配置する方法を理解しようとしています。フォームのOnCreate
場合にDelphiのカーソル位置にフォームを開く
、私はこの持っている:私は2台のモニタを有する場合
procedure TSplashScreen.FormCreate(Sender: TObject);
Var
oMousePos: TPoint;
nLeft, nTop: Integer;
begin
Scaled := false;
PixelsPerInch := Screen.PixelsPerInch;
Scaled := true;
//Position:=poScreenCenter;
//center form for 2nd monitor //zzz
if (Screen.MonitorCount > 1) then //zzz
begin
GetCursorPos(oMousePos);
if (oMousePos.X > Screen.Width) or (oMousePos.X < 0) then
begin
Self.Position := poDesigned;
nLeft := Screen.Monitors[1].Left + Round(Screen.Monitors[1].Width/2) - Round(Self.Width/2);
nTop := Screen.Monitors[1].Top + Round(Screen.Monitors[1].Height/2) - Round(Self.Height/2);
Self.Left := nLeft;
Self.Top := nTop;
end;
end;
end;
を、そして1モニタがプライマリモニタとして設定され、フォームは、マウスカーソルで開きます。
しかし、私は主に2を監視している場合、フォームモニターには常にオープン2.
'Mouse.CursorPos'はすでにあなたがどんな計算をせずに必要な正確な位置を保持する必要がありますが...また、フォームの' Position'ものですに設定? –
ここには奇妙なものがあります。 ScaledとPixelsPerInchを使いこなすのは本当に奇妙です。ディスプレイが拡張されたときにカーソル位置を見るだけが奇数である。 Screen.Widthと0に対するテストは奇数です。モニタ番号1が何らかの形で特別であると仮定すると、奇数です。整数演算ではなく浮動小数点演算を使うことは奇妙です。実際に何をしようとしていますか?非常に多くの問題を抱えているこのコードでは、なぜそれをデバッグしないようにしましたか?私はデバッグのスキルがどれほど重要かを強調することはできません。それを学んでください。期待どおりに動作しないときは、コードをあきらめないでください。デバッグ。 –
"これはメインフォームの初期化セクションで呼び出されます。"私は確かに望んでいない。 'initialization'セクションにはまだフォームのコンテキストがありません。このセクションは、フォームが作成される前に実行されます。 –