******************************************************************************** *!* ctl32_structures.prg ******************************************************************************** *!* This classes are based on the work of Christian Eischeld with vfp2c32 *!* vfp2c32.fll must be loaded with SET LIBRARY ******************************************************************************** #Include ctl32.h If Not Sys(16) $ Upper(Set("Procedure")) Then Set Procedure To Sys(16) Additive Endif Return ******************************************************************************** *!* This is the base class for all structure classes below ******************************************************************************** Define Class _STRUCTBASE As Exception Address = 0 InitMembersDone = FALSE Protected Embedded Embedded = FALSE Name = "STRUCTBASE" SizeOf = 0 Value = FALSE Protected _MemberData _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Protected Procedure Init(pnAddress) If Vartype(m.pnAddress) # "N" Then This.Address = AllocMem(This.SizeOf) If This.Address = 0 Error(43) Return FALSE Endif Else This.Address = m.pnAddress This.Embedded = TRUE Endif This.InitMembers() This.InitMembersDone = TRUE Endproc Protected Procedure Destroy() This.FreeMembers() If This.Embedded = FALSE Then FreeMem(This.Address) Endif Endproc Procedure InitMembers() *!* Here we set up initial values, like size of structure member *!* And also create aditional substructures Endproc Procedure FreeMembers() *!* Here we free aditional substructures Endproc Hidden Procedure Value_Access() *!* This returns the whole structure Return Sys(2600, This.Address, This.SizeOf) Endproc Hidden Procedure Value_Assign(pnNewVal) *!* This assigns a string to the structure as a whole Sys(2600, This.Address, This.SizeOf, m.pnNewVal) Endproc *!* Protected Procedure AllocMem(pnLength) *!* *!* Allocates memory *!* Return apiHeapAlloc(apiGetProcessHeap(), HEAP_ZERO_MEMORY, m.pnLength) *!* Endproc *!* Protected Procedure FreeMem(pnAddress) *!* *!* Frees allocated memory *!* Return apiHeapFree(apiGetProcessHeap(), 0, m.pnAddress) *!* Endproc *!* Protected Procedure ReadCharArray(pnAddress, pnLength) *!* *!* Reads a string array of m.pnLength, stops at first nul char *!* Local m.lcString As String *!* m.lcString = Sys(2600, m.pnAddress, m.pnLength) *!* Return Left(m.lcString , At(NULCHAR, m.lcString) - 1) *!* Endproc *!* Protected Procedure WriteCharArray(pnAddress, pcCharArray, pnLength) *!* *!* Writes a string array of m.pnLength *!* =Sys(2600, m.pnAddress, Min(Len(m.pcCharArray), m.pnLength) , m.pcCharArray) *!* Return m.pnAddress *!* Endproc *!* Protected Procedure FreePMem(pnAddress) *!* This.FreeMem(This.ReadUInt(m.pnAddress)) *!* Endproc *!* Protected Procedure ReadPCString(pnAddress) *!* *!* pnAddress is a pointer to a memory pointer *!* Local m.lnAddress, m.lnLength, m.lcString *!* *!* Get address pointer *!* m.lnAddress = This.ReadUInt(m.pnAddress) *!* If m.lnAddress <> 0 Then *!* *!* Get length of memory pointer: *!* m.lnLength = apiHeapSize(apiGetProcessHeap(), 0, m.lnAddress) *!* Else *!* m.lnLength = 0 *!* Endif *!* *!* Read value of string pointer, then reads string *!* If m.lnLength > 0 Then *!* m.lcString = Sys(2600, m.lnAddress, m.lnLength) *!* m.lcString = Left(m.lcString , At(NULCHAR, m.lcString) - 1) *!* Else *!* m.lcString = "" *!* Endif *!* ?"m.lcString", m.lcString *!* Return m.lcString *!* Endproc Protected Procedure ReadPCString(pnAddress, pnLen) *!* pnAddress is a pointer to a memory pointer Local m.lnAddress, m.lnLength, m.lcString *!* Get address pointer m.lnAddress = ReadUInt(m.pnAddress) If m.lnAddress <> 0 Then m.lcString = Sys(2600, m.lnAddress, m.pnLen) Else m.lcString = "" Endif Return m.lcString Endproc *!* Protected Procedure WritePCString(pnAddress, pcString) *!* Local m.lnAdress As Integer *!* *!* Release memory *!* This.FreePMem(m.pnAddress) *!* *!* Get a new handle for the string: *!* m.lnAddress = This.AllocMem(Len(m.pcString)) *!* *!* Save string to handle *!* =Sys(2600, m.lnAddress, Len(m.pcString), m.pcString) *!* *!* Save value of handle in memory pointer *!* This.WriteUInt(m.pnAddress, m.lnAddress) *!* Endproc *!* Protected Procedure ReadUInt(pnAddress) *!* *!* Reads an unsigned integer (4 bytes) *!* Local m.lnUInt As Integer *!* m.lnUInt = CToBin(Sys(2600, m.pnAddress, 4), "4rs") *!* If m.lnUInt < 0 Then *!* m.lnUInt = m.lnUInt + 0x100000000 *!* Endif *!* Return m.lnUInt *!* Endproc *!* Protected Procedure WriteUInt(pnAddress, pnUInt) *!* *!* Writes an unsigned integer (4 bytes) *!* =Sys(2600, m.pnAddress, 4, BinToC(m.pnUInt, "4rs")) *!* Endproc *!* Protected Procedure ReadUShort(pnAddress) *!* Local m.lnShort As Short *!* m.lnShort = CToBin(Sys(2600, m.pnAddress, 2), "2rs") *!* If m.lnShort < 0 Then *!* m.lnShort = m.lnShort + 0x10000 *!* Endif *!* Return m.lnShort *!* Endproc *!* Protected Procedure WriteUShort(pnAddress, pnShort) *!* *!* Writes an unsigned short (2 bytes) *!* =Sys(2600, m.pnAddress, 2, BinToC(m.pnShort, "2rs")) *!* Endproc *!* Protected Procedure ReadPointer(pnAddress) *!* *!* Reads an integer (4 bytes) *!* Return CToBin(Sys(2600, m.pnAddress, 4), "4rs") *!* Endproc *!* Protected Procedure WritePointer(pnAddress, pnInt) *!* *!* Writes an integer (4 bytes) *!* =Sys(2600, m.pnAddress, 4, BinToC(m.pnInt, "4rs")) *!* Endproc *!* Protected Procedure ReadInt(pnAddress) *!* *!* Reads an integer (4 bytes) *!* Return CToBin(Sys(2600, m.pnAddress, 4), "4rs") *!* Endproc *!* Protected Procedure WriteInt(pnAddress, pnInt) *!* *!* Writes an integer (4 bytes) *!* =Sys(2600, m.pnAddress, 4, BinToC(m.pnInt, "4rs")) *!* Endproc Protected Procedure ReadByte(pnAddress) *!* Reads an integer (1 bytes) Return CToBin(Sys(2600, m.pnAddress, 1), "1rs") Endproc Protected Procedure WriteByte(pnAddress, pnInt) *!* Writes an integer (1 bytes) =Sys(2600, m.pnAddress, 1, BinToC(m.pnInt, "1rs")) Endproc *!* Protected Procedure ReadPointer(pnAddress) *!* *!* Reads an integer (4 bytes) *!* Return This.ReadUInt(m.pnAddress) *!* Endproc *!* Protected Procedure WritePointer(pnAddress, pnInt) *!* *!* Writes an integer (4 bytes) *!* Return This.WriteUInt(m.pnAddress, m.pnInt) *!* Endproc Enddefine ******************************************************************************** *!* typedef struct tagBITMAPFILEHEADER { *!* WORD bfType; *!* DWORD bfSize; *!* WORD bfReserved1; *!* WORD bfReserved2; *!* DWORD bfOffBits; *!* } BITMAPFILEHEADER, *PBITMAPFILEHEADER; ******************************************************************************** Define Class _BITMAPFILEHEADER As _STRUCTBASE SizeOf = 14 Name = "BITMAPFILEHEADER" && structure fields bfType = FALSE bfSize = FALSE bfReserved1 = FALSE bfReserved2 = FALSE bfOffBits = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure bfType_Access() Return ReadUShort(This.Address) Endproc Procedure bfType_Assign(pnNewVal) WriteUShort(This.Address, m.pnNewVal) Endproc Procedure bfSize_Access() Return ReadUInt(This.Address + 2) Endproc Procedure bfSize_Assign(pnNewVal) WriteUInt(This.Address + 2, m.pnNewVal) Endproc Procedure bfReserved1_Access() Return ReadUShort(This.Address + 6) Endproc Procedure bfReserved1_Assign(pnNewVal) WriteUShort(This.Address + 6, m.pnNewVal) Endproc Procedure bfReserved2_Access() Return ReadUShort(This.Address + 8) Endproc Procedure bfReserved2_Assign(pnNewVal) WriteUShort(This.Address + 8, m.pnNewVal) Endproc Procedure bfOffBits_Access() Return ReadUInt(This.Address + 10) Endproc Procedure bfOffBits_Assign(pnNewVal) WriteUInt(This.Address+10, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct tagBITMAPINFOHEADER{ *!* DWORD biSize; *!* LONG biWidth; *!* LONG biHeight; *!* WORD biPlanes; *!* WORD biBitCount; *!* DWORD biCompression; *!* DWORD biSizeImage; *!* LONG biXPelsPerMeter; *!* LONG biYPelsPerMeter; *!* DWORD biClrUsed; *!* DWORD biClrImportant; *!* } BITMAPINFOHEADER, *PBITMAPINFOHEADER; ******************************************************************************** Define Class _BITMAPINFOHEADER As _STRUCTBASE SizeOf = 40 Name = "BITMAPINFOHEADER" && structure fields biSize = FALSE biWidth = FALSE biHeight = FALSE biPlanes = FALSE biBitCount = FALSE biCompression = FALSE biSizeImage = FALSE biXPelsPerMeter = FALSE biYPelsPerMeter = FALSE biClrUsed = FALSE biClrImportant = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure biSize_Access() Return ReadUInt(This.Address) Endproc Procedure biSize_Assign(pnNewVal) WriteUInt(This.Address, m.pnNewVal) Endproc Procedure biWidth_Access() Return ReadInt(This.Address + 4) Endproc Procedure biWidth_Assign(pnNewVal) WriteInt(This.Address + 4, m.pnNewVal) Endproc Procedure biHeight_Access() Return ReadInt(This.Address + 8) Endproc Procedure biHeight_Assign(pnNewVal) WriteInt(This.Address + 8, m.pnNewVal) Endproc Procedure biPlanes_Access() Return ReadUShort(This.Address + 12) Endproc Procedure biPlanes_Assign(pnNewVal) WriteUShort(This.Address + 12, m.pnNewVal) Endproc Procedure biBitCount_Access() Return ReadUShort(This.Address + 14) Endproc Procedure biBitCount_Assign(pnNewVal) WriteUShort(This.Address + 14, m.pnNewVal) Endproc Procedure biCompression_Access() Return ReadUInt(This.Address + 16) Endproc Procedure biCompression_Assign(pnNewVal) WriteUInt(This.Address + 16, m.pnNewVal) Endproc Procedure biSizeImage_Access() Return ReadUInt(This.Address + 20) Endproc Procedure biSizeImage_Assign(pnNewVal) WriteUInt(This.Address + 20, m.pnNewVal) Endproc Procedure biXPelsPerMeter_Access() Return ReadInt(This.Address + 24) Endproc Procedure biXPelsPerMeter_Assign(pnNewVal) WriteInt(This.Address + 24, m.pnNewVal) Endproc Procedure biYPelsPerMeter_Access() Return ReadInt(This.Address + 28) Endproc Procedure biYPelsPerMeter_Assign(pnNewVal) WriteInt(This.Address + 28, m.pnNewVal) Endproc Procedure biClrUsed_Access() Return ReadUInt(This.Address + 32) Endproc Procedure biClrUsed_Assign(pnNewVal) WriteUInt(This.Address + 32, m.pnNewVal) Endproc Procedure biClrImportant_Access() Return ReadUInt(This.Address + 36) Endproc Procedure biClrImportant_Assign(pnNewVal) WriteUInt(This.Address + 36, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct _browseinfo { *!* HWND hwndOwner; *!* UINT pidlRoot; *!* LPTSTR pszDisplayName; *!* LPCTSTR lpszTitle; *!* UINT ulFlags; *!* UINT lpfn; *!* LPARAM lParam; *!* int iImage; *!* } BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO; ******************************************************************************** Define Class _BROWSEINFO As _STRUCTBASE Address = 0 SizeOf = 32 Name = "BROWSEINFO" && structure fields hwndOwner = .F. pidlRoot = .F. pszDisplayName = .F. lpszTitle = .F. ulFlags = .F. lpfn = .F. Lparam = .F. iImage = .F. _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure FreeMembers() FreePMem(This.Address + 8) FreePMem(This.Address + 12) Endproc Procedure hwndOwner_Access() Return ReadInt(This.Address) Endproc Procedure hwndOwner_Assign(lnNewVal) WriteInt(This.Address, m.lnNewVal) Endproc Procedure pidlRoot_Access() Return ReadUInt(This.Address + 4) Endproc Procedure pidlRoot_Assign(lnNewVal) WriteUInt(This.Address + 4, m.lnNewVal) Endproc Procedure pszDisplayName_Access() Return ReadPCString(This.Address + 8) Endproc Procedure pszDisplayName_Assign(lnNewVal) WritePCString(This.Address + 8, m.lnNewVal) Endproc Procedure lpszTitle_Access() Return ReadPCString(This.Address + 12) Endproc Procedure lpszTitle_Assign(lnNewVal) WritePCString(This.Address + 12, m.lnNewVal) Endproc Procedure ulFlags_Access() Return ReadUInt(This.Address + 16) Endproc Procedure ulFlags_Assign(lnNewVal) WriteUInt(This.Address + 16, m.lnNewVal) Endproc Procedure lpfn_Access() Return ReadUInt(This.Address + 20) Endproc Procedure lpfn_Assign(lnNewVal) WriteUInt(This.Address + 20, m.lnNewVal) Endproc Procedure lParam_Access() Return ReadInt(This.Address + 24) Endproc Procedure lParam_Assign(lnNewVal) WriteInt(This.Address + 24, m.lnNewVal) Endproc Procedure iImage_Access() Return ReadInt(This.Address + 28) Endproc Procedure iImage_Assign(lnNewVal) WriteInt(This.Address + 28, m.lnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct _DOC_INFO_1 { *!* LPTSTR pDocName; *!* LPTSTR pOutputFile; *!* LPTSTR pDatatype; *!* } DOC_INFO_1; ******************************************************************************** Define Class _DOC_INFO_1 As _STRUCTBASE Address = 0 SizeOf = 12 Name = "DOC_INFO_1" && structure fields pDocName = FALSE pOutputFile = FALSE pDatatype = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' Procedure FreeMembers() FreePMem(This.Address) FreePMem(This.Address + 4) FreePMem(This.Address + 8) Endproc Procedure pDocName_Access() Return ReadPCString(This.Address) Endproc Procedure pDocName_Assign(pnNewVal) WritePCString(This.Address, m.pnNewVal) Endproc Procedure pOutputFile_Access() Return ReadPCString(This.Address + 4) Endproc Procedure pOutputFile_Assign(pnNewVal) WritePCString(This.Address + 4, m.pnNewVal) Endproc Procedure pDatatype_Access() Return ReadPCString(This.Address + 8) Endproc Procedure pDatatype_Assign(pnNewVal) WritePCString(This.Address + 8, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct tagDRAWITEMSTRUCT { *!* UINT CtlType; *!* UINT CtlID; *!* UINT itemID; *!* UINT itemAction; *!* UINT itemState; *!* HWND hwndItem; *!* HDC hDC; *!* RECT rcItem; *!* ULONG_PTR itemData; *!* } DRAWITEMSTRUCT; ******************************************************************************** Define Class _DRAWITEMSTRUCT As _STRUCTBASE SizeOf = 48 Name = "DRAWITEMSTRUCT" && structure fields CtlType = FALSE CtlID = FALSE ItemID = FALSE itemAction = FALSE itemState = FALSE hwndItem = FALSE hDC = FALSE rcItem = .Null. ItemData = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure InitMembers() This.rcItem = Createobject("_RECT",This.Address + 28) Endproc Procedure FreeMembers() This.rcItem = .Null. Endproc Procedure Address_Assign(lnAddress) This.Address = m.lnAddress If This.InitMembersDone = TRUE Then This.rcItem.Address = m.lnAddress + 28 Endif Endproc Procedure CtlType_Access() Return ReadUInt(This.Address) Endproc Procedure CtlType_Assign(pnNewVal) WriteUInt(This.Address, m.pnNewVal) Endproc Procedure CtlID_Access() Return ReadUInt(This.Address + 4) Endproc Procedure CtlID_Assign(pnNewVal) WriteUInt(This.Address + 4, m.pnNewVal) Endproc Procedure itemID_Access() Return ReadUInt(This.Address + 8) Endproc Procedure itemID_Assign(pnNewVal) WriteUInt(This.Address + 8, m.pnNewVal) Endproc Procedure itemAction_Access() Return ReadUInt(This.Address + 12) Endproc Procedure itemAction_Assign(pnNewVal) WriteUInt(This.Address + 12, m.pnNewVal) Endproc Procedure itemState_Access() Return ReadUInt(This.Address + 16) Endproc Procedure itemState_Assign(pnNewVal) WriteUInt(This.Address + 16, m.pnNewVal) Endproc Procedure hwndItem_Access() Return ReadUInt(This.Address + 20) Endproc Procedure hwndItem_Assign(pnNewVal) WriteUInt(This.Address + 20, m.pnNewVal) Endproc Procedure hDC_Access() Return ReadPointer(This.Address + 24) Endproc Procedure hDC_Assign(pnNewVal) WritePointer(This.Address + 24, m.pnNewVal) Endproc Procedure itemData_Access() Return ReadUInt(This.Address + 44) Endproc Procedure itemData_Assign(pnNewVal) WriteUInt(This.Address + 44, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct _FILETIME { *!* DWORD dwLowDateTime; *!* DWORD dwHighDateTime; *!* } FILETIME, *!* *PFILETIME; ******************************************************************************** Define Class _FILETIME As _STRUCTBASE SizeOf = 8 Name = "FILETIME" && structure fields dwLowDateTime = FALSE dwHighDateTime = FALSE _MemberData = '' + ; '' + ; '' + ; '' Procedure dwLowDateTime_Access() Return ReadUInt(This.Address) Endproc Procedure dwLowDateTime_Assign(pnNewVal) WriteUInt(This.Address, m.pnNewVal) Endproc Procedure dwHighDateTime_Access() Return ReadUInt(This.Address + 4) Endproc Procedure dwHighDateTime_Assign(pnNewVal) WriteUInt(This.Address + 4, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct *!* { *!* BYTE bWidth; // Width, in pixels, of the image *!* BYTE bHeight; // Height, in pixels, of the image *!* BYTE bColorCount; // Number of colors in image (0 if >=8bpp) *!* BYTE bReserved; // Reserved ( must be 0) *!* WORD wPlanes; // Color Planes *!* WORD wBitCount; // Bits per pixel *!* DWORD dwBytesInRes; // How many bytes in this resource? *!* DWORD dwImageOffset; // Where in the file is this image? *!* } ICONDIRENTRY, *LPICONDIRENTRY; ******************************************************************************** Define Class _ICONDIRENTRY As _STRUCTBASE SizeOf = 16 Name = "ICONDIRENTRY" && structure fields bWidth = FALSE bHeight = FALSE bColorCount = FALSE bReserved = FALSE wPlanes = FALSE wBitCount = FALSE dwBytesInRes = FALSE dwImageOffset = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure bWidth_Access() Local m.lnWidth m.lnWidth = This.ReadByte(This.Address) If m.lnWidth < 0 Then m.lnWidth = m.lnWidth + 0x100 Endif If m.lnWidth = 0 Then m.lnWidth = 256 Endif Return m.lnWidth Endproc Procedure bWidth_Assign(pnNewVal) If m.pnNewVal = 256 Then m.pnNewVal = 0 Endif If m.pnNewVal < 0 Then m.pnNewVal = m.pnNewVal + 0x100 Endif This.WriteByte(This.Address, m.pnNewVal) Endproc Procedure bHeight_Access() Local m.lnHeight m.lnHeight = This.ReadByte(This.Address + 1) If m.lnHeight < 0 Then m.lnHeight = m.lnHeight + 0x100 Endif If m.lnHeight = 0 Then m.lnHeight = 256 Endif Return m.lnHeight Endproc Procedure bHeight_Assign(pnNewVal) If m.pnNewVal = 256 Then m.pnNewVal = 0 Endif If m.pnNewVal < 0 Then m.pnNewVal = m.pnNewVal + 0x100 Endif This.WriteByte(This.Address + 1, m.pnNewVal) Endproc Procedure bColorCount_Access() Return This.ReadByte(This.Address + 2) Endproc Procedure bColorCount_Assign(pnNewVal) This.WriteByte(This.Address + 2, m.pnNewVal) Endproc Procedure bReserved_Access() Return This.ReadByte(This.Address + 3) Endproc Procedure bReserved_Assign(pnNewVal) This.WriteByte(This.Address + 3, m.pnNewVal) Endproc Procedure wPlanes_Access() Return ReadUShort(This.Address + 4) Endproc Procedure wPlanes_Assign(pnNewVal) WriteUShort(This.Address + 4, m.pnNewVal) Endproc Procedure wBitCount_Access() Return ReadUShort(This.Address + 6) Endproc Procedure wBitCount_Assign(pnNewVal) WriteUShort(This.Address + 6, m.pnNewVal) Endproc Procedure dwBytesInRes_Access() Return ReadUInt(This.Address + 8) Endproc Procedure dwBytesInRes_Assign(pnNewVal) WriteUInt(This.Address + 8, m.pnNewVal) Endproc Procedure dwImageOffset_Access() Return ReadUInt(This.Address + 12) Endproc Procedure dwImageOffset_Assign(pnNewVal) WriteUInt(This.Address + 12, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct tagLOGFONT { *!* LONG lfHeight; *!* LONG lfWidth; *!* LONG lfEscapement; *!* LONG lfOrientation; *!* LONG lfWeight; *!* BYTE lfItalic; *!* BYTE lfUnderline; *!* BYTE lfStrikeOut; *!* BYTE lfCharSet; *!* BYTE lfOutPrecision; *!* BYTE lfClipPrecision; *!* BYTE lfQuality; *!* BYTE lfPitchAndFamily; *!* TCHAR lfFaceName[LF_FACESIZE]; *!* } LOGFONT, *PLOGFONT; ******************************************************************************** Define Class _LOGFONT As _STRUCTBASE SizeOf = 60 Name = "LOGFONT" && structure fields lfHeight = FALSE lfWidth = FALSE lfEscapement = FALSE lfOrientation = FALSE lfWeight = FALSE lfItalic = FALSE lfUnderline = FALSE lfStrikeOut = FALSE lfCharSet = FALSE lfOutPrecision = FALSE lfClipPrecision = FALSE lfQuality = FALSE lfPitchAndFamily = FALSE lfFaceName = FALSE && extra properties FontBold = FALSE FontCharSet = 1 FontItalic = FALSE FontName = "" FontSize = 0 FontStrikethru = FALSE FontUnderline = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure FontBold_Access() Return Iif(This.lfWeight >= FW_BOLD, TRUE, FALSE) Endproc Procedure FontBold_Assign(vNewVal) If Vartype(m.vNewVal) = T_NUMERIC Then If m.vNewVal < FW_BOLD Then m.vNewVal = FALSE Else m.vNewVal = TRUE Endif Endif If m.vNewVal = TRUE Then This.lfWeight = FW_BOLD Else This.lfWeight = FW_NORMAL Endif Endproc Procedure FontCharset_Access() Return This.lfCharSet Endproc Procedure FontCharset_Assign(vNewVal) This.lfCharSet = m.vNewVal Endproc Procedure FontItalic_Access() Return Iif(This.lfItalic <> 0, TRUE, FALSE) Endproc Procedure FontItalic_Assign(vNewVal) If Vartype(m.vNewVal) = T_NUMERIC Then If m.vNewVal = 0 Then m.vNewVal = FALSE Else m.vNewVal = TRUE Endif Endif If m.vNewVal = TRUE Then This.lfItalic = 1 Else This.lfItalic = 0 Endif Endproc Procedure FontName_Access() Return This.lfFaceName Endproc Procedure FontName_Assign(vNewVal) If Right(m.vNewVal, 1) <> NULCHAR Then m.vNewVal = m.vNewVal + NULCHAR Endif This.lfFaceName = m.vNewVal Endproc Procedure FontSize_Access() Return ctlFontHeightToPoints(This.lfHeight) Endproc Procedure FontSize_Assign(vNewVal) This.lfHeight = ctlFontPointsToHeight(m.vNewVal) Endproc Procedure FontStrikethru_Access() Return Iif(This.lfStrikeOut <> 0, TRUE, FALSE) Endproc Procedure FontStrikethru_Assign(vNewVal) If Vartype(m.vNewVal) = T_NUMERIC Then If m.vNewVal = 0 Then m.vNewVal = FALSE Else m.vNewVal = TRUE Endif Endif If m.vNewVal = TRUE Then This.lfStrikeOut = 1 Else This.lfStrikeOut = 0 Endif Endproc Procedure FontUnderline_Access() Return Iif(This.lfUnderline <> 0, TRUE, FALSE) Endproc Procedure FontUnderline_Assign(vNewVal) If Vartype(m.vNewVal) = T_NUMERIC Then If m.vNewVal = 0 Then m.vNewVal = FALSE Else m.vNewVal = TRUE Endif Endif If m.vNewVal = TRUE Then This.lfUnderline = 1 Else This.lfUnderline = 0 Endif Endproc Procedure lfHeight_Access() Return ReadInt(This.Address) Endproc Procedure lfHeight_Assign(pnNewVal) WriteInt(This.Address, m.pnNewVal) Endproc Procedure lfWidth_Access() Return ReadInt(This.Address + 4) Endproc Procedure lfWidth_Assign(pnNewVal) WriteInt(This.Address + 4, m.pnNewVal) Endproc Procedure lfEscapement_Access() Return ReadInt(This.Address + 8) Endproc Procedure lfEscapement_Assign(pnNewVal) WriteInt(This.Address + 8, m.pnNewVal) Endproc Procedure lfOrientation_Access() Return ReadInt(This.Address + 12) Endproc Procedure lfOrientation_Assign(pnNewVal) WriteInt(This.Address + 12, m.pnNewVal) Endproc Procedure lfWeight_Access() Return ReadInt(This.Address + 16) Endproc Procedure lfWeight_Assign(pnNewVal) WriteInt(This.Address + 16, m.pnNewVal) Endproc Procedure lfItalic_Access() Return This.ReadByte(This.Address + 20) Endproc Procedure lfItalic_Assign(pnNewVal) This.WriteByte(This.Address + 20, m.pnNewVal) Endproc Procedure lfUnderline_Access() Return This.ReadByte(This.Address + 21) Endproc Procedure lfUnderline_Assign(pnNewVal) This.WriteByte(This.Address + 21, m.pnNewVal) Endproc Procedure lfStrikeOut_Access() Return This.ReadByte(This.Address + 22) Endproc Procedure lfStrikeOut_Assign(pnNewVal) This.WriteByte(This.Address + 22, m.pnNewVal) Endproc Procedure lfCharSet_Access() Return This.ReadByte(This.Address + 23) Endproc Procedure lfCharSet_Assign(pnNewVal) This.WriteByte(This.Address + 23, m.pnNewVal) Endproc Procedure lfOutPrecision_Access() Return This.ReadByte(This.Address + 24) Endproc Procedure lfOutPrecision_Assign(pnNewVal) This.WriteByte(This.Address + 24, m.pnNewVal) Endproc Procedure lfClipPrecision_Access() Return This.ReadByte(This.Address + 25) Endproc Procedure lfClipPrecision_Assign(pnNewVal) This.WriteByte(This.Address + 25, m.pnNewVal) Endproc Procedure lfQuality_Access() Return This.ReadByte(This.Address + 26) Endproc Procedure lfQuality_Assign(pnNewVal) This.WriteByte(This.Address + 26, m.pnNewVal) Endproc Procedure lfPitchAndFamily_Access() Return This.ReadByte(This.Address + 27) Endproc Procedure lfPitchAndFamily_Assign(pnNewVal) This.WriteByte(This.Address + 27, m.pnNewVal) Endproc Procedure lfFaceName_Access() Return ReadCharArray(This.Address + 28, 32) Endproc Procedure lfFaceName_Assign(pnNewVal) WriteCharArray(This.Address + 28, m.pnNewVal, 32) Endproc Enddefine ******************************************************************************** *!* typedef struct { *!* UINT cbSize; *!* POINT pt; *!* UINT uHit; // out param *!* SYSTEMTIME st; *!* #if (NTDDI_VERSION >= NTDDI_LONGHORN) *!* RECT rc; *!* int iOffset; *!* int iRow; *!* int iCol; *!* #endif *!* } MCHITTESTINFO, *PMCHITTESTINFO; ******************************************************************************** Define Class _MCHITTESTINFO As _STRUCTBASE SizeOf = 32 Name = "MCHITTESTINFO" && structure fields cbSize = FALSE pt = .Null. uHit = FALSE st = .Null. _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure InitMembers() This.cbSize = This.SizeOf This.pt = Createobject("_POINT", This.Address + 4) This.st = Createobject("_SYSTEMTIME", This.Address + 16) Endproc Procedure FreeMembers() This.pt = .Null. This.st = .Null. Endproc Procedure Address_Assign(lnAddress) This.Address = m.lnAddress If This.InitMembersDone = TRUE Then This.pt.Address = m.lnAddress + 4 This.st.Address = m.lnAddress + 16 Endif Endproc Procedure cbSize_Access() Return ReadUInt(This.Address) Endproc Procedure cbSize_Assign(pnNewVal) WriteUInt(This.Address, m.pnNewVal) Endproc Procedure uHit_Access() Return ReadUInt(This.Address + 12) Endproc Procedure uHit_Assign(pnNewVal) WriteUInt(This.Address + 12, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct tagMEASUREITEMSTRUCT { *!* UINT CtlType; *!* UINT CtlID; *!* UINT itemID; *!* UINT itemWidth; *!* UINT itemHeight; *!* DWORD itemData *!* } MEASUREITEMSTRUCT; ******************************************************************************** Define Class _MEASUREITEMSTRUCT As _STRUCTBASE SizeOf = 24 Name = "MEASUREITEMSTRUCT" && structure fields CtlType = FALSE CtlID = FALSE ItemID = FALSE itemWidth = FALSE itemHeight = FALSE ItemData = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure CtlType_Access() Return ReadUInt(This.Address) Endproc Procedure CtlType_Assign(pnNewVal) WriteUInt(This.Address, m.pnNewVal) Endproc Procedure CtlID_Access() Return ReadUInt(This.Address + 4) Endproc Procedure CtlID_Assign(pnNewVal) WriteUInt(This.Address + 4, m.pnNewVal) Endproc Procedure itemID_Access() Return ReadUInt(This.Address + 8) Endproc Procedure itemID_Assign(pnNewVal) WriteUInt(This.Address + 8, m.pnNewVal) Endproc Procedure itemWidth_Access() Return ReadUInt(This.Address + 12) Endproc Procedure itemWidth_Assign(pnNewVal) WriteUInt(This.Address + 12, m.pnNewVal) Endproc Procedure itemHeight_Access() Return ReadUInt(This.Address + 16) Endproc Procedure itemHeight_Assign(pnNewVal) WriteUInt(This.Address + 16, m.pnNewVal) Endproc Procedure itemData_Access() Return ReadUInt(This.Address + 20) Endproc Procedure itemData_Assign(pnNewVal) WriteUInt(This.Address + 20, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct tagMENUINFO { *!* DWORD cbSize; *!* DWORD fMask; *!* DWORD dwStyle; *!* UINT cyMax; *!* HBRUSH hbrBack; *!* DWORD dwContextHelpID; *!* ULONG_PTR dwMenuData; *!* } MENUINFO, FAR *LPMENUINFO; *!* typedef MENUINFO CONST FAR *LPCMENUINFO; ******************************************************************************** Define Class _MENUINFO As _STRUCTBASE SizeOf = 28 Name = "MENUINFO" *!* structure fields cbSize = FALSE fMask = FALSE dwStyle = FALSE cyMax = FALSE hbrBack = FALSE dwContextHelpID = FALSE dwMenuData = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure InitMembers() *!* Important! init cbSize to size of structure This.cbSize = This.SizeOf Endproc Procedure cbSize_Access() Return ReadUInt(This.Address) Endproc Procedure cbSize_Assign(pnNewVal) WriteUInt(This.Address, m.pnNewVal) Endproc Procedure fMask_Access() Return ReadUInt(This.Address + 4) Endproc Procedure fMask_Assign(pnNewVal) WriteUInt(This.Address + 4, m.pnNewVal) Endproc Procedure dwStyle_Access() Return ReadUInt(This.Address + 8) Endproc Procedure dwStyle_Assign(pnNewVal) WriteUInt(This.Address + 8, m.pnNewVal) Endproc Procedure cyMax_Access() Return ReadUInt(This.Address + 12) Endproc Procedure cyMax_Assign(pnNewVal) WriteUInt(This.Address + 12, m.pnNewVal) Endproc Procedure hbrBack_Access() Return ReadPointer(This.Address + 16) Endproc Procedure hbrBack_Assign(pnNewVal) WritePointer(This.Address + 16, m.pnNewVal) Endproc Procedure dwContextHelpID_Access() Return ReadUInt(This.Address + 20) Endproc Procedure dwContextHelpID_Assign(pnNewVal) WriteUInt(This.Address + 20, m.pnNewVal) Endproc Procedure dwMenuData_Access() Return ReadUInt(This.Address + 24) Endproc Procedure dwMenuData_Assign(pnNewVal) WriteUInt(This.Address + 24, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct tagMENUITEMINFO { *!* UINT cbSize; *!* UINT fMask; *!* UINT fType; *!* UINT fState; *!* UINT wID; *!* HMENU hSubMenu; *!* HBITMAP hbmpChecked; *!* HBITMAP hbmpUnchecked; *!* ULONG_PTR dwItemData; *!* LPTSTR dwTypeData; *!* UINT cch; *!* HBITMAP hbmpItem; *!* } MENUITEMINFO, *LPMENUITEMINFO; ******************************************************************************** Define Class _MENUITEMINFO As _STRUCTBASE SizeOf = 48 Name = "MENUITEMINFO" *!* structure fields cbSize = FALSE fMask = FALSE fType = FALSE fState = FALSE wID = FALSE hSubMenu = FALSE hbmpChecked = FALSE hbmpUnchecked = FALSE dwItemData = FALSE dwTypeData = FALSE cch = FALSE hbmpItem = FALSE Protected _MemberData _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure InitMembers() *!* Important! init cbSize to size of structure This.cbSize = This.SizeOf Endproc Procedure FreeMembers() FreePMem(This.Address + 36) Endproc Hidden Procedure cbSize_Access() Return ReadUInt(This.Address) Endproc Hidden Procedure cbSize_Assign(pnNewVal) WriteUInt(This.Address, m.pnNewVal) Endproc Hidden Procedure fMask_Access() Return ReadUInt(This.Address + 4) Endproc Hidden Procedure fMask_Assign(pnNewVal) WriteUInt(This.Address + 4, m.pnNewVal) Endproc Hidden Procedure fType_Access() Return ReadUInt(This.Address + 8) Endproc Hidden Procedure fType_Assign(pnNewVal) WriteUInt(This.Address + 8, m.pnNewVal) Endproc Hidden Procedure fState_Access() Return ReadUInt(This.Address + 12) Endproc Hidden Procedure fState_Assign(pnNewVal) WriteUInt(This.Address + 12, m.pnNewVal) Endproc Hidden Procedure wID_Access() Return ReadUInt(This.Address + 16) Endproc Hidden Procedure wID_Assign(pnNewVal) WriteUInt(This.Address + 16, m.pnNewVal) Endproc Hidden Procedure hSubMenu_Access() Return ReadUInt(This.Address + 20) Endproc Hidden Procedure hSubMenu_Assign(pnNewVal) WriteUInt(This.Address + 20, m.pnNewVal) Endproc Hidden Procedure hbmpChecked_Access() Return ReadUInt(This.Address + 24) Endproc Hidden Procedure hbmpChecked_Assign(pnNewVal) WriteUInt(This.Address + 24, m.pnNewVal) Endproc Hidden Procedure hbmpUnchecked_Access() Return ReadUInt(This.Address + 28) Endproc Hidden Procedure hbmpUnchecked_Assign(pnNewVal) WriteUInt(This.Address + 28, m.pnNewVal) Endproc Hidden Procedure dwItemData_Access() Return ReadUInt(This.Address + 32) Endproc Hidden Procedure dwItemData_Assign(pnNewVal) WriteUInt(This.Address + 32, m.pnNewVal) Endproc Hidden Procedure dwTypeData_Access() Return ReadPCString(This.Address + 36) Endproc Hidden Procedure dwTypeData_Assign(pnNewVal) WritePCString(This.Address + 36, m.pnNewVal) Endproc Hidden Procedure cch_Access() Return ReadUInt(This.Address + 40) Endproc Hidden Procedure cch_Assign(pnNewVal) WriteUInt(This.Address + 40, m.pnNewVal) Endproc Hidden Procedure hbmpItem_Access() Return ReadUInt(This.Address + 44) Endproc Hidden Procedure hbmpItem_Assign(pnNewVal) WriteUInt(This.Address + 44, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct tagMONITORINFOEX { *!* DWORD cbSize; *!* RECT rcMonitor; *!* RECT rcWork; *!* DWORD dwFlags; *!* TCHAR szDevice[CCHDEVICENAME]; *!* } MONITORINFOEX, *LPMONITORINFOEX; ******************************************************************************** Define Class _MONITORINFOEX As _STRUCTBASE SizeOf = 72 Name = "MONITORINFOEX" && structure fields cbSize = FALSE rcMonitor = .Null. rcWork = .Null. dwFlags = FALSE szDevice = FALSE Protected _MemberData _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure InitMembers This.cbSize = This.SizeOf This.rcMonitor = Createobject("_RECT", This.Address + 4) This.rcWork = Createobject("_RECT", This.Address + 20) Endproc Procedure FreeMembers() This.rcMonitor = .Null. This.rcWork = .Null. Endproc Procedure Address_Assign(lnAddress) This.Address = m.lnAddress If This.InitMembersDone = TRUE Then This.rcMonitor.Address = m.lnAddress + 4 This.rcWork.Address = m.lnAddress + 20 Endif Endproc Procedure cbSize_Access() Return ReadUInt(This.Address) Endproc Procedure cbSize_Assign(pnNewVal) WriteUInt(This.Address, m.pnNewVal) Endproc Procedure dwFlags_Access() Return ReadUInt(This.Address + 36) Endproc Procedure dwFlags_Assign(pnNewVal) WriteUInt(This.Address + 36, m.pnNewVal) Endproc Procedure szDevice_Access() Return ReadCharArray(This.Address + 40, 32) Endproc Procedure szDevice_Assign(pnNewVal) WriteCharArray(This.Address + 40, m.pnNewVal, 32) Endproc Enddefine ******************************************************************************** *!* typedef struct tagNMCUSTOMDRAWINFO { *!* NMHDR hdr; *!* DWORD dwDrawStage; *!* HDC hdc; *!* RECT rc; *!* DWORD_PTR dwItemSpec; *!* UINT uItemState; *!* LPARAM lItemlParam; *!* } NMCUSTOMDRAW, *LPNMCUSTOMDRAW; ******************************************************************************** Define Class _NMCUSTOMDRAW As _STRUCTBASE SizeOf = 48 Name = "NMCUSTOMDRAW" && structure fields hdr = .Null. dwDrawStage = FALSE hDC = FALSE rc = .Null. dwItemSpec = FALSE uItemState = FALSE lItemlParam = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure InitMembers() This.hdr = Createobject("_NMHDR", This.Address) This.rc = Createobject("_RECT", This.Address + 20) Endproc Procedure FreeMembers() This.hdr = .Null. This.rc = .Null. Endproc Procedure Address_Assign(lnAddress) This.Address = m.lnAddress If This.InitMembersDone = TRUE Then This.hdr.Address = m.lnAddress This.rc.Address = m.lnAddress + 20 Endif Endproc Procedure dwDrawStage_Access() Return ReadUInt(This.Address + 12) Endproc Procedure dwDrawStage_Assign(pnNewVal) WriteUInt(This.Address + 12, m.pnNewVal) Endproc Procedure hDC_Access() Return ReadPointer(This.Address + 16) Endproc Procedure hDC_Assign(pnNewVal) WritePointer(This.Address + 16, m.pnNewVal) Endproc Procedure dwItemSpec_Access() Return ReadUInt(This.Address + 36) Endproc Procedure dwItemSpec_Assign(pnNewVal) WriteUInt(This.Address + 36, m.pnNewVal) Endproc Procedure uItemState_Access() Return ReadUInt(This.Address + 40) Endproc Procedure uItemState_Assign(pnNewVal) WriteUInt(This.Address + 40, m.pnNewVal) Endproc Procedure lItemlParam_Access() Return ReadInt(This.Address + 44) Endproc Procedure lItemlParam_Assign(pnNewVal) WriteInt(This.Address + 44, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct _RECT { *!* LONG Left; *!* LONG Top; *!* LONG Right; *!* LONG Bottom; *!* } RECT, *PRECT; ******************************************************************************** Define Class _RECT As _STRUCTBASE SizeOf = 16 Name = "RECT" *!* structure fields Left = FALSE Top = FALSE Right = FALSE Bottom = FALSE && Extra properties Height = FALSE Width = FALSE Protected _MemberData _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Hidden Procedure Left_Access() Return ReadInt(This.Address) Endproc Hidden Procedure Left_Assign(pnNewVal) WriteInt(This.Address, m.pnNewVal) Endproc Hidden Procedure Top_Access() Return ReadInt(This.Address + 4) Endproc Hidden Procedure Top_Assign(pnNewVal) WriteInt(This.Address + 4, m.pnNewVal) Endproc Hidden Procedure Right_Access() Return ReadInt(This.Address + 8) Endproc Hidden Procedure Right_Assign(pnNewVal) WriteInt(This.Address + 8, m.pnNewVal) Endproc Hidden Procedure Bottom_Access() Return ReadInt(This.Address + 12) Endproc Hidden Procedure Bottom_Assign(pnNewVal) WriteInt(This.Address + 12, m.pnNewVal) Endproc Hidden Procedure Height_Access() Return This.Bottom - This.Top Endproc Hidden Procedure Height_Assign(pnNewVal) This.Height = m.pnNewVal This.Bottom = This.Top + m.pnNewVal Endproc Hidden Procedure Width_Access() Return This.Right - This.Left Endproc Hidden Procedure Width_Assign(pnNewVal) This.Width = m.pnNewVal This.Right = This.Left + m.pnNewVal Endproc Enddefine ******************************************************************************** *!* typedef struct tagPOINT { *!* LONG x; *!* LONG y; *!* } POINT, *PPOINT; ******************************************************************************** Define Class _POINT As _STRUCTBASE SizeOf = 8 Name = "POINT" && structure fields x = FALSE Y = FALSE Protected _MemberData _MemberData = '' + ; '' + ; '' + ; '' Procedure x_Access() Return ReadInt(This.Address) Endproc Procedure x_Assign(pnNewVal) WriteInt(This.Address, m.pnNewVal) Endproc Procedure y_Access() Return ReadInt(This.Address + 4) Endproc Procedure y_Assign(pnNewVal) WriteInt(This.Address + 4, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct _WINDOWPLACEMENT { *!* UINT length; *!* UINT flags; *!* UINT showCmd; *!* POINT ptMinPosition; *!* POINT ptMaxPosition; *!* RECT rcNormalPosition; *!* } WINDOWPLACEMENT; ******************************************************************************** Define Class _WINDOWPLACEMENT As _STRUCTBASE SizeOf = 44 Name = "WINDOWPLACEMENT" && structure fields Length = FALSE Flags = FALSE ShowCmd = FALSE ptMinPosition = .Null. ptMaxPosition = .Null. rcNormalPosition = .Null. Protected _MemberData _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure InitMembers() This.Length = This.SizeOf This.ptMinPosition = Createobject("_POINT", This.Address + 12) This.ptMaxPosition = Createobject("_POINT", This.Address + 20) This.rcNormalPosition = Createobject("_RECT", This.Address + 28) Endproc Procedure FreeMembers() This.ptMinPosition = .Null. This.ptMaxPosition = .Null. This.rcNormalPosition = .Null. Endproc Procedure Address_Assign(lnAddress) This.Address = m.lnAddress If This.InitMembersDone = TRUE Then This.ptMinPosition.Address = m.lnAddress + 12 This.ptMaxPosition.Address = m.lnAddress + 20 This.rcNormalPosition.Address = m.lnAddress + 28 Endif Endproc Procedure length_Access() Return ReadUInt(This.Address) Endproc Procedure length_Assign(pnNewVal) WriteUInt(This.Address, m.pnNewVal) Endproc Procedure flags_Access() Return ReadUInt(This.Address + 4) Endproc Procedure flags_Assign(pnNewVal) WriteUInt(This.Address + 4, m.pnNewVal) Endproc Procedure showCmd_Access() Return ReadUInt(This.Address + 8) Endproc Procedure showCmd_Assign(pnNewVal) WriteUInt(This.Address + 8, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct tagSCROLLINFO { *!* UINT cbSize; *!* UINT fMask; *!* int nMin; *!* int nMax; *!* UINT nPage; *!* int nPos; *!* int nTrackPos; *!* } SCROLLINFO, *LPSCROLLINFO; *!* typedef SCROLLINFO CONST *LPCSCROLLINFO; ******************************************************************************** Define Class _SCROLLINFO As _STRUCTBASE SizeOf = 28 Name = "SCROLLINFO" && structure fields cbSize = FALSE fMask = FALSE nMin = FALSE nMax = FALSE nPage = FALSE nPos = FALSE nTrackPos = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure InitMembers() *!* Important! init cbSize to size of structure This.cbSize = This.SizeOf Endproc Procedure cbSize_Access() Return ReadUInt(This.Address) Endproc Procedure cbSize_Assign(pnNewVal) WriteUInt(This.Address, m.pnNewVal) Endproc Procedure fMask_Access() Return ReadUInt(This.Address + 4) Endproc Procedure fMask_Assign(pnNewVal) WriteUInt(This.Address + 4, m.pnNewVal) Endproc Procedure nMin_Access() Return ReadInt(This.Address + 8) Endproc Procedure nMin_Assign(pnNewVal) WriteInt(This.Address + 8, m.pnNewVal) Endproc Procedure nMax_Access() Return ReadInt(This.Address + 12) Endproc Procedure nMax_Assign(pnNewVal) WriteInt(This.Address + 12, m.pnNewVal) Endproc Procedure nPage_Access() Return ReadUInt(This.Address + 16) Endproc Procedure nPage_Assign(pnNewVal) WriteUInt(This.Address + 16, m.pnNewVal) Endproc Procedure nPos_Access() Return ReadInt(This.Address + 20) Endproc Procedure nPos_Assign(pnNewVal) WriteInt(This.Address + 20, m.pnNewVal) Endproc Procedure nTrackPos_Access() Return ReadInt(This.Address + 24) Endproc Procedure nTrackPos_Assign(pnNewVal) WriteInt(This.Address + 24, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct tagNMHDR { *!* HWND hwndFrom; *!* UINT_PTR idFrom; *!* UINT code; *!* } NMHDR; ******************************************************************************** Define Class _NMHDR As _STRUCTBASE SizeOf = 12 Name = "NMHDR" && structure fields hwndFrom = FALSE idFrom = FALSE Code = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' Procedure hwndFrom_Access() Return ReadInt(This.Address) Endproc Procedure hwndFrom_Assign(pnNewVal) WriteInt(This.Address, m.pnNewVal) Endproc Procedure idFrom_Access() Return ReadUInt(This.Address + 4) Endproc Procedure idFrom_Assign(pnNewVal) WriteUInt(This.Address + 4, m.pnNewVal) Endproc Procedure Code_Access() *!* Code is a UINT but it should be an INT Return ReadInt(This.Address + 8) Endproc Procedure Code_Assign(pnNewVal) WriteInt(This.Address + 8, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct tagNMMOUSE { *!* NMHDR hdr; *!* DWORD_PTR dwItemSpec; *!* DWORD_PTR dwItemData; *!* POINT pt; *!* LPARAM dwHitInfo; *!* } NMMOUSE, *LPNMMOUSE; ******************************************************************************** Define Class _NMMOUSE As _STRUCTBASE SizeOf = 32 Name = "NMMOUSE" && structure fields hdr = .Null. dwItemSpec = FALSE dwItemData = FALSE pt = .Null. dwHitInfo = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure InitMembers This.hdr = Createobject("_NMHDR",This.Address + 0) This.pt = Createobject("_POINT",This.Address + 20) Endproc Procedure FreeMembers() This.hdr = .Null. This.pt = .Null. Endproc Procedure Address_Assign(lnAddress) This.Address = m.lnAddress If This.InitMembersDone = TRUE Then This.hdr.Address = m.lnAddress + 0 This.pt.Address = m.lnAddress + 20 Endif Endproc Procedure dwItemSpec_Access() Return ReadUInt(This.Address + 12) Endproc Procedure dwItemSpec_Assign(pnNewVal) WriteUInt(This.Address + 12, m.pnNewVal) Endproc Procedure dwItemData_Access() Return ReadUInt(This.Address + 16) Endproc Procedure dwItemData_Assign(pnNewVal) WriteUInt(This.Address + 16, m.pnNewVal) Endproc Procedure dwHitInfo_Access() Return ReadInt(This.Address + 28) Endproc Procedure dwHitInfo_Assign(pnNewVal) WriteInt(This.Address + 28, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct { *!* DWORD dwStructSize; *!* LPTSTR lpszScheme; *!* DWORD dwSchemeLength; *!* INTERNET_SCHEME nScheme; *!* LPTSTR lpszHostName; *!* DWORD dwHostNameLength; *!* INTERNET_PORT nPort; *!* LPTSTR lpszUserName; *!* DWORD dwUserNameLength; *!* LPTSTR lpszPassword; *!* DWORD dwPasswordLength; *!* LPTSTR lpszUrlPath; *!* DWORD dwUrlPathLength; *!* LPTSTR lpszExtraInfo; *!* DWORD dwExtraInfoLength; *!* } URL_COMPONENTS, *!* *LPURL_COMPONENTS; ******************************************************************************** Define Class _URL_COMPONENTS As _STRUCTBASE SizeOf = 60 Name = "URL_COMPONENTS" && structure fields dwStructSize = FALSE lpszScheme = FALSE dwSchemeLength = FALSE nScheme = FALSE lpszHostName = FALSE dwHostNameLength = FALSE nPort = FALSE lpszUserName = FALSE dwUserNameLength = FALSE lpszPassword = FALSE dwPasswordLength = FALSE lpszUrlPath = FALSE dwUrlPathLength = FALSE lpszExtraInfo = FALSE dwExtraInfoLength = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure InitMembers() This.dwStructSize = 60 Endproc Procedure FreeMembers() FreePMem(This.Address + 4) FreePMem(This.Address + 16) FreePMem(This.Address + 28) FreePMem(This.Address + 36) FreePMem(This.Address + 44) FreePMem(This.Address + 52) Endproc Procedure dwStructSize_Access() Return ReadUInt(This.Address) Endproc Procedure dwStructSize_Assign(pnNewVal) WriteUInt(This.Address, m.pnNewVal) Endproc Procedure lpszScheme_Access() Return ReadPCString(This.Address + 4) Endproc Procedure lpszScheme_Assign(pnNewVal) WritePCString(This.Address + 4, m.pnNewVal) This.dwSchemeLength = Len(pnNewVal) Endproc Procedure dwSchemeLength_Access() Return ReadUInt(This.Address + 8) Endproc Procedure dwSchemeLength_Assign(pnNewVal) WriteUInt(This.Address + 8, m.pnNewVal) Endproc Procedure nScheme_Access() Return ReadUInt(This.Address + 12) Endproc Procedure nScheme_Assign(pnNewVal) WriteUInt(This.Address + 12, m.pnNewVal) Endproc Procedure lpszHostName_Access() Return ReadPCString(This.Address + 16) Endproc Procedure lpszHostName_Assign(pnNewVal) WritePCString(This.Address + 16, m.pnNewVal) This.dwHostNameLength = Len(pnNewVal) Endproc Procedure dwHostNameLength_Access() Return ReadUInt(This.Address + 20) Endproc Procedure dwHostNameLength_Assign(pnNewVal) WriteUInt(This.Address + 20, m.pnNewVal) Endproc Procedure nPort_Access() Return ReadUInt(This.Address + 24) Endproc Procedure nPort_Assign(pnNewVal) WriteUInt(This.Address + 24, m.pnNewVal) Endproc Procedure lpszUserName_Access() Return ReadPCString(This.Address + 28) Endproc Procedure lpszUserName_Assign(pnNewVal) WritePCString(This.Address + 28, m.pnNewVal) This.dwUserNameLength = Len(pnNewVal) Endproc Procedure dwUserNameLength_Access() Return ReadUInt(This.Address + 32) Endproc Procedure dwUserNameLength_Assign(pnNewVal) WriteUInt(This.Address + 32, m.pnNewVal) Endproc Procedure lpszPassword_Access() Return ReadPCString(This.Address + 36) Endproc Procedure lpszPassword_Assign(pnNewVal) WritePCString(This.Address + 36, m.pnNewVal) This.dwPasswordLength = Len(pnNewVal) Endproc Procedure dwPasswordLength_Access() Return ReadUInt(This.Address + 40) Endproc Procedure dwPasswordLength_Assign(pnNewVal) WriteUInt(This.Address + 40, m.pnNewVal) Endproc Procedure lpszUrlPath_Access() Return ReadPCString(This.Address + 44) Endproc Procedure lpszUrlPath_Assign(pnNewVal) WritePCString(This.Address + 44, m.pnNewVal) This.dwUrlPathLength = Len(pnNewVal) Endproc Procedure dwUrlPathLength_Access() Return ReadUInt(This.Address + 48) Endproc Procedure dwUrlPathLength_Assign(pnNewVal) WriteUInt(This.Address + 48, m.pnNewVal) Endproc Procedure lpszExtraInfo_Access() Return ReadPCString(This.Address + 52) Endproc Procedure lpszExtraInfo_Assign(pnNewVal) WritePCString(This.Address + 52, m.pnNewVal) This.dwExtraInfoLength = Len(pnNewVal) Endproc Procedure dwExtraInfoLength_Access() Return ReadUInt(This.Address + 56) Endproc Procedure dwExtraInfoLength_Assign(pnNewVal) WriteUInt(This.Address + 56, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct _WIN32_FIND_DATA { *!* DWORD dwFileAttributes; *!* FILETIME ftCreationTime; *!* FILETIME ftLastAccessTime; *!* FILETIME ftLastWriteTime; *!* DWORD nFileSizeHigh; *!* DWORD nFileSizeLow; *!* DWORD dwReserved0; *!* DWORD dwReserved1; *!* TCHAR cFileName[MAX_PATH]; *!* TCHAR cAlternateFileName[14]; *!* } WIN32_FIND_DATA, *!* *PWIN32_FIND_DATA, *!* *LPWIN32_FIND_DATA; ******************************************************************************** Define Class _WIN32_FIND_DATA As _STRUCTBASE SizeOf = 320 Name = "WIN32_FIND_DATA" && structure fields dwFileAttributes = FALSE ftCreationTime = .Null. ftLastAccessTime = .Null. ftLastWriteTime = .Null. nFileSizeHigh = FALSE nFileSizeLow = FALSE dwReserved0 = FALSE dwReserved1 = FALSE cFileName = FALSE cAlternateFileName = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure InitMembers() This.ftCreationTime = Createobject("_FILETIME", This.Address + 4) This.ftLastAccessTime = Createobject("_FILETIME", This.Address + 12) This.ftLastWriteTime = Createobject("_FILETIME", This.Address + 20) Endproc Procedure FreeMembers() This.ftCreationTime = .Null. This.ftLastAccessTime = .Null. This.ftLastWriteTime = .Null. Endproc Procedure Address_Assign(lnAddress) This.Address = m.lnAddress If This.InitMembersDone = TRUE Then This.ftCreationTime.Address = m.lnAddress + 4 This.ftLastAccessTime.Address = m.lnAddress + 12 This.ftLastWriteTime.Address = m.lnAddress + 20 Endif Endproc Procedure dwFileAttributes_Access() Return ReadUInt(This.Address) Endproc Procedure dwFileAttributes_Assign(pnNewVal) WriteUInt(This.Address, m.pnNewVal) Endproc Procedure nFileSizeHigh_Access() Return ReadUInt(This.Address + 28) Endproc Procedure nFileSizeHigh_Assign(pnNewVal) WriteUInt(This.Address + 28, m.pnNewVal) Endproc Procedure nFileSizeLow_Access() Return ReadUInt(This.Address + 32) Endproc Procedure nFileSizeLow_Assign(pnNewVal) WriteUInt(This.Address + 32, m.pnNewVal) Endproc Procedure dwReserved0_Access() Return ReadUInt(This.Address + 36) Endproc Procedure dwReserved0_Assign(pnNewVal) WriteUInt(This.Address + 36, m.pnNewVal) Endproc Procedure dwReserved1_Access() Return ReadUInt(This.Address + 40) Endproc Procedure dwReserved1_Assign(pnNewVal) WriteUInt(This.Address + 40, m.pnNewVal) Endproc Procedure cFileName_Access() Return ReadCharArray(This.Address + 44, MAX_PATH) Endproc Procedure cFileName_Assign(pnNewVal) WriteCharArray(This.Address + 44, Padr(m.pnNewVal, MAX_PATH, NULCHAR), MAX_PATH) Endproc Procedure cAlternateFileName_Access() Return ReadCharArray(This.Address + 44 + MAX_PATH, 14) Endproc Procedure cAlternateFileName_Assign(pnNewVal) WriteCharArray(This.Address + 44 + MAX_PATH, Padr(m.pnNewVal, 14, NULCHAR), 14) Endproc Enddefine ******************************************************************************** *!* typedef struct _SYSTEMTIME { *!* WORD wYear; *!* WORD wMonth; *!* WORD wDayOfWeek; *!* WORD wDay; *!* WORD wHour; *!* WORD wMinute; *!* WORD wSecond; *!* WORD wMilliseconds; *!* } SYSTEMTIME, *PSYSTEMTIME; ******************************************************************************** Define Class _SYSTEMTIME As _STRUCTBASE SizeOf = 16 Name = "SYSTEMTIME" && structure fields wYear = FALSE wMonth = FALSE wDayOfWeek = FALSE wDay = FALSE wHour = FALSE wMinute = FALSE wSecond = FALSE wMilliseconds = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure wYear_Access() Return ReadUShort(This.Address) Endproc Procedure wYear_Assign(pnNewVal) WriteUShort(This.Address, m.pnNewVal) Endproc Procedure wMonth_Access() Return ReadUShort(This.Address + 2) Endproc Procedure wMonth_Assign(pnNewVal) WriteUShort(This.Address + 2, m.pnNewVal) Endproc Procedure wDayOfWeek_Access() Return ReadUShort(This.Address + 4) Endproc Procedure wDayOfWeek_Assign(pnNewVal) WriteUShort(This.Address + 4, m.pnNewVal) Endproc Procedure wDay_Access() Return ReadUShort(This.Address + 6) Endproc Procedure wDay_Assign(pnNewVal) WriteUShort(This.Address + 6, m.pnNewVal) Endproc Procedure wHour_Access() Return ReadUShort(This.Address + 8) Endproc Procedure wHour_Assign(pnNewVal) WriteUShort(This.Address + 8, m.pnNewVal) Endproc Procedure wMinute_Access() Return ReadUShort(This.Address + 10) Endproc Procedure wMinute_Assign(pnNewVal) WriteUShort(This.Address + 10, m.pnNewVal) Endproc Procedure wSecond_Access() Return ReadUShort(This.Address + 12) Endproc Procedure wSecond_Assign(pnNewVal) WriteUShort(This.Address + 12, m.pnNewVal) Endproc Procedure wMilliseconds_Access() Return ReadUShort(This.Address + 14) Endproc Procedure wMilliseconds_Assign(pnNewVal) WriteUShort(This.Address + 14, m.pnNewVal) Endproc Enddefine ******************************************************************************** Define Class _SYSTEMTIMEARRAY As _STRUCTBASE SizeOf = 32 Name = "SYSTEMTIMEARRAY" && structure fields Min = .Null. Max = .Null. _MemberData = '' + ; '' + ; '' + ; '' Procedure InitMembers() This.Min = Createobject('_SYSTEMTIME',This.Address) This.Max = Createobject('_SYSTEMTIME',This.Address + 16) Endproc Procedure FreeMembers() This.Min = .Null. This.Max = .Null. Endproc Procedure Address_Assign(lnAddress) This.Address = m.lnAddress If This.InitMembersDone = TRUE Then This.Min.Address = m.lnAddress This.Max.Address = m.lnAddress + 16 Endif Endproc Enddefine ******************************************************************************** *!* typedef struct tagSIZE { *!* LONG cx; *!* LONG cy; *!* } SIZE, *PSIZE; ******************************************************************************** Define Class _SIZE As _STRUCTBASE SizeOf = 8 Name = "SIZE" && structure fields cx = FALSE cy = FALSE _MemberData = '' + ; '' + ; '' + ; '' Procedure cx_Access() Return ReadInt(This.Address) Endproc Procedure cx_Assign(pnNewVal) WriteInt(This.Address, m.pnNewVal) Endproc Procedure cy_Access() Return ReadInt(This.Address + 4) Endproc Procedure cy_Assign(pnNewVal) WriteInt(This.Address + 4, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct tagTOOLINFO{ *!* UINT cbSize; *!* UINT uFlags; *!* HWND hwnd; *!* UINT_PTR uId; *!* RECT rect; *!* HINSTANCE hinst; *!* LPTSTR lpszText; *!* #if (_WIN32_IE >= 0x0300) *!* LPARAM lParam; *!* #endif *!* #if (_WIN32_WINNT >= 0x0501) *!* void *lpReserved; *!* #endif *!* } TOOLINFO, NEAR *PTOOLINFO, *LPTOOLINFO; ******************************************************************************** Define Class _TOOLINFO As _STRUCTBASE SizeOf = 48 Name = "TOOLINFO" && structure fields cbSize = FALSE uFlags = FALSE HWnd = FALSE uId = FALSE Rect = .Null. hinst = FALSE lpszText = FALSE Lparam = FALSE *!* if ctlGetOsVersion >= 5010000 lpReserved = FALSE *!* Endif _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure InitMembers() *!* 20080818 *!* If ctlGetOsVersion() < NTDDI_WINXP Then *!* This.SizeOf = 44 *!* Else *!* This.SizeOf = 48 *!* Endif *!* This.cbSize = This.SizeOf If ctlGetOsVersion() < NTDDI_WINXP Then This.cbSize = 44 Else This.cbSize = 48 Endif This.Rect = Createobject("_RECT", This.Address + 16) Endproc Procedure FreeMembers() This.Rect = .Null. FreePMem(This.Address + 36) Endproc Procedure Address_Assign(lnAddress) This.Address = m.lnAddress If This.InitMembersDone = TRUE Then This.Rect.Address = m.lnAddress + 16 Endif Endproc Procedure cbSize_Access() Return ReadUInt(This.Address) Endproc Procedure cbSize_Assign(pnNewVal) WriteUInt(This.Address, m.pnNewVal) Endproc Procedure uFlags_Access() Return ReadUInt(This.Address + 4) Endproc Procedure uFlags_Assign(pnNewVal) WriteUInt(This.Address + 4, m.pnNewVal) Endproc Procedure hwnd_Access() Return ReadInt(This.Address + 8) Endproc Procedure hwnd_Assign(pnNewVal) WriteInt(This.Address + 8, m.pnNewVal) Endproc Procedure uId_Access() Return ReadUInt(This.Address + 12) Endproc Procedure uId_Assign(pnNewVal) WriteUInt(This.Address + 12, m.pnNewVal) Endproc Procedure hinst_Access() Return ReadPointer(This.Address + 32) Endproc Procedure hinst_Assign(pnNewVal) WritePointer(This.Address + 32, m.pnNewVal) Endproc Procedure lpszText_Access() Return ReadPCString(This.Address + 36) Endproc Procedure lpszText_Assign(pnNewVal) WritePCString(This.Address + 36, m.pnNewVal) Endproc Procedure lParam_Access() Return ReadInt(This.Address + 40) Endproc Procedure lParam_Assign(pnNewVal) WriteInt(This.Address + 40, m.pnNewVal) Endproc Procedure lpReserved_Access() Return ReadPointer(This.Address + 44) Endproc Procedure lpReserved_Assign(pnNewVal) WritePointer(This.Address + 44, m.pnNewVal) Enddefine ******************************************************************************** *!* typedef struct tagNMSELCHANGE { *!* NMHDR nmhdr; *!* SYSTEMTIME stSelStart; *!* SYSTEMTIME stSelEnd; *!* } NMSELCHANGE, *LPNMSELCHANGE; ******************************************************************************** Define Class _NMSELCHANGE As _STRUCTBASE SizeOf = 44 Name = "NMSELCHANGE" && structure fields nmhdr = .Null. stSelStart = .Null. stSelEnd = .Null. _MemberData = '' + ; '' + ; '' + ; '' + ; '' Procedure InitMembers() This.nmhdr = Createobject("_NMHDR", This.Address) This.stSelStart = Createobject("_SYSTEMTIME", This.Address + 12) This.stSelEnd = Createobject("_SYSTEMTIME", This.Address + 28) Endproc Procedure FreeMembers() This.nmhdr = .Null. This.stSelStart = .Null. This.stSelEnd = .Null. Endproc Procedure Address_Assign(lnAddress) This.Address = m.lnAddress If This.InitMembersDone = TRUE Then This.Address = m.lnAddress This.nmhdr.Address = m.lnAddress This.stSelStart.Address = m.lnAddress + 12 This.stSelEnd.Address = m.lnAddress + 28 Endif Endproc Enddefine ******************************************************************************** *!* typedef struct tagNMTTDISPINFO { *!* NMHDR hdr; *!* LPTSTR lpszText; *!* TCHAR szText[80]; *!* HINSTANCE hinst; *!* UINT uFlags; *!* #if (_WIN32_IE >= 0x0300) *!* LPARAM lParam; *!* #endif *!* #if (_WIN32_WINNT >= 0x0600) *!* HBITMAP hbmp; *!* #endif *!* } NMTTDISPINFO, *LPNMTTDISPINFO; ******************************************************************************** Define Class _NMTTDISPINFO As _STRUCTBASE SizeOf = 108 Name = "NMTTDISPINFO" && structure fields hdr = .Null. lpszText = .F. szText = .F. hinst = .F. uFlags = .F. Lparam = .F. Procedure InitMembers(lnAddress) This.hdr = Createobject('_NMHDR', This.Address) Endproc Procedure FreeMembers() This.hdr = .Null. Endproc Procedure lpszText_Access() Return ReadPCString(This.Address + 12) Endproc Procedure lpszText_Assign(lnNewVal) WritePCString(This.Address + 12, m.lnNewVal) Endproc Procedure szText_Access() Return ReadCharArray(This.Address + 16,80) Endproc Procedure szText_Assign(lnNewVal) WriteCharArray(This.Address + 16, m.lnNewVal,80) Endproc Procedure hinst_Access() Return ReadPointer(This.Address + 96) Endproc Procedure hinst_Assign(lnNewVal) WritePointer(This.Address + 96, m.lnNewVal) Endproc Procedure uFlags_Access() Return ReadUInt(This.Address + 100) Endproc Procedure uFlags_Assign(lnNewVal) WriteUInt(This.Address + 100, m.lnNewVal) Endproc Procedure lParam_Access() Return ReadInt(This.Address + 104) Endproc Procedure lParam_Assign(lnNewVal) WriteInt(This.Address + 104, m.lnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct tagNMDAYSTATE { *!* NMHDR nmhdr; *!* SYSTEMTIME stStart; *!* int cDayState; *!* LPMONTHDAYSTATE prgDayState; *!* } NMDAYSTATE, *LPNMDAYSTATE; ******************************************************************************** Define Class _NMDAYSTATE As _STRUCTBASE SizeOf = 36 Name = "NMDAYSTATE" && structure fields nmhdr = .Null. stStart = .Null. cDayState = FALSE prgDayState = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure InitMembers() This.nmhdr = Createobject("_NMHDR", This.Address) This.stStart = Createobject("_SYSTEMTIME", This.Address + 12) Endproc Procedure FreeMembers() This.nmhdr = .Null. This.stStart = .Null. Endproc Procedure cDayState_Access() Return ReadInt(This.Address + 28) Endproc Procedure cDayState_Assign(pnNewVal) WriteInt(This.Address + 28, m.pnNewVal) Endproc Procedure prgDayState_Access() Return ReadInt(This.Address + 32) Endproc Procedure prgDayState_Assign(pnNewVal) WriteInt(This.Address + 32, m.pnNewVal) Endproc Enddefine ******************************************************************************** *!* typedef struct tagOFN { *!* DWORD lStructSize; *!* HWND hwndOwner; *!* HINSTANCE hInstance; *!* LPCTSTR lpstrFilter; *!* LPTSTR lpstrCustomFilter; *!* DWORD nMaxCustFilter; *!* DWORD nFilterIndex; *!* LPTSTR lpstrFile; *!* DWORD nMaxFile; *!* LPTSTR lpstrFileTitle; *!* DWORD nMaxFileTitle; *!* LPCTSTR lpstrInitialDir; *!* LPCTSTR lpstrTitle; *!* DWORD Flags; *!* WORD nFileOffset; *!* WORD nFileExtension; *!* LPCTSTR lpstrDefExt; *!* LPARAM lCustData; *!* LPOFNHOOKPROC lpfnHook; *!* LPCTSTR lpTemplateName; *!* #if (_WIN32_WINNT >= 0x0500) *!* void * pvReserved; *!* DWORD dwReserved; *!* DWORD FlagsEx; *!* #endif // (_WIN32_WINNT >= 0x0500) *!* } OPENFILENAME, *LPOPENFILENAME; ******************************************************************************** Define Class _OPENFILENAME As _STRUCTBASE SizeOf = 88 Name = "OPENFILENAME" && structure fields lStructSize = FALSE hwndOwner = FALSE hInstance = FALSE lpstrFilter = FALSE lpstrCustomFilter = FALSE nMaxCustFilter = FALSE nFilterIndex = FALSE lpstrFile = FALSE nMaxFile = FALSE lpstrFileTitle = FALSE nMaxFileTitle = FALSE lpstrInitialDir = FALSE lpstrTitle = FALSE Flags = FALSE nFileOffset = FALSE nFileExtension = FALSE lpstrDefExt = FALSE lCustData = FALSE lpfnHook = FALSE lpTemplateName = FALSE pvReserved = FALSE dwReserved = FALSE FlagsEx = FALSE _MemberData = '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' + ; '' Procedure InitMembers() If ctlGetOsVersion() < NTDDI_WIN2K Then This.lStructSize = 76 Else This.lStructSize = 88 Endif Endproc Procedure FreeMembers() FreePMem(This.Address + 12) FreePMem(This.Address + 16) FreePMem(This.Address + 28) FreePMem(This.Address + 36) FreePMem(This.Address + 44) FreePMem(This.Address + 48) FreePMem(This.Address + 60) FreePMem(This.Address + 72) Endproc Procedure lStructSize_Access() Return ReadUInt(This.Address) Endproc Procedure lStructSize_Assign(pnNewVal) WriteUInt(This.Address, m.pnNewVal) Endproc Procedure hwndOwner_Access() Return ReadInt(This.Address + 4) Endproc Procedure hwndOwner_Assign(pnNewVal) WriteInt(This.Address + 4, m.pnNewVal) Endproc Procedure hInstance_Access() Return ReadPointer(This.Address + 8) Endproc Procedure hInstance_Assign(pnNewVal) WritePointer(This.Address + 8, m.pnNewVal) Endproc Procedure lpstrFilter_Access() Return ReadPCString(This.Address + 12) Endproc Procedure lpstrFilter_Assign(pnNewVal) WritePCString(This.Address + 12, m.pnNewVal) Endproc Procedure lpstrCustomFilter_Access() Return ReadPCString(This.Address + 16) Endproc Procedure lpstrCustomFilter_Assign(pnNewVal) WritePCString(This.Address + 16, m.pnNewVal) Endproc Procedure nMaxCustFilter_Access() Return ReadUInt(This.Address + 20) Endproc Procedure nMaxCustFilter_Assign(pnNewVal) WriteUInt(This.Address + 20, m.pnNewVal) Endproc Procedure nFilterIndex_Access() Return ReadUInt(This.Address + 24) Endproc Procedure nFilterIndex_Assign(pnNewVal) WriteUInt(This.Address + 24, m.pnNewVal) Endproc Procedure GetlpstrFile() Return This.ReadPCString(This.Address + 28, This.nMaxFile) Endproc Procedure lpstrFile_Access() *!* may have embedded nulls Return ReadPCString(This.Address + 28) Endproc Procedure lpstrFile_Assign(pnNewVal) WritePCString(This.Address + 28, m.pnNewVal) This.nMaxFile = Len(m.pnNewVal) Endproc Procedure nMaxFile_Access() Return ReadUInt(This.Address + 32) Endproc Procedure nMaxFile_Assign(pnNewVal) WriteUInt(This.Address + 32, m.pnNewVal) Endproc Procedure lpstrFileTitle_Access() Return ReadPCString(This.Address + 36) Endproc Procedure lpstrFileTitle_Assign(pnNewVal) WritePCString(This.Address + 36, m.pnNewVal) This.nMaxFileTitle = Len(m.pnNewVal) Endproc Procedure nMaxFileTitle_Access() Return ReadUInt(This.Address + 40) Endproc Procedure nMaxFileTitle_Assign(pnNewVal) WriteUInt(This.Address + 40, m.pnNewVal) Endproc Procedure lpstrInitialDir_Access() Return ReadPCString(This.Address + 44) Endproc Procedure lpstrInitialDir_Assign(pnNewVal) WritePCString(This.Address + 44, m.pnNewVal) Endproc Procedure lpstrTitle_Access() Return ReadPCString(This.Address + 48) Endproc Procedure lpstrTitle_Assign(pnNewVal) WritePCString(This.Address + 48, m.pnNewVal) Endproc Procedure flags_Access() Return ReadUInt(This.Address + 52) Endproc Procedure flags_Assign(pnNewVal) WriteUInt(This.Address + 52, m.pnNewVal) Endproc Procedure nFileOffset_Access() Return ReadUShort(This.Address + 56) Endproc Procedure nFileOffset_Assign(pnNewVal) WriteUShort(This.Address + 56, m.pnNewVal) Endproc Procedure nFileExtension_Access() Return ReadUShort(This.Address + 58) Endproc Procedure nFileExtension_Assign(pnNewVal) WriteUShort(This.Address + 58, m.pnNewVal) Endproc Procedure lpstrDefExt_Access() Return ReadPCString(This.Address + 60) Endproc Procedure lpstrDefExt_Assign(pnNewVal) WritePCString(This.Address + 60, m.pnNewVal) Endproc Procedure lCustData_Access() Return ReadInt(This.Address + 64) Endproc Procedure lCustData_Assign(pnNewVal) WriteInt(This.Address + 64, m.pnNewVal) Endproc Procedure lpfnHook_Access() Return ReadUInt(This.Address + 68) Endproc Procedure lpfnHook_Assign(pnNewVal) WriteUInt(This.Address + 68, m.pnNewVal) Endproc Procedure lpTemplateName_Access() Return ReadPCString(This.Address + 72) Endproc Procedure lpTemplateName_Assign(pnNewVal) WritePCString(This.Address + 72, m.pnNewVal) Endproc Procedure pvReserved_Access() Return ReadPointer(This.Address + 76) Endproc Procedure pvReserved_Assign(pnNewVal) WritePointer(This.Address + 76, m.pnNewVal) Endproc Procedure dwReserved_Access() Return ReadUInt(This.Address + 80) Endproc Procedure dwReserved_Assign(pnNewVal) WriteUInt(This.Address + 80, m.pnNewVal) Endproc Procedure FlagsEx_Access() Return ReadUInt(This.Address + 84) Endproc Procedure FlagsEx_Assign(pnNewVal) WriteUInt(This.Address + 84, m.pnNewVal) Endproc Enddefine