*-------------------------------------------------------------------------------------------------------------------------------------------------------- * (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!! *-------------------------------------------------------------------------------------------------------------------------------------------------------- *< FOXBIN2PRG: Version="1.21" SourceFile="ctl32_common.vcx" CPID="1252" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries) * * DEFINE CLASS _util AS custom *< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" /> #INCLUDE "ctl32.h" * *m: _hinstance *m: _hosthwnd *m: _isthemeactive *m: _objtoclient *m: _osversion *m: _strformatbytesize *m: _themestatus *m: _vfpwndproc *p: ctlabout *p: ctlversion * * ctlabout = ctl32_util - Carlos Alloatti ctlversion = 20061010 Name = "_util" * PROCEDURE Init Local Array laDeclaredDlls(1,3) Local lnLen m.lnLen = Adlls(m.laDeclaredDlls) *!* win32api is used instead of the library name, check these: *!* blogs.msdn.com/calvin_hsia/archive/2006/04/27/585305.aspx *!* blogs.msdn.com/calvin_hsia/archive/2006/04/24/582479.aspx *!* "User32.dll, Gdi32.dll, Kernel32.dll , Advapi32.dll and Mpr.dll are searched (in that order)" If Ascan(m.laDeclaredDlls, [GetWindowLong], 1, m.lnLen , 2, 15) = 0 Declare Integer GetWindowLong In win32api As GetWindowLong; Integer HWnd, ; Integer nIndex Endif If This._OSVersion() >= CON_OS_WINXP Then If Ascan(m.laDeclaredDlls, [IsThemeActive], 1, m.lnLen , 2, 15) = 0 Declare Integer IsThemeActive In uxtheme.Dll As IsThemeActive Endif Endif If Ascan(m.laDeclaredDlls, [StrFormatByteSize], 1, m.lnLen , 2, 15) = 0 Declare Integer StrFormatByteSize In shlwapi; integer dw,; string szBuf,; integer uiBufSize Endif ENDPROC PROCEDURE _hinstance *!* The GetWindowLong function retrieves information about the specified window. *!* GWL_HINSTANCE retrieves a handle to the application instance. Return GetWindowLong(_vfp.HWnd, GWL_HINSTANCE) ENDPROC PROCEDURE _hosthwnd *!* the control must have a parent window. In the case of a standard form, its the *!* hWnd of the form. If we have a Top Level Form, we have *!* to find the hWnd of the "inner" window of the Form Local m.nhwnd If ThisForm.ShowWindow = CON_SHOWWIN_ASTOPLEVELFORM Or ThisForm.ScrollBars > 0 Then *!* Get hWnd of client window of Top Level Form //Craig Boyd// #If Version(CON_VER_NUM) >= 900 m.nhwnd = Sys(2327, Sys(2325, Sys(2326, ThisForm.HWnd))) #Else m.nhwnd = GetWindow(ThisForm.HWnd, GW_CHILD) #Endif Else m.nhwnd = ThisForm.HWnd Endif Return m.nhwnd ENDPROC PROCEDURE _isthemeactive *!* Tests if a visual style for the current application is active. Return (This._OSVersion() >= CON_OS_WINXP) And (IsThemeActive() = 1) ENDPROC PROCEDURE _objtoclient *!* This replaces OBJTOCLIENT that has bugs with pageframes Parameters toControl, tcPosition Local lnPosition As Integer m.tcPosition = Upper(m.tcPosition) m.lnPosition = 0 Do Case Case m.tcPosition $ [TB] Do While Not Upper(m.toControl.BaseClass) == [FORM] If Pemstatus(m.toControl, [Top], CON_PEMSTAT_DEFINED) Then m.lnPosition = m.lnPosition + m.toControl.Top Endif If Upper(m.toControl.BaseClass) == [PAGE] Then If m.toControl.Parent.TabOrientation = CON_TABOR_TOP Then && Top m.lnPosition = m.lnPosition + ; m.toControl.Parent.Height - ; m.toControl.Parent.PageHeight - ; m.toControl.Parent.BorderWidth * 2 Else m.lnPosition = m.lnPosition + 1 Endif Endif m.toControl = m.toControl.Parent Enddo If m.tcPosition == [B] Then m.lnPosition = m.lnPosition + This.Height Endif Case m.tcPosition $ [LR] Do While Not Upper(m.toControl.BaseClass) == [FORM] If Pemstatus(m.toControl, [Left], CON_PEMSTAT_DEFINED) Then m.lnPosition = m.lnPosition + m.toControl.Left Endif If Upper(m.toControl.BaseClass) == [PAGE] If m.toControl.Parent.TabOrientation = CON_TABOR_LEFT Then && Left m.lnPosition = m.lnPosition + ; m.toControl.Parent.Width - ; m.toControl.Parent.PageWidth - ; m.toControl.Parent.BorderWidth * 2 Else m.lnPosition = m.lnPosition + 1 Endif Endif m.toControl = m.toControl.Parent Enddo If m.tcPosition == [R] Then m.lnPosition = m.lnPosition + This.Width Endif Endcase Return m.lnPosition ENDPROC PROCEDURE _osversion *!* Returns a numeric value representing the operating system version *!* Check ctl32.h for possible values *!* ie CON_OS_WINXPSP2 = 5010200 Return Val(Os(3)) * 1000000 + Val(Os(4)) * 10000 + Val(Os(8)) * 100 + Val(Os(9)) ENDPROC PROCEDURE _strformatbytesize *!* Converts a numeric value into a string that represents the number expressed *!* as a size value in bytes, kilobytes, megabytes, or gigabytes, depending on the size. Lparameters tnSize Local lcBuffer m.lcBuffer = Space(254) StrFormatByteSize(m.tnSize, @m.lcBuffer, Len(m.lcBuffer)) m.lcBuffer = Alltrim(m.lcBuffer) * Remove chr(0) m.lcBuffer = Left(m.lcBuffer, Len(m.lcBuffer)-1) Return m.lcBuffer ENDPROC PROCEDURE _themestatus *!* Returns the global status of Themes for a VFP Form Return ; This._OSVersion() >= CON_OS_WINXP ; And IsThemeActive() = 1 ; And _Screen.Themes ; And Thisform.Themes ENDPROC PROCEDURE _vfpwndproc *!* The GetWindowLong function retrieves information about the specified window. *!* GWL_WNDPROC retrieves the address of the window procedure, *!* or a handle representing the address of the window procedure. *!* You must use the CallWindowProc function to call the window procedure. Return GetWindowLong(_vfp.HWnd, GWL_WNDPROC) ENDPROC ENDDEFINE