Arthur Fuller
artful at rogers.com
Wed Jun 23 10:43:17 CDT 2004
Got the problem. In Access 2002 the line should be 'HoleOutForm Application.hWndAccessApplication HoleOutForm Application.hWndAccessApp Arthur -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Jim Lawrence (AccessD) Sent: Tuesday, June 22, 2004 1:15 AM To: Access Developers discussion and problem solving Subject: RE: [AccessD] Just for fun! Playing With Regions! That is absolutely brilliant, Drew! Pure genius. Where did you ever come up with that idea? Amazed :-) Jim -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com]On Behalf Of DWUTKA at marlow.com Sent: Monday, June 21, 2004 2:32 PM To: AccessD at databaseadvisors.com Subject: [AccessD] Just for fun! Playing With Regions! Okay, here's a little code I whipped up for a friend. Just put this into a module (watch for word wrap): Option Compare Database Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Const RGN_XOR = 3 Function HoleOutForm(ByVal intHwnd As Long) Dim X As Long Dim rt As RECT Dim rtCircle As RECT Dim dwReturn As Long Dim InitialRegion As Long Dim i As Long Dim intMax As Long dwReturn = GetWindowRect(intHwnd, rt) rt.Bottom = rt.Bottom - rt.Top rt.Top = 0 rt.Right = rt.Right - rt.Left rt.Left = 0 InitialRegion = CreateRectRgn(rt.Left, rt.Top, rt.Right, rt.Bottom) rtCircle.Bottom = ((rt.Bottom - rt.Top) / 2) + rt.Top + 1 rtCircle.Top = ((rt.Bottom - rt.Top) / 2) + rt.Top - 1 rtCircle.Right = ((rt.Right - rt.Left) / 2) + rt.Left + 1 rtCircle.Left = ((rt.Right - rt.Left) / 2) + rt.Left - 1 If rt.Bottom > rt.Right Then intMax = rt.Bottom Else intMax = rt.Right End If For i = 1 To intMax X = CreateEllipticRgn(rtCircle.Left, rtCircle.Top, rtCircle.Right, rtCircle.Bottom) InitialRegion = CreateRectRgn(rt.Left, rt.Top, rt.Right, rt.Bottom) dwReturn = CombineRgn(InitialRegion, InitialRegion, X, RGN_XOR) SetMainWindowRegion InitialRegion, intHwnd rtCircle.Bottom = rtCircle.Bottom + 1 rtCircle.Top = rtCircle.Top - 1 rtCircle.Left = rtCircle.Left - 1 rtCircle.Right = rtCircle.Right + 1 DeleteObject X DeleteObject InitialRegion Next i DeleteObject X DeleteObject InitialRegion End Function Private Function SetMainWindowRegion(cRgn As Long, intHwnd As Long) Dim dwReturn As Long dwReturn = SetWindowRgn(intHwnd, cRgn, True) End Function Now, create a form, and put the following behind a command button: HoleOutForm Me.Hwnd DoCmd.Close acForm, Me.Name Then put a second button on the form, and put this code behind it: HoleOutForm Application.hWndAccessApplication DoCmd.Quit Save the form, and try out the buttons. Enjoy! Drew -- _______________________________________________ AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com -- _______________________________________________ AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com