Ich mache mit folgendem Code einen Screenshot von meiner Ansicht.
Public Sub MakeScreenshot()
Dim FormHwnd As Long
Dim DeskHwnd As Long
Dim hdc As Long
Dim hdcMem As Long
Dim rect As RECT_Type
Dim junk As Long
Dim fwidth As Long
Dim fheight As Long
Dim hBitmap As Long
DeskHwnd = GetDesktopWindow()
FormHwnd = GetActiveWindow()
Call GetWindowRect(FormHwnd, rect)
fwidth = rect.right - rect.left
fheight = rect.bottom - rect.top
hdc = GetDC(DeskHwnd)
hdcMem = CreateCompatibleDC(hdc)
hBitmap = CreateCompatibleBitmap(hdc, fwidth, fheight)
If hBitmap 0 Then
junk = SelectObject(hdcMem, hBitmap)
junk = BitBlt(hdcMem, 0, 0, fwidth, fheight, hdc, rect.left, rect.top, SRCCOPY)
junk = OpenClipboard(DeskHwnd)
junk = EmptyClipboard()
junk = SetClipboardData(CF_BITMAP, hBitmap)
junk = CloseClipboard()
End If
junk = DeleteDC(hdcMem)
junk = ReleaseDC(DeskHwnd, hdc)
End Sub
Der Code nimmt aber immer den kompletten Bilschirm auf. Ich bräuchte aber nur ein Screenshot bis Spalte I. Im prinzip kann ich auch
fwidth = xxx
fheight = xxx
duch Zahlen ersetzen ind zwar so, dass ich genau bis zur Spalte I komme. Das ist aber starr. Sobald ich zoome, oder Spaltenbreite verändere, stimmt diese Zahl nicht mehr. Kann ich vorher irgend wie ermitteln, wie weit (wieviel Pixel) Spalte I von links weg ist und diese Zahl dann durch die Konstante ersetzen, damit das ganze dynamisch bleibt ?
Danke mal
Joachim