2016/7/22 (金) 17:04:02 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 ドット)
|
|