喫茶XRAYトップページ

[スレッド全体
]

[10213] ShellExecute等返信 削除
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 ドット)


[10217] Re:ShellExecute等返信 削除
2016/7/22 (金) 20:05:46 Mr.XRAY
> ※ 私の環境では「空き」は 7 ドットです (ML の質問者の環境では 4 ドット)

4 ドットと 7 ドットではどのくらいの違いかを確認してみました.
確かなことは分かりません.
前に TStringGrid のセルの質問で 4 ドットを 10 ドットと表現した方もいます.
見た目と実際の値は,主観が入りますから.

もし本当に 4 ドットだとしたら,原因は別かも知れません.
私の推測は,おそらく 4 ドットというのは主観であって,原因は,
既に書いたウィンドウのフレームの問題だと思っています.
本当のことは分かりません.
これぐらい単純なことでしたら,例によって「新規作成」で確認できます.
しかし,実際にはコードは提示されていませんし.

# こういうのって,どうやって測ったの,って訊いてくれる人っていないな (ボソッ)
# いえ,独り言です.ハイ.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82