名前 題名 ▼ Mr.XRAYさん > [ShellExecute等] > http://www.freeml.com/delphi-users/4477/latest > > これもコードが変. > 良い子の皆さんは,コードは必ずコピペしてね. > えっ !? お前もな ! ハイ,肝に銘じて... > > >Form1.Top+Form1.Height と Form2.Top の値が同じでも > >4ドットの空きができてしまいます。 > > これは,以下の現象ですね.多分. > > [01_Vista 以降の拡張フレームのウィンドウ ] > http://mrxray.on.coocan.jp/Delphi/plSamples/368_ScreenCaptureTest.htm#01 > > 動作確認は,Windows 10(1511 ビルド 10586) + Delphi XE(UP1) Pro > > > //------------------------------------------------------------------------- > // Windows Vista以降では,フォームのフレームの仕様が拡張されている > // これを考慮したウィンドウのTRect構造体の値を取得 > // usesにDWMAPIが必要 > //------------------------------------------------------------------------- > function GetWindowRectForVista(hWindow: HWND): TRect; > var > LRect : TRect; > begin > //Windows Vista以降は拡張フレーム > if CheckWin32Version(6, 0) then begin > //拡張したウィンドウのフレームのTRect構造体の値を取得 > DwmGetWindowAttribute(hWindow, > DWMWA_EXTENDED_FRAME_BOUNDS, > @LRect, > SizeOf(TRect)); > end else begin > GetWindowRect(hWindow, LRect); > end; > Result := LRect; > end; > > //------------------------------------------------------------------------- > // Form1のすぐ下にForm2を表示 > // GetWindowRect関数で取得する場合と同じ結果になる > //------------------------------------------------------------------------- > procedure TForm1.Button1Click(Sender: TObject); > begin > Form2.Left := Self.Left; > Form2.Top := Self.Top + Self.Height; > Form2.Show; > end; > > //------------------------------------------------------------------------- > // Form1のすぐ下にForm2を表示 > // Windows Vista 以降のフレームに対応したウィンドウの高さを取得して処理 > //------------------------------------------------------------------------- > procedure TForm1.Button2Click(Sender: TObject); > var > LRect : TRect; > begin > LRect := GetWindowRectForVista(Form1.Handle); > Form2.Left := Self.Left; > Form2.Top := Self.Top + (LRect.Bottom - LRect.Top); > Form2.Show; > end; > > > ※ 私の環境では「空き」は 7 ドットです (ML の質問者の環境では 4 ドット) GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link