diff options
Diffstat (limited to 'rtl/win')
-rw-r--r-- | rtl/win/sysutils.pp | 108 | ||||
-rw-r--r-- | rtl/win/syswin.inc | 5 | ||||
-rw-r--r-- | rtl/win/tthread.inc | 11 | ||||
-rw-r--r-- | rtl/win/windirs.pp | 120 | ||||
-rw-r--r-- | rtl/win/wininc/func.inc | 2 | ||||
-rw-r--r-- | rtl/win/wininc/messages.inc | 9 | ||||
-rw-r--r-- | rtl/win/wininc/redef.inc | 2 | ||||
-rw-r--r-- | rtl/win/wininc/struct.inc | 81 |
8 files changed, 204 insertions, 134 deletions
diff --git a/rtl/win/sysutils.pp b/rtl/win/sysutils.pp index 0f24ea99b4..3352bbf4ac 100644 --- a/rtl/win/sysutils.pp +++ b/rtl/win/sysutils.pp @@ -72,7 +72,8 @@ procedure GetLocaleFormatSettings(LCID: Integer; var FormatSettings: TFormatSett implementation uses - sysconst; + sysconst, + windirs; function WinCheck(res:boolean):boolean; begin @@ -1060,109 +1061,12 @@ begin GetDiskFreeSpaceEx:=TGetDiskFreeSpaceEx(GetProcAddress(kernel32dll,'GetDiskFreeSpaceExA')); end; -Const - CSIDL_PROGRAMS = $0002; { %SYSTEMDRIVE%\Program Files } - CSIDL_PERSONAL = $0005; { %USERPROFILE%\My Documents } - CSIDL_FAVORITES = $0006; { %USERPROFILE%\Favorites } - CSIDL_STARTUP = $0007; { %USERPROFILE%\Start menu\Programs\Startup } - CSIDL_RECENT = $0008; { %USERPROFILE%\Recent } - CSIDL_SENDTO = $0009; { %USERPROFILE%\Sendto } - CSIDL_STARTMENU = $000B; { %USERPROFILE%\Start menu } - CSIDL_MYMUSIC = $000D; { %USERPROFILE%\Documents\My Music } - CSIDL_MYVIDEO = $000E; { %USERPROFILE%\Documents\My Videos } - CSIDL_DESKTOPDIRECTORY = $0010; { %USERPROFILE%\Desktop } - CSIDL_NETHOOD = $0013; { %USERPROFILE%\NetHood } - CSIDL_TEMPLATES = $0015; { %USERPROFILE%\Templates } - CSIDL_COMMON_STARTMENU = $0016; { %PROFILEPATH%\All users\Start menu } - CSIDL_COMMON_PROGRAMS = $0017; { %PROFILEPATH%\All users\Start menu\Programs } - CSIDL_COMMON_STARTUP = $0018; { %PROFILEPATH%\All users\Start menu\Programs\Startup } - CSIDL_COMMON_DESKTOPDIRECTORY = $0019; { %PROFILEPATH%\All users\Desktop } - CSIDL_APPDATA = $001A; { %USERPROFILE%\Application Data (roaming) } - CSIDL_PRINTHOOD = $001B; { %USERPROFILE%\Printhood } - CSIDL_LOCAL_APPDATA = $001C; { %USERPROFILE%\Local Settings\Application Data (non roaming) } - CSIDL_COMMON_FAVORITES = $001F; { %PROFILEPATH%\All users\Favorites } - CSIDL_INTERNET_CACHE = $0020; { %USERPROFILE%\Local Settings\Temporary Internet Files } - CSIDL_COOKIES = $0021; { %USERPROFILE%\Cookies } - CSIDL_HISTORY = $0022; { %USERPROFILE%\Local settings\History } - CSIDL_COMMON_APPDATA = $0023; { %PROFILESPATH%\All Users\Application Data } - CSIDL_WINDOWS = $0024; { %SYSTEMROOT% } - CSIDL_SYSTEM = $0025; { %SYSTEMROOT%\SYSTEM32 (may be system on 95/98/ME) } - CSIDL_PROGRAM_FILES = $0026; { %SYSTEMDRIVE%\Program Files } - CSIDL_MYPICTURES = $0027; { %USERPROFILE%\My Documents\My Pictures } - CSIDL_PROFILE = $0028; { %USERPROFILE% } - CSIDL_PROGRAM_FILES_COMMON = $002B; { %SYSTEMDRIVE%\Program Files\Common } - CSIDL_COMMON_TEMPLATES = $002D; { %PROFILEPATH%\All Users\Templates } - CSIDL_COMMON_DOCUMENTS = $002E; { %PROFILEPATH%\All Users\Documents } - CSIDL_COMMON_ADMINTOOLS = $002F; { %PROFILEPATH%\All Users\Start Menu\Programs\Administrative Tools } - CSIDL_ADMINTOOLS = $0030; { %USERPROFILE%\Start Menu\Programs\Administrative Tools } - CSIDL_COMMON_MUSIC = $0035; { %PROFILEPATH%\All Users\Documents\my music } - CSIDL_COMMON_PICTURES = $0036; { %PROFILEPATH%\All Users\Documents\my pictures } - CSIDL_COMMON_VIDEO = $0037; { %PROFILEPATH%\All Users\Documents\my videos } - CSIDL_CDBURN_AREA = $003B; { %USERPROFILE%\Local Settings\Application Data\Microsoft\CD Burning } - CSIDL_PROFILES = $003E; { %PROFILEPATH% } - - CSIDL_FLAG_CREATE = $8000; { (force creation of requested folder if it doesn't exist yet) } - - -Type - PFNSHGetFolderPath = Function(Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall; - - -var - SHGetFolderPath : PFNSHGetFolderPath = Nil; - CFGDLLHandle : THandle = 0; - -Procedure InitDLL; - -Var - pathBuf: array[0..MAX_PATH-1] of char; - pathLength: Integer; -begin - { Load shfolder.dll using a full path, in order to prevent spoofing (Mantis #18185) - Don't bother loading shell32.dll because shfolder.dll itself redirects SHGetFolderPath - to shell32.dll whenever possible. } - pathLength:=GetSystemDirectory(pathBuf, MAX_PATH); - if (pathLength>0) and (pathLength<MAX_PATH-14) then { 14=length('\shfolder.dll'#0) } - begin - StrLCopy(@pathBuf[pathLength],'\shfolder.dll',MAX_PATH-pathLength-1); - CFGDLLHandle:=LoadLibrary(pathBuf); - - if (CFGDLLHandle<>0) then - begin - Pointer(ShGetFolderPath):=GetProcAddress(CFGDLLHandle,'SHGetFolderPathA'); - If @ShGetFolderPath=nil then - begin - FreeLibrary(CFGDLLHandle); - CFGDllHandle:=0; - end; - end; - end; - If (@ShGetFolderPath=Nil) then - Raise Exception.Create('Could not determine SHGetFolderPath Function'); -end; - -Function GetSpecialDir(ID : Integer) : String; - -Var - APath : Array[0..MAX_PATH] of char; - -begin - Result:=''; - if (CFGDLLHandle=0) then - InitDLL; - If (SHGetFolderPath<>Nil) then - begin - if SHGetFolderPath(0,ID or CSIDL_FLAG_CREATE,0,0,@APATH[0])=S_OK then - Result:=IncludeTrailingPathDelimiter(StrPas(@APath[0])); - end; -end; - Function GetAppConfigDir(Global : Boolean) : String; begin If Global then - Result:=GetSpecialDir(CSIDL_COMMON_APPDATA) + Result:=GetWindowsSpecialDir(CSIDL_COMMON_APPDATA) else - Result:=GetSpecialDir(CSIDL_LOCAL_APPDATA); + Result:=GetWindowsSpecialDir(CSIDL_LOCAL_APPDATA); If (Result<>'') then begin if VendorName<>'' then @@ -1182,7 +1086,7 @@ end; Function GetUserDir : String; begin - Result:=GetSpecialDir(CSIDL_PROFILE); + Result:=GetWindowsSpecialDir(CSIDL_PROFILE); end; Procedure InitSysConfigDir; @@ -1364,6 +1268,4 @@ Initialization OnBeep:=@SysBeep; Finalization DoneExceptions; - if CFGDLLHandle<>0 then - FreeLibrary(CFGDllHandle); end. diff --git a/rtl/win/syswin.inc b/rtl/win/syswin.inc index 9a1c839f5b..1ea914b43b 100644 --- a/rtl/win/syswin.inc +++ b/rtl/win/syswin.inc @@ -290,8 +290,11 @@ procedure InitWin32Widestrings; end; {$endif} + { Note: since WideChar=UnicodeChar and PWideChar=PUnicodeChar, + Wide2AnsiMoveProc is identical to Unicode2AnsiStrMoveProc. } + { Widestring } - widestringmanager.Wide2AnsiMoveProc:=@Win32Wide2AnsiMove; + widestringmanager.Wide2AnsiMoveProc:=@Win32Unicode2AnsiMove; widestringmanager.Ansi2WideMoveProc:=@Win32Ansi2WideMove; widestringmanager.UpperWideStringProc:=@Win32WideUpper; widestringmanager.LowerWideStringProc:=@Win32WideLower; diff --git a/rtl/win/tthread.inc b/rtl/win/tthread.inc index aa6203d1e5..8bb90c4ebb 100644 --- a/rtl/win/tthread.inc +++ b/rtl/win/tthread.inc @@ -1,14 +1,5 @@ { Thread management routines } -type - PRaiseFrame = ^TRaiseFrame; - TRaiseFrame = record - NextRaise: PRaiseFrame; - ExceptAddr: Pointer; - ExceptObject: TObject; - ExceptionRecord: pointer; {PExceptionRecord} - end; - constructor TThread.Create(CreateSuspended: Boolean; const StackSize: SizeUInt = DefaultStackSize); begin @@ -20,7 +11,7 @@ begin FHandle := BeginThread(nil, StackSize, @ThreadProc, pointer(self), CREATE_SUSPENDED, FThreadID); if FHandle = TThreadID(0) then - raise EThread.create('Failed to create new thread, code:'+inttostr(getlasterror)); + raise EThread.CreateFmt(SThreadCreateError, [SysErrorMessage(getlasterror)]); FFatalException := nil; end; diff --git a/rtl/win/windirs.pp b/rtl/win/windirs.pp new file mode 100644 index 0000000000..c3cfd122a2 --- /dev/null +++ b/rtl/win/windirs.pp @@ -0,0 +1,120 @@ +unit windirs; + +{$mode objfpc} +{$H+} + +interface + +uses + windows, + strings; + +Const + CSIDL_PROGRAMS = $0002; { %SYSTEMDRIVE%\Program Files } + CSIDL_PERSONAL = $0005; { %USERPROFILE%\My Documents } + CSIDL_FAVORITES = $0006; { %USERPROFILE%\Favorites } + CSIDL_STARTUP = $0007; { %USERPROFILE%\Start menu\Programs\Startup } + CSIDL_RECENT = $0008; { %USERPROFILE%\Recent } + CSIDL_SENDTO = $0009; { %USERPROFILE%\Sendto } + CSIDL_STARTMENU = $000B; { %USERPROFILE%\Start menu } + CSIDL_MYMUSIC = $000D; { %USERPROFILE%\Documents\My Music } + CSIDL_MYVIDEO = $000E; { %USERPROFILE%\Documents\My Videos } + CSIDL_DESKTOPDIRECTORY = $0010; { %USERPROFILE%\Desktop } + CSIDL_NETHOOD = $0013; { %USERPROFILE%\NetHood } + CSIDL_TEMPLATES = $0015; { %USERPROFILE%\Templates } + CSIDL_COMMON_STARTMENU = $0016; { %PROFILEPATH%\All users\Start menu } + CSIDL_COMMON_PROGRAMS = $0017; { %PROFILEPATH%\All users\Start menu\Programs } + CSIDL_COMMON_STARTUP = $0018; { %PROFILEPATH%\All users\Start menu\Programs\Startup } + CSIDL_COMMON_DESKTOPDIRECTORY = $0019; { %PROFILEPATH%\All users\Desktop } + CSIDL_APPDATA = $001A; { %USERPROFILE%\Application Data (roaming) } + CSIDL_PRINTHOOD = $001B; { %USERPROFILE%\Printhood } + CSIDL_LOCAL_APPDATA = $001C; { %USERPROFILE%\Local Settings\Application Data (non roaming) } + CSIDL_COMMON_FAVORITES = $001F; { %PROFILEPATH%\All users\Favorites } + CSIDL_INTERNET_CACHE = $0020; { %USERPROFILE%\Local Settings\Temporary Internet Files } + CSIDL_COOKIES = $0021; { %USERPROFILE%\Cookies } + CSIDL_HISTORY = $0022; { %USERPROFILE%\Local settings\History } + CSIDL_COMMON_APPDATA = $0023; { %PROFILESPATH%\All Users\Application Data } + CSIDL_WINDOWS = $0024; { %SYSTEMROOT% } + CSIDL_SYSTEM = $0025; { %SYSTEMROOT%\SYSTEM32 (may be system on 95/98/ME) } + CSIDL_PROGRAM_FILES = $0026; { %SYSTEMDRIVE%\Program Files } + CSIDL_MYPICTURES = $0027; { %USERPROFILE%\My Documents\My Pictures } + CSIDL_PROFILE = $0028; { %USERPROFILE% } + CSIDL_PROGRAM_FILES_COMMON = $002B; { %SYSTEMDRIVE%\Program Files\Common } + CSIDL_COMMON_TEMPLATES = $002D; { %PROFILEPATH%\All Users\Templates } + CSIDL_COMMON_DOCUMENTS = $002E; { %PROFILEPATH%\All Users\Documents } + CSIDL_COMMON_ADMINTOOLS = $002F; { %PROFILEPATH%\All Users\Start Menu\Programs\Administrative Tools } + CSIDL_ADMINTOOLS = $0030; { %USERPROFILE%\Start Menu\Programs\Administrative Tools } + CSIDL_COMMON_MUSIC = $0035; { %PROFILEPATH%\All Users\Documents\my music } + CSIDL_COMMON_PICTURES = $0036; { %PROFILEPATH%\All Users\Documents\my pictures } + CSIDL_COMMON_VIDEO = $0037; { %PROFILEPATH%\All Users\Documents\my videos } + CSIDL_CDBURN_AREA = $003B; { %USERPROFILE%\Local Settings\Application Data\Microsoft\CD Burning } + CSIDL_PROFILES = $003E; { %PROFILEPATH% } + + CSIDL_FLAG_CREATE = $8000; { (force creation of requested folder if it doesn't exist yet) } + +Function GetWindowsSpecialDir(ID : Integer) : String; + +implementation + +uses + sysutils; + +Type + PFNSHGetFolderPath = Function(Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall; + + +var + SHGetFolderPath : PFNSHGetFolderPath = Nil; + CFGDLLHandle : THandle = 0; + +Procedure InitDLL; + +Var + pathBuf: array[0..MAX_PATH-1] of char; + pathLength: Integer; +begin + { Load shfolder.dll using a full path, in order to prevent spoofing (Mantis #18185) + Don't bother loading shell32.dll because shfolder.dll itself redirects SHGetFolderPath + to shell32.dll whenever possible. } + pathLength:=GetSystemDirectory(pathBuf, MAX_PATH); + if (pathLength>0) and (pathLength<MAX_PATH-14) then { 14=length('\shfolder.dll'#0) } + begin + StrLCopy(@pathBuf[pathLength],'\shfolder.dll',MAX_PATH-pathLength-1); + CFGDLLHandle:=LoadLibrary(pathBuf); + + if (CFGDLLHandle<>0) then + begin + Pointer(ShGetFolderPath):=GetProcAddress(CFGDLLHandle,'SHGetFolderPathA'); + If @ShGetFolderPath=nil then + begin + FreeLibrary(CFGDLLHandle); + CFGDllHandle:=0; + end; + end; + end; + If (@ShGetFolderPath=Nil) then + Raise Exception.Create('Could not determine SHGetFolderPath Function'); +end; + +Function GetWindowsSpecialDir(ID : Integer) : String; + +Var + APath : Array[0..MAX_PATH] of char; + +begin + Result:=''; + if (CFGDLLHandle=0) then + InitDLL; + If (SHGetFolderPath<>Nil) then + begin + if SHGetFolderPath(0,ID or CSIDL_FLAG_CREATE,0,0,@APATH[0])=S_OK then + Result:=IncludeTrailingPathDelimiter(StrPas(@APath[0])); + end; +end; + +Initialization +Finalization + if CFGDLLHandle<>0 then + FreeLibrary(CFGDllHandle); +end. + diff --git a/rtl/win/wininc/func.inc b/rtl/win/wininc/func.inc index 9e3c24fa80..b9f90a286f 100644 --- a/rtl/win/wininc/func.inc +++ b/rtl/win/wininc/func.inc @@ -134,7 +134,7 @@ function GetExitCodeThread(hThread:HANDLE; lpExitCode:LPDWORD):WINBOOL; external function GetThreadSelectorEntry(hThread:HANDLE; dwSelector:DWORD; lpSelectorEntry:LPLDT_ENTRY):WINBOOL; external 'kernel32' name 'GetThreadSelectorEntry'; function GetLastError:DWORD; external 'kernel32' name 'GetLastError'; procedure SetLastError(dwErrCode:DWORD); external 'kernel32' name 'SetLastError'; -function CreateIoCompletionPort(FileHandle:HANDLE; ExistingCompletionPort:HANDLE; CompletionKey:DWORD; NumberOfConcurrentThreads:DWORD):HANDLE; external 'kernel32' name 'CreateIoCompletionPort'; +function CreateIoCompletionPort(FileHandle:HANDLE; ExistingCompletionPort:HANDLE; CompletionKey:ULONG_PTR; NumberOfConcurrentThreads:DWORD):HANDLE; external 'kernel32' name 'CreateIoCompletionPort'; function SetErrorMode(uMode:UINT):UINT; external 'kernel32' name 'SetErrorMode'; function ReadProcessMemory(hProcess:HANDLE; lpBaseAddress:LPCVOID; lpBuffer:LPVOID; nSize:DWORD; lpNumberOfBytesRead:LPDWORD):WINBOOL; external 'kernel32' name 'ReadProcessMemory'; function WriteProcessMemory(hProcess:HANDLE; lpBaseAddress:LPVOID; lpBuffer:LPVOID; nSize:DWORD; lpNumberOfBytesWritten:LPDWORD):WINBOOL; external 'kernel32' name 'WriteProcessMemory'; diff --git a/rtl/win/wininc/messages.inc b/rtl/win/wininc/messages.inc index 42ee3c65b9..6f48a6ac43 100644 --- a/rtl/win/wininc/messages.inc +++ b/rtl/win/wininc/messages.inc @@ -1287,11 +1287,12 @@ TWMQueryDragIcon = Windows.TWMQueryDragIcon; TWMTimeChange = Windows.TWMTimeChange; TWMUndo = Windows.TWMUndo; + TWMWindowPosChanged = TWMWindowPosMsg; + TWMWindowPosChanging= TWMWindowPosMsg; TWMPaste = Windows.TWMPaste; - TWMCut = Windows.TWMCut; - TWMCopy = Windows.TWMCopy; - + TWMCut = Windows.TWMCut; + TWMCopy = Windows.TWMCopy; {$else} {$ifdef cpu64} @@ -1426,7 +1427,7 @@ FocusedWnd : HWND; UnUsed : WPARAM; Result : LRESULT; - End; + end; TWMSetCursor = record Msg : UINT; diff --git a/rtl/win/wininc/redef.inc b/rtl/win/wininc/redef.inc index 943669c0de..e7a6289143 100644 --- a/rtl/win/wininc/redef.inc +++ b/rtl/win/wininc/redef.inc @@ -586,7 +586,7 @@ function GetProcessPriorityBoost(hThread: THandle; var DisablePriorityBoost: Boo function GetProcessShutdownParameters(var lpdwLevel, lpdwFlags: DWORD): BOOL; external 'kernel32' name 'GetProcessShutdownParameters'; function GetProcessTimes(hProcess: THandle; var lpCreationTime, lpExitTime, lpKernelTime, lpUserTime: TFileTime): BOOL; external 'kernel32' name 'GetProcessTimes'; function GetProcessWorkingSetSize(hProcess: THandle; var lpMinimumWorkingSetSize, lpMaximumWorkingSetSize: DWORD): BOOL; external 'kernel32' name 'GetProcessWorkingSetSize'; -function GetQueuedCompletionStatus(CompletionPort: THandle; var lpNumberOfBytesTransferred, lpCompletionKey: DWORD; var lpOverlapped: POverlapped; dwMilliseconds: DWORD): BOOL; external 'kernel32' name 'GetQueuedCompletionStatus'; +function GetQueuedCompletionStatus(CompletionPort: THandle; var lpNumberOfBytesTransferred: DWORD; var lpCompletionKey: ULONG_PTR; var lpOverlapped: POverlapped; dwMilliseconds: DWORD): BOOL; external 'kernel32' name 'GetQueuedCompletionStatus'; function PostQueuedCompletionStatus(CompletionPort: THandle; NumberOfBytesTransferred:dword; dwCompletionKey: ULONG_PTR; lpOverlapped: POverlapped): BOOL; external 'kernel32' name 'PostQueuedCompletionStatus'; function GetRasterizerCaps(var p1: TRasterizerStatus; p2: UINT): BOOL; external 'gdi32' name 'GetRasterizerCaps'; function GetRgnBox(RGN: HRGN; var p2: TRect): Integer; external 'gdi32' name 'GetRgnBox'; diff --git a/rtl/win/wininc/struct.inc b/rtl/win/wininc/struct.inc index 9bb065be53..df8e183d37 100644 --- a/rtl/win/wininc/struct.inc +++ b/rtl/win/wininc/struct.inc @@ -5052,8 +5052,8 @@ Const POSVERSIONINFOW = ^OSVERSIONINFOW; - - + {$push} + {$packrecords 4} TEXTMETRIC = record tmHeight : LONG; @@ -5113,9 +5113,9 @@ Const tagTEXTMETRICW = TEXTMETRICW; TTEXTMETRICW = TEXTMETRICW; PTEXTMETRICW = ^TEXTMETRICW; + {$PACKRECORDS C} - - OUTLINETEXTMETRIC = record + OUTLINETEXTMETRICA = record otmSize : UINT; otmTextMetrics : TEXTMETRIC; otmFiller : BYTE; @@ -5149,11 +5149,64 @@ Const otmpStyleName : PSTR; otmpFullName : PSTR; end; - LPOUTLINETEXTMETRIC = ^OUTLINETEXTMETRIC; - _OUTLINETEXTMETRIC = OUTLINETEXTMETRIC; - TOUTLINETEXTMETRIC = OUTLINETEXTMETRIC; - POUTLINETEXTMETRIC = ^OUTLINETEXTMETRIC; + LPOUTLINETEXTMETRICA = ^OUTLINETEXTMETRICA; + _OUTLINETEXTMETRICA = OUTLINETEXTMETRICA; + TOUTLINETEXTMETRICA = OUTLINETEXTMETRICA; + POUTLINETEXTMETRICA = ^OUTLINETEXTMETRICA; + OUTLINETEXTMETRICW = record + otmSize : UINT; + otmTextMetrics : TEXTMETRICW; + otmFiller : BYTE; + otmPanoseNumber : PANOSE; + otmfsSelection : UINT; + otmfsType : UINT; + otmsCharSlopeRise : longint; + otmsCharSlopeRun : longint; + otmItalicAngle : longint; + otmEMSquare : UINT; + otmAscent : longint; + otmDescent : longint; + otmLineGap : UINT; + otmsCapEmHeight : UINT; + otmsXHeight : UINT; + otmrcFontBox : RECT; + otmMacAscent : longint; + otmMacDescent : longint; + otmMacLineGap : UINT; + otmusMinimumPPEM : UINT; + otmptSubscriptSize : POINT; + otmptSubscriptOffset : POINT; + otmptSuperscriptSize : POINT; + otmptSuperscriptOffset : POINT; + otmsStrikeoutSize : UINT; + otmsStrikeoutPosition : longint; + otmsUnderscoreSize : longint; + otmsUnderscorePosition : longint; + otmpFamilyName : PSTR; + otmpFaceName : PSTR; + otmpStyleName : PSTR; + otmpFullName : PSTR; + end; + LPOUTLINETEXTMETRICW = ^OUTLINETEXTMETRICW; + _OUTLINETEXTMETRICW = OUTLINETEXTMETRICW; + TOUTLINETEXTMETRICW = OUTLINETEXTMETRICW; + POUTLINETEXTMETRICW = ^OUTLINETEXTMETRICW; + + {$ifdef Unicode} + LPOUTLINETEXTMETRIC = ^OUTLINETEXTMETRICW; + _OUTLINETEXTMETRIC = OUTLINETEXTMETRICW; + TOUTLINETEXTMETRIC = OUTLINETEXTMETRICW; + POUTLINETEXTMETRIC = ^OUTLINETEXTMETRICW; + OUTLINETEXTMETRIC = OUTLINETEXTMETRICW; + {$else} + LPOUTLINETEXTMETRIC = ^OUTLINETEXTMETRICA; + _OUTLINETEXTMETRIC = OUTLINETEXTMETRICA; + TOUTLINETEXTMETRIC = OUTLINETEXTMETRICA; + POUTLINETEXTMETRIC = ^OUTLINETEXTMETRICA; + OUTLINETEXTMETRIC = OUTLINETEXTMETRICA; + {$endif} + {$POP} OVERLAPPED = record Internal : ULONG_PTR; InternalHigh : ULONG_PTR; @@ -7570,15 +7623,15 @@ type //#endif /* WINVER >= 0x0500 */ -// Menubar information +// Menubar information type tagMENUBARINFO = packed record cbSize:DWORD; - rcBar:Windows.RECT; // rect of bar, popup, item - _hmenu:HMENU; // real menu handle of bar, popup - hwndMenu:HWND; // hwnd of item submenu if one -// fBarFocused:1:BOOL; // bar, popup has the focus -// fFocused:1:BOOL; // item has the focus + rcBar:Windows.RECT; // rect of bar, popup, item + _hmenu:HMENU; // real menu handle of bar, popup + hwndMenu:HWND; // hwnd of item submenu if one +// fBarFocused:1:BOOL; // bar, popup has the focus +// fFocused:1:BOOL; // item has the focus FocusedBits:DWORD; end; MENUBARINFO = tagMENUBARINFO; |