名前 題名 ▼ Mr.XRAYさん > [Windows10でフォームのサイズ、位置が思い通りにならない] > http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+201703/17030007.txt > > マイクロソフトの仕様ですね (笑) > EXE を Windows 7 U64(SP1) + Delphi XE(UP1) Pro で作成してテストした結果です. > Form1 の BorderStyle は bsSizeable でテストしています. > > Windows 10 の場合,フォームの幅ではなく,ウインドウの幅でキャフチャしないと, > 周辺に背景が入ったキャプチャ画像となるわけです. > > > uses > DWMAPI; > > {$R *.dfm} > > function GetWindowRectForVista(hWindow: HWND): TRect; > var > ARect : TRect; > begin > //Windows Vista以降は拡張フレーム > if CheckWin32Version(6, 0) then begin > //拡張したウィンドウのフレームのTRect構造体の値を取得 > DwmGetWindowAttribute(hWindow, > DWMWA_EXTENDED_FRAME_BOUNDS, > @ARect, > SizeOf(TRect)); > end else begin > GetWindowRect(hWindow, ARect); > end; > Result := ARect; > end; > > procedure TForm1.Button1Click(Sender: TObject); > var > LVersion : string; > LRect : TRect; > LWidth1 : Integer; > LWidth2 : Integer; > LText : string; > begin > Self.Width := Screen.Width; > Self.Left := 0; > > if CheckWin32Version(10, 0) then begin > LVersion := 'Windows 10'; > end else > if CheckWin32Version(6, 3) then begin > LVersion := 'Windows 8.1'; > end else > if CheckWin32Version(6, 2) then begin > LVersion := 'Widows 8'; > end else > if CheckWin32Version(6, 1) then begin > LVersion := 'Widows 7'; > end; > > GetWindowRect(Handle, LRect); > LWidth1 := LRect.Right - LRect.Left; > > LRect := GetWindowRectForVista(Handle); > LWidth2 := LRect.Right - LRect.Left; > > LText := LVersion + sLineBreak > + 'Screen.width : ' + IntToStr(Screen.Width) + sLineBreak > + 'TForm.Left : ' + IntToStr(Self.Left) + sLineBreak > + 'TForm.width : ' + IntTostr(Self.Width) + sLineBreak > + 'GetWindowRect : ' + IntTostr(LWidth1) + sLineBreak > + 'Windows.width : ' + IntToStr(LWidth2); > MessageBox(Handle, PChar(LText), 'フォームの幅', MB_ICONINFORMATION); > end; > > GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link