ピクチャボックスコントロールのMOVEメソッドで正確に移動するには?

解決


たうえ  2004-03-04 04:18:05  No: 82392

クリップボードを使わずにアクティブウィンドウをキャプチャしたいのですが、
下記の様にすればウマクいきます。
しかし、Screen.TwipsPerPixelX * 4とScreen.TwipsPerPixelY * 4を
増分してピクチャボックスを移動しないと、少し小さめの画像しかキャプチャ
出来ないのです。原因がわかりません。又、この方法で正しいのでしょうか?

Call GetWindowRect(g_lng_WH, g_udt_RECT)

If SetForegroundWindow(g_lngWH) = 1 Then '最前面表示成功なら

    If IsIconic(g_lng_WH) = 0 Then '非アイコン表示なら
    
    Picture1.Move _
    g_udt_RECT.Left * Screen.TwipsPerPixelX, _
    g_udt_RECT.Top * Screen.TwipsPerPixelY, _
    (g_udt_RECT.Right - g_udt_RECT.Left) * Screen.TwipsPerPixelX + Screen.TwipsPerPixelX * 4, _
    (g_udt_RECT.Bottom - g_udt_RECT.Top) * Screen.TwipsPerPixelY + Screen.TwipsPerPixelY * 4
    
    BitBlt Picture1.hDC, _
    0, _
    0, _
    (g_udt_RECT.Right - g_udt_RECT.Left), _
    (g_udt_RECT.Bottom - g_udt_RECT.Top), _
    GetWindowDC(g_lngWH), _
    0, _
    0, vbSrcCopy
    
    Picture1.Refresh '強制更新
    
    End If
  
End If


punto  2004-03-04 06:47:40  No: 82393

ん?単に border の問題か?きになるんだったら、
 (g_udt_RECT.Right - g_udt_RECT.Left) * Screen.TwipsPerPixelX + (, _


punto  2004-03-04 06:49:01  No: 82394

あ、ごめん、
(g_udt_RECT.Right - g_udt_RECT.Left) * Screen.TwipsPerPixelX + (Picture1.Width - Picture1.ScaleWidth)
とかすれば?


たうえ  2004-03-04 22:50:44  No: 82395

うお!できました!

(g_udt_RECT.Right - g_udt_RECT.Left) * Screen.TwipsPerPixelX + (Picture1.Width - Picture1.ScaleWidth), _
(g_udt_RECT.Bottom - g_udt_RECT.Top) * Screen.TwipsPerPixelY + (Picture1.Height - Picture1.ScaleHeight)

Picture1.BorderStyle = 0 でもOKですね。
後、Picture1.Refresh だと、前にキャプチャした画像が残ってしいます。
Picture1.Cls でクリアしたほうが良いようです。ありがとうございました。


たうえ  2004-03-05 19:02:48  No: 82396

忘れてた。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加