📄 dxcommon.pas
字号:
unit DXCommon;
interface
//{$DEFINE ERRORFUNCS}
uses
Windows;
const
UnrecognizedError = 'Unrecognized Error';
type
{$IFDEF UNICODE}
PCharAW = PWideChar;
{$ELSE}
PCharAW = PAnsiChar;
{$ENDIF}
function IsNTandDelphiRunning : boolean;
function RegGetStringValue(Hive: HKEY; const KeyName, ValueName: string): string;
function ExistFile(const FileName: string): Boolean;
{$IFDEF ERRORFUNCS}
function DXErrorString(Error: HResult): string;
function DXErrorMessage(Error: HResult): boolean;
{$ENDIF}
implementation
{$IFDEF ERRORFUNCS}
uses DirectInput8, DirectInput, DirectSound, DirectMusic, DirectPlay, DirectPlay8,
Direct3D, Direct3DRM, DirectDraw, DirectShow, DirectXGraphics,
Dialogs, SysUtils;
function DXErrorMessage(Error: HResult): boolean;
begin
Result := FAILED(Error);
if Result then
MessageDlg(DXErrorString(Error), mtError, [mbAbort], 0);
end;
function DXErrorString(Error: HResult): string;
var Facility: DWORD;
begin
Facility := (Error shr 16) and $7FFF;
case Facility of
// Direct3D, DirectDraw
_FACD3D : if (Error and $FFFF) > D3DERR_WRONGTEXTUREFORMAT
then Result := DirectXGraphics.DXGErrorString(Error)
else Result := DirectDraw.DDErrorString(Error);
// DirectMusic, DirectSound
_FACDS : if (Error and $FFFF) > DMUS_ERRBASE
then Result := DirectMusic.DMErrorString(Error)
else Result := DirectSound.DSErrorString(Error);
// DirectPlay
_FACDPV : Result := DirectPlay8.DPErrorString(Error);
_FACDPV7: Result := DirectPlay.DPErrorString(Error);
//Definitions still to come
else case Error of
S_OK : Result := '';
S_FALSE : Result := '';
E_INVALIDARG : Result := '';
E_NOINTERFACE : Result := '';
E_FAIL : Result := '';
E_OUTOFMEMORY : Result := '';
E_NOTIMPL : Result := '';
E_ACCESSDENIED : Result := '';
else Result := DirectInput.DIErrorString(Error);
end;
end;
end;
{$ENDIF}
function RegGetStringValue(Hive: HKEY; const KeyName, ValueName: string): string;
var EnvKey : HKEY;
Buf : array[0..255] of char;
BufSize : DWord;
RegType : DWord;
rc : DWord;
begin
Result := '';
BufSize := Sizeof(Buf);
ZeroMemory(@Buf, BufSize);
RegType := REG_SZ;
try
if (RegOpenKeyEx(Hive, PChar(KeyName), 0, KEY_READ, EnvKey) = ERROR_SUCCESS) then
begin
try
if (ValueName = '') then rc := RegQueryValueEx(EnvKey, nil, nil, @RegType, @Buf, @BufSize)
else rc := RegQueryValueEx(EnvKey, PChar(ValueName), nil, @RegType, @Buf, @BufSize);
if rc = ERROR_SUCCESS then Result := string(Buf);
finally
RegCloseKey(EnvKey);
end;
end;
finally
RegCloseKey(Hive);
end;
end;
function ExistFile(const FileName: string): Boolean;
var hFile: THandle;
begin
hFile := CreateFile(PChar(FileName), 0, 0, nil, OPEN_EXISTING, 0, 0);
Result := hFile <> INVALID_HANDLE_VALUE;
if Result = true then CloseHandle(hFile);
end;
function IsNTandDelphiRunning : boolean;
var
OSVersion : TOSVersionInfo;
AppName : array[0..255] of char;
begin
OSVersion.dwOsVersionInfoSize := sizeof(OSVersion);
GetVersionEx(OSVersion);
// Not running in NT or program is not Delphi itself ?
AppName[0] := #0;
lstrcat(AppName, PChar(ParamStr(0))); // ParamStr(0) = Application.ExeName
CharUpperBuff(AppName, SizeOf(AppName));
result := ( (OSVersion.dwPlatformID = VER_PLATFORM_WIN32_NT) and
(Pos('DELPHI32.EXE', AppName) = Length(AppName) - Length('DELPHI32.EXE') + 1) );
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -