I'm trying to capture as piece of the screen behind my form.
Then the captured pic is placed on my form so that it looks 'see through'.
I don't mind moving or hiding the form, but it's not working right.
Steps:
1. capturer a piece of screen to picBack.
2. Copy it to picText then print text over it.
3. Alpha Blend the two pics to picBlend.
4. Copy the blended pic to the form.
All picture boxes and the form are set to AutoRedraw.
The code is called from a loop so that the background gets updated.
My code sort of works.
If I F8(one-step) until the form is hidden or moved, it works fine.
Here's a pic of how it should go.
Good capture pic:
Notice that picBack only shows the screen behind the top left corner of the form.
But when I let the program run at full speed it starts capturing an image of that section of my form.
Bad capture pic.
Here's some of my code.
The commented lines are some of the things I've tried, like moving my form or setting a delay to let the form hide before the capture is made.
VB Code:
Me.Visible = False Stop 'it works in the IDE if I leave this 'Stop' and use F8 'It fails it I remove the 'Stop' ' Do While Me.Visible ' Sleep (10) ' Loop Me.Move m_tTruePos.Y, m_tTruePos.X 'The postion seen in the screen shots ' Here I tried temp moving the form out of the way ' lTop = Me.Top ' lLeft = Me.Left ' Me.Move g_tScreenSize.Y, g_tScreenSize.X 'move the form off screen '' Me.Refresh ' Sleep 500 ' give a little time for the screen to clear ScreenCapture picBack, Me.Top / 15, Me.Left / 15, picText.Height, picText.Width ' ScreenCapture picBack, lTop / 15, lLeft / 15, picText.Height, picText.Width ' Me.Move m_tTruePos.Y, m_tTruePos.X Me.Visible = True Me.Picture = picBack.Picture picText.Picture = picBack.Image '...... Public Sub ScreenCapture(PicObj As Object, lTop As Long, lLeft As Long, lHeight As Long, lWidth As Long) 'Captures part of desktop ' PicObj: Any object type that has a DC and can hold a picture Dim lDeskhWnd As Long Dim lDeskDC As Long Dim lForeHwnd As Long 'These didn't help 'lForeHwnd = GetForegroundWindow 'SysSetFocus (lForeHwnd) lDeskhWnd = GetDesktopWindow() lDeskDC = GetDC(lDeskhWnd&) PicObj.Cls PicObj.Picture = Nothing PicObj.Width = lWidth PicObj.Height = lHeight BitBlt PicObj.hdc, 0&, 0&, lWidth, lHeight, lDeskDC, lLeft, lTop, SRCCOPY ReleaseDC lDeskhWnd, lDeskDC PicObj.Picture = PicObj.Image End Sub




Reply With Quote