summaryrefslogtreecommitdiff
path: root/rtl/win
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/win')
-rw-r--r--rtl/win/sysutils.pp108
-rw-r--r--rtl/win/syswin.inc5
-rw-r--r--rtl/win/tthread.inc11
-rw-r--r--rtl/win/windirs.pp120
-rw-r--r--rtl/win/wininc/func.inc2
-rw-r--r--rtl/win/wininc/messages.inc9
-rw-r--r--rtl/win/wininc/redef.inc2
-rw-r--r--rtl/win/wininc/struct.inc81
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;