git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jvcl@19 7f62d464-2af8-f54e-996c-e91b33f51cbe
6282 lines
204 KiB
ObjectPascal
6282 lines
204 KiB
ObjectPascal
{-----------------------------------------------------------------------------
|
|
The contents of this file are subject to the Mozilla Public License
|
|
Version 1.1 (the "License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/MPL-1.1.html
|
|
|
|
Software distributed under the License is distributed on an "AS IS" basis,
|
|
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
|
|
the specific language governing rights and limitations under the License.
|
|
|
|
The Original Code is: JvComputerInfoEx.PAS, released on 2004-03-07.
|
|
|
|
The Initial Developer of the Original Code is Peter Thrnqvist [peter3 at sourceforge dot net]
|
|
Portions created by Peter Thrnqvist are Copyright (C) 2004 Peter Thrnqvist.
|
|
All Rights Reserved.
|
|
|
|
Contributor(s):
|
|
Andr?nepvangers - better TimeRunning
|
|
|
|
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
|
|
located at http://jvcl.delphi-jedi.org
|
|
|
|
Description
|
|
A read-only computer info component. Subproperties are created as needed so loading
|
|
at run-time should be pretty fast.
|
|
|
|
This component replaces JvComputerInfo, JvKeyboardStates, JvDeviceChanged, JvDirectories
|
|
and JvSystemColors.
|
|
|
|
Known Issues:
|
|
* ADO version info might not be correct/available on all systems (depending on the ADO version installed)
|
|
* ResetSystemIcons only tested on W2k
|
|
|
|
-----------------------------------------------------------------------------}
|
|
// $Id: JvComputerInfoEx.pas 12596 2009-11-05 16:20:15Z outchy $
|
|
|
|
unit JvComputerInfoEx;
|
|
|
|
{$I jvcl.inc}
|
|
{$I windowsonly.inc}
|
|
|
|
{$HPPEMIT '#pragma link "wininet.lib"'}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF UNITVERSIONING}
|
|
JclUnitVersioning,
|
|
{$ENDIF UNITVERSIONING}
|
|
Windows, Messages, SysUtils, ShlObj, ShellAPI,
|
|
Classes, Graphics, Controls,
|
|
JclWin32, JclSysInfo,
|
|
JvJVCLUtils, JvComponentBase, JvTypes;
|
|
|
|
{$HPPEMIT '#include <dbt.h>'}
|
|
// these are defined here to avoid including DBT.pas
|
|
const
|
|
{$EXTERNALSYM DBT_DEVICEARRIVAL}
|
|
DBT_DEVICEARRIVAL = $8000; { system detected a new device }
|
|
{$EXTERNALSYM DBT_DEVICEREMOVECOMPLETE}
|
|
DBT_DEVICEREMOVECOMPLETE = $8004; { device is gone }
|
|
{$EXTERNALSYM DBT_DEVTYP_VOLUME}
|
|
DBT_DEVTYP_VOLUME = $00000002; { logical volume }
|
|
{$EXTERNALSYM DBTF_MEDIA}
|
|
DBTF_MEDIA = $0001; { media comings and goings }
|
|
|
|
// new params for SystemParametersInfo not defined in Windows
|
|
SPI_GETDESKWALLPAPER = $0073;
|
|
{$EXTERNALSYM SPI_GETDESKWALLPAPER}
|
|
SPI_GETMOUSESONAR = $101C;
|
|
{$EXTERNALSYM SPI_GETMOUSESONAR}
|
|
SPI_SETMOUSESONAR = $101D;
|
|
{$EXTERNALSYM SPI_SETMOUSESONAR}
|
|
SPI_GETMOUSECLICKLOCK = $101E;
|
|
{$EXTERNALSYM SPI_GETMOUSECLICKLOCK}
|
|
SPI_SETMOUSECLICKLOCK = $101F;
|
|
{$EXTERNALSYM SPI_SETMOUSECLICKLOCK}
|
|
SPI_GETMOUSEVANISH = $1020;
|
|
{$EXTERNALSYM SPI_GETMOUSEVANISH}
|
|
SPI_SETMOUSEVANISH = $1021;
|
|
{$EXTERNALSYM SPI_SETMOUSEVANISH}
|
|
SPI_GETFLATMENU = $1022;
|
|
{$EXTERNALSYM SPI_GETFLATMENU}
|
|
SPI_SETFLATMENU = $1023;
|
|
{$EXTERNALSYM SPI_SETFLATMENU}
|
|
SPI_GETDROPSHADOW = $1024;
|
|
{$EXTERNALSYM SPI_GETDROPSHADOW}
|
|
SPI_SETDROPSHADOW = $1025;
|
|
{$EXTERNALSYM SPI_SETDROPSHADOW}
|
|
|
|
SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
|
|
{$EXTERNALSYM SPI_GETFOREGROUNDLOCKTIMEOUT}
|
|
SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
|
|
{$EXTERNALSYM SPI_SETFOREGROUNDLOCKTIMEOUT}
|
|
SPI_GETACTIVEWNDTRKTIMEOUT = $2002;
|
|
{$EXTERNALSYM SPI_GETACTIVEWNDTRKTIMEOUT}
|
|
SPI_SETACTIVEWNDTRKTIMEOUT = $2003;
|
|
{$EXTERNALSYM SPI_SETACTIVEWNDTRKTIMEOUT}
|
|
SPI_GETFOREGROUNDFLASHCOUNT = $2004;
|
|
{$EXTERNALSYM SPI_GETFOREGROUNDFLASHCOUNT}
|
|
SPI_SETFOREGROUNDFLASHCOUNT = $2005;
|
|
{$EXTERNALSYM SPI_SETFOREGROUNDFLASHCOUNT}
|
|
SPI_GETCARETWIDTH = $2006;
|
|
{$EXTERNALSYM SPI_GETCARETWIDTH}
|
|
SPI_SETCARETWIDTH = $2007;
|
|
{$EXTERNALSYM SPI_SETCARETWIDTH}
|
|
|
|
SPI_GETMOUSECLICKLOCKTIME = $2008;
|
|
{$EXTERNALSYM SPI_GETMOUSECLICKLOCKTIME}
|
|
SPI_SETMOUSECLICKLOCKTIME = $2009;
|
|
{$EXTERNALSYM SPI_SETMOUSECLICKLOCKTIME}
|
|
SPI_GETFONTSMOOTHINGTYPE = $200A;
|
|
{$EXTERNALSYM SPI_GETFONTSMOOTHINGTYPE}
|
|
SPI_SETFONTSMOOTHINGTYPE = $200B;
|
|
{$EXTERNALSYM SPI_SETFONTSMOOTHINGTYPE}
|
|
|
|
{ constants for SPI_GETFONTSMOOTHINGTYPE and SPI_SETFONTSMOOTHINGTYPE: }
|
|
FE_FONTSMOOTHINGSTANDARD = $0001;
|
|
{$EXTERNALSYM FE_FONTSMOOTHINGSTANDARD}
|
|
FE_FONTSMOOTHINGCLEARTYPE = $0002;
|
|
{$EXTERNALSYM FE_FONTSMOOTHINGCLEARTYPE}
|
|
FE_FONTSMOOTHINGDOCKING = $8000;
|
|
{$EXTERNALSYM FE_FONTSMOOTHINGDOCKING}
|
|
|
|
SPI_GETFONTSMOOTHINGCONTRAST = $200C;
|
|
{$EXTERNALSYM SPI_GETFONTSMOOTHINGCONTRAST}
|
|
SPI_SETFONTSMOOTHINGCONTRAST = $200D;
|
|
{$EXTERNALSYM SPI_SETFONTSMOOTHINGCONTRAST}
|
|
|
|
SPI_GETFOCUSBORDERWIDTH = $200E;
|
|
{$EXTERNALSYM SPI_GETFOCUSBORDERWIDTH}
|
|
SPI_SETFOCUSBORDERWIDTH = $200F;
|
|
{$EXTERNALSYM SPI_SETFOCUSBORDERWIDTH}
|
|
SPI_GETFOCUSBORDERHEIGHT = $2010;
|
|
{$EXTERNALSYM SPI_GETFOCUSBORDERHEIGHT}
|
|
SPI_SETFOCUSBORDERHEIGHT = $2011;
|
|
{$EXTERNALSYM SPI_SETFOCUSBORDERHEIGHT}
|
|
|
|
type
|
|
EJVCLComputerInfoEx = class(EJVCLException);
|
|
|
|
{$EXTERNALSYM PDevBroadcastHdr}
|
|
PDevBroadcastHdr = ^TDevBroadcastHdr;
|
|
{$EXTERNALSYM DEV_BROADCAST_HDR}
|
|
DEV_BROADCAST_HDR = packed record
|
|
dbch_size: DWORD;
|
|
dbch_devicetype: DWORD;
|
|
dbch_reserved: DWORD;
|
|
end;
|
|
TDevBroadcastHdr = DEV_BROADCAST_HDR;
|
|
|
|
{$EXTERNALSYM PDevBroadcastVolume}
|
|
PDevBroadcastVolume = ^TDevBroadcastVolume;
|
|
{$EXTERNALSYM DEV_BROADCAST_VOLUME}
|
|
DEV_BROADCAST_VOLUME = packed record
|
|
dbcv_size: DWORD;
|
|
dbcv_devicetype: DWORD;
|
|
dbcv_reserved: DWORD;
|
|
dbcv_unitmask: DWORD;
|
|
dbcv_flags: Word;
|
|
end;
|
|
TDevBroadcastVolume = DEV_BROADCAST_VOLUME;
|
|
|
|
TWMDeviceChange = record
|
|
Msg: Cardinal;
|
|
Event: UINT;
|
|
dwData: Pointer;
|
|
Result: Longint;
|
|
end;
|
|
|
|
// TJvReadOnlyInfo doesn't have any writeable properties
|
|
TJvReadOnlyInfo = class(TPersistent);
|
|
|
|
// TJvWriteableInfo have at least one writeable property
|
|
// and also have a ReadOnly property that controls whether the properties
|
|
// are allowed to change
|
|
TJvWriteableInfo = class(TPersistent)
|
|
private
|
|
FReadOnly: Boolean;
|
|
protected
|
|
property ReadOnly: Boolean read FReadOnly write FReadOnly default True;
|
|
public
|
|
constructor Create;
|
|
end;
|
|
|
|
TJvAPMInfo = class(TJvReadOnlyInfo)
|
|
private
|
|
function GetAPMBatteryFlag: TAPMBatteryFlag;
|
|
function GetAPMBatteryFullLifeTime: DWORD;
|
|
function GetAPMBatteryLifePercent: Integer;
|
|
function GetAPMBatteryLifeTime: DWORD;
|
|
function GetAPMLineStatus: TAPMLineStatus;
|
|
procedure SetAPMBatteryFlag(const Value: TAPMBatteryFlag);
|
|
procedure SetAPMBatteryFullLifeTime(const Value: DWORD);
|
|
procedure SetAPMBatteryLifePercent(const Value: Integer);
|
|
procedure SetAPMBatteryLifeTime(const Value: DWORD);
|
|
procedure SetAPMLineStatus(const Value: TAPMLineStatus);
|
|
published
|
|
property LineStatus: TAPMLineStatus read GetAPMLineStatus write SetAPMLineStatus stored False;
|
|
property BatteryFlag: TAPMBatteryFlag read GetAPMBatteryFlag write SetAPMBatteryFlag stored False;
|
|
property BatteryLifePercent: Integer read GetAPMBatteryLifePercent write SetAPMBatteryLifePercent stored False;
|
|
property BatteryLifeTime: DWORD read GetAPMBatteryLifeTime write SetAPMBatteryLifeTime stored False;
|
|
property BatteryFullLifeTime: DWORD read GetAPMBatteryFullLifeTime write SetAPMBatteryFullLifeTime stored False;
|
|
end;
|
|
|
|
TJvOSVersionInfo = class(TJvReadOnlyInfo)
|
|
private
|
|
function GetProductType: TNtProductType;
|
|
function GetWinProductID: string;
|
|
function GetWinProductName: string;
|
|
function GetWinVersionBuild: DWORD;
|
|
function GetWinVersionMajor: DWORD;
|
|
function GetWinVersionMinor: DWORD;
|
|
function GetWinVersionCSDString: string;
|
|
procedure SetProductType(const Value: TNtProductType);
|
|
procedure SetWinProductID(const Value: string);
|
|
procedure SetWinProductName(const Value: string);
|
|
procedure SetWinVersionBuild(const Value: DWORD);
|
|
procedure SetWinVersionMajor(const Value: DWORD);
|
|
procedure SetWinVersionMinor(const Value: DWORD);
|
|
procedure SetWinVersionCSDString(const Value: string);
|
|
function GetWinServicePackVersion: DWORD;
|
|
procedure SetWinServicePackVersion(const Value: DWORD);
|
|
function GetOSVersion: TWindowsVersion;
|
|
procedure SetOSVersion(const Value: TWindowsVersion);
|
|
published
|
|
property OSVersion: TWindowsVersion read GetOSVersion write SetOSVersion stored False;
|
|
property ProductType: TNtProductType read GetProductType write SetProductType stored False;
|
|
property ProductID: string read GetWinProductID write SetWinProductID stored False;
|
|
property ProductName: string read GetWinProductName write SetWinProductName stored False;
|
|
property ServicePackVersion: DWORD read GetWinServicePackVersion write SetWinServicePackVersion stored False;
|
|
property VersionBuild: DWORD read GetWinVersionBuild write SetWinVersionBuild stored False;
|
|
property VersionMajor: DWORD read GetWinVersionMajor write SetWinVersionMajor stored False;
|
|
property VersionMinor: DWORD read GetWinVersionMinor write SetWinVersionMinor stored False;
|
|
property VersionCSDString: string read GetWinVersionCSDString write SetWinVersionCSDString stored False;
|
|
end;
|
|
|
|
TJvCPUType = (cpuUnknown, cpuIntel, cpuCyrix, cpuAMD, cpuCrusoe);
|
|
|
|
TJvCPUInfo = class(TJvReadOnlyInfo)
|
|
private
|
|
function GetCPUInfo: TCPUInfo;
|
|
function GetCPUSpeed: TFreqInfo;
|
|
function GetCPUName: string;
|
|
function GetCPUType: TJvCPUType;
|
|
function GetExTicks: Cardinal;
|
|
function GetFamily: Byte;
|
|
function GetFeatures: Cardinal;
|
|
function GetHasCacheInfo: Boolean;
|
|
function GetHasExtendedInfo: Boolean;
|
|
function GetHasInstruction: Boolean;
|
|
function GetInCycles: Cardinal;
|
|
function GetIsFDIVOK: Boolean;
|
|
function GetManufacturer: string;
|
|
function GetMMX: Boolean;
|
|
function GetSSE: TSSESupports;
|
|
function GetModel: Byte;
|
|
function GetNormFreq: Int64;
|
|
function GetRawFreq: Int64;
|
|
function GetStepping: Byte;
|
|
function GetVendorIDString: string;
|
|
function GetProcessorCount: Integer;
|
|
function Get3DNow: Boolean;
|
|
function GetEx3DNow: Boolean;
|
|
function GetExMMX: Boolean;
|
|
function GetIs64Bits: Boolean;
|
|
function GetL1CodeCache: Cardinal;
|
|
function GetL1DataCache: Cardinal;
|
|
function GetL2Cache: Cardinal;
|
|
function GetL3Cache: Cardinal;
|
|
function GetDEPCapable: Boolean;
|
|
function GetLogicalCore: Byte;
|
|
function GetPhysicalCore: Byte;
|
|
function GetHyperThreadingTechnology: Boolean;
|
|
procedure SetCPUName(const Value: string);
|
|
procedure SetCPUType(const Value: TJvCPUType);
|
|
procedure SetExTicks(const Value: Cardinal);
|
|
procedure SetFamily(const Value: Byte);
|
|
procedure SetFeatures(const Value: Cardinal);
|
|
procedure SetHasCacheInfo(const Value: Boolean);
|
|
procedure SetHasExtendedInfo(const Value: Boolean);
|
|
procedure SetHasInstruction(const Value: Boolean);
|
|
procedure SetInCycles(const Value: Cardinal);
|
|
procedure SetIsFDIVOK(const Value: Boolean);
|
|
procedure SetManufacturer(const Value: string);
|
|
procedure SetMMX(const Value: Boolean);
|
|
procedure SetSSE(const Value: TSSESupports);
|
|
procedure SetModel(const Value: Byte);
|
|
procedure SetNormFreq(const Value: Int64);
|
|
procedure SetRawFreq(const Value: Int64);
|
|
procedure SetStepping(const Value: Byte);
|
|
procedure SetVendorIDString(const Value: string);
|
|
procedure SetProcessorCount(const Value: Integer);
|
|
procedure Set3DNow(const Value: Boolean);
|
|
procedure SetEx3DNow(const Value: Boolean);
|
|
procedure SetExMMX(const Value: Boolean);
|
|
procedure SetIs64Bits(const Value: Boolean);
|
|
procedure SetL1CodeCache(const Value: Cardinal);
|
|
procedure SetL1DataCache(const Value: Cardinal);
|
|
procedure SetL2Cache(const Value: Cardinal);
|
|
procedure SetL3Cache(const Value: Cardinal);
|
|
procedure SetDEPCapable(const Value: Boolean);
|
|
procedure SetLogicalCore(const Value: Byte);
|
|
procedure SetPhysicalCore(const Value: Byte);
|
|
procedure SetHyperThreadingTechnology(const Value: Boolean);
|
|
public
|
|
function IntelSpecific: TIntelSpecific;
|
|
function CyrixSpecific: TCyrixSpecific;
|
|
function AMDSpecific: TAMDSpecific;
|
|
function TransmetaSpecific: TTransmetaSpecific;
|
|
function ViaSpecific: TViaSpecific;
|
|
public
|
|
property Features: Cardinal read GetFeatures write SetFeatures stored False;
|
|
property TotalCycles: Cardinal read GetInCycles write SetInCycles stored False;
|
|
property TotalTicks: Cardinal read GetExTicks write SetExTicks stored False;
|
|
published
|
|
// CPUInfo
|
|
property HasInstruction: Boolean read GetHasInstruction write SetHasInstruction stored False;
|
|
property MMX: Boolean read GetMMX write SetMMX stored False;
|
|
property SSE: TSSESupports read GetSSE write SetSSE stored False;
|
|
property IsFDIVOK: Boolean read GetIsFDIVOK write SetIsFDIVOK stored False;
|
|
property HasCacheInfo: Boolean read GetHasCacheInfo write SetHasCacheInfo stored False;
|
|
property HasExtendedInfo: Boolean read GetHasExtendedInfo write SetHasExtendedInfo stored False;
|
|
property CPUType: TJvCPUType read GetCPUType write SetCPUType stored False;
|
|
property Family: Byte read GetFamily write SetFamily stored False;
|
|
property Model: Byte read GetModel write SetModel stored False;
|
|
property Stepping: Byte read GetStepping write SetStepping stored False;
|
|
property VendorIDString: string read GetVendorIDString write SetVendorIDString stored False;
|
|
property Manufacturer: string read GetManufacturer write SetManufacturer stored False;
|
|
property Name: string read GetCPUName write SetCPUName stored False;
|
|
property ProcessorCount: Integer read GetProcessorCount write SetProcessorCount stored False;
|
|
property Is64Bits: Boolean read GetIs64Bits write SetIs64Bits stored False;
|
|
property ExMMX: Boolean read GetExMMX write SetExMMX stored False;
|
|
property _3DNow: Boolean read Get3DNow write Set3DNow stored False;
|
|
property Ex3DNow: Boolean read GetEx3DNow write SetEx3DNow stored False;
|
|
property L1DataCache: Cardinal read GetL1DataCache write SetL1DataCache stored False;
|
|
property L1CodeCache: Cardinal read GetL1CodeCache write SetL1CodeCache stored False;
|
|
property L2Cache: Cardinal read GetL2Cache write SetL2Cache stored False;
|
|
property L3Cache: Cardinal read GetL3Cache write SetL3Cache stored False;
|
|
// FreqInfo
|
|
property RawFreq: Int64 read GetRawFreq write SetRawFreq stored False;
|
|
property NormFreq: Int64 read GetNormFreq write SetNormFreq stored False;
|
|
property DEPCapable: Boolean read GetDEPCapable write SetDEPCapable stored False;
|
|
property PhysicalCore: Byte read GetPhysicalCore write SetPhysicalCore stored False;
|
|
property LogicalCore: Byte read GetLogicalCore write SetLogicalCore stored False;
|
|
property HyperThreadingTechnology: Boolean read GetHyperThreadingTechnology write SetHyperThreadingTechnology stored False;
|
|
end;
|
|
|
|
TJvBIOSInfo = class(TJvReadOnlyInfo)
|
|
private
|
|
function GetBIOSCopyright: string;
|
|
function GetBIOSDate: TDateTime;
|
|
function GetBIOSExtendedInfo: string;
|
|
function GetBIOSName: string;
|
|
procedure SetBIOSCopyright(const Value: string);
|
|
procedure SetBIOSDate(const Value: TDateTime);
|
|
procedure SetBIOSExtendedInfo(const Value: string);
|
|
procedure SetBIOSName(const Value: string);
|
|
published
|
|
property Name: string read GetBIOSName write SetBIOSName stored False;
|
|
property Copyright: string read GetBIOSCopyright write SetBIOSCopyright stored False;
|
|
property ExtendedInfo: string read GetBIOSExtendedInfo write SetBIOSExtendedInfo stored False;
|
|
property Date: TDateTime read GetBIOSDate write SetBIOSDate stored False;
|
|
end;
|
|
|
|
TJvSystemFolders = class(TJvWriteableInfo)
|
|
// writeable: Current
|
|
private
|
|
FTrailingPathDelimiter: Boolean;
|
|
function GetCurrent: string;
|
|
function Get(const Index: Integer): string;
|
|
function GetProgramFiles: string;
|
|
function GetWindows: string;
|
|
function GetSystem: string;
|
|
function GetTemp: string;
|
|
procedure SetCommonFiles(const Value: string);
|
|
procedure SetCurrent(const Value: string);
|
|
procedure Put(const Index: Integer; const Value: string);
|
|
procedure SetProgramFiles(const Value: string);
|
|
procedure SetWindows(const Value: string);
|
|
procedure SetSystem(const Value: string);
|
|
procedure SetTemp(const Value: string);
|
|
function GetCommonFiles: string;
|
|
function AdjustPathDelimiter(const S: string): string;
|
|
published
|
|
property TrailingPathDelimiter: Boolean read FTrailingPathDelimiter write FTrailingPathDelimiter default False;
|
|
property CommonFiles: string read GetCommonFiles write SetCommonFiles stored False;
|
|
property Current: string read GetCurrent write SetCurrent stored False;
|
|
property ProgramFiles: string read GetProgramFiles write SetProgramFiles stored False;
|
|
property Windows: string read GetWindows write SetWindows stored False;
|
|
property System: string read GetSystem write SetSystem stored False;
|
|
property Temp: string read GetTemp write SetTemp stored False;
|
|
property Desktop: string index CSIDL_DESKTOP read Get write Put stored False;
|
|
property Programs: string index CSIDL_PROGRAMS read Get write Put stored False;
|
|
property Personal: string index CSIDL_PERSONAL read Get write Put stored False;
|
|
property Favorites: string index CSIDL_FAVORITES read Get write Put stored False;
|
|
property Startup: string index CSIDL_STARTUP read Get write Put stored False;
|
|
property Recent: string index CSIDL_RECENT read Get write Put stored False;
|
|
property SendTo: string index CSIDL_SENDTO read Get write Put stored False;
|
|
property StartMenu: string index CSIDL_STARTMENU read Get write Put stored False;
|
|
property DesktopDirectory: string index CSIDL_DESKTOPDIRECTORY read Get write Put stored False;
|
|
property Nethood: string index CSIDL_NETHOOD read Get write Put stored False;
|
|
property Fonts: string index CSIDL_FONTS read Get write Put stored False;
|
|
property CommonStartmenu: string index CSIDL_COMMON_STARTMENU read Get write Put stored False;
|
|
property CommonPrograms: string index CSIDL_COMMON_PROGRAMS read Get write Put stored False;
|
|
property CommonStartup: string index CSIDL_COMMON_STARTUP read Get write Put stored False;
|
|
property CommonDesktopDirectory: string index CSIDL_COMMON_DESKTOPDIRECTORY read Get write Put stored False;
|
|
property CommonAppData: string index CSIDL_COMMON_APPDATA read Get write Put stored False;
|
|
property AppData: string index CSIDL_APPDATA read Get write Put stored False;
|
|
property Printhood: string index CSIDL_PRINTHOOD read Get write Put stored False;
|
|
property CommonFavorites: string index CSIDL_COMMON_FAVORITES read Get write Put stored False;
|
|
property Templates: string index CSIDL_TEMPLATES read Get write Put stored False;
|
|
property InternetCache: string index CSIDL_INTERNET_CACHE read Get write Put stored False;
|
|
property Cookies: string index CSIDL_COOKIES read Get write Put stored False;
|
|
property History: string index CSIDL_HISTORY read Get write Put stored False;
|
|
property Profile: string index CSIDL_PROFILE read Get write Put stored False;
|
|
end;
|
|
|
|
TJvMemInfo = class(TJvReadOnlyInfo)
|
|
private
|
|
function GetFreePageFileMemory: Int64;
|
|
function GetFreePhysicalMemory: Int64;
|
|
function GetFreeVirtualMemory: Int64;
|
|
function GetMaxAppAddress: Integer;
|
|
function GetMemoryLoad: Int64;
|
|
function GetMinAppAddress: Integer;
|
|
function GetSwapFileSize: Int64;
|
|
function GetSwapFileUsage: Integer;
|
|
function GetTotalPageFileMemory: Int64;
|
|
function GetTotalPhysicalMemory: Int64;
|
|
function GetTotalVirtualMemory: Int64;
|
|
procedure SetFreePageFileMemory(const Value: Int64);
|
|
procedure SetFreePhysicalMemory(const Value: Int64);
|
|
procedure SetFreeVirtualMemory(const Value: Int64);
|
|
procedure SetMaxAppAddress(const Value: Integer);
|
|
procedure SetMemoryLoad(const Value: Int64);
|
|
procedure SetMinAppAddress(const Value: Integer);
|
|
procedure SetSwapFileSize(const Value: Int64);
|
|
procedure SetSwapFileUsage(const Value: Integer);
|
|
procedure SetTotalPageFileMemory(const Value: Int64);
|
|
procedure SetTotalPhysicalMemory(const Value: Int64);
|
|
procedure SetTotalVirtualMemory(const Value: Int64);
|
|
published
|
|
property MaxAppAddress: Integer read GetMaxAppAddress write SetMaxAppAddress stored False;
|
|
property MinAppAddress: Integer read GetMinAppAddress write SetMinAppAddress stored False;
|
|
property MemoryLoad: Int64 read GetMemoryLoad write SetMemoryLoad stored False;
|
|
property SwapFileSize: Int64 read GetSwapFileSize write SetSwapFileSize stored False;
|
|
property SwapFileUsage: Integer read GetSwapFileUsage write SetSwapFileUsage stored False;
|
|
property TotalPhysicalMemory: Int64 read GetTotalPhysicalMemory write SetTotalPhysicalMemory stored False;
|
|
property FreePhysicalMemory: Int64 read GetFreePhysicalMemory write SetFreePhysicalMemory stored False;
|
|
property TotalPageFileMemory: Int64 read GetTotalPageFileMemory write SetTotalPageFileMemory stored False;
|
|
property FreePageFileMemory: Int64 read GetFreePageFileMemory write SetFreePageFileMemory stored False;
|
|
property TotalVirtualMemory: Int64 read GetTotalVirtualMemory write SetTotalVirtualMemory stored False;
|
|
property FreeVirtualMemory: Int64 read GetFreeVirtualMemory write SetFreeVirtualMemory stored False;
|
|
end;
|
|
|
|
TJvKeyInfo = class(TJvWriteableInfo)
|
|
// writeable: KeyState[], NumLock, ScrollLock, CapsLock
|
|
private
|
|
function GetCapsLockKeyState: Boolean;
|
|
function GetKeyState(const VirtualKey: Cardinal): Boolean;
|
|
function GetNumLockKeyState: Boolean;
|
|
function GetScrollLockKeyState: Boolean;
|
|
procedure SetCapsLockKeyState(const Value: Boolean);
|
|
procedure SetKeyState(const VirtualKey: Cardinal; const Value: Boolean);
|
|
procedure SetNumLockKeyState(const Value: Boolean);
|
|
procedure SetScrollLockKeyState(const Value: Boolean);
|
|
public
|
|
property KeyState[const VirtualKey: Cardinal]: Boolean read GetKeyState write SetKeyState;
|
|
published
|
|
property NumLock: Boolean read GetNumLockKeyState write SetNumLockKeyState stored False;
|
|
property ScrollLock: Boolean read GetScrollLockKeyState write SetScrollLockKeyState stored False;
|
|
property CapsLock: Boolean read GetCapsLockKeyState write SetCapsLockKeyState stored False;
|
|
end;
|
|
|
|
TJvIdentification = class(TJvWriteableInfo)
|
|
// writeable: ComputerName (reboot needed), RegisteredCompany, RegisteredOwner, Comment (Win95, 98 and XP only)
|
|
private
|
|
function GetDomainName: string;
|
|
function GetLocalComputerName: string;
|
|
function GetLocalUserName: string;
|
|
function GetLocalWorkgroup: string;
|
|
function GetRegisteredCompany: string;
|
|
function GetRegisteredOwner: string;
|
|
function GetHostIPAddress(const HostName: string): string;
|
|
function GetUserDomainName(const CurUser: string): string;
|
|
function GetVolumeFileSystem(const Drive: string): string;
|
|
function GetVolumeName(const Drive: string): string;
|
|
function GetVolumeSerialNumber(const Drive: string): string;
|
|
function GetIPAddress: string;
|
|
procedure SetDomainName(const Value: string);
|
|
procedure SetLocalComputerName(const Value: string);
|
|
procedure SetLocalUserName(const Value: string);
|
|
procedure SetLocalWorkgroup(const Value: string);
|
|
procedure SetRegisteredCompany(const Value: string);
|
|
procedure SetRegisteredOwner(const Value: string);
|
|
procedure SetIPAddress(const Value: string);
|
|
function GetComment: string;
|
|
procedure SetComment(const Value: string);
|
|
public
|
|
property VolumeName[const Drive: string]: string read GetVolumeName;
|
|
property VolumeSerialNumber[const Drive: string]: string read GetVolumeSerialNumber;
|
|
property VolumeFileSystem[const Drive: string]: string read GetVolumeFileSystem;
|
|
property HostIPAddress[const HostName: string]: string read GetHostIPAddress;
|
|
property UserDomainName[const CurUser: string]: string read GetUserDomainName;
|
|
published
|
|
property IPAddress: string read GetIPAddress write SetIPAddress;
|
|
property LocalComputerName: string read GetLocalComputerName write SetLocalComputerName stored False;
|
|
property LocalUserName: string read GetLocalUserName write SetLocalUserName stored False;
|
|
property LocalWorkgroup: string read GetLocalWorkgroup write SetLocalWorkgroup stored False;
|
|
property DomainName: string read GetDomainName write SetDomainName stored False;
|
|
property RegisteredCompany: string read GetRegisteredCompany write SetRegisteredCompany stored False;
|
|
property RegisteredOwner: string read GetRegisteredOwner write SetRegisteredOwner stored False;
|
|
// NB!!! "Comment" property only supported on Win95, 96 and some NT OS's!
|
|
property Comment: string read GetComment write SetComment stored False;
|
|
end;
|
|
|
|
TJvDisplayFlags = set of (dmGrayScale, dmInterlaced);
|
|
TJvScreenMode = class(TJvReadOnlyInfo)
|
|
private
|
|
FHz: DWORD;
|
|
FBitsPerPixel: DWORD;
|
|
FWidth: Integer;
|
|
FHeight: Integer;
|
|
FFlags: TJvDisplayFlags;
|
|
procedure SetBitsPerPixel(const Value: DWORD);
|
|
procedure SetFlags(const Value: TJvDisplayFlags);
|
|
procedure SetHeight(const Value: Integer);
|
|
procedure SetHz(const Value: DWORD);
|
|
procedure SetWidth(const Value: Integer);
|
|
published
|
|
property Width: Integer read FWidth write SetWidth;
|
|
property Height: Integer read FHeight write SetHeight;
|
|
property BitsPerPixel: DWORD read FBitsPerPixel write SetBitsPerPixel;
|
|
property Hz: DWORD read FHz write SetHz;
|
|
property Flags: TJvDisplayFlags read FFlags write SetFlags;
|
|
end;
|
|
|
|
TJvScreenModes = class(TJvReadOnlyInfo)
|
|
private
|
|
FItems: TList;
|
|
FDefaultMode: TJvScreenMode;
|
|
function GetItems(Index: Integer): TJvScreenMode;
|
|
procedure SetItems(Index: Integer; const Value: TJvScreenMode);
|
|
function GetCount: Integer;
|
|
protected
|
|
procedure Clear;
|
|
public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
procedure Refresh;
|
|
property Items[Index: Integer]: TJvScreenMode read GetItems write SetItems; default;
|
|
property Count: Integer read GetCount;
|
|
end;
|
|
|
|
TJvScreenInfo = class(TJvWriteableInfo)
|
|
// writeable: BitsPerPixel, Flags, Width, Height, Hz
|
|
private
|
|
FScreenModes: TJvScreenModes;
|
|
function GetBitsPerPixel: DWORD;
|
|
function GetScreenResolution: TPoint;
|
|
function GetScreenFrequency: DWORD;
|
|
function GetScreenHeight: DWORD;
|
|
function GetScreenWidth: DWORD;
|
|
procedure SetBitsPerPixel(const Value: DWORD);
|
|
procedure SetScreenResolution(const Value: TPoint);
|
|
procedure SetScreenFrequency(const Value: DWORD);
|
|
procedure SetScreenHeight(const Value: DWORD);
|
|
procedure SetScreenWidth(const Value: DWORD);
|
|
function GetFlags: TJvDisplayFlags;
|
|
procedure SetFlags(const Value: TJvDisplayFlags);
|
|
function GetScreenModes: TJvScreenModes;
|
|
procedure SetScreenModes(const Value: TJvScreenModes);
|
|
protected
|
|
function GetCurrentMode: TDeviceMode;
|
|
procedure SetCurrentMode(ADeviceMode: TDeviceMode; Flags: DWORD);
|
|
public
|
|
destructor Destroy; override;
|
|
property ScreenResolution: TPoint read GetScreenResolution write SetScreenResolution stored False;
|
|
property ScreenModes: TJvScreenModes read GetScreenModes write SetScreenModes stored False;
|
|
published
|
|
property BitsPerPixel: DWORD read GetBitsPerPixel write SetBitsPerPixel stored False;
|
|
property Flags: TJvDisplayFlags read GetFlags write SetFlags;
|
|
property Width: DWORD read GetScreenWidth write SetScreenWidth stored False;
|
|
property Height: DWORD read GetScreenHeight write SetScreenHeight stored False;
|
|
property Hz: DWORD read GetScreenFrequency write SetScreenFrequency stored False;
|
|
end;
|
|
|
|
TJvAppVersions = class(TJvReadOnlyInfo)
|
|
private
|
|
function GetADOVersion: string;
|
|
function GetBDELocation: string;
|
|
function GetBDEVersion: string;
|
|
function GetIEVersion: string;
|
|
function GetOpenGLVersion: string;
|
|
function GetDirectXVersion: string;
|
|
procedure SetADOVersion(const Value: string);
|
|
procedure SetBDEVersion(const Value: string);
|
|
procedure SetIEVersion(const Value: string);
|
|
procedure SetOpenGLVersion(const Value: string);
|
|
procedure SetDirectXVersion(const Value: string);
|
|
published
|
|
property DirectX: string read GetDirectXVersion write SetDirectXVersion stored False;
|
|
property OpenGL: string read GetOpenGLVersion write SetOpenGLVersion stored False;
|
|
property BDE: string read GetBDEVersion write SetBDEVersion stored False;
|
|
property ADO: string read GetADOVersion write SetADOVersion stored False;
|
|
property InternetExplorer: string read GetIEVersion write SetIEVersion stored False;
|
|
end;
|
|
|
|
TJvHWDockInfo = set of (diDocked, diUndocked, diUserSupplied, diUserDocked, diUserUndocked);
|
|
|
|
TJvHardwareProfile = class(TJvReadOnlyInfo)
|
|
private
|
|
function GetDockInfo: TJvHWDockInfo;
|
|
function GetGUID: string;
|
|
function GetName: string;
|
|
function GetNativeType: HW_PROFILE_INFO;
|
|
procedure SetDockInfo(const Value: TJvHWDockInfo);
|
|
procedure SetGUID(const Value: string);
|
|
procedure SetName(const Value: string);
|
|
public
|
|
property NativeType: HW_PROFILE_INFO read GetNativeType;
|
|
published
|
|
property GUID: string read GetGUID write SetGUID stored False;
|
|
property Name: string read GetName write SetName stored False;
|
|
property DockInfo: TJvHWDockInfo read GetDockInfo write SetDockInfo stored False;
|
|
end;
|
|
|
|
TJvWallpaperStyle = (wsCenter, wsUnused, wsStretch);
|
|
TJvMiscInfo = class(TJvWriteableInfo)
|
|
// writeable: ScreenSaver, Pattern, Wallpaper, WallpaperStyle, WallpaperTiled
|
|
// CurrentColorScheme
|
|
private
|
|
FVersions: TJvAppVersions;
|
|
FHardwareProfile: TJvHardwareProfile;
|
|
FColorSchemes: TStrings;
|
|
function GetIsOnline: Boolean;
|
|
function GetScreenSaver: string;
|
|
function GetDVDRegion: Integer;
|
|
function GetTimeRunning: Int64;
|
|
function GetTimeRunningAsString: string;
|
|
function GetNetBIOS: Boolean;
|
|
function GetVersions: TJvAppVersions;
|
|
function GetHardwareProfile: TJvHardwareProfile;
|
|
function GetPattern: string;
|
|
function GetWallpaper: string;
|
|
function GetWallpaperStyle: TJvWallpaperStyle;
|
|
function GetWallpaperTiled: Boolean;
|
|
function GetColorSchemes: TStrings;
|
|
function GetCurrentColorScheme: string;
|
|
procedure SetIsOnline(const Value: Boolean);
|
|
procedure SetScreenSaver(const Value: string);
|
|
procedure SetDVDRegion(const Value: Integer);
|
|
procedure SetTimeRunning(const Value: Int64);
|
|
procedure SetTimeRunningAsString(const Value: string);
|
|
procedure SetNetBIOS(const Value: Boolean);
|
|
procedure SetVersions(const Value: TJvAppVersions);
|
|
procedure SetHardwareProfile(const Value: TJvHardwareProfile);
|
|
procedure SetPattern(const Value: string);
|
|
procedure SetWallpaper(const Value: string);
|
|
procedure SetWallpaperStyle(const Value: TJvWallpaperStyle);
|
|
procedure SetWallpaperTiled(const Value: Boolean);
|
|
procedure SetColorSchemes(const Value: TStrings);
|
|
procedure SetCurrentColorScheme(const Value: string);
|
|
public
|
|
destructor Destroy; override;
|
|
published
|
|
property TimeRunning: Int64 read GetTimeRunning write SetTimeRunning stored False;
|
|
property TimeRunningAsString: string read GetTimeRunningAsString write SetTimeRunningAsString stored False;
|
|
property Online: Boolean read GetIsOnline write SetIsOnline stored False;
|
|
property ScreenSaver: string read GetScreenSaver write SetScreenSaver stored False;
|
|
property DVDRegion: Integer read GetDVDRegion write SetDVDRegion stored False;
|
|
property NetBIOS: Boolean read GetNetBIOS write SetNetBIOS stored False;
|
|
property WallpaperTiled: Boolean read GetWallpaperTiled write SetWallpaperTiled stored False;
|
|
property Wallpaper: string read GetWallpaper write SetWallpaper stored False;
|
|
property WallpaperStyle: TJvWallpaperStyle read GetWallpaperStyle write SetWallpaperStyle stored False;
|
|
property Pattern: string read GetPattern write SetPattern stored False;
|
|
property ColorSchemes: TStrings read GetColorSchemes write SetColorSchemes stored False;
|
|
property CurrentColorScheme: string read GetCurrentColorScheme write SetCurrentColorScheme stored False;
|
|
|
|
property Versions: TJvAppVersions read GetVersions write SetVersions stored False;
|
|
property HardwareProfile: TJvHardwareProfile read GetHardwareProfile write SetHardwareProfile stored False;
|
|
end;
|
|
|
|
TJvCleanBoot = (cbNormal, cbFailSafe, cbFailSafeNetwork);
|
|
TJvWindowsArrange = set of (waDown, waLeft, waRight, waUp, waBottomLeft,
|
|
waBottomRight, waHide, waTopLeft, waTopRight);
|
|
|
|
TJvMetricsInfo = class(TJvWriteableInfo)
|
|
// writeable: CursorX, CursorY, CaretX, CaretY
|
|
private
|
|
function GetBoolMetrics(const Index: Integer): Boolean;
|
|
function GetMetrics(const Index: Integer): Integer;
|
|
function GetArrange: TJvWindowsArrange;
|
|
function GetCleanBoot: TJvCleanBoot;
|
|
function GetCaretBlinkTime: DWORD;
|
|
function GetCaretPos(const Index: Integer): Integer;
|
|
function GetCursorPos(const Index: Integer): Integer;
|
|
procedure SetBoolMetrics(const Index: Integer; const Value: Boolean);
|
|
procedure SetMetrics(const Index, Value: Integer);
|
|
procedure SetArrange(const Value: TJvWindowsArrange);
|
|
procedure SetCleanBoot(const Value: TJvCleanBoot);
|
|
procedure SetCaretBlinkTime(const Value: DWORD);
|
|
procedure SetCaretPos(const Index, Value: Integer);
|
|
procedure SetCursorPos(const Index, Value: Integer);
|
|
function GetDialogBaseUnits: Integer;
|
|
procedure SetDialogBaseUnits(const Value: Integer);
|
|
function GetACP: Integer;
|
|
function GetDoubleClickTime: Integer;
|
|
function GetOEMCP: Integer;
|
|
procedure SetACP(const Value: Integer);
|
|
procedure SetDoubleClickTime(const Value: Integer);
|
|
procedure SetOEMCP(const Value: Integer);
|
|
published
|
|
property Arrange: TJvWindowsArrange read GetArrange write SetArrange stored False;
|
|
property CleanBoot: TJvCleanBoot read GetCleanBoot write SetCleanBoot stored False;
|
|
property MouseButtons: Integer index SM_CMOUSEBUTTONS read GetMetrics write SetMetrics stored False;
|
|
property BorderWidth: Integer index SM_CXBORDER read GetMetrics write SetMetrics stored False;
|
|
property BorderHeight: Integer index SM_CYBORDER read GetMetrics write SetMetrics stored False;
|
|
property CursorWidth: Integer index SM_CXCURSOR read GetMetrics write SetMetrics stored False;
|
|
property CursorHeight: Integer index SM_CYCURSOR read GetMetrics write SetMetrics stored False;
|
|
property CaretBlinkTime: LongWord read GetCaretBlinkTime write SetCaretBlinkTime stored False;
|
|
property CaretX: Integer index 0 read GetCaretPos write SetCaretPos stored False;
|
|
property CaretY: Integer index 1 read GetCaretPos write SetCaretPos stored False;
|
|
property CursorX: Integer index 0 read GetCursorPos write SetCursorPos stored False;
|
|
property CursorY: Integer index 1 read GetCursorPos write SetCursorPos stored False;
|
|
property CodePageANSI: Integer read GetACP write SetACP stored False;
|
|
property CodePageOEM: Integer read GetOEMCP write SetOEMCP stored False;
|
|
property DialogBaseUnits: Integer read GetDialogBaseUnits write SetDialogBaseUnits stored False;
|
|
property DialogFrameWidth: Integer index SM_CXDLGFRAME read GetMetrics write SetMetrics stored False;
|
|
property DialogFrameHeight: Integer index SM_CYDLGFRAME read GetMetrics write SetMetrics stored False;
|
|
property DoubleClickWidth: Integer index SM_CXDOUBLECLK read GetMetrics write SetMetrics stored False;
|
|
property DoubleClickHeight: Integer index SM_CYDOUBLECLK read GetMetrics write SetMetrics stored False;
|
|
property DoubleClickTime: Integer read GetDoubleClickTime write SetDoubleClickTime stored False;
|
|
property DragWidth: Integer index SM_CXDRAG read GetMetrics write SetMetrics stored False;
|
|
property DragHeight: Integer index SM_CYDRAG read GetMetrics write SetMetrics stored False;
|
|
property EdgeWidth: Integer index SM_CXEDGE read GetMetrics write SetMetrics stored False;
|
|
property EdgeHeight: Integer index SM_CYEDGE read GetMetrics write SetMetrics stored False;
|
|
property FixedFrameWidth: Integer index SM_CXFIXEDFRAME read GetMetrics write SetMetrics stored False;
|
|
property FixedFrameHeight: Integer index SM_CYFIXEDFRAME read GetMetrics write SetMetrics stored False;
|
|
property FrameWidth: Integer index SM_CXFRAME read GetMetrics write SetMetrics stored False;
|
|
property FrameHeight: Integer index SM_CYFRAME read GetMetrics write SetMetrics stored False;
|
|
property ScreenClientWidth: Integer index SM_CXFULLSCREEN read GetMetrics write SetMetrics stored False;
|
|
property ScreenClientHeight: Integer index SM_CYFULLSCREEN read GetMetrics write SetMetrics stored False;
|
|
property ScreenWidth: Integer index SM_CXSCREEN read GetMetrics write SetMetrics stored False;
|
|
property ScreenHeight: Integer index SM_CYSCREEN read GetMetrics write SetMetrics stored False;
|
|
property ScrollArrowWidth: Integer index SM_CXHSCROLL read GetMetrics write SetMetrics stored False;
|
|
property ScrollArrowHeight: Integer index SM_CYHSCROLL read GetMetrics write SetMetrics stored False;
|
|
property ScrollThumbWidth: Integer index SM_CXHTHUMB read GetMetrics write SetMetrics stored False;
|
|
property ScrollThumbHeight: Integer index SM_CYVTHUMB read GetMetrics write SetMetrics stored False;
|
|
property ScrollWidth: Integer index SM_CXVSCROLL read GetMetrics write SetMetrics stored False;
|
|
property ScrollHeight: Integer index SM_CYVSCROLL read GetMetrics write SetMetrics stored False;
|
|
property IconWidth: Integer index SM_CXICON read GetMetrics write SetMetrics stored False;
|
|
property IconHeight: Integer index SM_CYICON read GetMetrics write SetMetrics stored False;
|
|
property SmallIconWidth: Integer index SM_CXSMICON read GetMetrics write SetMetrics stored False;
|
|
property SmallIconHeight: Integer index SM_CYSMICON read GetMetrics write SetMetrics stored False;
|
|
property IconSpacingWidth: Integer index SM_CXICONSPACING read GetMetrics write SetMetrics stored False;
|
|
property IconSpacingHeight: Integer index SM_CYICONSPACING read GetMetrics write SetMetrics stored False;
|
|
property MaximizedWindowWidth: Integer index SM_CXMAXIMIZED read GetMetrics write SetMetrics stored False;
|
|
property MaximizedWindowHeight: Integer index SM_CYMAXIMIZED read GetMetrics write SetMetrics stored False;
|
|
property MinimizedWindowWidth: Integer index SM_CXMINIMIZED read GetMetrics write SetMetrics stored False;
|
|
property MinimizedWindowHeight: Integer index SM_CYMINIMIZED read GetMetrics write SetMetrics stored False;
|
|
property MaxDragWindowWidth: Integer index SM_CXMAXTRACK read GetMetrics write SetMetrics stored False;
|
|
property MaxDragWindowHeight: Integer index SM_CYMAXTRACK read GetMetrics write SetMetrics stored False;
|
|
property MinDragWindowWidth: Integer index SM_CXMINTRACK read GetMetrics write SetMetrics stored False;
|
|
property MinDragWindowHeight: Integer index SM_CYMINTRACK read GetMetrics write SetMetrics stored False;
|
|
property MinWindowWidth: Integer index SM_CXMIN read GetMetrics write SetMetrics stored False;
|
|
property MinWindowHeight: Integer index SM_CYMIN read GetMetrics write SetMetrics stored False;
|
|
property MenuCheckWidth: Integer index SM_CXMENUCHECK read GetMetrics write SetMetrics stored False;
|
|
property MenuCheckHeight: Integer index SM_CYMENUCHECK read GetMetrics write SetMetrics stored False;
|
|
property MenuButtonWidth: Integer index SM_CXMENUSIZE read GetMetrics write SetMetrics stored False;
|
|
property MenuButtonHeight: Integer index SM_CYMENUSIZE read GetMetrics write SetMetrics stored False;
|
|
property MinimizedWindowSpacingWidth: Integer index SM_CXMINSPACING read GetMetrics write SetMetrics stored False;
|
|
property MinimizedWindowSpacingHeight: Integer index SM_CYMINSPACING read GetMetrics write SetMetrics stored False;
|
|
property CaptionButtonWidth: Integer index SM_CXSIZE read GetMetrics write SetMetrics stored False;
|
|
property CaptionButtonheight: Integer index SM_CYSIZE read GetMetrics write SetMetrics stored False;
|
|
property ResizeBorderWidth: Integer index SM_CXSIZEFRAME read GetMetrics write SetMetrics stored False;
|
|
property ResizeBorderHeight: Integer index SM_CYSIZEFRAME read GetMetrics write SetMetrics stored False;
|
|
property SmallCaptionButtonWidth: Integer index SM_CXSMSIZE read GetMetrics write SetMetrics stored False;
|
|
property SmallCaptionButtonHeight: Integer index SM_CYSMSIZE read GetMetrics write SetMetrics stored False;
|
|
property WindowCaptionHeight: Integer index SM_CYCAPTION read GetMetrics write SetMetrics stored False;
|
|
property SmallWindowCaptionHeight: Integer index SM_CYSMCAPTION read GetMetrics write SetMetrics stored False;
|
|
property KanjiWindowHeight: Integer index SM_CYKANJIWINDOW read GetMetrics write SetMetrics stored False;
|
|
property MenuItemHeight: Integer index SM_CYMENU read GetMetrics write SetMetrics stored False;
|
|
property DBCSEnabled: Boolean index SM_DBCSENABLED read GetBoolMetrics write SetBoolMetrics stored False;
|
|
property Debug: Boolean index SM_DEBUG read GetBoolMetrics write SetBoolMetrics stored False;
|
|
property MenuRightAligned: Boolean index SM_MENUDROPALIGNMENT read GetBoolMetrics write SetBoolMetrics stored False;
|
|
property MidEastEnabled: Boolean index SM_MIDEASTENABLED read GetBoolMetrics write SetBoolMetrics stored False;
|
|
property MousePresent: Boolean index SM_MOUSEPRESENT read GetBoolMetrics write SetBoolMetrics stored False;
|
|
property MouseWheelPresent: Boolean index SM_MOUSEWHEELPRESENT read GetBoolMetrics write SetBoolMetrics stored
|
|
False;
|
|
property Networked: Boolean index SM_NETWORK read GetBoolMetrics write SetBoolMetrics stored False;
|
|
property PenWindows: Boolean index SM_PENWINDOWS read GetBoolMetrics write SetBoolMetrics stored False;
|
|
property Secure: Boolean index SM_SECURE read GetBoolMetrics write SetBoolMetrics stored False;
|
|
property ShowSounds: Boolean index SM_SHOWSOUNDS read GetBoolMetrics write SetBoolMetrics stored False;
|
|
property SlowMachine: Boolean index SM_SLOWMACHINE read GetBoolMetrics write SetBoolMetrics stored False;
|
|
property MouseButtonsSwapped: Boolean index SM_SWAPBUTTON read GetBoolMetrics write SetBoolMetrics stored False;
|
|
end;
|
|
|
|
TJvAccessTimeOutFlags = set of (atfOnOffFeedback, atfTimeOutOn);
|
|
|
|
TJvAccessTimeOut = class(TJvWriteableInfo)
|
|
// writeable: all (using NativeType recommended)
|
|
private
|
|
function GetFlags: TJvAccessTimeOutFlags;
|
|
function GetNativeType: ACCESSTIMEOUT;
|
|
function GetTimeOutMS: DWORD;
|
|
procedure SetFlags(const Value: TJvAccessTimeOutFlags);
|
|
procedure SetTimeOutMS(const Value: DWORD);
|
|
procedure SetNativeType(Value: ACCESSTIMEOUT);
|
|
public
|
|
property NativeType: ACCESSTIMEOUT read GetNativeType write SetNativeType;
|
|
published
|
|
property TimeOutMS: DWORD read GetTimeOutMS write SetTimeOutMS stored False;
|
|
property Flags: TJvAccessTimeOutFlags read GetFlags write SetFlags stored False;
|
|
end;
|
|
|
|
TJvFilterKeyFlags = set of (fkfAvailable, fkfClickOn, fkfFilterKeysOn, fkfHotkeyActive,
|
|
fkfHotkeySound, fkfConfirmHotkey, fkfIndicator);
|
|
|
|
TJvFilterKeys = class(TJvWriteableInfo)
|
|
// writeable: all (using NativeType recommended)
|
|
private
|
|
function GetBounceMSec: DWORD;
|
|
function GetDelayMSec: DWORD;
|
|
function GetFlags: TJvFilterKeyFlags;
|
|
function GetNativeType: FILTERKEYS;
|
|
function GetRepeatMSec: DWORD;
|
|
function GetWaitMSec: DWORD;
|
|
procedure SetBounceMSec(const Value: DWORD);
|
|
procedure SetDelayMSec(const Value: DWORD);
|
|
procedure SetFlags(const Value: TJvFilterKeyFlags);
|
|
procedure SetNativeType(Value: FILTERKEYS);
|
|
procedure SetRepeatMSec(const Value: DWORD);
|
|
procedure SetWaitMSec(const Value: DWORD);
|
|
public
|
|
property NativeType: FILTERKEYS read GetNativeType write SetNativeType;
|
|
published
|
|
property Flags: TJvFilterKeyFlags read GetFlags write SetFlags stored False;
|
|
property WaitMSec: DWORD read GetWaitMSec write SetWaitMSec stored False;
|
|
property DelayMSec: DWORD read GetDelayMSec write SetDelayMSec stored False;
|
|
property RepeatMSec: DWORD read GetRepeatMSec write SetRepeatMSec stored False;
|
|
property BounceMSec: DWORD read GetBounceMSec write SetBounceMSec stored False;
|
|
end;
|
|
|
|
TJvHighContrastFlags = set of (hcfAvailable, hcfConfirmHotKey, hcfHighContrastOn,
|
|
hcfHotkeyActive, hcfHotkeyAvailable, hcfHotkeySound, hcfIndicator);
|
|
|
|
TJvHighContrast = class(TJvWriteableInfo)
|
|
// writeable: all (using NativeType recommended)
|
|
private
|
|
function GetDefaultScheme: string;
|
|
function GetFlags: TJvHighContrastFlags;
|
|
function GetNativeType: HIGHCONTRAST;
|
|
procedure SetDefaultScheme(const Value: string);
|
|
procedure SetFlags(const Value: TJvHighContrastFlags);
|
|
procedure SetNativeType(Value: HIGHCONTRAST);
|
|
public
|
|
property NativeType: HIGHCONTRAST read GetNativeType write SetNativeType;
|
|
published
|
|
property Flags: TJvHighContrastFlags read GetFlags write SetFlags stored False;
|
|
property DefaultScheme: string read GetDefaultScheme write SetDefaultScheme stored False;
|
|
end;
|
|
|
|
TJvIconMetrics = class(TJvWriteableInfo)
|
|
// writeable: all (using NativeType recommended)
|
|
private
|
|
FFont: TFont;
|
|
function GetFont: TFont;
|
|
function GetHorzSpacing: Integer;
|
|
function GetNativeType: ICONMETRICS;
|
|
function GetTitleWrap: Boolean;
|
|
function GetVertSpacing: Integer;
|
|
procedure SetFont(const Value: TFont);
|
|
procedure SetHorzSpacing(const Value: Integer);
|
|
procedure SetNativeType(Value: ICONMETRICS);
|
|
procedure SetTitleWrap(const Value: Boolean);
|
|
procedure SetVertSpacing(const Value: Integer);
|
|
public
|
|
destructor Destroy; override;
|
|
property NativeType: ICONMETRICS read GetNativeType write SetNativeType;
|
|
published
|
|
property VertSpacing: Integer read GetVertSpacing write SetVertSpacing stored False;
|
|
property HorzSpacing: Integer read GetHorzSpacing write SetHorzSpacing stored False;
|
|
property TitleWrap: Boolean read GetTitleWrap write SetTitleWrap stored False;
|
|
property Font: TFont read GetFont write SetFont stored False;
|
|
end;
|
|
|
|
TJvMinimizedMetrics = class(TJvWriteableInfo)
|
|
// writeable: all (using NativeType recommended)
|
|
private
|
|
function GetArrange: TJvWindowsArrange;
|
|
function GetHorzGap: Integer;
|
|
function GetNativeType: MINIMIZEDMETRICS;
|
|
function GetVertGap: Integer;
|
|
function GetWidth: Integer;
|
|
procedure SetArrange(const Value: TJvWindowsArrange);
|
|
procedure SetHorzGap(const Value: Integer);
|
|
procedure SetNativeType(Value: MINIMIZEDMETRICS);
|
|
procedure SetVertGap(const Value: Integer);
|
|
procedure SetWidth(const Value: Integer);
|
|
public
|
|
property NativeType: MINIMIZEDMETRICS read GetNativeType write SetNativeType;
|
|
published
|
|
property Width: Integer read GetWidth write SetWidth stored False;
|
|
property HorzGap: Integer read GetHorzGap write SetHorzGap stored False;
|
|
property VertGap: Integer read GetVertGap write SetVertGap stored False;
|
|
property Arrange: TJvWindowsArrange read GetArrange write SetArrange stored False;
|
|
end;
|
|
|
|
TJvMouseKeysFlags = set of (mkfAvailable, mkfConfirmHotKey, mkfHotkeyActive, mkfHotkeySound, mkfIndicator,
|
|
mkfMouseKeysOn, mkfModifiers, mkfReplaceNumbers);
|
|
|
|
TJvMouseKeys = class(TJvWriteableInfo)
|
|
// writeable: all (using NativeType recommended)
|
|
private
|
|
function GetCtrlSpeed: DWORD;
|
|
function GetFlags: TJvMouseKeysFlags;
|
|
function GetMaxSpeed: DWORD;
|
|
function GetNativeType: MOUSEKEYS;
|
|
function GetTimeToMaxSpeed: DWORD;
|
|
procedure SetCtrlSpeed(const Value: DWORD);
|
|
procedure SetFlags(const Value: TJvMouseKeysFlags);
|
|
procedure SetMaxSpeed(const Value: DWORD);
|
|
procedure SetNativeType(Value: MOUSEKEYS);
|
|
procedure SetTimeToMaxSpeed(const Value: DWORD);
|
|
public
|
|
property NativeType: MOUSEKEYS read GetNativeType write SetNativeType;
|
|
published
|
|
property Flags: TJvMouseKeysFlags read GetFlags write SetFlags stored False;
|
|
property MaxSpeed: DWORD read GetMaxSpeed write SetMaxSpeed stored False;
|
|
property TimeToMaxSpeed: DWORD read GetTimeToMaxSpeed write SetTimeToMaxSpeed stored False;
|
|
property CtrlSpeed: DWORD read GetCtrlSpeed write SetCtrlSpeed stored False;
|
|
end;
|
|
|
|
TJvNonClientMetrics = class(TJvWriteableInfo)
|
|
// writeable: all (using NativeType recommended)
|
|
private
|
|
FCaptionFont: TFont;
|
|
FMenuFont: TFont;
|
|
FMessageFont: TFont;
|
|
FStatusFont: TFont;
|
|
FSmallCaptionFont: TFont;
|
|
function GetBorderWidth: Integer;
|
|
function GetCaptionFont: TFont;
|
|
function GetCaptionHeight: Integer;
|
|
function GetCaptionWidth: Integer;
|
|
function GetMenuFont: TFont;
|
|
function GetMenuHeight: Integer;
|
|
function GetMenuWidth: Integer;
|
|
function GetMessageFont: TFont;
|
|
function GetNativeType: NONCLIENTMETRICS;
|
|
function GetScrollHeight: Integer;
|
|
function GetScrollWidth: Integer;
|
|
function GetSmallCaptionFont: TFont;
|
|
function GetSmallCaptionHeight: Integer;
|
|
function GetSmallCaptionWidth: Integer;
|
|
function GetStatusFont: TFont;
|
|
procedure SetBorderWidth(const Value: Integer);
|
|
procedure SetCaptionFont(const Value: TFont);
|
|
procedure SetCaptionHeight(const Value: Integer);
|
|
procedure SetCaptionWidth(const Value: Integer);
|
|
procedure SetMenuFont(const Value: TFont);
|
|
procedure SetMenuHeight(const Value: Integer);
|
|
procedure SetMenuWidth(const Value: Integer);
|
|
procedure SetMessageFont(const Value: TFont);
|
|
procedure SetNativeType(Value: NONCLIENTMETRICS);
|
|
procedure SetScrollHeight(const Value: Integer);
|
|
procedure SetScrollWidth(const Value: Integer);
|
|
procedure SetSmallCaptionFont(const Value: TFont);
|
|
procedure SetSmallCaptionHeight(const Value: Integer);
|
|
procedure SetSmallCaptionWidth(const Value: Integer);
|
|
procedure SetStatusFont(const Value: TFont);
|
|
public
|
|
property NativeType: NONCLIENTMETRICS read GetNativeType write SetNativeType;
|
|
destructor Destroy; override;
|
|
published
|
|
property BorderWidth: Integer read GetBorderWidth write SetBorderWidth stored False;
|
|
property ScrollWidth: Integer read GetScrollWidth write SetScrollWidth stored False;
|
|
property ScrollHeight: Integer read GetScrollHeight write SetScrollHeight stored False;
|
|
property CaptionWidth: Integer read GetCaptionWidth write SetCaptionWidth stored False;
|
|
property CaptionHeight: Integer read GetCaptionHeight write SetCaptionHeight stored False;
|
|
property CaptionFont: TFont read GetCaptionFont write SetCaptionFont stored False;
|
|
property SmallCaptionWidth: Integer read GetSmallCaptionWidth write SetSmallCaptionWidth stored False;
|
|
property SmallCaptionHeight: Integer read GetSmallCaptionHeight write SetSmallCaptionHeight stored False;
|
|
property SmallCaptionFont: TFont read GetSmallCaptionFont write SetSmallCaptionFont stored False;
|
|
property MenuWidth: Integer read GetMenuWidth write SetMenuWidth stored False;
|
|
property MenuHeight: Integer read GetMenuHeight write SetMenuHeight stored False;
|
|
property MenuFont: TFont read GetMenuFont write SetMenuFont stored False;
|
|
property StatusFont: TFont read GetStatusFont write SetStatusFont stored False;
|
|
property MessageFont: TFont read GetMessageFont write SetMessageFont stored False;
|
|
end;
|
|
|
|
TJvSerialKeysFlags = set of (serkfAvailable, serkfIndicator, serkfSerialKeysOn);
|
|
TJvSerialKeysPortState = (psSerialKeysIgnored, psSerialKeysAware, psSerialKeysAlways);
|
|
TJvSerialKeys = class(TJvWriteableInfo)
|
|
// writeable: all (using NativeType recommended)
|
|
private
|
|
function GetActivePort: string;
|
|
function GetBaudRate: DWORD;
|
|
function GetFlags: TJvSerialKeysFlags;
|
|
function GetNativeType: SERIALKEYS;
|
|
function GetPortState: TJvSerialKeysPortState;
|
|
procedure SetActivePort(const Value: string);
|
|
procedure SetBaudRate(const Value: DWORD);
|
|
procedure SetFlags(const Value: TJvSerialKeysFlags);
|
|
procedure SetNativeType(Value: SERIALKEYS);
|
|
procedure SetPortState(const Value: TJvSerialKeysPortState);
|
|
function GetPort: string;
|
|
procedure SetPort(const Value: string);
|
|
function GetActive: Boolean;
|
|
procedure SetActive(const Value: Boolean);
|
|
public
|
|
property NativeType: SERIALKEYS read GetNativeType write SetNativeType;
|
|
published
|
|
property Active: Boolean read GetActive write SetActive stored False;
|
|
property Flags: TJvSerialKeysFlags read GetFlags write SetFlags stored False;
|
|
property ActivePort: string read GetActivePort write SetActivePort stored False;
|
|
property Port: string read GetPort write SetPort stored False;
|
|
property BaudRate: DWORD read GetBaudRate write SetBaudRate stored False;
|
|
property PortState: TJvSerialKeysPortState read GetPortState write SetPortState stored False;
|
|
end;
|
|
|
|
TJvSoundSentryFlags = set of (ssfAvailable, ssfSoundSentryOn, ssfIndicator);
|
|
TJvSoundSentryTextEffect = (sstfNone, sstfChars, sstfBorder, sstfDisplay);
|
|
TJvSoundSentryGrafEffect = (ssgfNone, ssgfDisplay);
|
|
TJvSoundSentryWindowsEffect = (sswfNone, sswfTitle, sswfWindow, sswfDisplay, sswfCustom);
|
|
|
|
TJvSoundSentry = class(TJvWriteableInfo)
|
|
// writeable: all (using NativeType recommended)
|
|
private
|
|
function GetFlags: TJvSoundSentryFlags;
|
|
function GetGrafEffect: TJvSoundSentryGrafEffect;
|
|
function GetGrafEffectColor: TColor;
|
|
function GetGrafEffectMSec: DWORD;
|
|
function GetNativeType: SOUNDSENTRY;
|
|
function GetTextEffect: TJvSoundSentryTextEffect;
|
|
function GetTextEffectColor: TColor;
|
|
function GetTextEffectMSec: DWORD;
|
|
function GetWindowsEffect: TJvSoundSentryWindowsEffect;
|
|
function GetWindowsEffectDLL: string;
|
|
function GetWindowsEffectMSec: DWORD;
|
|
procedure SetFlags(const Value: TJvSoundSentryFlags);
|
|
procedure SetGrafEffect(const Value: TJvSoundSentryGrafEffect);
|
|
procedure SetGrafEffectColor(const Value: TColor);
|
|
procedure SetGrafEffectMSec(const Value: DWORD);
|
|
procedure SetNativeType(Value: SOUNDSENTRY);
|
|
procedure SetTextEffect(const Value: TJvSoundSentryTextEffect);
|
|
procedure SetTextEffectColor(const Value: TColor);
|
|
procedure SetTextEffectMSec(const Value: DWORD);
|
|
procedure SetWindowsEffect(const Value: TJvSoundSentryWindowsEffect);
|
|
procedure SetWindowsEffectDLL(const Value: string);
|
|
procedure SetWindowsEffectMSec(const Value: DWORD);
|
|
public
|
|
property NativeType: SOUNDSENTRY read GetNativeType write SetNativeType;
|
|
published
|
|
property Flags: TJvSoundSentryFlags read GetFlags write SetFlags stored False;
|
|
property TextEffect: TJvSoundSentryTextEffect read GetTextEffect write SetTextEffect stored False;
|
|
property TextEffectMSec: DWORD read GetTextEffectMSec write SetTextEffectMSec stored False;
|
|
property TextEffectColor: TColor read GetTextEffectColor write SetTextEffectColor stored False;
|
|
property GrafEffect: TJvSoundSentryGrafEffect read GetGrafEffect write SetGrafEffect stored False;
|
|
property GrafEffectMSec: DWORD read GetGrafEffectMSec write SetGrafEffectMSec stored False;
|
|
property GrafEffectColor: TColor read GetGrafEffectColor write SetGrafEffectColor stored False;
|
|
property WindowsEffect: TJvSoundSentryWindowsEffect read GetWindowsEffect write SetWindowsEffect stored False;
|
|
property WindowsEffectMSec: DWORD read GetWindowsEffectMSec write SetWindowsEffectMSec stored False;
|
|
property WindowsEffectDLL: string read GetWindowsEffectDLL write SetWindowsEffectDLL stored False;
|
|
end;
|
|
|
|
TJvStickyKeysFlags = set of (skfStickyKeysOn, skfAvailable, skfHotkeyActive, skfConfirmHotkey,
|
|
skfHotkeySound, skfIndicator, skfAudibleFeedback, skfTriState, skfTwoKeysOff,
|
|
skfLeftAltLatched, skfLeftCtrlLatched, skfLeftShiftLatched,
|
|
skfRightAltLatched, skfRightCtrlLatched, skfRightShiftLatched,
|
|
skfLeftWinLatched, skfRightWinLatched,
|
|
skfLeftAltLocked, skfLeftCtrlLocked, skfLeftShiftLocked,
|
|
skfRightAltLocked, skfRightCtrlLocked, skfRightShiftLocked,
|
|
skfLeftWinLocked, skfRightWinLocked
|
|
);
|
|
TJvToggleKeysFlags = set of (tkfAvailable, tkfConfirmHotkey, tkfHotkeyActive, tkfHotkeySound, tkfToggleKeysOn);
|
|
TJvFontSmoothingType = (fstStandard, fstClearType, fstDocking);
|
|
|
|
TJvSystemParametersInfo = class(TJvWriteableInfo)
|
|
// writeable: all except ScreenSaverRunning, WindowsExtension
|
|
private
|
|
FAccessTimeOut: TJvAccessTimeOut;
|
|
FFilterKeys: TJvFilterKeys;
|
|
FHighContrast: TJvHighContrast;
|
|
FIconMetrics: TJvIconMetrics;
|
|
FMinimizedMetrics: TJvMinimizedMetrics;
|
|
FMouseKeys: TJvMouseKeys;
|
|
FNonClientMetrics: TJvNonClientMetrics;
|
|
FSerialKeys: TJvSerialKeys;
|
|
FSoundSentry: TJvSoundSentry;
|
|
FIconTitleFont: TFont;
|
|
FWorkArea: TJvRect;
|
|
FMap: array of TPoint;
|
|
function GetAccessTimeOut: TJvAccessTimeOut;
|
|
function GetFilterKeys: TJvFilterKeys;
|
|
function GetHighContrast: TJvHighContrast;
|
|
function GetIconMetrics: TJvIconMetrics;
|
|
function GetIconTitleFont: TFont;
|
|
function GetMinimizedMetrics: TJvMinimizedMetrics;
|
|
function GetMouseKeys: TJvMouseKeys;
|
|
function GetNonClientMetrics: TJvNonClientMetrics;
|
|
function GetSerialKeys: TJvSerialKeys;
|
|
function GetSoundSentry: TJvSoundSentry;
|
|
function GetStickyKeys: TJvStickyKeysFlags;
|
|
function GetToggleKeys: TJvToggleKeysFlags;
|
|
function GetWorkArea: TJvRect;
|
|
function GetIntInfo(const Index: Integer): Integer;
|
|
function GetBoolInfo(const Index: Integer): Boolean;
|
|
function GetMouseInfo(const Index: Integer): Integer;
|
|
function GetAnimationInfo: Boolean;
|
|
function GetKeyboardLayoutName: string;
|
|
function GetDeskWallpaper: string;
|
|
function GetFontSmoothingType: TJvFontSmoothingType;
|
|
function GetIconSpacing(const Index: Integer): Integer;
|
|
procedure SetBoolInfo(const Index: Integer; const Value: Boolean);
|
|
procedure SetIntInfo(const Index, Value: Integer);
|
|
procedure SetAccessTimeOut(const Value: TJvAccessTimeOut);
|
|
procedure SetFilterKeys(const Value: TJvFilterKeys);
|
|
procedure SetHighContrast(const Value: TJvHighContrast);
|
|
procedure SetIconMetrics(const Value: TJvIconMetrics);
|
|
procedure SetIconTitleFont(const Value: TFont);
|
|
procedure SetMinimizedMetrics(const Value: TJvMinimizedMetrics);
|
|
procedure SetMouseKeys(const Value: TJvMouseKeys);
|
|
procedure SetNonClientMetrics(const Value: TJvNonClientMetrics);
|
|
procedure SetSerialKeys(const Value: TJvSerialKeys);
|
|
procedure SetSoundSentry(const Value: TJvSoundSentry);
|
|
procedure SetStickyKeys(const Value: TJvStickyKeysFlags);
|
|
procedure SetToggleKeys(const Value: TJvToggleKeysFlags);
|
|
procedure SetWorkArea(const Value: TJvRect);
|
|
procedure SetMouseInfo(const Index, Value: Integer);
|
|
procedure SetAnimationInfo(const Value: Boolean);
|
|
procedure SetKeyboardLayoutName(const Value: string);
|
|
procedure SetDeskWallpaper(const Value: string);
|
|
procedure SetFontSmoothingType(const Value: TJvFontSmoothingType);
|
|
procedure SetIconSpacing(const Index, Value: Integer);
|
|
procedure InitMap;
|
|
function MapToSet(Index: Integer): Integer;
|
|
public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
published
|
|
property AccessTimeOut: TJvAccessTimeOut read GetAccessTimeOut write SetAccessTimeOut stored False;
|
|
property Animation: Boolean read GetAnimationInfo write SetAnimationInfo stored False;
|
|
property Beep: Boolean index SPI_GETBEEP read GetBoolInfo write SetBoolInfo stored False;
|
|
property BorderMultiplier: Integer index SPI_GETBORDER read GetIntInfo write SetIntInfo stored False;
|
|
property DefaultInputLanguage: Integer index SPI_GETDEFAULTINPUTLANG read GetIntInfo write SetIntInfo stored False;
|
|
property DragFullWindows: Boolean index SPI_GETDRAGFULLWINDOWS read GetBoolInfo write SetBoolInfo stored False;
|
|
property FilterKeys: TJvFilterKeys read GetFilterKeys write SetFilterKeys stored False;
|
|
property FontSmoothing: Boolean index SPI_GETFONTSMOOTHING read GetBoolInfo write SetBoolInfo stored False;
|
|
property GridGranularity: Integer index SPI_GETGRIDGRANULARITY read GetIntInfo write SetIntInfo stored False;
|
|
property HighContrast: TJvHighContrast read GetHighContrast write SetHighContrast stored False;
|
|
property IconMetrics: TJvIconMetrics read GetIconMetrics write SetIconMetrics stored False;
|
|
property IconTitleFont: TFont read GetIconTitleFont write SetIconTitleFont stored False;
|
|
property IconTitleWrap: Boolean index SPI_GETICONTITLEWRAP read GetBoolInfo write SetBoolInfo stored False;
|
|
property KeyboardDelay: Integer index SPI_GETKEYBOARDDELAY read GetIntInfo write SetIntInfo stored False;
|
|
property KeyboardPreferred: Boolean index SPI_GETKEYBOARDPREF read GetBoolInfo write SetBoolInfo stored False;
|
|
property KeyboardSpeed: Integer index SPI_GETKEYBOARDSPEED read GetIntInfo write SetIntInfo stored False;
|
|
property KeyboardLayoutName: string read GetKeyboardLayoutName write SetKeyboardLayoutName stored False;
|
|
property LowPowerActive: Boolean index SPI_GETLOWPOWERACTIVE read GetBoolInfo write SetBoolInfo stored False;
|
|
property LowPowerTimeOut: Integer index SPI_GETLOWPOWERTIMEOUT read GetIntInfo write SetIntInfo stored False;
|
|
property MenuLeftAligned: Boolean index SPI_GETMENUDROPALIGNMENT read GetBoolInfo write SetBoolInfo stored False;
|
|
property MinimizedMetrics: TJvMinimizedMetrics read GetMinimizedMetrics write SetMinimizedMetrics stored False;
|
|
property MouseSpeed: Integer index SPI_GETMOUSESPEED read GetIntInfo write SetIntInfo stored False;
|
|
property MouseThreshold1: Integer index 0 read GetMouseInfo write SetMouseInfo stored False;
|
|
property MouseThreshold2: Integer index 1 read GetMouseInfo write SetMouseInfo stored False;
|
|
property MouseHoverHeight: Integer index SPI_GETMOUSEHOVERHEIGHT read GetIntInfo write SetIntInfo stored False;
|
|
property MouseHoverTime: Integer index SPI_GETMOUSEHOVERTIME read GetIntInfo write SetIntInfo stored False;
|
|
property MouseHoverWidth: Integer index SPI_GETMOUSEHOVERWIDTH read GetIntInfo write SetIntInfo stored False;
|
|
property MouseKeys: TJvMouseKeys read GetMouseKeys write SetMouseKeys stored False;
|
|
property MouseTrails: Integer index SPI_GETMOUSETRAILS read GetIntInfo write SetIntInfo stored False;
|
|
property NonClientMetrics: TJvNonClientMetrics read GetNonClientMetrics write SetNonClientMetrics stored False;
|
|
property PowerOffActive: Boolean index SPI_GETPOWEROFFACTIVE read GetBoolInfo write SetBoolInfo stored False;
|
|
property PowerOffTimeout: Integer index SPI_GETPOWEROFFTIMEOUT read GetIntInfo write SetIntInfo stored False;
|
|
property ScreenReader: Boolean index SPI_GETSCREENREADER read GetBoolInfo write SetBoolInfo stored False;
|
|
property ScreenSaverActive: Boolean index SPI_GETSCREENSAVEACTIVE read GetBoolInfo write SetBoolInfo stored False;
|
|
property ScreenSaveTimeOut: Integer index SPI_GETSCREENSAVETIMEOUT read GetIntInfo write SetIntInfo stored False;
|
|
property SerialKeys: TJvSerialKeys read GetSerialKeys write SetSerialKeys stored False;
|
|
property ShowSounds: Boolean index SPI_GETSHOWSOUNDS read GetBoolInfo write SetBoolInfo stored False;
|
|
property SnapToDefaultButton: Boolean index SPI_GETSNAPTODEFBUTTON read GetBoolInfo write SetBoolInfo stored False;
|
|
property SoundSentry: TJvSoundSentry read GetSoundSentry write SetSoundSentry stored False;
|
|
property StickyKeys: TJvStickyKeysFlags read GetStickyKeys write SetStickyKeys stored False;
|
|
property ToggleKeys: TJvToggleKeysFlags read GetToggleKeys write SetToggleKeys stored False;
|
|
property WheelScrollLines: Integer index SPI_GETWHEELSCROLLLINES read GetIntInfo write SetIntInfo stored False;
|
|
property WindowsExtensions: Boolean index SPI_GETWINDOWSEXTENSION read GetBoolInfo write SetBoolInfo stored False;
|
|
property WorkArea: TJvRect read GetWorkArea write SetWorkArea stored False;
|
|
property ScreenSaverRunning: Boolean index SPI_GETSCREENSAVERRUNNING read GetBoolInfo write SetBoolInfo stored
|
|
False;
|
|
// New (W2k, XP and up)
|
|
property FocusBorderHeight: Integer index SPI_GETFOCUSBORDERHEIGHT read GetIntInfo write SetIntInfo stored False;
|
|
property FocusBorderWidth: Integer index SPI_GETFOCUSBORDERWIDTH read GetIntInfo write SetIntInfo stored False;
|
|
property MouseClickLock: Boolean index SPI_GETMOUSECLICKLOCK read GetBoolInfo write SetBoolInfo stored False;
|
|
property MouseClickLockTime: Integer index SPI_GETMOUSECLICKLOCKTIME read GetIntInfo write SetIntInfo stored False;
|
|
property MouseSonar: Boolean index SPI_GETMOUSESONAR read GetBoolInfo write SetBoolInfo stored False;
|
|
property MouseVanish: Boolean index SPI_GETMOUSEVANISH read GetBoolInfo write SetBoolInfo stored False;
|
|
property DeskWallpaper: string read GetDeskWallpaper write SetDeskWallpaper stored False;
|
|
property DropShadow: Boolean index SPI_GETDROPSHADOW read GetBoolInfo write SetBoolInfo stored False;
|
|
property FlatMenu: Boolean index SPI_GETFLATMENU read GetBoolInfo write SetBoolInfo stored False;
|
|
property FontSmoothingContrast: Integer index SPI_GETFONTSMOOTHINGCONTRAST read GetIntInfo write SetIntInfo stored
|
|
False;
|
|
property FontSmoothingType: TJvFontSmoothingType read GetFontSmoothingType write SetFontSmoothingType stored False;
|
|
property MenuShowDelay: Integer index SPI_GETMENUSHOWDELAY read GetIntInfo write SetIntInfo stored False;
|
|
property ShowIMEUI: Boolean index SPI_GETSHOWIMEUI read GetBoolInfo write SetBoolInfo stored False;
|
|
property ActiveWindowTracking: Boolean index SPI_GETACTIVEWINDOWTRACKING read GetBoolInfo write SetBoolInfo stored
|
|
False;
|
|
property MenuAnimation: Boolean index SPI_GETMENUANIMATION read GetBoolInfo write SetBoolInfo stored False;
|
|
property ComboboxAnimation: Boolean index SPI_GETCOMBOBOXANIMATION read GetBoolInfo write SetBoolInfo stored False;
|
|
property ListboxSmoothScrolling: Boolean index SPI_GETLISTBOXSMOOTHSCROLLING read GetBoolInfo write SetBoolInfo
|
|
stored False;
|
|
property GradientCaptions: Boolean index SPI_GETGRADIENTCAPTIONS read GetBoolInfo write SetBoolInfo stored False;
|
|
property MenuUnderLines: Boolean index SPI_GETMENUUNDERLINES read GetBoolInfo write SetBoolInfo stored False;
|
|
property ActiveWindowTrackZOrder: Boolean index SPI_GETACTIVEWNDTRKZORDER read GetBoolInfo write SetBoolInfo stored
|
|
False;
|
|
property HotTracking: Boolean index SPI_GETHOTTRACKING read GetBoolInfo write SetBoolInfo stored False;
|
|
property MenuFade: Boolean index SPI_GETMENUFADE read GetBoolInfo write SetBoolInfo stored False;
|
|
property SelectionFade: Boolean index SPI_GETSELECTIONFADE read GetBoolInfo write SetBoolInfo stored False;
|
|
property ToolTipAnimation: Boolean index SPI_GETTOOLTIPANIMATION read GetBoolInfo write SetBoolInfo stored False;
|
|
property ToolTipFade: Boolean index SPI_GETTOOLTIPFADE read GetBoolInfo write SetBoolInfo stored False;
|
|
property CursorShadow: Boolean index SPI_GETCURSORSHADOW read GetBoolInfo write SetBoolInfo stored False;
|
|
property UIEffects: Boolean index SPI_GETUIEFFECTS read GetBoolInfo write SetBoolInfo stored False;
|
|
property ForegroundLockTimeOut: Integer index SPI_GETFOREGROUNDLOCKTIMEOUT read GetIntInfo write SetIntInfo stored
|
|
False;
|
|
property ActiveWindowTrackTimeOut: Integer index SPI_GETACTIVEWNDTRKTIMEOUT read GetIntInfo write SetIntInfo stored
|
|
False;
|
|
property ForegroundFlashCount: Integer index SPI_GETFOREGROUNDFLASHCOUNT read GetIntInfo write SetIntInfo stored
|
|
False;
|
|
property CaretWidth: Integer index SPI_GETCARETWIDTH read GetIntInfo write SetIntInfo stored False;
|
|
property IconHorizontalSpacing: Integer index 0 read GetIconSpacing write SetIconSpacing stored False;
|
|
property IconVerticalSpacing: Integer index 1 read GetIconSpacing write SetIconSpacing stored False;
|
|
end;
|
|
|
|
TJvSystemColorsInfo = class(TJvWriteableInfo)
|
|
// writeable: all
|
|
private
|
|
procedure SetColor(Index: Integer; Value: TColor);
|
|
function GetColor(Index: Integer): TColor;
|
|
published
|
|
property Color3DHighlight: TColor index COLOR_3DHILIGHT read GetColor write SetColor stored False;
|
|
property Color3DLight: TColor index COLOR_3DLIGHT read GetColor write SetColor stored False;
|
|
property Color3DShadow: TColor index COLOR_3DSHADOW read GetColor write SetColor stored False;
|
|
property Color3DDarkShadow: TColor index COLOR_3DDKSHADOW read GetColor write SetColor stored False;
|
|
property Color3DFace: TColor index COLOR_3DFACE read GetColor write SetColor stored False;
|
|
property ColorActiveBorder: TColor index COLOR_ACTIVEBORDER read GetColor write SetColor stored False;
|
|
property ColorActiveCaption: TColor index COLOR_ACTIVECAPTION read GetColor write SetColor stored False;
|
|
property ColorAppWorkspace: TColor index COLOR_APPWORKSPACE read GetColor write SetColor stored False;
|
|
property ColorBackground: TColor index COLOR_BACKGROUND read GetColor write SetColor stored False;
|
|
property ColorBtnFace: TColor index COLOR_BTNFACE read GetColor write SetColor stored False;
|
|
property ColorBtnText: TColor index COLOR_BTNTEXT read GetColor write SetColor stored False;
|
|
property ColorCaptionText: TColor index COLOR_CAPTIONTEXT read GetColor write SetColor stored False;
|
|
property ColorGrayText: TColor index COLOR_GRAYTEXT read GetColor write SetColor stored False;
|
|
property ColorHighlight: TColor index COLOR_HIGHLIGHT read GetColor write SetColor stored False;
|
|
property ColorHighlightText: TColor index COLOR_HIGHLIGHTTEXT read GetColor write SetColor stored False;
|
|
property ColorInactiveBorder: TColor index COLOR_INACTIVEBORDER read GetColor write SetColor stored False;
|
|
property ColorInactiveCaption: TColor index COLOR_INACTIVECAPTION read GetColor write SetColor stored False;
|
|
property ColorInactiveCaptionText: TColor index COLOR_INACTIVECAPTIONTEXT read GetColor write SetColor stored False;
|
|
property ColorInfoBk: TColor index COLOR_INFOBK read GetColor write SetColor stored False;
|
|
property ColorInfoText: TColor index COLOR_INFOTEXT read GetColor write SetColor stored False;
|
|
property ColorMenu: TColor index COLOR_MENU read GetColor write SetColor stored False;
|
|
property ColorMenuText: TColor index COLOR_MENUTEXT read GetColor write SetColor stored False;
|
|
property ColorScrollBar: TColor index COLOR_SCROLLBAR read GetColor write SetColor stored False;
|
|
property ColorWindow: TColor index COLOR_WINDOW read GetColor write SetColor stored False;
|
|
property ColorWindowFrame: TColor index COLOR_WINDOWFRAME read GetColor write SetColor stored False;
|
|
property ColorWindowText: TColor index COLOR_WINDOWTEXT read GetColor write SetColor stored False;
|
|
property ColorHotLight: TColor index COLOR_HOTLIGHT read GetColor write SetColor stored False;
|
|
property ColorGradientActiveCaption: TColor index COLOR_GRADIENTACTIVECAPTION read GetColor write SetColor stored
|
|
False;
|
|
property ColorGradientInactiveCaption: TColor index COLOR_GRADIENTINACTIVECAPTION read GetColor write SetColor stored
|
|
False;
|
|
property ColorMenuHighlight: TColor index COLOR_MENUHILIGHT read GetColor write SetColor stored False;
|
|
property ColorMenuBar: TColor index COLOR_MENUBAR read GetColor write SetColor stored False;
|
|
end;
|
|
|
|
TJvExeType = (etNone, etMSDos, etWin16, etWin32, etConsole);
|
|
TJvIconModifier = (imNormal, imOverlay, imSelected, imOpen, imShellSize, imSmall);
|
|
TJvIconModifiers = set of TJvIconModifier;
|
|
|
|
TJvFileInfo = class(TJvWriteableInfo)
|
|
// writeable: FileName, Modifier
|
|
private
|
|
FLargeImages: TImageList;
|
|
FSmallImages: TImageList;
|
|
FFileName: TFileName;
|
|
FModifiers: TJvIconModifiers;
|
|
FIcon: TIcon;
|
|
function GetSmallImages: TImageList;
|
|
function GetLargeImages: TImageList;
|
|
procedure SetExeDummy(const Value: TJvExeType);
|
|
procedure SetIconDummy(const Value: TIcon);
|
|
procedure SetIntDummy(const Value: Integer);
|
|
procedure SetStrDummy(const Value: string);
|
|
protected
|
|
function GetIconIndex: Integer;
|
|
function GetDisplayName: string;
|
|
function GetExeType: TJvExeType;
|
|
function GetAttributes: Integer;
|
|
function GetIconLocation: string;
|
|
function GetTypeString: string;
|
|
function GetIconHandle: THandle;
|
|
function GetAttrString: string;
|
|
procedure SetFileName(Value: TFileName);
|
|
procedure SetModifiers(Value: TJvIconModifiers);
|
|
public
|
|
property LargeImages: TImageList read FLargeImages;
|
|
property SmallImages: TImageList read FSmallImages;
|
|
property IconHandle: THandle read GetIconHandle stored False;
|
|
property Attributes: Integer read GetAttributes stored False;
|
|
function GetFileInfo(const FileName: string; Attributes: Cardinal; out Info: ShFileInfo; Flags: Cardinal): Cardinal;
|
|
published
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
property FileName: TFileName read FFileName write SetFileName stored False;
|
|
property Modifiers: TJvIconModifiers read FModifiers write SetModifiers default [imNormal];
|
|
property IconIndex: Integer read GetIconIndex write SetIntDummy stored False;
|
|
property DisplayName: string read GetDisplayName write SetStrDummy stored False;
|
|
property ExeType: TJvExeType read GetExeType write SetExeDummy stored False;
|
|
property AttrString: string read GetAttrString write SetStrDummy stored False;
|
|
property IconLocation: string read GetIconLocation write SetStrDummy stored False;
|
|
property TypeString: string read GetTypeString write SetStrDummy stored False;
|
|
property Icon: TIcon read FIcon write SetIconDummy stored False;
|
|
end;
|
|
|
|
TJvDriveChangeEvent = procedure(Sender: TObject; Drive: Char) of object;
|
|
TJvCompactingEvent = procedure(Sender: TObject; Ratio: Integer) of object;
|
|
TJvPowerBroadcastEvent = procedure(Sender: TObject; Event, Data: Integer) of object;
|
|
TJvDeviceChangeEvent = procedure(Sender: TObject; Event: UINT; Data: Pointer) of object;
|
|
TJvDevModeChangeEvent = procedure(Sender: TObject; Device: string) of object;
|
|
TJvDisplayChangeEvent = procedure(Sender: TObject; BitsPerPixel, ScreenWidth, ScreenHeight: Integer) of object;
|
|
TJvSettingChangeEvent = procedure(Sender: TObject; Flag: Integer; const Section: string) of object;
|
|
TJvSpoolerChangeEvent = procedure(Sender: TObject; JobStatus, JobsLeft: Integer) of object;
|
|
TJvPaletteChangeEvent = procedure(Sender: TObject; Wnd: THandle) of object;
|
|
|
|
TJvComputerInfoEx = class(TJvComponent)
|
|
private
|
|
FAPMInfo: TJvAPMInfo;
|
|
FBIOSInfo: TJvBIOSInfo;
|
|
FCPUInfo: TJvCPUInfo;
|
|
FIdentification: TJvIdentification;
|
|
FKeyInfo: TJvKeyInfo;
|
|
FMemoryInfo: TJvMemInfo;
|
|
FMiscInfo: TJvMiscInfo;
|
|
FOSVersionInfo: TJvOSVersionInfo;
|
|
FScreenInfo: TJvScreenInfo;
|
|
FSystemFolders: TJvSystemFolders;
|
|
FDeviceHandle: Integer;
|
|
FOnDeviceAdded: TJvDriveChangeEvent;
|
|
FOnDeviceRemoved: TJvDriveChangeEvent;
|
|
FMetrics: TJvMetricsInfo;
|
|
FSystem: TJvSystemParametersInfo;
|
|
FColors: TJvSystemColorsInfo;
|
|
FOnSettingChange: TJvSettingChangeEvent;
|
|
FOnCompacting: TJvCompactingEvent;
|
|
FOnPowerBroadcast: TJvPowerBroadcastEvent;
|
|
FOnUserChanged: TNotifyEvent;
|
|
FOnDeviceChange: TJvDeviceChangeEvent;
|
|
FOnDeviceModeChange: TJvDevModeChangeEvent;
|
|
FOnDisplayChange: TJvDisplayChangeEvent;
|
|
FOnTimeChange: TNotifyEvent;
|
|
FOnFontChange: TNotifyEvent;
|
|
FOnSysColorChange: TNotifyEvent;
|
|
FOnSpoolerStatusChange: TJvSpoolerChangeEvent;
|
|
FOnPaletteChanging: TJvPaletteChangeEvent;
|
|
FOnPaletteChanged: TJvPaletteChangeEvent;
|
|
FReadOnly: Boolean;
|
|
FFileInfo: TJvFileInfo;
|
|
procedure SetAPMInfo(const Value: TJvAPMInfo);
|
|
procedure SetBIOSInfo(const Value: TJvBIOSInfo);
|
|
procedure SetCPUInfo(const Value: TJvCPUInfo);
|
|
procedure SetIdentification(const Value: TJvIdentification);
|
|
procedure SetKeyInfo(const Value: TJvKeyInfo);
|
|
procedure SetMemoryInfo(const Value: TJvMemInfo);
|
|
procedure SetMiscInfo(const Value: TJvMiscInfo);
|
|
procedure SetOSVersionInfo(const Value: TJvOSVersionInfo);
|
|
procedure SetScreenInfo(const Value: TJvScreenInfo);
|
|
procedure SetSystemFolders(const Value: TJvSystemFolders);
|
|
procedure SetMetrics(const Value: TJvMetricsInfo);
|
|
procedure SetSystem(const Value: TJvSystemParametersInfo);
|
|
procedure SetColors(const Value: TJvSystemColorsInfo);
|
|
procedure SetReadOnly(const Value: Boolean);
|
|
procedure SetFileInfo(const Value: TJvFileInfo);
|
|
function GetAPMInfo: TJvAPMInfo;
|
|
function GetBIOSInfo: TJvBIOSInfo;
|
|
function GetCPUInfo: TJvCPUInfo;
|
|
function GetIdentification: TJvIdentification;
|
|
function GetKeyInfo: TJvKeyInfo;
|
|
function GetMemoryInfo: TJvMemInfo;
|
|
function GetMetrics: TJvMetricsInfo;
|
|
function GetMiscInfo: TJvMiscInfo;
|
|
function GetOSVersionInfo: TJvOSVersionInfo;
|
|
function GetScreenInfo: TJvScreenInfo;
|
|
function GetSystem: TJvSystemParametersInfo;
|
|
function GetSystemFolders: TJvSystemFolders;
|
|
function GetColors: TJvSystemColorsInfo;
|
|
function GetFileInfo: TJvFileInfo;
|
|
protected
|
|
function FirstDrive(AMask: Longint): Char;
|
|
procedure WMDeviceChange(var Msg: TWMDeviceChange);
|
|
procedure WMDisplayChange(var Msg: TWMDisplayChange);
|
|
procedure DoSettingChange(Flag: Integer; Section: string); dynamic;
|
|
procedure DoDriveChange(Drive: Char; Removed: Boolean); dynamic;
|
|
procedure DoCompacting(Ratio: Integer); dynamic;
|
|
procedure DoPowerBroadcast(Event, Data: Integer); dynamic;
|
|
procedure DoUserChanged; dynamic;
|
|
procedure DoDeviceChange(Event: UINT; dwData: Pointer); dynamic;
|
|
procedure DoDevModeChange(const Device: PChar); dynamic;
|
|
procedure DoTimeChange; dynamic;
|
|
procedure DoFontChange; dynamic;
|
|
procedure DoSysColorChange; dynamic;
|
|
procedure DoSpoolerStatus(JobStatus, JobsLeft: Integer); dynamic;
|
|
procedure DoPaletteChanging(Wnd: THandle); dynamic;
|
|
procedure DoPaletteChanged(Wnd: THandle); dynamic;
|
|
procedure WndProc(var Message: TMessage);
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
function ResetSystemCursors: Boolean;
|
|
function ResetSystemIcons: Boolean;
|
|
published
|
|
property APM: TJvAPMInfo read GetAPMInfo write SetAPMInfo stored False;
|
|
property BIOS: TJvBIOSInfo read GetBIOSInfo write SetBIOSInfo stored False;
|
|
property Colors: TJvSystemColorsInfo read GetColors write SetColors stored False;
|
|
property CPU: TJvCPUInfo read GetCPUInfo write SetCPUInfo stored False;
|
|
property FileInfo: TJvFileInfo read GetFileInfo write SetFileInfo stored False;
|
|
property Folders: TJvSystemFolders read GetSystemFolders write SetSystemFolders; // stored False; // Mantis 3808: store the Folders so that TrailingPathDelimiter can be stored.
|
|
property Identification: TJvIdentification read GetIdentification write SetIdentification stored False;
|
|
property Keyboard: TJvKeyInfo read GetKeyInfo write SetKeyInfo stored False;
|
|
property Memory: TJvMemInfo read GetMemoryInfo write SetMemoryInfo stored False;
|
|
property Metrics: TJvMetricsInfo read GetMetrics write SetMetrics;
|
|
property Misc: TJvMiscInfo read GetMiscInfo write SetMiscInfo stored False;
|
|
property OS: TJvOSVersionInfo read GetOSVersionInfo write SetOSVersionInfo stored False;
|
|
property ReadOnly: Boolean read FReadOnly write SetReadOnly default True;
|
|
property Screen: TJvScreenInfo read GetScreenInfo write SetScreenInfo stored False;
|
|
property System: TJvSystemParametersInfo read GetSystem write SetSystem stored False;
|
|
property OnDeviceAdded: TJvDriveChangeEvent read FOnDeviceAdded write FOnDeviceAdded;
|
|
property OnDeviceRemoved: TJvDriveChangeEvent read FOnDeviceRemoved write FOnDeviceRemoved;
|
|
property OnSettingChange: TJvSettingChangeEvent read FOnSettingChange write FOnSettingChange;
|
|
property OnCompacting: TJvCompactingEvent read FOnCompacting write FOnCompacting;
|
|
property OnPowerBroadcast: TJvPowerBroadcastEvent read FOnPowerBroadcast write FOnPowerBroadcast;
|
|
property OnUserChanged: TNotifyEvent read FOnUserChanged write FOnUserChanged;
|
|
property OnDeviceChange: TJvDeviceChangeEvent read FOnDeviceChange write FOnDeviceChange;
|
|
property OnDeviceModeChange: TJvDevModeChangeEvent read FOnDeviceModeChange write FOnDeviceModeChange;
|
|
property OnDisplayChange: TJvDisplayChangeEvent read FOnDisplayChange write FOnDisplayChange;
|
|
property OnTimeChange: TNotifyEvent read FOnTimeChange write FOnTimeChange;
|
|
property OnFontChange: TNotifyEvent read FOnFontChange write FOnFontChange;
|
|
property OnSysColorChange: TNotifyEvent read FOnSysColorChange write FOnSysColorChange;
|
|
property OnSpoolerStatusChange: TJvSpoolerChangeEvent read FOnSpoolerStatusChange write FOnSpoolerStatusChange;
|
|
property OnPaletteChanging: TJvPaletteChangeEvent read FOnPaletteChanging write FOnPaletteChanging;
|
|
property OnPaletteChanged: TJvPaletteChangeEvent read FOnPaletteChanged write FOnPaletteChanged;
|
|
end;
|
|
|
|
{$IFDEF UNITVERSIONING}
|
|
const
|
|
UnitVersioning: TUnitVersionInfo = (
|
|
RCSfile: '$URL: https://jvcl.svn.sourceforge.net/svnroot/jvcl/tags/JVCL3_39/run/JvComputerInfoEx.pas $';
|
|
Revision: '$Revision: 12596 $';
|
|
Date: '$Date: 2009-11-05 17:20:15 +0100 (jeu., 05 nov. 2009) $';
|
|
LogPath: 'JVCL\run'
|
|
);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
implementation
|
|
|
|
uses
|
|
WinInet, Registry,
|
|
JclShell, JclRegistry, JclFileUtils,
|
|
JvJCLUtils, // Include/ExcludeTrailingPathDelimiter
|
|
JvResources;
|
|
|
|
var
|
|
IsDesigning: Boolean = False;
|
|
|
|
const
|
|
DEFAULT_SPIF_SENDCHANGE = SPIF_UPDATEINIFILE or SPIF_SENDCHANGE;
|
|
|
|
procedure UpdateFromLogFont(AFont: TFont; const LogFont: TLogFont);
|
|
var
|
|
Style: TFontStyles;
|
|
begin
|
|
with LogFont do
|
|
begin
|
|
AFont.Name := lfFaceName;
|
|
AFont.Height := lfHeight;
|
|
AFont.Charset := TFontCharset(lfCharSet);
|
|
Style := [];
|
|
if lfWeight > FW_REGULAR then
|
|
Include(Style, fsBold);
|
|
if lfItalic <> 0 then
|
|
Include(Style, fsItalic);
|
|
if lfUnderline <> 0 then
|
|
Include(Style, fsUnderline);
|
|
if lfStrikeOut <> 0 then
|
|
Include(Style, fsStrikeOut);
|
|
AFont.Style := Style;
|
|
end;
|
|
end;
|
|
|
|
procedure UpdateToLogFont(AFont: TFont; var LogFont: TLogFont);
|
|
begin
|
|
with LogFont do
|
|
begin
|
|
StrCopy(lfFaceName, PChar(AFont.Name));
|
|
lfHeight := AFont.Height;
|
|
lfCharSet := AFont.Charset;
|
|
if fsBold in AFont.Style then
|
|
lfWeight := FW_BOLD
|
|
else
|
|
lfWeight := FW_NORMAL;
|
|
lfItalic := Ord(fsItalic in AFont.Style);
|
|
lfUnderline := Ord(fsUnderline in AFont.Style);
|
|
lfStrikeOut := Ord(fsStrikeOut in AFont.Style);
|
|
end;
|
|
end;
|
|
|
|
procedure RaiseReadOnly(AlwaysRaise: Boolean = False);
|
|
begin
|
|
if not IsDesigning or AlwaysRaise then
|
|
raise EJVCLComputerInfoEx.CreateRes(@RsEReadOnlyProperty);
|
|
end;
|
|
|
|
function ArrangeToWindowsArrange(Value: DWORD): TJvWindowsArrange;
|
|
begin
|
|
Result := [];
|
|
if Value and ARW_HIDE = ARW_HIDE then
|
|
Include(Result, waHide)
|
|
else
|
|
if Value and ARW_BOTTOMLEFT = ARW_BOTTOMLEFT then
|
|
begin
|
|
Include(Result, waBottomLeft);
|
|
if Value and ARW_UP = ARW_UP then
|
|
Include(Result, waUp)
|
|
else
|
|
Include(Result, waRight);
|
|
end
|
|
else
|
|
if Value and ARW_BOTTOMRIGHT = ARW_BOTTOMRIGHT then
|
|
begin
|
|
Include(Result, waBottomRight);
|
|
if Value and ARW_UP = ARW_UP then
|
|
Include(Result, waUp)
|
|
else
|
|
Include(Result, waLeft);
|
|
end
|
|
else
|
|
if Value and ARW_TOPLEFT = ARW_TOPLEFT then
|
|
begin
|
|
Include(Result, waTopLeft);
|
|
if Value and ARW_DOWN = ARW_DOWN then
|
|
Include(Result, waDown)
|
|
else
|
|
Include(Result, waRight);
|
|
end
|
|
else
|
|
if Value and ARW_TOPRIGHT = ARW_TOPRIGHT then
|
|
begin
|
|
Include(Result, waTopRight);
|
|
if Value and ARW_DOWN = ARW_DOWN then
|
|
Include(Result, waDown)
|
|
else
|
|
Include(Result, waLeft);
|
|
end;
|
|
end;
|
|
|
|
function WindowsArrangeToArrange(Value: TJvWindowsArrange): DWORD;
|
|
begin
|
|
Result := 0;
|
|
// NB! no error checking - trust the user (bad idea?)
|
|
if waHide in Value then
|
|
Result := Result or ARW_HIDE;
|
|
if waBottomLeft in Value then
|
|
Result := Result or ARW_BOTTOMLEFT;
|
|
if waBottomRight in Value then
|
|
Result := Result or ARW_BOTTOMRIGHT;
|
|
if waUp in Value then
|
|
Result := Result or ARW_UP;
|
|
if waTopLeft in Value then
|
|
Result := Result or ARW_TOPLEFT;
|
|
if waDown in Value then
|
|
Result := Result or ARW_DOWN;
|
|
if waTopRight in Value then
|
|
Result := Result or ARW_TOPRIGHT;
|
|
end;
|
|
|
|
function RegNativeReadStringDef(const RootKey: DelphiHKEY; const Key, Name: string; Def: string): string;
|
|
var
|
|
LastAccess: TJclRegWOW64Access;
|
|
begin
|
|
LastAccess := RegGetWOW64AccessMode;
|
|
try
|
|
RegSetWOW64AccessMode(raNative);
|
|
Result := RegReadStringDef(RootKey, Key, Name, Def);
|
|
finally
|
|
RegSetWOW64AccessMode(LastAccess);
|
|
end;
|
|
end;
|
|
|
|
procedure RegNativeWriteString(const RootKey: DelphiHKEY; const Key, Name, Value: string);
|
|
var
|
|
LastAccess: TJclRegWOW64Access;
|
|
begin
|
|
LastAccess := RegGetWOW64AccessMode;
|
|
try
|
|
RegSetWOW64AccessMode(raNative);
|
|
RegWriteString(RootKey, Key, Name, Value);
|
|
finally
|
|
RegSetWOW64AccessMode(LastAccess);
|
|
end;
|
|
end;
|
|
|
|
function RegNativeReadIntegerDef(const RootKey: DelphiHKEY; const Key, Name: string; Def: Integer): Integer;
|
|
var
|
|
LastAccess: TJclRegWOW64Access;
|
|
begin
|
|
LastAccess := RegGetWOW64AccessMode;
|
|
try
|
|
RegSetWOW64AccessMode(raNative);
|
|
Result := RegReadIntegerDef(RootKey, Key, Name, Def);
|
|
finally
|
|
RegSetWOW64AccessMode(LastAccess);
|
|
end;
|
|
end;
|
|
|
|
//=== { TJvWriteableInfo } ===================================================
|
|
|
|
constructor TJvWriteableInfo.Create;
|
|
begin
|
|
inherited Create;
|
|
FReadOnly := True;
|
|
end;
|
|
|
|
//=== { TJvAPMInfo } =========================================================
|
|
|
|
function TJvAPMInfo.GetAPMBatteryFlag: TAPMBatteryFlag;
|
|
begin
|
|
Result := JclSysInfo.GetAPMBatteryFlag;
|
|
end;
|
|
|
|
function TJvAPMInfo.GetAPMBatteryFullLifeTime: DWORD;
|
|
begin
|
|
if BatteryFlag = abfNoBattery then
|
|
Result := 0
|
|
else
|
|
Result := JclSysInfo.GetAPMBatteryFullLifeTime;
|
|
end;
|
|
|
|
function TJvAPMInfo.GetAPMBatteryLifePercent: Integer;
|
|
begin
|
|
if BatteryFlag = abfNoBattery then
|
|
Result := 0
|
|
else
|
|
Result := JclSysInfo.GetAPMBatteryLifePercent;
|
|
end;
|
|
|
|
function TJvAPMInfo.GetAPMBatteryLifeTime: DWORD;
|
|
begin
|
|
if BatteryFlag = abfNoBattery then
|
|
Result := 0
|
|
else
|
|
Result := JclSysInfo.GetAPMBatteryLifeTime;
|
|
end;
|
|
|
|
function TJvAPMInfo.GetAPMLineStatus: TAPMLineStatus;
|
|
begin
|
|
if BatteryFlag = abfNoBattery then
|
|
Result := alsUnknown
|
|
else
|
|
Result := JclSysInfo.GetAPMLineStatus;
|
|
end;
|
|
|
|
procedure TJvAPMInfo.SetAPMBatteryFlag(const Value: TAPMBatteryFlag);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvAPMInfo.SetAPMBatteryFullLifeTime(const Value: DWORD);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvAPMInfo.SetAPMBatteryLifePercent(const Value: Integer);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvAPMInfo.SetAPMBatteryLifeTime(const Value: DWORD);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvAPMInfo.SetAPMLineStatus(const Value: TAPMLineStatus);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
//=== { TJvOSVersionInfo } ===================================================
|
|
|
|
const
|
|
HKLM_CURRENT_VERSION_WINDOWS = 'Software\Microsoft\Windows\CurrentVersion';
|
|
HKLM_CURRENT_VERSION_NT = 'Software\Microsoft\Windows NT\CurrentVersion';
|
|
|
|
function REG_CURRENT_VERSION: string;
|
|
begin
|
|
if IsWinNT then
|
|
Result := HKLM_CURRENT_VERSION_NT
|
|
else
|
|
Result := HKLM_CURRENT_VERSION_WINDOWS;
|
|
end;
|
|
|
|
function TJvOSVersionInfo.GetOSVersion: TWindowsVersion;
|
|
begin
|
|
Result := JclSysInfo.GetWindowsVersion;
|
|
end;
|
|
|
|
function TJvOSVersionInfo.GetProductType: TNtProductType;
|
|
begin
|
|
Result := JclSysInfo.NtProductType;
|
|
end;
|
|
|
|
function TJvOSVersionInfo.GetWinProductID: string;
|
|
begin
|
|
Result := RegNativeReadStringDef(HKEY_LOCAL_MACHINE, REG_CURRENT_VERSION, 'ProductID', '');
|
|
end;
|
|
|
|
function TJvOSVersionInfo.GetWinProductName: string;
|
|
begin
|
|
Result := RegNativeReadStringDef(HKEY_LOCAL_MACHINE, REG_CURRENT_VERSION, 'ProductName', '');
|
|
end;
|
|
|
|
function TJvOSVersionInfo.GetWinServicePackVersion: DWORD;
|
|
begin
|
|
Result := JclSysInfo.GetWindowsServicePackVersion;
|
|
end;
|
|
|
|
function TJvOSVersionInfo.GetWinVersionBuild: DWORD;
|
|
begin
|
|
Result := Win32BuildNumber;
|
|
end;
|
|
|
|
function TJvOSVersionInfo.GetWinVersionMajor: DWORD;
|
|
begin
|
|
Result := Win32MajorVersion;
|
|
end;
|
|
|
|
function TJvOSVersionInfo.GetWinVersionMinor: DWORD;
|
|
begin
|
|
Result := Win32MinorVersion;
|
|
end;
|
|
|
|
function TJvOSVersionInfo.GetWinVersionCSDString: string;
|
|
begin
|
|
Result := Win32CSDVersion;
|
|
end;
|
|
|
|
procedure TJvOSVersionInfo.SetOSVersion(const Value: TWindowsVersion);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvOSVersionInfo.SetProductType(const Value: TNtProductType);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvOSVersionInfo.SetWinProductID(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvOSVersionInfo.SetWinProductName(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvOSVersionInfo.SetWinServicePackVersion(const Value: DWORD);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvOSVersionInfo.SetWinVersionBuild(const Value: DWORD);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvOSVersionInfo.SetWinVersionMajor(const Value: DWORD);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvOSVersionInfo.SetWinVersionMinor(const Value: DWORD);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvOSVersionInfo.SetWinVersionCSDString(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
//=== { TJvCPUInfo } =========================================================
|
|
|
|
function TJvCPUInfo.AMDSpecific: TAMDSpecific;
|
|
var
|
|
ACpuInfo: TCpuInfo;
|
|
begin
|
|
ACpuInfo := GetCPUInfo;
|
|
if (ACpuInfo.CpuType = CPU_TYPE_AMD)
|
|
then Result := ACpuInfo.AMDSpecific
|
|
else FillChar(Result,SizeOf(Result),0);
|
|
end;
|
|
|
|
function TJvCPUInfo.CyrixSpecific: TCyrixSpecific;
|
|
var
|
|
ACpuInfo: TCpuInfo;
|
|
begin
|
|
ACpuInfo := GetCPUInfo;
|
|
if (ACpuInfo.CpuType = CPU_TYPE_CYRIX)
|
|
then Result := ACpuInfo.CyrixSpecific
|
|
else FillChar(Result,SizeOf(Result),0);
|
|
end;
|
|
|
|
function TJvCPUInfo.Get3DNow: Boolean;
|
|
begin
|
|
Result := GetCPUInfo._3DNow;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetCPUInfo: TCPUInfo;
|
|
begin
|
|
JclSysInfo.GetCPUInfo(Result);
|
|
end;
|
|
|
|
function TJvCPUInfo.GetCPUName: string;
|
|
begin
|
|
Result := string(GetCPUInfo.CpuName);
|
|
end;
|
|
|
|
function TJvCPUInfo.GetCPUSpeed: TFreqInfo;
|
|
begin
|
|
Result := GetCPUInfo.FrequencyInfo;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetCPUType: TJvCPUType;
|
|
begin
|
|
Result := TJvCPUType(GetCPUInfo.CpuType);
|
|
end;
|
|
|
|
function TJvCPUInfo.GetDEPCapable: Boolean;
|
|
begin
|
|
Result := GetCPUInfo.DEPCapable;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetEx3DNow: Boolean;
|
|
begin
|
|
Result := GetCPUInfo.Ex3DNow;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetExMMX: Boolean;
|
|
begin
|
|
Result := GetCPUInfo.ExMMX;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetExTicks: Cardinal;
|
|
begin
|
|
Result := GetCPUSpeed.ExTicks;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetFamily: Byte;
|
|
begin
|
|
Result := GetCPUInfo.Family;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetFeatures: Cardinal;
|
|
begin
|
|
Result := GetCPUInfo.Features;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetHasCacheInfo: Boolean;
|
|
begin
|
|
Result := GetCPUInfo.HasCacheInfo;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetHasExtendedInfo: Boolean;
|
|
begin
|
|
Result := GetCPUInfo.HasExtendedInfo;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetHasInstruction: Boolean;
|
|
begin
|
|
Result := GetCPUInfo.HasInstruction;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetHyperThreadingTechnology: Boolean;
|
|
begin
|
|
Result := GetCPUInfo.HyperThreadingTechnology;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetInCycles: Cardinal;
|
|
begin
|
|
Result := GetCPUSpeed.InCycles;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetIs64Bits: Boolean;
|
|
begin
|
|
Result := GetCPUInfo.Is64Bits;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetIsFDIVOK: Boolean;
|
|
begin
|
|
Result := GetCPUInfo.IsFDIVOK;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetL1CodeCache: Cardinal;
|
|
begin
|
|
Result := GetCPUInfo.L1InstructionCacheSize;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetL1DataCache: Cardinal;
|
|
begin
|
|
Result := GetCPUInfo.L1DataCacheSize;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetL2Cache: Cardinal;
|
|
begin
|
|
Result := GetCPUInfo.L2CacheSize;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetL3Cache: Cardinal;
|
|
begin
|
|
Result := GetCPUInfo.L3CacheSize;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetLogicalCore: Byte;
|
|
begin
|
|
Result := GetCPUInfo.LogicalCore;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetManufacturer: string;
|
|
begin
|
|
Result := string(GetCPUInfo.Manufacturer);
|
|
end;
|
|
|
|
function TJvCPUInfo.GetMMX: Boolean;
|
|
begin
|
|
Result := GetCPUInfo.MMX;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetModel: Byte;
|
|
begin
|
|
Result := GetCPUInfo.Model;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetNormFreq: Int64;
|
|
begin
|
|
Result := GetCPUSpeed.NormFreq;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetPhysicalCore: Byte;
|
|
begin
|
|
Result := GetCPUInfo.PhysicalCore;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetProcessorCount: Integer;
|
|
begin
|
|
Result := JclSysInfo.ProcessorCount;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetRawFreq: Int64;
|
|
begin
|
|
Result := GetCPUSpeed.RawFreq;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetSSE: TSSESupports;
|
|
begin
|
|
Result := GetCPUInfo.SSE;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetStepping: Byte;
|
|
begin
|
|
Result := GetCPUInfo.Stepping;
|
|
end;
|
|
|
|
function TJvCPUInfo.GetVendorIDString: string;
|
|
begin
|
|
Result := string(GetCPUInfo.VendorIDString);
|
|
end;
|
|
|
|
function TJvCPUInfo.IntelSpecific: TIntelSpecific;
|
|
var
|
|
ACpuInfo: TCpuInfo;
|
|
begin
|
|
ACpuInfo := GetCPUInfo;
|
|
if (ACpuInfo.CpuType = CPU_TYPE_INTEL)
|
|
then Result := ACpuInfo.IntelSpecific
|
|
else FillChar(Result,SizeOf(Result),0);
|
|
end;
|
|
|
|
procedure TJvCPUInfo.Set3DNow(const Value: Boolean);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetCPUName(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetCPUType(const Value: TJvCPUType);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetDEPCapable(const Value: Boolean);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetEx3DNow(const Value: Boolean);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetExMMX(const Value: Boolean);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetExTicks(const Value: Cardinal);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetFamily(const Value: Byte);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetFeatures(const Value: Cardinal);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetHasCacheInfo(const Value: Boolean);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetHasExtendedInfo(const Value: Boolean);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetHasInstruction(const Value: Boolean);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetHyperThreadingTechnology(const Value: Boolean);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetInCycles(const Value: Cardinal);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetIs64Bits(const Value: Boolean);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetIsFDIVOK(const Value: Boolean);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetL1CodeCache(const Value: Cardinal);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetL1DataCache(const Value: Cardinal);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetL2Cache(const Value: Cardinal);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetL3Cache(const Value: Cardinal);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetLogicalCore(const Value: Byte);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetManufacturer(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetMMX(const Value: Boolean);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetModel(const Value: Byte);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetNormFreq(const Value: Int64);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetPhysicalCore(const Value: Byte);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetProcessorCount(const Value: Integer);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetRawFreq(const Value: Int64);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetSSE(const Value: TSSESupports);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetStepping(const Value: Byte);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvCPUInfo.SetVendorIDString(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
function TJvCPUInfo.TransmetaSpecific: TTransmetaSpecific;
|
|
var
|
|
ACpuInfo: TCpuInfo;
|
|
begin
|
|
ACpuInfo := GetCPUInfo;
|
|
if (ACpuInfo.CpuType = CPU_TYPE_TRANSMETA)
|
|
then Result := ACpuInfo.TransmetaSpecific
|
|
else FillChar(Result,SizeOf(Result),0);
|
|
end;
|
|
|
|
function TJvCPUInfo.ViaSpecific: TViaSpecific;
|
|
var
|
|
ACpuInfo: TCpuInfo;
|
|
begin
|
|
ACpuInfo := GetCPUInfo;
|
|
if (ACpuInfo.CpuType = CPU_TYPE_VIA)
|
|
then Result := ACpuInfo.ViaSpecific
|
|
else FillChar(Result,SizeOf(Result),0);
|
|
end;
|
|
|
|
//=== { TJvBIOSInfo } ========================================================
|
|
|
|
function TJvBIOSInfo.GetBIOSCopyright: string;
|
|
begin
|
|
Result := JclSysInfo.GetBIOSCopyright;
|
|
end;
|
|
|
|
function TJvBIOSInfo.GetBIOSDate: TDateTime;
|
|
begin
|
|
Result := JclSysInfo.GetBIOSDate;
|
|
end;
|
|
|
|
function TJvBIOSInfo.GetBIOSExtendedInfo: string;
|
|
begin
|
|
Result := JclSysInfo.GetBIOSExtendedInfo;
|
|
end;
|
|
|
|
function TJvBIOSInfo.GetBIOSName: string;
|
|
begin
|
|
Result := JclSysInfo.GetBIOSName;
|
|
end;
|
|
|
|
procedure TJvBIOSInfo.SetBIOSCopyright(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvBIOSInfo.SetBIOSDate(const Value: TDateTime);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvBIOSInfo.SetBIOSExtendedInfo(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvBIOSInfo.SetBIOSName(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
//=== { TJvSystemFolders } ===================================================
|
|
|
|
function TJvSystemFolders.AdjustPathDelimiter(const S: string): string;
|
|
begin
|
|
if TrailingPathDelimiter then
|
|
Result := IncludeTrailingPathDelimiter(S)
|
|
else
|
|
Result := ExcludeTrailingPathDelimiter(S);
|
|
end;
|
|
|
|
function TJvSystemFolders.GetCommonFiles: string;
|
|
begin
|
|
Result := AdjustPathDelimiter(JclSysInfo.GetCommonFilesFolder);
|
|
end;
|
|
|
|
function TJvSystemFolders.GetCurrent: string;
|
|
begin
|
|
Result := AdjustPathDelimiter(JclSysInfo.GetCurrentFolder);
|
|
end;
|
|
|
|
function TJvSystemFolders.Get(const Index: Integer): string;
|
|
begin
|
|
Result := AdjustPathDelimiter(JclShell.GetSpecialFolderLocation(Index));
|
|
end;
|
|
|
|
function TJvSystemFolders.GetProgramFiles: string;
|
|
begin
|
|
Result := AdjustPathDelimiter(JclSysInfo.GetProgramFilesFolder);
|
|
end;
|
|
|
|
function TJvSystemFolders.GetWindows: string;
|
|
begin
|
|
Result := AdjustPathDelimiter(JclSysInfo.GetWindowsFolder);
|
|
end;
|
|
|
|
function TJvSystemFolders.GetSystem: string;
|
|
begin
|
|
Result := AdjustPathDelimiter(JclSysInfo.GetWindowsSystemFolder);
|
|
end;
|
|
|
|
function TJvSystemFolders.GetTemp: string;
|
|
begin
|
|
if not GetEnvironmentVar('TMP', Result, False) or not GetEnvironmentVar('TEMP', Result, False) then
|
|
Result := GetCurrentDir;
|
|
if Result <> '' then
|
|
// the temp folder is usually in 8.3 format, so try to convert
|
|
Result := AdjustPathDelimiter(PathGetLongName(Result));
|
|
end;
|
|
|
|
procedure TJvSystemFolders.SetCommonFiles(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemFolders.SetCurrent(const Value: string);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
SetCurrentDir(Value)
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemFolders.Put(const Index: Integer; const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemFolders.SetProgramFiles(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemFolders.SetWindows(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemFolders.SetSystem(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemFolders.SetTemp(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
//=== { TJvMemInfo } =========================================================
|
|
|
|
function GetMemoryStatus: TMemoryStatus;
|
|
begin
|
|
FillChar(Result, SizeOf(Result), 0);
|
|
Result.dwLength := SizeOf(MemoryStatus);
|
|
GlobalMemoryStatus(Result);
|
|
end;
|
|
|
|
function TJvMemInfo.GetFreePageFileMemory: Int64;
|
|
begin
|
|
Result := GetMemoryStatus.dwAvailPageFile;
|
|
end;
|
|
|
|
function TJvMemInfo.GetFreePhysicalMemory: Int64;
|
|
begin
|
|
Result := GetMemoryStatus.dwAvailPhys;
|
|
end;
|
|
|
|
function TJvMemInfo.GetFreeVirtualMemory: Int64;
|
|
begin
|
|
Result := GetMemoryStatus.dwAvailVirtual;
|
|
end;
|
|
|
|
function TJvMemInfo.GetMaxAppAddress: Integer;
|
|
begin
|
|
Result := JclSysInfo.GetMaxAppAddress;
|
|
end;
|
|
|
|
function TJvMemInfo.GetMemoryLoad: Int64;
|
|
begin
|
|
Result := GetMemoryStatus.dwMemoryLoad;
|
|
end;
|
|
|
|
function TJvMemInfo.GetMinAppAddress: Integer;
|
|
begin
|
|
Result := JclSysInfo.GetMinAppAddress;
|
|
end;
|
|
|
|
function TJvMemInfo.GetSwapFileSize: Int64;
|
|
var
|
|
MemInfo: TMemoryStatus;
|
|
begin
|
|
// (rom) avoid possible inconsistencies when calling GetMemoryStatus twice
|
|
MemInfo := GetMemoryStatus;
|
|
Result := MemInfo.dwTotalPageFile - MemInfo.dwAvailPageFile;
|
|
end;
|
|
|
|
function TJvMemInfo.GetSwapFileUsage: Integer;
|
|
var
|
|
MemInfo: TMemoryStatus;
|
|
begin
|
|
// (rom) avoid possible inconsistencies when calling GetMemoryStatus several times
|
|
MemInfo := GetMemoryStatus;
|
|
with MemInfo do
|
|
if dwTotalPageFile > 0 then
|
|
Result := 100 - Trunc(dwAvailPageFile / dwTotalPageFile * 100)
|
|
else
|
|
Result := 0;
|
|
end;
|
|
|
|
function TJvMemInfo.GetTotalPageFileMemory: Int64;
|
|
begin
|
|
Result := GetMemoryStatus.dwTotalPageFile;
|
|
end;
|
|
|
|
function TJvMemInfo.GetTotalPhysicalMemory: Int64;
|
|
begin
|
|
Result := GetMemoryStatus.dwTotalPhys;
|
|
end;
|
|
|
|
function TJvMemInfo.GetTotalVirtualMemory: Int64;
|
|
begin
|
|
Result := GetMemoryStatus.dwTotalVirtual;
|
|
end;
|
|
|
|
procedure TJvMemInfo.SetFreePageFileMemory(const Value: Int64);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMemInfo.SetFreePhysicalMemory(const Value: Int64);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMemInfo.SetFreeVirtualMemory(const Value: Int64);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMemInfo.SetMaxAppAddress(const Value: Integer);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMemInfo.SetMemoryLoad(const Value: Int64);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMemInfo.SetMinAppAddress(const Value: Integer);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMemInfo.SetSwapFileSize(const Value: Int64);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMemInfo.SetSwapFileUsage(const Value: Integer);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMemInfo.SetTotalPageFileMemory(const Value: Int64);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMemInfo.SetTotalPhysicalMemory(const Value: Int64);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMemInfo.SetTotalVirtualMemory(const Value: Int64);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
//=== { TJvKeyInfo } =========================================================
|
|
|
|
function TJvKeyInfo.GetCapsLockKeyState: Boolean;
|
|
begin
|
|
Result := JclSysInfo.GetCapsLockKeyState;
|
|
end;
|
|
|
|
function TJvKeyInfo.GetKeyState(const VirtualKey: Cardinal): Boolean;
|
|
begin
|
|
Result := JclSysInfo.GetKeyState(VirtualKey);
|
|
end;
|
|
|
|
function TJvKeyInfo.GetNumLockKeyState: Boolean;
|
|
begin
|
|
Result := JclSysInfo.GetNumLockKeyState;
|
|
end;
|
|
|
|
function TJvKeyInfo.GetScrollLockKeyState: Boolean;
|
|
begin
|
|
Result := JclSysInfo.GetScrollLockKeyState;
|
|
end;
|
|
|
|
procedure TJvKeyInfo.SetCapsLockKeyState(const Value: Boolean);
|
|
var
|
|
Keys: TKeyboardState;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
GetKeyboardState(Keys);
|
|
Keys[VK_CAPITAL] := Ord(Value);
|
|
SetKeyboardState(Keys);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvKeyInfo.SetKeyState(const VirtualKey: Cardinal; const Value: Boolean);
|
|
var
|
|
Keys: TKeyboardState;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
GetKeyboardState(Keys);
|
|
Keys[VirtualKey] := Ord(Value) * $80;
|
|
SetKeyboardState(Keys);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvKeyInfo.SetNumLockKeyState(const Value: Boolean);
|
|
var
|
|
Keys: TKeyboardState;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
GetKeyboardState(Keys);
|
|
Keys[VK_NUMLOCK] := Ord(Value);
|
|
SetKeyboardState(Keys);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvKeyInfo.SetScrollLockKeyState(const Value: Boolean);
|
|
var
|
|
Keys: TKeyboardState;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
GetKeyboardState(Keys);
|
|
Keys[VK_SCROLL] := Ord(Value);
|
|
SetKeyboardState(Keys);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
//=== { TJvIdentification } ==================================================
|
|
|
|
const
|
|
cCommentRegPath = 'System\CurrentControlSet\Services\VxD\VNETSUP';
|
|
cCommentRegPathNT = 'SYSTEM\CurrentControlSet\Services\lanmanserver\parameters';
|
|
|
|
function TJvIdentification.GetComment: string;
|
|
begin
|
|
if IsWinNT then
|
|
// (p3) should return empty string on unsupported NT OS's
|
|
Result := RegNativeReadStringDef(HKEY_LOCAL_MACHINE, cCommentRegPathNT, 'srvcomment', '')
|
|
else
|
|
Result := RegNativeReadStringDef(HKEY_LOCAL_MACHINE, cCommentRegPath, 'Comment', '')
|
|
end;
|
|
|
|
function TJvIdentification.GetDomainName: string;
|
|
begin
|
|
Result := JclSysInfo.GetDomainName;
|
|
end;
|
|
|
|
function TJvIdentification.GetHostIPAddress(const HostName: string): string;
|
|
begin
|
|
Result := JclSysInfo.GetIPAddress(HostName);
|
|
end;
|
|
|
|
function TJvIdentification.GetIPAddress: string;
|
|
begin
|
|
Result := HostIPAddress[''];
|
|
end;
|
|
|
|
function TJvIdentification.GetLocalComputerName: string;
|
|
begin
|
|
Result := JclSysInfo.GetLocalComputerName;
|
|
end;
|
|
|
|
function TJvIdentification.GetLocalUserName: string;
|
|
begin
|
|
Result := JclSysInfo.GetLocalUserName;
|
|
end;
|
|
|
|
// avoid using LM.pas
|
|
type
|
|
PWkstaInfo100 = ^TWkstaInfo100;
|
|
_WKSTA_INFO_100 = record
|
|
wki100_platform_id: DWORD;
|
|
wki100_computername: LPWSTR;
|
|
wki100_langroup: LPWSTR;
|
|
wki100_ver_major: DWORD;
|
|
wki100_ver_minor: DWORD;
|
|
end;
|
|
{$EXTERNALSYM _WKSTA_INFO_100}
|
|
TWkstaInfo100 = _WKSTA_INFO_100;
|
|
|
|
const
|
|
netapi32lib = 'netapi32.dll';
|
|
|
|
var
|
|
_NetWkstaGetInfo: function(servername: LPWSTR; level: DWORD; bufptr: Pointer): DWORD; stdcall = nil;
|
|
_NetApiBufferFree: function(Buffer: Pointer): DWORD; stdcall = nil;
|
|
LibHandle: Cardinal = 0;
|
|
|
|
function LoadNetLib: Boolean;
|
|
begin
|
|
if LibHandle = 0 then
|
|
begin
|
|
LibHandle := SafeLoadLibrary(netapi32lib);
|
|
if LibHandle <> 0 then
|
|
begin
|
|
@_NetWkstaGetInfo := GetProcAddress(LibHandle, 'NetWkstaGetInfo');
|
|
@_NetApiBufferFree := GetProcAddress(LibHandle, 'NetApiBufferFree');
|
|
end;
|
|
end;
|
|
Result := LibHandle <> 0;
|
|
end;
|
|
|
|
procedure UnloadNetLib;
|
|
begin
|
|
if LibHandle <> 0 then
|
|
FreeLibrary(LibHandle);
|
|
LibHandle := 0;
|
|
end;
|
|
|
|
function NetApiBufferFree(Buffer: Pointer): DWORD; stdcall;
|
|
begin
|
|
if LoadNetLib and Assigned(_NetApiBufferFree) then
|
|
Result := _NetApiBufferFree(Buffer)
|
|
else
|
|
Result := ERROR_CALL_NOT_IMPLEMENTED;
|
|
end;
|
|
|
|
function NetWkstaGetInfo(servername: LPWSTR; level: DWORD; bufptr: Pointer): DWORD;
|
|
begin
|
|
if LoadNetLib and Assigned(_NetWkstaGetInfo) then
|
|
Result := _NetWkstaGetInfo(servername, level, bufptr)
|
|
else
|
|
Result := ERROR_CALL_NOT_IMPLEMENTED;
|
|
end;
|
|
|
|
function TJvIdentification.GetLocalWorkgroup: string;
|
|
var
|
|
LanInfo: PWkstaInfo100;
|
|
begin
|
|
Result := RegNativeReadStringDef(HKEY_LOCAL_MACHINE, 'System\CurrentControlSet\Services\Vxd\VNETSUP', 'Workgroup', '');
|
|
if (Result = '') and IsWinNT then
|
|
begin
|
|
LanInfo := nil;
|
|
if (NetWkstaGetInfo(nil, 100, @LanInfo) = 0) and (LanInfo <> nil) then
|
|
begin
|
|
Result := LanInfo^.wki100_langroup;
|
|
NetApiBufferFree(LanInfo);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TJvIdentification.GetRegisteredCompany: string;
|
|
begin
|
|
Result := JclSysInfo.GetRegisteredCompany;
|
|
end;
|
|
|
|
function TJvIdentification.GetRegisteredOwner: string;
|
|
begin
|
|
Result := JclSysInfo.GetRegisteredOwner;
|
|
end;
|
|
|
|
function TJvIdentification.GetUserDomainName(const CurUser: string): string;
|
|
begin
|
|
Result := JclSysInfo.GetUserDomainName(CurUser);
|
|
end;
|
|
|
|
function TJvIdentification.GetVolumeFileSystem(const Drive: string): string;
|
|
begin
|
|
Result := JclSysInfo.GetVolumeFileSystem(Drive);
|
|
end;
|
|
|
|
function TJvIdentification.GetVolumeName(const Drive: string): string;
|
|
begin
|
|
Result := JclSysInfo.GetVolumeName(Drive);
|
|
end;
|
|
|
|
function TJvIdentification.GetVolumeSerialNumber(const Drive: string): string;
|
|
begin
|
|
Result := JclSysInfo.GetVolumeSerialNumber(Drive);
|
|
end;
|
|
|
|
procedure TJvIdentification.SetComment(const Value: string);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
// (p3) implementation dilemma: either allow the user to write the value regardless of
|
|
// whether the OS supports it or not, or only write value if it is known to be supported?
|
|
// Currently, only allow to write if known to be supported and raise error if not supported,
|
|
// but maybe that's a bad idea?
|
|
if IsWinXP then // "srvcomment" property only supported on WinXP AFAIK
|
|
RegNativeWriteString(HKEY_LOCAL_MACHINE, cCommentRegPathNT, 'srvcomment', Value)
|
|
else
|
|
if not IsWinNT then
|
|
// Win95/98 both support Comment
|
|
RegWriteString(HKEY_LOCAL_MACHINE, cCommentRegPath, 'Comment', Value)
|
|
else
|
|
RaiseReadOnly; // ?? - or just let it pass unnoticed?
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvIdentification.SetDomainName(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvIdentification.SetIPAddress(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvIdentification.SetLocalComputerName(const Value: string);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
if not SetComputerName(PChar(Value)) then
|
|
RaiseLastOSError;
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvIdentification.SetLocalUserName(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvIdentification.SetLocalWorkgroup(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvIdentification.SetRegisteredCompany(const Value: string);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
RegNativeWriteString(HKEY_LOCAL_MACHINE, REG_CURRENT_VERSION, 'RegisteredOrganization', Value)
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvIdentification.SetRegisteredOwner(const Value: string);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
RegNativeWriteString(HKEY_LOCAL_MACHINE, REG_CURRENT_VERSION, 'RegisteredOwner', Value)
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
//=== { TJvScreenMode } ======================================================
|
|
|
|
function DisplayFlagsToSet(Flags: DWORD): TJvDisplayFlags;
|
|
begin
|
|
Result := [];
|
|
if Flags and DM_GRAYSCALE = DM_GRAYSCALE then
|
|
Include(Result, dmGrayScale);
|
|
if Flags and DM_INTERLACED = DM_INTERLACED then
|
|
Include(Result, dmInterlaced);
|
|
end;
|
|
|
|
function SetToDisplayFlags(Value: TJvDisplayFlags): DWORD;
|
|
begin
|
|
Result := 0;
|
|
if dmGrayScale in Value then
|
|
Result := Result or DM_GRAYSCALE;
|
|
if dmInterlaced in Value then
|
|
Result := Result or DM_INTERLACED;
|
|
end;
|
|
|
|
procedure TJvScreenMode.SetBitsPerPixel(const Value: DWORD);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvScreenMode.SetFlags(const Value: TJvDisplayFlags);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvScreenMode.SetHeight(const Value: Integer);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvScreenMode.SetHz(const Value: DWORD);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvScreenMode.SetWidth(const Value: Integer);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
//=== { TJvScreenInfo } ======================================================
|
|
|
|
destructor TJvScreenInfo.Destroy;
|
|
begin
|
|
FScreenModes.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TJvScreenInfo.GetCurrentMode: TDeviceMode;
|
|
const
|
|
cCurrentSettings = $FFFFFFFE;
|
|
begin
|
|
Result.dmSize := SizeOf(Result);
|
|
EnumDisplaySettings(nil, cCurrentSettings, Result);
|
|
end;
|
|
|
|
function TJvScreenInfo.GetBitsPerPixel: DWORD;
|
|
begin
|
|
Result := GetCurrentMode.dmBitsPerPel; // ( 2^Result = number of colors
|
|
end;
|
|
|
|
function TJvScreenInfo.GetScreenFrequency: DWORD;
|
|
begin
|
|
Result := GetCurrentMode.dmDisplayFrequency;
|
|
if Result in [0, 1] then
|
|
Result := 60; // - default screen frequency but don't know how to get it...
|
|
end;
|
|
|
|
function TJvScreenInfo.GetScreenHeight: DWORD;
|
|
begin
|
|
Result := ScreenResolution.Y;
|
|
end;
|
|
|
|
function TJvScreenInfo.GetScreenResolution: TPoint;
|
|
begin
|
|
with GetCurrentMode do
|
|
Result := Point(dmPelsWidth, dmPelsHeight);
|
|
end;
|
|
|
|
function TJvScreenInfo.GetScreenWidth: DWORD;
|
|
begin
|
|
Result := ScreenResolution.X;
|
|
end;
|
|
|
|
procedure TJvScreenInfo.SetBitsPerPixel(const Value: DWORD);
|
|
var
|
|
DevMode: TDeviceMode;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
DevMode := GetCurrentMode;
|
|
if DevMode.dmBitsPerPel <> Value then
|
|
DevMode.dmBitsPerPel := Value;
|
|
DevMode.dmFields := DM_BITSPERPEL;
|
|
SetCurrentMode(DevMode, CDS_UPDATEREGISTRY);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvScreenInfo.SetScreenFrequency(const Value: DWORD);
|
|
var
|
|
DevMode: TDeviceMode;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
DevMode := GetCurrentMode;
|
|
if DevMode.dmDisplayFrequency <> Value then
|
|
DevMode.dmDisplayFrequency := Value;
|
|
DevMode.dmFields := DM_DISPLAYFREQUENCY;
|
|
SetCurrentMode(DevMode, CDS_UPDATEREGISTRY);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvScreenInfo.SetScreenHeight(const Value: DWORD);
|
|
var
|
|
DevMode: TDeviceMode;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
DevMode := GetCurrentMode;
|
|
if DevMode.dmPelsHeight <> Value then
|
|
DevMode.dmPelsHeight := Value;
|
|
DevMode.dmFields := DM_PELSHEIGHT;
|
|
SetCurrentMode(DevMode, CDS_UPDATEREGISTRY);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvScreenInfo.SetScreenResolution(const Value: TPoint);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvScreenInfo.SetScreenWidth(const Value: DWORD);
|
|
var
|
|
DevMode: TDeviceMode;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
DevMode := GetCurrentMode;
|
|
if DevMode.dmPelsWidth <> Value then
|
|
DevMode.dmPelsWidth := Value;
|
|
DevMode.dmFields := DM_PELSWIDTH;
|
|
SetCurrentMode(DevMode, CDS_UPDATEREGISTRY);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
function TJvScreenInfo.GetFlags: TJvDisplayFlags;
|
|
begin
|
|
Result := DisplayFlagsToSet(GetCurrentMode.dmDisplayFlags);
|
|
end;
|
|
|
|
procedure TJvScreenInfo.SetFlags(const Value: TJvDisplayFlags);
|
|
var
|
|
DevMode: TDeviceMode;
|
|
Flags: DWORD;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
Flags := SetToDisplayFlags(Value);
|
|
DevMode := GetCurrentMode;
|
|
if DevMode.dmDisplayFlags <> Flags then
|
|
DevMode.dmDisplayFlags := Flags;
|
|
DevMode.dmFields := DM_DISPLAYFLAGS;
|
|
SetCurrentMode(DevMode, CDS_UPDATEREGISTRY);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
function TJvScreenInfo.GetScreenModes: TJvScreenModes;
|
|
begin
|
|
if FScreenModes = nil then
|
|
FScreenModes := TJvScreenModes.Create;
|
|
FScreenModes.Refresh;
|
|
Result := FScreenModes;
|
|
end;
|
|
|
|
procedure TJvScreenInfo.SetScreenModes(const Value: TJvScreenModes);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvScreenInfo.SetCurrentMode(ADeviceMode: TDeviceMode; Flags: DWORD);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
if ChangeDisplaySettings(ADeviceMode, CDS_TEST) = DISP_CHANGE_SUCCESSFUL then
|
|
ChangeDisplaySettings(ADeviceMode, Flags);
|
|
// else
|
|
// RaiseLastOSError;
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
//=== { TJvAppVersions } =====================================================
|
|
|
|
function TJvAppVersions.GetADOVersion: string;
|
|
begin
|
|
Result := RegNativeReadStringDef(HKEY_LOCAL_MACHINE, '\SOFTWARE\Microsoft\DataAccess', 'Version', '');
|
|
end;
|
|
|
|
function TJvAppVersions.GetBDELocation: string;
|
|
begin
|
|
Result := ExcludeTrailingPathDelimiter(RegReadStringDef(HKEY_LOCAL_MACHINE,
|
|
'\SOFTWARE\Borland\Database Engine', 'DLLPATH', ''));
|
|
end;
|
|
|
|
function TJvAppVersions.GetBDEVersion: string;
|
|
begin
|
|
Result := IncludeTrailingPathDelimiter(GetBDELocation) + 'idapi32.dll';
|
|
if not VersionResourceAvailable(Result) then
|
|
Result := IncludeTrailingPathDelimiter(GetBDELocation) + 'bdeadmin.exe';
|
|
|
|
if VersionResourceAvailable(Result) then
|
|
begin
|
|
with TJclFileVersionInfo.Create(Result) do
|
|
try
|
|
Result := FileVersion;
|
|
finally
|
|
Free;
|
|
end;
|
|
end
|
|
else
|
|
Result := '';
|
|
end;
|
|
|
|
function TJvAppVersions.GetIEVersion: string;
|
|
begin
|
|
Result := RegNativeReadStringDef(HKEY_LOCAL_MACHINE, '\SOFTWARE\Microsoft\Internet Explorer', 'Version', '');
|
|
end;
|
|
|
|
function TJvAppVersions.GetOpenGLVersion: string;
|
|
var
|
|
AVendor: AnsiString;
|
|
ASResult: AnsiString;
|
|
begin
|
|
if not JclSysInfo.GetOpenGLVersion(GetActiveWindow, ASResult, AVendor) then
|
|
Result := ''
|
|
else
|
|
Result := string(ASResult);
|
|
end;
|
|
|
|
function TJvAppVersions.GetDirectXVersion: string;
|
|
begin
|
|
Result := RegNativeReadStringDef(HKEY_LOCAL_MACHINE, '\SOFTWARE\Microsoft\DirectX', 'Version', '');
|
|
end;
|
|
|
|
procedure TJvAppVersions.SetADOVersion(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvAppVersions.SetBDEVersion(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvAppVersions.SetIEVersion(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvAppVersions.SetOpenGLVersion(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvAppVersions.SetDirectXVersion(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
//=== { TJvHardwareProfile } =================================================
|
|
|
|
function TJvHardwareProfile.GetDockInfo: TJvHWDockInfo;
|
|
var
|
|
Flags: DWORD;
|
|
begin
|
|
Flags := NativeType.dwDockInfo;
|
|
Result := [];
|
|
if Flags and DOCKINFO_DOCKED = DOCKINFO_DOCKED then
|
|
Include(Result, diDocked);
|
|
if Flags and DOCKINFO_UNDOCKED = DOCKINFO_UNDOCKED then
|
|
Include(Result, diUndocked);
|
|
if Flags and DOCKINFO_USER_SUPPLIED = DOCKINFO_USER_SUPPLIED then
|
|
Include(Result, diUserSupplied);
|
|
if Flags and DOCKINFO_USER_DOCKED = DOCKINFO_USER_DOCKED then
|
|
Include(Result, diUserDocked);
|
|
if Flags and DOCKINFO_USER_UNDOCKED = DOCKINFO_USER_UNDOCKED then
|
|
Include(Result, diUserUndocked);
|
|
end;
|
|
|
|
function TJvHardwareProfile.GetGUID: string;
|
|
begin
|
|
Result := NativeType.szHwProfileGuid;
|
|
end;
|
|
|
|
function TJvHardwareProfile.GetName: string;
|
|
begin
|
|
Result := NativeType.szHwProfileName;
|
|
end;
|
|
|
|
function TJvHardwareProfile.GetNativeType: HW_PROFILE_INFO;
|
|
type
|
|
GetCurrentHwProfileFunc = function(var lpHwProfileInfo: HW_PROFILE_INFO): BOOL; stdcall;
|
|
var
|
|
GetCurrentHwProfile: GetCurrentHwProfileFunc;
|
|
LibHandle: THandle;
|
|
begin
|
|
FillChar(Result, SizeOf(Result), 0);
|
|
// GetCurrentHwProfile is not available on all Win95's
|
|
LibHandle := SafeLoadLibrary('advapi32.dll');
|
|
if LibHandle <> 0 then
|
|
try
|
|
{$IFDEF UNICODE}
|
|
@GetCurrentHwProfile := GetProcAddress(LibHandle, 'GetCurrentHwProfileW');
|
|
{$ELSE}
|
|
@GetCurrentHwProfile := GetProcAddress(LibHandle, 'GetCurrentHwProfileA');
|
|
{$ENDIF UNICODE}
|
|
if Assigned(GetCurrentHwProfile) then
|
|
GetCurrentHwProfile(Result);
|
|
finally
|
|
FreeLibrary(LibHandle);
|
|
end;
|
|
end;
|
|
|
|
procedure TJvHardwareProfile.SetDockInfo(const Value: TJvHWDockInfo);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvHardwareProfile.SetGUID(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvHardwareProfile.SetName(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
//=== { TJvScreenModes } =====================================================
|
|
|
|
constructor TJvScreenModes.Create;
|
|
begin
|
|
FItems := TList.Create;
|
|
FDefaultMode := TJvScreenMode.Create;
|
|
end;
|
|
|
|
destructor TJvScreenModes.Destroy;
|
|
begin
|
|
Clear;
|
|
FItems.Free;
|
|
FDefaultMode.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TJvScreenModes.Clear;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 0 to FItems.Count - 1 do
|
|
TObject(FItems[I]).Free;
|
|
FItems.Clear;
|
|
end;
|
|
|
|
function TJvScreenModes.GetCount: Integer;
|
|
begin
|
|
Result := FItems.Count;
|
|
end;
|
|
|
|
function TJvScreenModes.GetItems(Index: Integer): TJvScreenMode;
|
|
begin
|
|
if Index < 0 then
|
|
Result := FDefaultMode
|
|
else
|
|
if (Index >= 0) and (Index < Count) then
|
|
Result := TJvScreenMode(FItems[Index])
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
procedure TJvScreenModes.Refresh;
|
|
const
|
|
cCurrentSettings = $FFFFFFFE;
|
|
var
|
|
I: Integer;
|
|
DevMode: TDeviceMode;
|
|
Item: TJvScreenMode;
|
|
begin
|
|
FItems.Clear;
|
|
DevMode.dmSize := SizeOf(DevMode);
|
|
I := 0;
|
|
EnumDisplaySettings(nil, cCurrentSettings, DevMode);
|
|
if DevMode.dmDisplayFrequency < 2 then
|
|
FDefaultMode.FHz := 60
|
|
else
|
|
FDefaultMode.FHz := DevMode.dmDisplayFrequency;
|
|
FDefaultMode.FWidth := DevMode.dmPelsWidth;
|
|
FDefaultMode.FHeight := DevMode.dmPelsHeight;
|
|
FDefaultMode.FBitsPerPixel := DevMode.dmBitsPerPel;
|
|
FDefaultMode.FFlags := DisplayFlagsToSet(DevMode.dmDisplayFlags);
|
|
|
|
while EnumDisplaySettings(nil, I, DevMode) do
|
|
begin
|
|
Item := TJvScreenMode.Create;
|
|
if DevMode.dmDisplayFrequency < 2 then
|
|
Item.FHz := 60 // pure guess work
|
|
else
|
|
Item.FHz := DevMode.dmDisplayFrequency;
|
|
Item.FWidth := DevMode.dmPelsWidth;
|
|
Item.FHeight := DevMode.dmPelsHeight;
|
|
Item.FBitsPerPixel := DevMode.dmBitsPerPel;
|
|
Item.FFlags := DisplayFlagsToSet(DevMode.dmDisplayFlags);
|
|
FItems.Add(Item);
|
|
Inc(I);
|
|
end;
|
|
end;
|
|
|
|
procedure TJvScreenModes.SetItems(Index: Integer; const Value: TJvScreenMode);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
//=== { TJvMiscInfo } ========================================================
|
|
|
|
const
|
|
HKCU_CONTROL_PANEL_DESKTOP = '\Control Panel\Desktop';
|
|
|
|
destructor TJvMiscInfo.Destroy;
|
|
begin
|
|
FVersions.Free;
|
|
FColorSchemes.Free;
|
|
FHardwareProfile.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TJvMiscInfo.GetColorSchemes: TStrings;
|
|
begin
|
|
if FColorSchemes = nil then
|
|
FColorSchemes := TStringlist.Create;
|
|
FColorSchemes.Clear;
|
|
with TRegistry.Create(KEY_READ) do
|
|
try
|
|
if OpenKeyReadOnly('\Control Panel\Appearance\Schemes') then
|
|
GetValueNames(FColorSchemes);
|
|
finally
|
|
Free;
|
|
end;
|
|
TStringlist(FColorSchemes).Sort;
|
|
Result := FColorSchemes;
|
|
end;
|
|
|
|
function TJvMiscInfo.GetCurrentColorScheme: string;
|
|
begin
|
|
Result := RegReadStringDef(HKEY_CURRENT_USER, '\Control Panel\Current', 'Color Schemes', '');
|
|
end;
|
|
|
|
function TJvMiscInfo.GetDVDRegion: Integer;
|
|
begin
|
|
Result := RegNativeReadIntegerDef(HKEY_LOCAL_MACHINE, REG_CURRENT_VERSION, 'DVD_Region', -1);
|
|
end;
|
|
|
|
function TJvMiscInfo.GetHardwareProfile: TJvHardwareProfile;
|
|
begin
|
|
if FHardwareProfile = nil then
|
|
FHardwareProfile := TJvHardwareProfile.Create;
|
|
Result := FHardwareProfile;
|
|
end;
|
|
|
|
function TJvMiscInfo.GetIsOnline: Boolean;
|
|
const
|
|
INTERNET_CONNECTION_OFFLINE = $20;
|
|
type
|
|
TInternetGetConnectedStateFunc = function (lpdwFlags: LPDWORD;
|
|
dwReserved: DWORD): BOOL; stdcall;
|
|
var
|
|
ConnectFlag: DWORD;
|
|
LibraryHandle: THandle;
|
|
InternetGetConnectedStateFunc: TInternetGetConnectedStateFunc;
|
|
begin
|
|
LibraryHandle := SafeLoadLibrary('wininet.dll'); { Do not localize }
|
|
try
|
|
InternetGetConnectedStateFunc := GetProcAddress(LibraryHandle, 'InternetGetConnectedState'); { Do not localize }
|
|
Result := Assigned(InternetGetConnectedStateFunc) and InternetGetConnectedStateFunc(@ConnectFlag, 0) and
|
|
(ConnectFlag <> INTERNET_CONNECTION_OFFLINE);
|
|
finally
|
|
FreeLibrary(LibraryHandle);
|
|
end;
|
|
//Result := InternetGetConnectedState(@ConnectFlag, 0) and (ConnectFlag <> INTERNET_CONNECTION_OFFLINE);
|
|
end;
|
|
|
|
function TJvMiscInfo.GetNetBIOS: Boolean;
|
|
type
|
|
_NCB64 = record
|
|
ncb_command: UCHAR; // command code
|
|
ncb_retcode: UCHAR; // return code
|
|
ncb_lsn: UCHAR; // local session number
|
|
ncb_num: UCHAR; // number of our network name
|
|
ncb_buffer: PUCHAR; // address of message buffer
|
|
ncb_length: Word; // size of message buffer
|
|
ncb_callname: array [0..NCBNAMSZ - 1] of UCHAR; // blank-padded name of remote
|
|
ncb_name: array [0..NCBNAMSZ - 1] of UCHAR; // our blank-padded netname
|
|
ncb_rto: UCHAR; // rcv timeout/retry count
|
|
ncb_sto: UCHAR; // send timeout/sys timeout
|
|
ncb_post: TNcbPost; // POST routine address
|
|
ncb_lana_num: UCHAR; // lana (adapter) number
|
|
ncb_cmd_cplt: UCHAR; // 0xff => commmand pending
|
|
ncb_reserve: array [0..17] of UCHAR; // reserved, used by BIOS
|
|
ncb_event: THandle; // HANDLE to Win32 event which
|
|
// will be set to the signalled
|
|
// state when an ASYNCH command
|
|
// completes
|
|
end;
|
|
|
|
var
|
|
P: _NCB64; // 64bit structure is larger than the 32bit structure
|
|
begin
|
|
FillChar(P, SizeOf(P), 0);
|
|
P.ncb_command := NCBASTAT;
|
|
Result := RtdlNetBios(@P) <> NRC_OPENERR;
|
|
end;
|
|
|
|
function TJvMiscInfo.GetPattern: string;
|
|
begin
|
|
Result := RegReadStringDef(HKEY_CURRENT_USER, HKCU_CONTROL_PANEL_DESKTOP, 'Pattern', '');
|
|
end;
|
|
|
|
function TJvMiscInfo.GetScreenSaver: string;
|
|
begin
|
|
Result := RegReadStringDef(HKEY_CURRENT_USER, HKCU_CONTROL_PANEL_DESKTOP, 'SCRNSAVE.EXE', '');
|
|
if Result <> '' then
|
|
// screen saver is usually returned in 8.3 format
|
|
Result := PathGetLongName(Result);
|
|
end;
|
|
|
|
function TJvMiscInfo.GetTimeRunning: Int64;
|
|
begin
|
|
Result := GetTickCount64;
|
|
end;
|
|
(*
|
|
Added to JvJVCLUtils:
|
|
|
|
function GetTickCount64: Int64;
|
|
var
|
|
QFreq, QCount:Int64;
|
|
begin
|
|
Result := GetTickCount;
|
|
if QueryPerformanceFrequency(QFreq) then
|
|
begin
|
|
QueryPerformanceCounter(QCount);
|
|
if QFreq <> 0 then
|
|
Result := (QCount div QFreq) * 1000;
|
|
end;
|
|
end;
|
|
*)
|
|
|
|
function TJvMiscInfo.GetTimeRunningAsString: string;
|
|
var
|
|
DateTime: TDateTime;
|
|
begin
|
|
DateTime := GetTimeRunning / 86400000;
|
|
Result := Format('%d %s', [Trunc(DateTime), TimeToStr(DateTime)]);
|
|
end;
|
|
|
|
function TJvMiscInfo.GetVersions: TJvAppVersions;
|
|
begin
|
|
if FVersions = nil then
|
|
FVersions := TJvAppVersions.Create;
|
|
Result := FVersions;
|
|
end;
|
|
|
|
function TJvMiscInfo.GetWallpaper: string;
|
|
begin
|
|
Result := RegReadStringDef(HKEY_CURRENT_USER, HKCU_CONTROL_PANEL_DESKTOP, 'Wallpaper', '');
|
|
end;
|
|
|
|
function TJvMiscInfo.GetWallpaperStyle: TJvWallpaperStyle;
|
|
begin
|
|
Result := TJvWallpaperStyle(StrToInt(RegReadStringDef(HKEY_CURRENT_USER, HKCU_CONTROL_PANEL_DESKTOP, 'WallpaperStyle', '0')));
|
|
end;
|
|
|
|
function TJvMiscInfo.GetWallpaperTiled: Boolean;
|
|
begin
|
|
Result := RegReadStringDef(HKEY_CURRENT_USER, HKCU_CONTROL_PANEL_DESKTOP, 'TileWallpaper', '0') <> '0';
|
|
end;
|
|
|
|
procedure TJvMiscInfo.SetColorSchemes(const Value: TStrings);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMiscInfo.SetCurrentColorScheme(const Value: string);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
RegWriteString(HKEY_CURRENT_USER, '\Control Panel\Current', 'Color Schemes', Value)
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMiscInfo.SetDVDRegion(const Value: Integer);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMiscInfo.SetHardwareProfile(const Value: TJvHardwareProfile);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvMiscInfo.SetIsOnline(const Value: Boolean);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMiscInfo.SetNetBIOS(const Value: Boolean);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMiscInfo.SetPattern(const Value: string);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
RegWriteString(HKEY_CURRENT_USER, HKCU_CONTROL_PANEL_DESKTOP, 'Pattern', Value)
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMiscInfo.SetScreenSaver(const Value: string);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
RegWriteString(HKEY_CURRENT_USER, HKCU_CONTROL_PANEL_DESKTOP, 'SCRSAVE.EXE', Value)
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMiscInfo.SetTimeRunning(const Value: Int64);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMiscInfo.SetTimeRunningAsString(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMiscInfo.SetVersions(const Value: TJvAppVersions);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvMiscInfo.SetWallpaper(const Value: string);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
RegWriteString(HKEY_CURRENT_USER, HKCU_CONTROL_PANEL_DESKTOP, 'Wallpaper', Value)
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMiscInfo.SetWallpaperStyle(const Value: TJvWallpaperStyle);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
if Value <> wsUnused then
|
|
RegWriteString(HKEY_CURRENT_USER, HKCU_CONTROL_PANEL_DESKTOP, 'WallpaperStyle', IntToStr(Ord(Value)));
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMiscInfo.SetWallpaperTiled(const Value: Boolean);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
RegWriteString(HKEY_CURRENT_USER, HKCU_CONTROL_PANEL_DESKTOP, 'TileWallpaper', IntToStr(Ord(Value)))
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
//=== { TJvMetricsInfo } =====================================================
|
|
|
|
function TJvMetricsInfo.GetACP: Integer;
|
|
begin
|
|
Result := Windows.GetACP;
|
|
end;
|
|
|
|
function TJvMetricsInfo.GetArrange: TJvWindowsArrange;
|
|
begin
|
|
Result := ArrangeToWindowsArrange(GetSystemMetrics(SM_ARRANGE));
|
|
end;
|
|
|
|
function TJvMetricsInfo.GetBoolMetrics(const Index: Integer): Boolean;
|
|
begin
|
|
Result := GetSystemMetrics(Index) <> 0;
|
|
end;
|
|
|
|
function TJvMetricsInfo.GetCaretBlinkTime: DWORD;
|
|
begin
|
|
Result := Windows.GetCaretBlinkTime;
|
|
end;
|
|
|
|
function TJvMetricsInfo.GetCaretPos(const Index: Integer): Integer;
|
|
var
|
|
P: TPoint;
|
|
begin
|
|
Result := -1;
|
|
if not Windows.GetCaretPos(P) then
|
|
P := Point(-1, -1);
|
|
case Index of
|
|
0:
|
|
Result := P.X;
|
|
1:
|
|
Result := P.Y;
|
|
end;
|
|
end;
|
|
|
|
function TJvMetricsInfo.GetCleanBoot: TJvCleanBoot;
|
|
begin
|
|
Result := TJvCleanBoot(GetSystemMetrics(SM_CLEANBOOT));
|
|
end;
|
|
|
|
function TJvMetricsInfo.GetCursorPos(const Index: Integer): Integer;
|
|
var
|
|
P: TPoint;
|
|
begin
|
|
Result := -1;
|
|
if not Windows.GetCursorPos(P) then
|
|
P := Point(-1, -1);
|
|
case Index of
|
|
0:
|
|
Result := P.X;
|
|
1:
|
|
Result := P.Y;
|
|
end;
|
|
end;
|
|
|
|
function TJvMetricsInfo.GetDialogBaseUnits: Integer;
|
|
begin
|
|
Result := Windows.GetDialogBaseUnits;
|
|
end;
|
|
|
|
function TJvMetricsInfo.GetDoubleClickTime: Integer;
|
|
begin
|
|
Result := Windows.GetDoubleClickTime;
|
|
end;
|
|
|
|
function TJvMetricsInfo.GetMetrics(const Index: Integer): Integer;
|
|
begin
|
|
Result := GetSystemMetrics(Index);
|
|
end;
|
|
|
|
function TJvMetricsInfo.GetOEMCP: Integer;
|
|
begin
|
|
Result := Windows.GetOEMCP;
|
|
end;
|
|
|
|
procedure TJvMetricsInfo.SetACP(const Value: Integer);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMetricsInfo.SetArrange(const Value: TJvWindowsArrange);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMetricsInfo.SetBoolMetrics(const Index: Integer;
|
|
const Value: Boolean);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMetricsInfo.SetCaretBlinkTime(const Value: DWORD);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
Windows.SetCaretBlinkTime(Value)
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMetricsInfo.SetCaretPos(const Index, Value: Integer);
|
|
var
|
|
P: TPoint;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
Windows.GetCaretPos(P);
|
|
case Index of
|
|
0:
|
|
P.X := Value;
|
|
1:
|
|
P.Y := Value;
|
|
end;
|
|
Windows.SetCaretPos(P.X, P.Y);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMetricsInfo.SetCleanBoot(const Value: TJvCleanBoot);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMetricsInfo.SetCursorPos(const Index, Value: Integer);
|
|
var
|
|
P: TPoint;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
Windows.GetCursorPos(P);
|
|
case Index of
|
|
0:
|
|
P.X := Value;
|
|
1:
|
|
P.Y := Value;
|
|
end;
|
|
Windows.SetCursorPos(P.X, P.Y);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMetricsInfo.SetDialogBaseUnits(const Value: Integer);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMetricsInfo.SetDoubleClickTime(const Value: Integer);
|
|
begin
|
|
|
|
end;
|
|
|
|
procedure TJvMetricsInfo.SetMetrics(const Index, Value: Integer);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMetricsInfo.SetOEMCP(const Value: Integer);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
//=== { TJvAccessTimeOut } ===================================================
|
|
|
|
function TJvAccessTimeOut.GetFlags: TJvAccessTimeOutFlags;
|
|
var
|
|
Flags: DWORD;
|
|
begin
|
|
Flags := NativeType.dwFlags;
|
|
Result := [];
|
|
if Flags and ATF_ONOFFFEEDBACK = ATF_ONOFFFEEDBACK then
|
|
Include(Result, atfOnOffFeedback);
|
|
if Flags and ATF_TIMEOUTON = ATF_TIMEOUTON then
|
|
Include(Result, atfTimeOutOn);
|
|
end;
|
|
|
|
function TJvAccessTimeOut.GetNativeType: ACCESSTIMEOUT;
|
|
begin
|
|
Result.cbSize := SizeOf(Result);
|
|
if not SystemParametersInfo(SPI_GETACCESSTIMEOUT, SizeOf(Result), @Result, 0) then
|
|
begin
|
|
Result.dwFlags := 0;
|
|
Result.iTimeOutMSec := 0;
|
|
end;
|
|
end;
|
|
|
|
function TJvAccessTimeOut.GetTimeOutMS: DWORD;
|
|
begin
|
|
Result := NativeType.iTimeOutMSec;
|
|
end;
|
|
|
|
procedure TJvAccessTimeOut.SetFlags(const Value: TJvAccessTimeOutFlags);
|
|
var
|
|
Native: ACCESSTIMEOUT;
|
|
Flags: DWORD;
|
|
begin
|
|
Flags := 0;
|
|
if atfOnOffFeedback in Value then
|
|
Flags := Flags or ATF_ONOFFFEEDBACK;
|
|
if atfTimeOutOn in Value then
|
|
Flags := Flags or ATF_TIMEOUTON;
|
|
Native := NativeType;
|
|
if Native.dwFlags <> Flags then
|
|
begin
|
|
Native.dwFlags := Flags;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvAccessTimeOut.SetNativeType(Value: ACCESSTIMEOUT);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
Value.cbSize := SizeOf(Value);
|
|
SystemParametersInfo(SPI_SETACCESSTIMEOUT, SizeOf(Value), @Value, DEFAULT_SPIF_SENDCHANGE);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvAccessTimeOut.SetTimeOutMS(const Value: DWORD);
|
|
var
|
|
Native: ACCESSTIMEOUT;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iTimeOutMSec <> Value then
|
|
begin
|
|
Native.iTimeOutMSec := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
//=== { TJvFilterKeys } ======================================================
|
|
|
|
function TJvFilterKeys.GetBounceMSec: DWORD;
|
|
begin
|
|
Result := NativeType.iBounceMSec
|
|
end;
|
|
|
|
function TJvFilterKeys.GetDelayMSec: DWORD;
|
|
begin
|
|
Result := NativeType.iDelayMSec;
|
|
end;
|
|
|
|
function TJvFilterKeys.GetFlags: TJvFilterKeyFlags;
|
|
var
|
|
Flags: DWORD;
|
|
begin
|
|
Flags := NativeType.dwFlags;
|
|
Result := [];
|
|
if Flags and FKF_AVAILABLE = FKF_AVAILABLE then
|
|
Include(Result, fkfAvailable);
|
|
if Flags and FKF_CLICKON = FKF_CLICKON then
|
|
Include(Result, fkfClickOn);
|
|
if Flags and FKF_FILTERKEYSON = FKF_FILTERKEYSON then
|
|
Include(Result, fkfFilterKeysOn);
|
|
if Flags and FKF_HOTKEYACTIVE = FKF_HOTKEYACTIVE then
|
|
Include(Result, fkfHotkeyActive);
|
|
if Flags and FKF_HOTKEYSOUND = FKF_HOTKEYSOUND then
|
|
Include(Result, fkfHotkeySound);
|
|
if Flags and FKF_CONFIRMHOTKEY = FKF_CONFIRMHOTKEY then
|
|
Include(Result, fkfConfirmHotkey);
|
|
if Flags and FKF_INDICATOR = FKF_INDICATOR then
|
|
Include(Result, fkfIndicator);
|
|
end;
|
|
|
|
function TJvFilterKeys.GetNativeType: FILTERKEYS;
|
|
begin
|
|
Result.cbSize := SizeOf(Result);
|
|
if not SystemParametersInfo(SPI_GETFILTERKEYS, SizeOf(Result), @Result, 0) then
|
|
begin
|
|
Result.dwFlags := 0;
|
|
Result.iWaitMSec := 0;
|
|
Result.iDelayMSec := 0;
|
|
Result.iRepeatMSec := 0;
|
|
Result.iBounceMSec := 0;
|
|
end;
|
|
end;
|
|
|
|
function TJvFilterKeys.GetRepeatMSec: DWORD;
|
|
begin
|
|
Result := NativeType.iRepeatMSec;
|
|
end;
|
|
|
|
function TJvFilterKeys.GetWaitMSec: DWORD;
|
|
begin
|
|
Result := NativeType.iWaitMSec;
|
|
end;
|
|
|
|
procedure TJvFilterKeys.SetBounceMSec(const Value: DWORD);
|
|
var
|
|
Native: FILTERKEYS;
|
|
begin
|
|
Native := NativeType;
|
|
if NativeType.iBounceMSec <> Value then
|
|
begin
|
|
Native.iBounceMSec := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvFilterKeys.SetDelayMSec(const Value: DWORD);
|
|
var
|
|
Native: FILTERKEYS;
|
|
begin
|
|
Native := NativeType;
|
|
if NativeType.iDelayMSec <> Value then
|
|
begin
|
|
Native.iDelayMSec := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvFilterKeys.SetFlags(const Value: TJvFilterKeyFlags);
|
|
var
|
|
Native: FILTERKEYS;
|
|
Flags: DWORD;
|
|
begin
|
|
Flags := 0;
|
|
if fkfAvailable in Value then
|
|
Flags := Flags or FKF_AVAILABLE;
|
|
if fkfClickOn in Value then
|
|
Flags := Flags or FKF_CLICKON;
|
|
if fkfFilterKeysOn in Value then
|
|
Flags := Flags or FKF_FILTERKEYSON;
|
|
if fkfHotkeyActive in Value then
|
|
Flags := Flags or FKF_HOTKEYACTIVE;
|
|
if fkfHotkeySound in Value then
|
|
Flags := Flags or FKF_HOTKEYSOUND;
|
|
if fkfConfirmHotkey in Value then
|
|
Flags := Flags or FKF_CONFIRMHOTKEY;
|
|
if fkfIndicator in Value then
|
|
Flags := Flags or FKF_INDICATOR;
|
|
Native := NativeType;
|
|
if Native.dwFlags <> Flags then
|
|
begin
|
|
Native.dwFlags := Flags;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvFilterKeys.SetNativeType(Value: FILTERKEYS);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
Value.cbSize := SizeOf(Value);
|
|
SystemParametersInfo(SPI_SETFILTERKEYS, SizeOf(Value), @Value, DEFAULT_SPIF_SENDCHANGE);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvFilterKeys.SetRepeatMSec(const Value: DWORD);
|
|
var
|
|
Native: FILTERKEYS;
|
|
begin
|
|
Native := NativeType;
|
|
if NativeType.iRepeatMSec <> Value then
|
|
begin
|
|
Native.iRepeatMSec := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvFilterKeys.SetWaitMSec(const Value: DWORD);
|
|
var
|
|
Native: FILTERKEYS;
|
|
begin
|
|
Native := NativeType;
|
|
if NativeType.iWaitMSec <> Value then
|
|
begin
|
|
Native.iWaitMSec := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
//=== { TJvHighContrast } ====================================================
|
|
|
|
function TJvHighContrast.GetDefaultScheme: string;
|
|
begin
|
|
Result := NativeType.lpszDefaultScheme;
|
|
end;
|
|
|
|
function TJvHighContrast.GetFlags: TJvHighContrastFlags;
|
|
var
|
|
Flags: DWORD;
|
|
begin
|
|
Flags := NativeType.dwFlags;
|
|
Result := [];
|
|
if Flags and HCF_AVAILABLE = HCF_AVAILABLE then
|
|
Include(Result, hcfAvailable);
|
|
if Flags and HCF_CONFIRMHOTKEY = HCF_CONFIRMHOTKEY then
|
|
Include(Result, hcfConfirmHotKey);
|
|
if Flags and HCF_HIGHCONTRASTON = HCF_HIGHCONTRASTON then
|
|
Include(Result, hcfHighContrastOn);
|
|
if Flags and HCF_HOTKEYACTIVE = HCF_HOTKEYACTIVE then
|
|
Include(Result, hcfHotkeyActive);
|
|
if Flags and HCF_HOTKEYAVAILABLE = HCF_HOTKEYAVAILABLE then
|
|
Include(Result, hcfHotkeyAvailable);
|
|
if Flags and HCF_HOTKEYSOUND = HCF_HOTKEYSOUND then
|
|
Include(Result, hcfHotkeySound);
|
|
if Flags and HCF_INDICATOR = HCF_INDICATOR then
|
|
Include(Result, hcfIndicator);
|
|
end;
|
|
|
|
function TJvHighContrast.GetNativeType: HIGHCONTRAST;
|
|
begin
|
|
Result.cbSize := SizeOf(Result);
|
|
if not SystemParametersInfo(SPI_GETHIGHCONTRAST, SizeOf(Result), @Result, 0) then
|
|
begin
|
|
Result.dwFlags := 0;
|
|
Result.lpszDefaultScheme := '';
|
|
end;
|
|
end;
|
|
|
|
procedure TJvHighContrast.SetDefaultScheme(const Value: string);
|
|
var
|
|
Native: HIGHCONTRAST;
|
|
begin
|
|
Native := NativeType;
|
|
if not AnsiSameText(Native.lpszDefaultScheme, Value) then
|
|
begin
|
|
Native.lpszDefaultScheme := PChar(Value);
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvHighContrast.SetFlags(const Value: TJvHighContrastFlags);
|
|
var
|
|
Native: HIGHCONTRAST;
|
|
Flags: DWORD;
|
|
begin
|
|
Flags := 0;
|
|
if hcfAvailable in Value then
|
|
Flags := Flags or HCF_AVAILABLE;
|
|
if hcfConfirmHotKey in Value then
|
|
Flags := Flags or HCF_CONFIRMHOTKEY;
|
|
if hcfHighContrastOn in Value then
|
|
Flags := Flags or HCF_HIGHCONTRASTON;
|
|
if hcfHotkeyActive in Value then
|
|
Flags := Flags or HCF_HOTKEYACTIVE;
|
|
if hcfHotkeyAvailable in Value then
|
|
Flags := Flags or HCF_HOTKEYAVAILABLE;
|
|
if hcfHotkeySound in Value then
|
|
Flags := Flags or HCF_HOTKEYSOUND;
|
|
if hcfIndicator in Value then
|
|
Flags := Flags or HCF_INDICATOR;
|
|
Native := NativeType;
|
|
if Native.dwFlags <> Flags then
|
|
begin
|
|
Native.dwFlags := Flags;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvHighContrast.SetNativeType(Value: HIGHCONTRAST);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
Value.cbSize := SizeOf(Value);
|
|
SystemParametersInfo(SPI_SETHIGHCONTRAST, SizeOf(Value), @Value, DEFAULT_SPIF_SENDCHANGE);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
//=== { TJvIconMetrics } =====================================================
|
|
|
|
destructor TJvIconMetrics.Destroy;
|
|
begin
|
|
FFont.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TJvIconMetrics.GetFont: TFont;
|
|
begin
|
|
if FFont = nil then
|
|
FFont := TFont.Create;
|
|
UpdateFromLogFont(FFont, NativeType.lfFont);
|
|
Result := FFont;
|
|
end;
|
|
|
|
function TJvIconMetrics.GetHorzSpacing: Integer;
|
|
begin
|
|
Result := NativeType.iHorzSpacing;
|
|
end;
|
|
|
|
function TJvIconMetrics.GetNativeType: ICONMETRICS;
|
|
begin
|
|
Result.cbSize := SizeOf(Result);
|
|
if not SystemParametersInfo(SPI_GETICONMETRICS, SizeOf(Result), @Result, 0) then
|
|
begin
|
|
Result.iHorzSpacing := 0;
|
|
Result.iVertSpacing := 0;
|
|
Result.iTitleWrap := 0;
|
|
// Result.lfFont := ?:
|
|
end;
|
|
end;
|
|
|
|
function TJvIconMetrics.GetTitleWrap: Boolean;
|
|
begin
|
|
Result := NativeType.iTitleWrap <> 0;
|
|
end;
|
|
|
|
function TJvIconMetrics.GetVertSpacing: Integer;
|
|
begin
|
|
Result := NativeType.iVertSpacing;
|
|
end;
|
|
|
|
procedure TJvIconMetrics.SetFont(const Value: TFont);
|
|
var
|
|
Native: ICONMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
UpdateToLogFont(Value, Native.lfFont);
|
|
NativeType := Native;
|
|
end;
|
|
|
|
procedure TJvIconMetrics.SetHorzSpacing(const Value: Integer);
|
|
var
|
|
Native: ICONMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iHorzSpacing <> Value then
|
|
begin
|
|
Native.iHorzSpacing := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvIconMetrics.SetNativeType(Value: ICONMETRICS);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
Value.cbSize := SizeOf(Value);
|
|
SystemParametersInfo(SPI_SETICONMETRICS, SizeOf(Value), @Value, DEFAULT_SPIF_SENDCHANGE);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvIconMetrics.SetTitleWrap(const Value: Boolean);
|
|
var
|
|
Native: ICONMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iTitleWrap <> Ord(Value) then
|
|
begin
|
|
Native.iTitleWrap := Ord(Value);
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvIconMetrics.SetVertSpacing(const Value: Integer);
|
|
var
|
|
Native: ICONMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iVertSpacing <> Value then
|
|
begin
|
|
Native.iVertSpacing := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
//=== { TJvMinimizedMetrics } ================================================
|
|
|
|
function TJvMinimizedMetrics.GetArrange: TJvWindowsArrange;
|
|
begin
|
|
Result := ArrangeToWindowsArrange(NativeType.iArrange);
|
|
end;
|
|
|
|
function TJvMinimizedMetrics.GetHorzGap: Integer;
|
|
begin
|
|
Result := NativeType.iHorzGap;
|
|
end;
|
|
|
|
function TJvMinimizedMetrics.GetNativeType: MINIMIZEDMETRICS;
|
|
begin
|
|
Result.cbSize := SizeOf(Result);
|
|
if not SystemParametersInfo(SPI_GETMINIMIZEDMETRICS, SizeOf(Result), @Result, 0) then
|
|
begin
|
|
Result.iWidth := 0;
|
|
Result.iHorzGap := 0;
|
|
Result.iVertGap := 0;
|
|
Result.iArrange := 0;
|
|
end;
|
|
end;
|
|
|
|
function TJvMinimizedMetrics.GetVertGap: Integer;
|
|
begin
|
|
Result := NativeType.iVertGap;
|
|
end;
|
|
|
|
function TJvMinimizedMetrics.GetWidth: Integer;
|
|
begin
|
|
Result := NativeType.iWidth;
|
|
end;
|
|
|
|
procedure TJvMinimizedMetrics.SetArrange(const Value: TJvWindowsArrange);
|
|
var
|
|
Native: MINIMIZEDMETRICS;
|
|
WArrange: Integer;
|
|
begin
|
|
Native := NativeType;
|
|
WArrange := WindowsArrangeToArrange(Value);
|
|
if Native.iArrange <> WArrange then
|
|
begin
|
|
Native.iArrange := WArrange;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvMinimizedMetrics.SetHorzGap(const Value: Integer);
|
|
var
|
|
Native: MINIMIZEDMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iHorzGap <> Value then
|
|
begin
|
|
Native.iHorzGap := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvMinimizedMetrics.SetNativeType(Value: MINIMIZEDMETRICS);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
Value.cbSize := SizeOf(Value);
|
|
SystemParametersInfo(SPI_SETMINIMIZEDMETRICS, SizeOf(Value), @Value, DEFAULT_SPIF_SENDCHANGE);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMinimizedMetrics.SetVertGap(const Value: Integer);
|
|
var
|
|
Native: MINIMIZEDMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iVertGap <> Value then
|
|
begin
|
|
Native.iVertGap := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvMinimizedMetrics.SetWidth(const Value: Integer);
|
|
var
|
|
Native: MINIMIZEDMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iWidth <> Value then
|
|
begin
|
|
Native.iWidth := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
//=== { TJvMouseKeys } =======================================================
|
|
|
|
function TJvMouseKeys.GetCtrlSpeed: DWORD;
|
|
begin
|
|
Result := NativeType.iCtrlSpeed;
|
|
end;
|
|
|
|
function TJvMouseKeys.GetFlags: TJvMouseKeysFlags;
|
|
var
|
|
Flags: DWORD;
|
|
begin
|
|
Flags := NativeType.dwFlags;
|
|
Result := [];
|
|
if Flags and MKF_AVAILABLE = MKF_AVAILABLE then
|
|
Include(Result, mkfAvailable);
|
|
if Flags and MKF_CONFIRMHOTKEY = MKF_CONFIRMHOTKEY then
|
|
Include(Result, mkfConfirmHotKey);
|
|
if Flags and MKF_HOTKEYACTIVE = MKF_HOTKEYACTIVE then
|
|
Include(Result, mkfHotkeyActive);
|
|
if Flags and MKF_HOTKEYSOUND = MKF_HOTKEYSOUND then
|
|
Include(Result, mkfHotkeySound);
|
|
if Flags and MKF_INDICATOR = MKF_INDICATOR then
|
|
Include(Result, mkfIndicator);
|
|
if Flags and MKF_MOUSEKEYSON = MKF_MOUSEKEYSON then
|
|
Include(Result, mkfMouseKeysOn);
|
|
if Flags and MKF_MODIFIERS = MKF_MODIFIERS then
|
|
Include(Result, mkfModifiers);
|
|
if Flags and MKF_REPLACENUMBERS = MKF_REPLACENUMBERS then
|
|
Include(Result, mkfReplaceNumbers);
|
|
end;
|
|
|
|
function TJvMouseKeys.GetMaxSpeed: DWORD;
|
|
begin
|
|
Result := NativeType.iMaxSpeed;
|
|
end;
|
|
|
|
function TJvMouseKeys.GetNativeType: MOUSEKEYS;
|
|
begin
|
|
Result.cbSize := SizeOf(Result);
|
|
if not SystemParametersInfo(SPI_GETMOUSEKEYS, SizeOf(Result), @Result, 0) then
|
|
begin
|
|
Result.dwFlags := 0;
|
|
Result.iMaxSpeed := 0;
|
|
Result.iTimeToMaxSpeed := 0;
|
|
Result.iCtrlSpeed := 0;
|
|
Result.dwReserved1 := 0;
|
|
Result.dwReserved2 := 0;
|
|
end;
|
|
end;
|
|
|
|
function TJvMouseKeys.GetTimeToMaxSpeed: DWORD;
|
|
begin
|
|
Result := NativeType.iTimeToMaxSpeed;
|
|
end;
|
|
|
|
procedure TJvMouseKeys.SetCtrlSpeed(const Value: DWORD);
|
|
var
|
|
Native: MOUSEKEYS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iCtrlSpeed <> Value then
|
|
begin
|
|
Native.iCtrlSpeed := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvMouseKeys.SetFlags(const Value: TJvMouseKeysFlags);
|
|
var
|
|
Native: MOUSEKEYS;
|
|
Flags: DWORD;
|
|
begin
|
|
Flags := 0;
|
|
if mkfAvailable in Value then
|
|
Flags := Flags or MKF_AVAILABLE;
|
|
if mkfConfirmHotKey in Value then
|
|
Flags := Flags or MKF_CONFIRMHOTKEY;
|
|
if mkfHotkeyActive in Value then
|
|
Flags := Flags or MKF_HOTKEYACTIVE;
|
|
if mkfHotkeySound in Value then
|
|
Flags := Flags or MKF_HOTKEYSOUND;
|
|
if mkfIndicator in Value then
|
|
Flags := Flags or MKF_INDICATOR;
|
|
if mkfMouseKeysOn in Value then
|
|
Flags := Flags or MKF_MOUSEKEYSON;
|
|
if mkfModifiers in Value then
|
|
Flags := Flags or MKF_MODIFIERS;
|
|
if mkfReplaceNumbers in Value then
|
|
Flags := Flags or MKF_REPLACENUMBERS;
|
|
Native := NativeType;
|
|
if Native.dwFlags <> Flags then
|
|
begin
|
|
Native.dwFlags := Flags;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvMouseKeys.SetMaxSpeed(const Value: DWORD);
|
|
var
|
|
Native: MOUSEKEYS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iMaxSpeed <> Value then
|
|
begin
|
|
Native.iMaxSpeed := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvMouseKeys.SetNativeType(Value: MOUSEKEYS);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
Value.cbSize := SizeOf(Value);
|
|
SystemParametersInfo(SPI_SETMOUSEKEYS, SizeOf(Value), @Value, DEFAULT_SPIF_SENDCHANGE);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvMouseKeys.SetTimeToMaxSpeed(const Value: DWORD);
|
|
var
|
|
Native: MOUSEKEYS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iTimeToMaxSpeed <> Value then
|
|
begin
|
|
Native.iTimeToMaxSpeed := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
//=== { TJvNonClientMetrics } ================================================
|
|
|
|
destructor TJvNonClientMetrics.Destroy;
|
|
begin
|
|
FCaptionFont.Free;
|
|
FMenuFont.Free;
|
|
FMessageFont.Free;
|
|
FSmallCaptionFont.Free;
|
|
FStatusFont.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TJvNonClientMetrics.GetBorderWidth: Integer;
|
|
begin
|
|
Result := NativeType.iBorderWidth;
|
|
end;
|
|
|
|
function TJvNonClientMetrics.GetCaptionFont: TFont;
|
|
begin
|
|
if FCaptionFont = nil then
|
|
FCaptionFont := TFont.Create;
|
|
UpdateFromLogFont(FCaptionFont, NativeType.lfCaptionFont);
|
|
Result := FCaptionFont;
|
|
end;
|
|
|
|
function TJvNonClientMetrics.GetCaptionHeight: Integer;
|
|
begin
|
|
Result := NativeType.iCaptionHeight;
|
|
end;
|
|
|
|
function TJvNonClientMetrics.GetCaptionWidth: Integer;
|
|
begin
|
|
Result := NativeType.iCaptionWidth;
|
|
end;
|
|
|
|
function TJvNonClientMetrics.GetMenuFont: TFont;
|
|
begin
|
|
if FMenuFont = nil then
|
|
FMenuFont := TFont.Create;
|
|
UpdateFromLogFont(FMenuFont, NativeType.lfMenuFont);
|
|
Result := FMenuFont;
|
|
end;
|
|
|
|
function TJvNonClientMetrics.GetMenuHeight: Integer;
|
|
begin
|
|
Result := NativeType.iMenuHeight;
|
|
end;
|
|
|
|
function TJvNonClientMetrics.GetMenuWidth: Integer;
|
|
begin
|
|
Result := NativeType.iMenuWidth;
|
|
end;
|
|
|
|
function TJvNonClientMetrics.GetMessageFont: TFont;
|
|
begin
|
|
if FMessageFont = nil then
|
|
FMessageFont := TFont.Create;
|
|
UpdateFromLogFont(FMessageFont, NativeType.lfMessageFont);
|
|
Result := FMessageFont;
|
|
end;
|
|
|
|
function TJvNonClientMetrics.GetNativeType: NONCLIENTMETRICS;
|
|
begin
|
|
Result.cbSize := SizeOf(Result);
|
|
if not SystemParametersInfo(SPI_GETNONCLIENTMETRICS, SizeOf(Result), @Result, 0) then
|
|
begin
|
|
Result.iBorderWidth := 0;
|
|
Result.iScrollWidth := 0;
|
|
Result.iScrollHeight := 0;
|
|
Result.iCaptionWidth := 0;
|
|
Result.iCaptionHeight := 0;
|
|
// Result.lfCaptionFont := ?:
|
|
Result.iSmCaptionWidth := 0;
|
|
Result.iSmCaptionHeight := 0;
|
|
// Result.lfSmCaptionFont := ?:
|
|
Result.iMenuWidth := 0;
|
|
Result.iMenuHeight := 0;
|
|
// Result.lfMenuFont := ?:
|
|
// Result.lfStatusFont := ?;
|
|
// Result.lfMessageFont := ?;
|
|
end;
|
|
end;
|
|
|
|
function TJvNonClientMetrics.GetScrollHeight: Integer;
|
|
begin
|
|
Result := NativeType.iScrollHeight;
|
|
end;
|
|
|
|
function TJvNonClientMetrics.GetScrollWidth: Integer;
|
|
begin
|
|
Result := NativeType.iScrollWidth;
|
|
end;
|
|
|
|
function TJvNonClientMetrics.GetSmallCaptionFont: TFont;
|
|
begin
|
|
if FSmallCaptionFont = nil then
|
|
FSmallCaptionFont := TFont.Create;
|
|
UpdateFromLogFont(FSmallCaptionFont, NativeType.lfSmCaptionFont);
|
|
Result := FSmallCaptionFont;
|
|
end;
|
|
|
|
function TJvNonClientMetrics.GetSmallCaptionHeight: Integer;
|
|
begin
|
|
Result := NativeType.iSmCaptionHeight;
|
|
end;
|
|
|
|
function TJvNonClientMetrics.GetSmallCaptionWidth: Integer;
|
|
begin
|
|
Result := NativeType.iSmCaptionWidth;
|
|
end;
|
|
|
|
function TJvNonClientMetrics.GetStatusFont: TFont;
|
|
begin
|
|
if FStatusFont = nil then
|
|
FStatusFont := TFont.Create;
|
|
UpdateFromLogFont(FStatusFont, NativeType.lfStatusFont);
|
|
Result := FStatusFont;
|
|
end;
|
|
|
|
procedure TJvNonClientMetrics.SetBorderWidth(const Value: Integer);
|
|
var
|
|
Native: NONCLIENTMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iBorderWidth <> Value then
|
|
begin
|
|
Native.iBorderWidth := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvNonClientMetrics.SetCaptionFont(const Value: TFont);
|
|
var
|
|
Native: NONCLIENTMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
UpdateToLogFont(Value, Native.lfCaptionFont);
|
|
NativeType := Native;
|
|
end;
|
|
|
|
procedure TJvNonClientMetrics.SetCaptionHeight(const Value: Integer);
|
|
var
|
|
Native: NONCLIENTMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iCaptionHeight <> Value then
|
|
begin
|
|
Native.iCaptionHeight := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvNonClientMetrics.SetCaptionWidth(const Value: Integer);
|
|
var
|
|
Native: NONCLIENTMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iCaptionWidth <> Value then
|
|
begin
|
|
Native.iCaptionWidth := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvNonClientMetrics.SetMenuFont(const Value: TFont);
|
|
var
|
|
Native: NONCLIENTMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
UpdateToLogFont(Value, Native.lfMenuFont);
|
|
NativeType := Native;
|
|
end;
|
|
|
|
procedure TJvNonClientMetrics.SetMenuHeight(const Value: Integer);
|
|
var
|
|
Native: NONCLIENTMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iMenuHeight <> Value then
|
|
begin
|
|
Native.iMenuHeight := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvNonClientMetrics.SetMenuWidth(const Value: Integer);
|
|
var
|
|
Native: NONCLIENTMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iMenuWidth <> Value then
|
|
begin
|
|
Native.iMenuWidth := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvNonClientMetrics.SetMessageFont(const Value: TFont);
|
|
var
|
|
Native: NONCLIENTMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
UpdateToLogFont(Value, Native.lfMessageFont);
|
|
NativeType := Native;
|
|
end;
|
|
|
|
procedure TJvNonClientMetrics.SetNativeType(Value: NONCLIENTMETRICS);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
Value.cbSize := SizeOf(Value);
|
|
SystemParametersInfo(SPI_SETNONCLIENTMETRICS, SizeOf(Value), @Value, DEFAULT_SPIF_SENDCHANGE);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvNonClientMetrics.SetScrollHeight(const Value: Integer);
|
|
var
|
|
Native: NONCLIENTMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iScrollHeight <> Value then
|
|
begin
|
|
Native.iScrollHeight := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvNonClientMetrics.SetScrollWidth(const Value: Integer);
|
|
var
|
|
Native: NONCLIENTMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iScrollWidth <> Value then
|
|
begin
|
|
Native.iScrollWidth := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvNonClientMetrics.SetSmallCaptionFont(const Value: TFont);
|
|
var
|
|
Native: NONCLIENTMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
UpdateToLogFont(Value, Native.lfSmCaptionFont);
|
|
NativeType := Native;
|
|
end;
|
|
|
|
procedure TJvNonClientMetrics.SetSmallCaptionHeight(const Value: Integer);
|
|
var
|
|
Native: NONCLIENTMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iSmCaptionHeight <> Value then
|
|
begin
|
|
Native.iSmCaptionHeight := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvNonClientMetrics.SetSmallCaptionWidth(const Value: Integer);
|
|
var
|
|
Native: NONCLIENTMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iSmCaptionWidth <> Value then
|
|
begin
|
|
Native.iSmCaptionWidth := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvNonClientMetrics.SetStatusFont(const Value: TFont);
|
|
var
|
|
Native: NONCLIENTMETRICS;
|
|
begin
|
|
Native := NativeType;
|
|
UpdateToLogFont(Value, Native.lfStatusFont);
|
|
NativeType := Native;
|
|
end;
|
|
|
|
//== TJvSerialKeys ===========================================================
|
|
|
|
function TJvSerialKeys.GetActive: Boolean;
|
|
begin
|
|
Result := NativeType.iActive <> 0;
|
|
end;
|
|
|
|
function TJvSerialKeys.GetActivePort: string;
|
|
begin
|
|
Result := NativeType.lpszActivePort;
|
|
end;
|
|
|
|
function TJvSerialKeys.GetBaudRate: DWORD;
|
|
begin
|
|
Result := NativeType.iBaudRate;
|
|
end;
|
|
|
|
function TJvSerialKeys.GetFlags: TJvSerialKeysFlags;
|
|
var
|
|
Flags: DWORD;
|
|
begin
|
|
Flags := NativeType.dwFlags;
|
|
Result := [];
|
|
if Flags and SERKF_AVAILABLE = SERKF_AVAILABLE then
|
|
Include(Result, serkfAvailable);
|
|
if Flags and SERKF_INDICATOR = SERKF_INDICATOR then
|
|
Include(Result, serkfIndicator);
|
|
if Flags and SERKF_SERIALKEYSON = SERKF_SERIALKEYSON then
|
|
Include(Result, serkfSerialKeysOn);
|
|
end;
|
|
|
|
function TJvSerialKeys.GetNativeType: SERIALKEYS;
|
|
begin
|
|
Result.cbSize := SizeOf(Result);
|
|
if not SystemParametersInfo(SPI_GETSERIALKEYS, SizeOf(Result), @Result, 0) then
|
|
begin
|
|
Result.lpszActivePort := '';
|
|
Result.lpszPort := '';
|
|
Result.dwFlags := 0;
|
|
Result.iBaudRate := 0;
|
|
Result.iPortState := 0;
|
|
Result.iActive := 0;
|
|
end;
|
|
end;
|
|
|
|
function TJvSerialKeys.GetPort: string;
|
|
begin
|
|
Result := NativeType.lpszPort;
|
|
end;
|
|
|
|
function TJvSerialKeys.GetPortState: TJvSerialKeysPortState;
|
|
begin
|
|
Result := TJvSerialKeysPortState(NativeType.iPortState);
|
|
end;
|
|
|
|
procedure TJvSerialKeys.SetActive(const Value: Boolean);
|
|
var
|
|
Native: SERIALKEYS;
|
|
begin
|
|
Native := NativeType;
|
|
if Integer(Native.iActive) <> Ord(Value) then
|
|
begin
|
|
Native.iActive := Ord(Value);
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSerialKeys.SetActivePort(const Value: string);
|
|
var
|
|
Native: SERIALKEYS;
|
|
begin
|
|
Native := NativeType;
|
|
if not AnsiSameText(Native.lpszActivePort, Value) then
|
|
begin
|
|
Native.lpszActivePort := PChar(Value);
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSerialKeys.SetBaudRate(const Value: DWORD);
|
|
var
|
|
Native: SERIALKEYS;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iBaudRate <> Value then
|
|
begin
|
|
Native.iBaudRate := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSerialKeys.SetFlags(const Value: TJvSerialKeysFlags);
|
|
var
|
|
Native: SERIALKEYS;
|
|
Flags: DWORD;
|
|
begin
|
|
Flags := 0;
|
|
if serkfAvailable in Value then
|
|
Flags := Flags or SERKF_AVAILABLE;
|
|
if serkfIndicator in Value then
|
|
Flags := Flags or SERKF_INDICATOR;
|
|
if serkfSerialKeysOn in Value then
|
|
Flags := Flags or SERKF_SERIALKEYSON;
|
|
Native := NativeType;
|
|
if Native.dwFlags <> Flags then
|
|
begin
|
|
Native.dwFlags := Flags;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSerialKeys.SetNativeType(Value: SERIALKEYS);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
Value.cbSize := SizeOf(Value);
|
|
SystemParametersInfo(SPI_SETSERIALKEYS, SizeOf(Value), @Value, DEFAULT_SPIF_SENDCHANGE);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSerialKeys.SetPort(const Value: string);
|
|
var
|
|
Native: SERIALKEYS;
|
|
begin
|
|
Native := NativeType;
|
|
if not AnsiSameText(Native.lpszPort, Value) then
|
|
begin
|
|
Native.lpszPort := PChar(Value);
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSerialKeys.SetPortState(const Value: TJvSerialKeysPortState);
|
|
var
|
|
Native: SERIALKEYS;
|
|
begin
|
|
Native := NativeType;
|
|
if Integer(Native.iPortState) <> Ord(Value) then
|
|
begin
|
|
Native.iPortState := Ord(Value);
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
//=== { TJvSoundSentry } =====================================================
|
|
|
|
function TJvSoundSentry.GetFlags: TJvSoundSentryFlags;
|
|
var
|
|
Flags: DWORD;
|
|
begin
|
|
Flags := NativeType.dwFlags;
|
|
Result := [];
|
|
if Flags and SSF_AVAILABLE = SSF_AVAILABLE then
|
|
Include(Result, ssfAvailable);
|
|
if Flags and SSF_SOUNDSENTRYON = SSF_SOUNDSENTRYON then
|
|
Include(Result, ssfSoundSentryOn);
|
|
if Flags and SSF_INDICATOR = SSF_INDICATOR then
|
|
Include(Result, ssfIndicator);
|
|
end;
|
|
|
|
function TJvSoundSentry.GetGrafEffect: TJvSoundSentryGrafEffect;
|
|
begin
|
|
if NativeType.iFSGrafEffect = 3 then
|
|
Result := ssgfDisplay
|
|
else
|
|
Result := ssgfNone;
|
|
end;
|
|
|
|
function TJvSoundSentry.GetGrafEffectColor: TColor;
|
|
begin
|
|
Result := TColor(NativeType.iFSGrafEffectColor);
|
|
end;
|
|
|
|
function TJvSoundSentry.GetGrafEffectMSec: DWORD;
|
|
begin
|
|
Result := NativeType.iFSGrafEffectMSec;
|
|
end;
|
|
|
|
function TJvSoundSentry.GetNativeType: SOUNDSENTRY;
|
|
begin
|
|
Result.cbSize := SizeOf(Result);
|
|
if not SystemParametersInfo(SPI_GETSOUNDSENTRY, SizeOf(Result), @Result, 0) then
|
|
begin
|
|
Result.dwFlags := 0;
|
|
Result.iFSTextEffect := 0;
|
|
Result.iFSTextEffectMSec := 0;
|
|
Result.iFSTextEffectColorBits := 0;
|
|
Result.iFSGrafEffect := 0;
|
|
Result.iFSGrafEffectMSec := 0;
|
|
Result.iFSGrafEffectColor := 0;
|
|
Result.iWindowsEffect := 0;
|
|
Result.iWindowsEffectMSec := 0;
|
|
Result.lpszWindowsEffectDLL := '';
|
|
Result.iWindowsEffectOrdinal := 0;
|
|
end;
|
|
end;
|
|
|
|
function TJvSoundSentry.GetTextEffect: TJvSoundSentryTextEffect;
|
|
begin
|
|
Result := TJvSoundSentryTextEffect(NativeType.iFSTextEffect);
|
|
end;
|
|
|
|
function TJvSoundSentry.GetTextEffectColor: TColor;
|
|
begin
|
|
Result := TColor(NativeType.iFSTextEffectColorBits);
|
|
end;
|
|
|
|
function TJvSoundSentry.GetTextEffectMSec: DWORD;
|
|
begin
|
|
Result := NativeType.iFSTextEffectMSec;
|
|
end;
|
|
|
|
function TJvSoundSentry.GetWindowsEffect: TJvSoundSentryWindowsEffect;
|
|
begin
|
|
Result := TJvSoundSentryWindowsEffect(NativeType.iWindowsEffect);
|
|
end;
|
|
|
|
function TJvSoundSentry.GetWindowsEffectDLL: string;
|
|
begin
|
|
Result := NativeType.lpszWindowsEffectDLL;
|
|
end;
|
|
|
|
function TJvSoundSentry.GetWindowsEffectMSec: DWORD;
|
|
begin
|
|
Result := NativeType.iWindowsEffectMSec;
|
|
end;
|
|
|
|
procedure TJvSoundSentry.SetFlags(const Value: TJvSoundSentryFlags);
|
|
var
|
|
Flags: DWORD;
|
|
Native: SOUNDSENTRY;
|
|
begin
|
|
Flags := 0;
|
|
if ssfAvailable in Value then
|
|
Flags := Flags or SSF_AVAILABLE;
|
|
if ssfSoundSentryOn in Value then
|
|
Flags := Flags or SSF_SOUNDSENTRYON;
|
|
if ssfIndicator in Value then
|
|
Flags := Flags or SSF_INDICATOR;
|
|
Native := NativeType;
|
|
if Native.dwFlags <> Flags then
|
|
begin
|
|
Native.dwFlags := Flags;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSoundSentry.SetGrafEffect(const Value: TJvSoundSentryGrafEffect);
|
|
var
|
|
Native: SOUNDSENTRY;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iFSGrafEffect <> DWORD(Value) then
|
|
begin
|
|
Native.iFSGrafEffect := DWORD(Value);
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSoundSentry.SetGrafEffectColor(const Value: TColor);
|
|
var
|
|
Native: SOUNDSENTRY;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iFSGrafEffectColor <> DWORD(Value) then
|
|
begin
|
|
Native.iFSGrafEffectColor := DWORD(Value);
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSoundSentry.SetGrafEffectMSec(const Value: DWORD);
|
|
var
|
|
Native: SOUNDSENTRY;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iFSGrafEffectMSec <> Value then
|
|
begin
|
|
Native.iFSGrafEffectMSec := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSoundSentry.SetNativeType(Value: SOUNDSENTRY);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
Value.cbSize := SizeOf(Value);
|
|
SystemParametersInfo(SPI_SETSOUNDSENTRY, SizeOf(Value), @Value, 0);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSoundSentry.SetTextEffect(const Value: TJvSoundSentryTextEffect);
|
|
var
|
|
Native: SOUNDSENTRY;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iFSTextEffect <> DWORD(Value) then
|
|
begin
|
|
Native.iFSTextEffect := DWORD(Value);
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSoundSentry.SetTextEffectColor(const Value: TColor);
|
|
var
|
|
Native: SOUNDSENTRY;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iFSTextEffectColorBits <> DWORD(Value) then
|
|
begin
|
|
Native.iFSTextEffectColorBits := DWORD(Value);
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSoundSentry.SetTextEffectMSec(const Value: DWORD);
|
|
var
|
|
Native: SOUNDSENTRY;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iFSTextEffectMSec <> Value then
|
|
begin
|
|
Native.iFSTextEffectMSec := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSoundSentry.SetWindowsEffect(const Value: TJvSoundSentryWindowsEffect);
|
|
var
|
|
Native: SOUNDSENTRY;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iWindowsEffect <> DWORD(Value) then
|
|
begin
|
|
Native.iWindowsEffect := Ord(Value);
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSoundSentry.SetWindowsEffectDLL(const Value: string);
|
|
var
|
|
Native: SOUNDSENTRY;
|
|
begin
|
|
Native := NativeType;
|
|
if not AnsiSameText(Native.lpszWindowsEffectDLL, Value) then
|
|
begin
|
|
Native.lpszWindowsEffectDLL := PChar(Value);
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvSoundSentry.SetWindowsEffectMSec(const Value: DWORD);
|
|
var
|
|
Native: SOUNDSENTRY;
|
|
begin
|
|
Native := NativeType;
|
|
if Native.iWindowsEffectMSec <> Value then
|
|
begin
|
|
Native.iWindowsEffectMSec := Value;
|
|
NativeType := Native;
|
|
end;
|
|
end;
|
|
|
|
//=== { TJvSystemParametersInfo } ============================================
|
|
|
|
constructor TJvSystemParametersInfo.Create;
|
|
begin
|
|
inherited Create;
|
|
FWorkArea := TJvRect.Create;
|
|
end;
|
|
|
|
destructor TJvSystemParametersInfo.Destroy;
|
|
begin
|
|
FAccessTimeOut.Free;
|
|
FFilterKeys.Free;
|
|
FHighContrast.Free;
|
|
FIconMetrics.Free;
|
|
FIconTitleFont.Free;
|
|
FMinimizedMetrics.Free;
|
|
FMouseKeys.Free;
|
|
FNonClientMetrics.Free;
|
|
FSerialKeys.Free;
|
|
FSoundSentry.Free;
|
|
FWorkArea.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.InitMap;
|
|
begin
|
|
{ TODO: make this a hash table for faster access? }
|
|
if Length(FMap) > 0 then
|
|
Exit;
|
|
SetLength(FMap, 96);
|
|
FMap[0] := Point(SPI_GETBEEP, SPI_SETBEEP);
|
|
FMap[1] := Point(SPI_GETMOUSE, SPI_SETMOUSE);
|
|
FMap[2] := Point(SPI_GETBORDER, SPI_SETBORDER);
|
|
FMap[3] := Point(SPI_GETKEYBOARDSPEED, SPI_SETKEYBOARDSPEED);
|
|
FMap[4] := Point(-1, SPI_LANGDRIVER);
|
|
FMap[5] := Point(SPI_ICONHORIZONTALSPACING, SPI_ICONHORIZONTALSPACING);
|
|
FMap[6] := Point(SPI_GETSCREENSAVETIMEOUT, SPI_SETSCREENSAVETIMEOUT);
|
|
FMap[7] := Point(SPI_GETSCREENSAVEACTIVE, SPI_SETSCREENSAVEACTIVE);
|
|
FMap[8] := Point(SPI_GETGRIDGRANULARITY, SPI_SETGRIDGRANULARITY);
|
|
FMap[9] := Point(-1, SPI_SETDESKPATTERN);
|
|
FMap[10] := Point(SPI_GETKEYBOARDDELAY, SPI_SETKEYBOARDDELAY);
|
|
FMap[11] := Point(SPI_ICONVERTICALSPACING, SPI_ICONVERTICALSPACING);
|
|
FMap[12] := Point(SPI_GETICONTITLEWRAP, SPI_SETICONTITLEWRAP);
|
|
FMap[13] := Point(SPI_GETMENUDROPALIGNMENT, SPI_SETMENUDROPALIGNMENT);
|
|
FMap[14] := Point(-1, SPI_SETDOUBLECLKWIDTH);
|
|
FMap[15] := Point(-1, SPI_SETDOUBLECLKHEIGHT);
|
|
FMap[16] := Point(SPI_GETICONTITLELOGFONT, SPI_SETICONTITLELOGFONT);
|
|
FMap[17] := Point(-1, SPI_SETDOUBLECLICKTIME);
|
|
FMap[18] := Point(-1, SPI_SETMOUSEBUTTONSWAP);
|
|
FMap[19] := Point(-1, SPI_SETDRAGWIDTH);
|
|
FMap[20] := Point(-1, SPI_SETDRAGHEIGHT);
|
|
FMap[21] := Point(-1, SPI_SETHANDHELD);
|
|
FMap[22] := Point(SPI_GETFASTTASKSWITCH, SPI_SETFASTTASKSWITCH);
|
|
FMap[23] := Point(SPI_GETDRAGFULLWINDOWS, SPI_SETDRAGFULLWINDOWS);
|
|
FMap[24] := Point(SPI_GETNONCLIENTMETRICS, SPI_SETNONCLIENTMETRICS);
|
|
FMap[25] := Point(SPI_GETMINIMIZEDMETRICS, SPI_SETMINIMIZEDMETRICS);
|
|
FMap[26] := Point(SPI_GETICONMETRICS, SPI_SETICONMETRICS);
|
|
FMap[27] := Point(SPI_GETWORKAREA, SPI_SETWORKAREA);
|
|
FMap[28] := Point(-1, SPI_SETPENWINDOWS);
|
|
FMap[29] := Point(SPI_GETHIGHCONTRAST, SPI_SETHIGHCONTRAST);
|
|
FMap[30] := Point(SPI_GETKEYBOARDPREF, SPI_SETKEYBOARDPREF);
|
|
FMap[31] := Point(SPI_GETSCREENREADER, SPI_SETSCREENREADER);
|
|
FMap[32] := Point(SPI_GETANIMATION, SPI_SETANIMATION);
|
|
FMap[33] := Point(SPI_GETFONTSMOOTHING, SPI_SETFONTSMOOTHING);
|
|
FMap[34] := Point(SPI_GETLOWPOWERTIMEOUT, SPI_SETPOWEROFFTIMEOUT);
|
|
FMap[35] := Point(SPI_GETPOWEROFFTIMEOUT, SPI_SETLOWPOWERTIMEOUT);
|
|
FMap[36] := Point(SPI_GETLOWPOWERACTIVE, SPI_SETLOWPOWERACTIVE);
|
|
FMap[37] := Point(SPI_GETPOWEROFFACTIVE, SPI_SETPOWEROFFACTIVE);
|
|
FMap[38] := Point(-1, SPI_SETCURSORS);
|
|
FMap[39] := Point(-1, SPI_SETICONS);
|
|
FMap[40] := Point(SPI_GETDEFAULTINPUTLANG, SPI_SETDEFAULTINPUTLANG);
|
|
FMap[41] := Point(-1, SPI_SETLANGTOGGLE);
|
|
FMap[42] := Point(SPI_GETWINDOWSEXTENSION, -1);
|
|
FMap[43] := Point(SPI_GETMOUSETRAILS, SPI_SETMOUSETRAILS);
|
|
FMap[44] := Point(SPI_SCREENSAVERRUNNING, -1);
|
|
FMap[45] := Point(SPI_GETFILTERKEYS, SPI_SETFILTERKEYS);
|
|
FMap[46] := Point(SPI_GETTOGGLEKEYS, SPI_SETTOGGLEKEYS);
|
|
FMap[47] := Point(SPI_GETMOUSEKEYS, SPI_SETMOUSEKEYS);
|
|
FMap[48] := Point(SPI_GETSHOWSOUNDS, SPI_SETSHOWSOUNDS);
|
|
FMap[49] := Point(SPI_GETSTICKYKEYS, SPI_SETSTICKYKEYS);
|
|
FMap[50] := Point(SPI_GETACCESSTIMEOUT, SPI_SETACCESSTIMEOUT);
|
|
FMap[51] := Point(SPI_GETSERIALKEYS, SPI_SETSERIALKEYS);
|
|
FMap[52] := Point(SPI_GETSOUNDSENTRY, SPI_SETSOUNDSENTRY);
|
|
FMap[53] := Point(SPI_GETSNAPTODEFBUTTON, SPI_SETSNAPTODEFBUTTON);
|
|
FMap[54] := Point(SPI_GETMOUSEHOVERWIDTH, SPI_SETMOUSEHOVERWIDTH);
|
|
FMap[55] := Point(SPI_GETMOUSEHOVERHEIGHT, SPI_SETMOUSEHOVERHEIGHT);
|
|
FMap[56] := Point(SPI_GETMOUSEHOVERTIME, SPI_SETMOUSEHOVERTIME);
|
|
FMap[57] := Point(SPI_GETWHEELSCROLLLINES, SPI_SETWHEELSCROLLLINES);
|
|
FMap[58] := Point(SPI_GETMENUSHOWDELAY, SPI_SETMENUSHOWDELAY);
|
|
FMap[59] := Point(SPI_GETSHOWIMEUI, SPI_SETSHOWIMEUI);
|
|
FMap[60] := Point(SPI_GETMOUSESPEED, SPI_SETMOUSESPEED);
|
|
FMap[61] := Point(SPI_GETSCREENSAVERRUNNING, -1);
|
|
FMap[62] := Point(SPI_GETACTIVEWINDOWTRACKING, SPI_SETACTIVEWINDOWTRACKING);
|
|
FMap[63] := Point(SPI_GETMENUANIMATION, SPI_SETMENUANIMATION);
|
|
FMap[64] := Point(SPI_GETCOMBOBOXANIMATION, SPI_SETCOMBOBOXANIMATION);
|
|
FMap[65] := Point(SPI_GETLISTBOXSMOOTHSCROLLING, SPI_SETLISTBOXSMOOTHSCROLLING);
|
|
FMap[66] := Point(SPI_GETGRADIENTCAPTIONS, SPI_SETGRADIENTCAPTIONS);
|
|
FMap[67] := Point(SPI_GETKEYBOARDCUES, SPI_SETKEYBOARDCUES);
|
|
FMap[68] := Point(SPI_GETMENUUNDERLINES, SPI_SETMENUUNDERLINES);
|
|
FMap[69] := Point(SPI_GETACTIVEWNDTRKZORDER, SPI_SETACTIVEWNDTRKZORDER);
|
|
FMap[70] := Point(SPI_GETHOTTRACKING, SPI_SETHOTTRACKING);
|
|
FMap[71] := Point(SPI_GETMENUFADE, SPI_SETMENUFADE);
|
|
FMap[72] := Point(SPI_GETSELECTIONFADE, SPI_SETSELECTIONFADE);
|
|
FMap[73] := Point(SPI_GETTOOLTIPANIMATION, SPI_SETTOOLTIPANIMATION);
|
|
FMap[74] := Point(SPI_GETTOOLTIPFADE, SPI_SETTOOLTIPFADE);
|
|
FMap[75] := Point(SPI_GETCURSORSHADOW, SPI_SETCURSORSHADOW);
|
|
FMap[76] := Point(SPI_GETUIEFFECTS, SPI_SETUIEFFECTS);
|
|
FMap[77] := Point(SPI_GETFOREGROUNDLOCKTIMEOUT, SPI_SETFOREGROUNDLOCKTIMEOUT);
|
|
FMap[78] := Point(SPI_GETACTIVEWNDTRKTIMEOUT, SPI_SETACTIVEWNDTRKTIMEOUT);
|
|
FMap[79] := Point(SPI_GETFOREGROUNDFLASHCOUNT, SPI_SETFOREGROUNDFLASHCOUNT);
|
|
FMap[80] := Point(SPI_GETCARETWIDTH, SPI_SETCARETWIDTH);
|
|
FMap[81] := Point(SPI_GETDESKWALLPAPER, SPI_SETDESKWALLPAPER);
|
|
FMap[82] := Point(SPI_GETMOUSESONAR, SPI_SETMOUSESONAR);
|
|
FMap[83] := Point(SPI_GETMOUSECLICKLOCK, SPI_SETMOUSECLICKLOCK);
|
|
FMap[84] := Point(SPI_GETMOUSEVANISH, SPI_SETMOUSEVANISH);
|
|
FMap[85] := Point(SPI_GETFLATMENU, SPI_SETFLATMENU);
|
|
FMap[86] := Point(SPI_GETDROPSHADOW, SPI_SETDROPSHADOW);
|
|
FMap[87] := Point(SPI_GETFOREGROUNDLOCKTIMEOUT, SPI_SETFOREGROUNDLOCKTIMEOUT);
|
|
FMap[88] := Point(SPI_GETACTIVEWNDTRKTIMEOUT, SPI_SETACTIVEWNDTRKTIMEOUT);
|
|
FMap[89] := Point(SPI_GETFOREGROUNDFLASHCOUNT, SPI_SETFOREGROUNDFLASHCOUNT);
|
|
FMap[90] := Point(SPI_GETCARETWIDTH, SPI_SETCARETWIDTH);
|
|
FMap[91] := Point(SPI_GETMOUSECLICKLOCKTIME, SPI_SETMOUSECLICKLOCKTIME);
|
|
FMap[92] := Point(SPI_GETFONTSMOOTHINGTYPE, SPI_SETFONTSMOOTHINGTYPE);
|
|
FMap[93] := Point(SPI_GETFONTSMOOTHINGCONTRAST, SPI_SETFONTSMOOTHINGCONTRAST);
|
|
FMap[94] := Point(SPI_GETFOCUSBORDERWIDTH, SPI_SETFOCUSBORDERWIDTH);
|
|
FMap[95] := Point(SPI_GETFOCUSBORDERHEIGHT, SPI_SETFOCUSBORDERHEIGHT);
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.MapToSet(Index: Integer): Integer;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
InitMap;
|
|
for I := 0 to Length(FMap) - 1 do
|
|
if FMap[I].X = Index then
|
|
begin
|
|
Result := FMap[I].Y;
|
|
Exit;
|
|
end;
|
|
Result := -1;
|
|
end;
|
|
|
|
{ (ahuser) make Delphi 5 Compiler happy
|
|
function MapToGet(Index: Integer): Integer;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
InitMap;
|
|
for I := 0 to Length(FMap) - 1 do
|
|
if FMap[I].X = Index then
|
|
begin
|
|
Result := FMap[I].Y;
|
|
Exit;
|
|
end;
|
|
Result := -1;
|
|
end;}
|
|
|
|
function TJvSystemParametersInfo.GetAccessTimeOut: TJvAccessTimeOut;
|
|
begin
|
|
if FAccessTimeOut = nil then
|
|
FAccessTimeOut := TJvAccessTimeOut.Create;
|
|
Result := FAccessTimeOut;
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetAnimationInfo: Boolean;
|
|
var
|
|
Info: ANIMATIONINFO;
|
|
begin
|
|
if SystemParametersInfo(SPI_GETANIMATION, SizeOf(Info), @Info, 0) then
|
|
Result := Info.iMinAnimate <> 0
|
|
else
|
|
Result := False;
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetBoolInfo(const Index: Integer): Boolean;
|
|
var
|
|
Value: Integer;
|
|
begin
|
|
if SystemParametersInfo(Index, 0, @Value, 0) then
|
|
Result := Value <> 0
|
|
else
|
|
Result := False;
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetDeskWallpaper: string;
|
|
begin
|
|
// doesn't work
|
|
// SetLength(Result, MAX_PATH);
|
|
// SystemParametersInfo(SPI_GETDESKWALLPAPER, Length(Result), @Result[1], 0);
|
|
Result := '';
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetFilterKeys: TJvFilterKeys;
|
|
begin
|
|
if FFilterKeys = nil then
|
|
FFilterKeys := TJvFilterKeys.Create;
|
|
Result := FFilterKeys;
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetFontSmoothingType: TJvFontSmoothingType;
|
|
var
|
|
Value: Integer;
|
|
begin
|
|
Result := fstStandard;
|
|
if SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, @Value, 0) then
|
|
case Value of
|
|
// FE_FONTSMOOTHINGSTANDARD: Result := fstStandard;
|
|
FE_FONTSMOOTHINGCLEARTYPE:
|
|
Result := fstClearType;
|
|
FE_FONTSMOOTHINGDOCKING:
|
|
Result := fstDocking;
|
|
end;
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetHighContrast: TJvHighContrast;
|
|
begin
|
|
if FHighContrast = nil then
|
|
FHighContrast := TJvHighContrast.Create;
|
|
Result := FHighContrast;
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetIconMetrics: TJvIconMetrics;
|
|
begin
|
|
if FIconMetrics = nil then
|
|
FIconMetrics := TJvIconMetrics.Create;
|
|
Result := FIconMetrics;
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetIconSpacing(const Index: Integer): Integer;
|
|
const
|
|
cIconSpacing: array [0..1] of DWORD = (SPI_ICONHORIZONTALSPACING, SPI_ICONVERTICALSPACING);
|
|
begin
|
|
SystemParametersInfo(cIconSpacing[Index], 0, @Result, 0);
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetIconTitleFont: TFont;
|
|
var
|
|
ALogFont: TLogFont;
|
|
begin
|
|
if FIconTitleFont = nil then
|
|
FIconTitleFont := TFont.Create;
|
|
SystemParametersInfo(SPI_GETICONTITLELOGFONT, SizeOf(ALogFont), @ALogFont, 0);
|
|
UpdateFromLogFont(FIconTitleFont, ALogFont);
|
|
Result := FIconTitleFont;
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetIntInfo(const Index: Integer): Integer;
|
|
begin
|
|
if not SystemParametersInfo(Index, 0, @Result, 0) then
|
|
Result := 0;
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetKeyboardLayoutName: string;
|
|
var
|
|
Buf: array [0..8] of Char;
|
|
begin
|
|
if Windows.GetKeyboardLayoutName(Buf) then
|
|
Result := Buf
|
|
else
|
|
Result := '';
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetMinimizedMetrics: TJvMinimizedMetrics;
|
|
begin
|
|
if FMinimizedMetrics = nil then
|
|
FMinimizedMetrics := TJvMinimizedMetrics.Create;
|
|
Result := FMinimizedMetrics;
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetMouseInfo(const Index: Integer): Integer;
|
|
var
|
|
Mouse: array [0..2] of Integer;
|
|
begin
|
|
if (Index in [0..2]) and SystemParametersInfo(SPI_GETMOUSE, SizeOf(Mouse), @Mouse, 0) then
|
|
Result := Mouse[Index]
|
|
else
|
|
Result := 0;
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetMouseKeys: TJvMouseKeys;
|
|
begin
|
|
if FMouseKeys = nil then
|
|
FMouseKeys := TJvMouseKeys.Create;
|
|
Result := FMouseKeys;
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetNonClientMetrics: TJvNonClientMetrics;
|
|
begin
|
|
if FNonClientMetrics = nil then
|
|
FNonClientMetrics := TJvNonClientMetrics.Create;
|
|
Result := FNonClientMetrics;
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetSerialKeys: TJvSerialKeys;
|
|
begin
|
|
if FSerialKeys = nil then
|
|
FSerialKeys := TJvSerialKeys.Create;
|
|
Result := FSerialKeys;
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetSoundSentry: TJvSoundSentry;
|
|
begin
|
|
if FSoundSentry = nil then
|
|
FSoundSentry := TJvSoundSentry.Create;
|
|
Result := FSoundSentry;
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetStickyKeys: TJvStickyKeysFlags;
|
|
var
|
|
StickyKeys: TStickyKeys;
|
|
Flags: DWORD;
|
|
begin
|
|
StickyKeys.cbSize := SizeOf(StickyKeys);
|
|
if SystemParametersInfo(SPI_GETSTICKYKEYS, SizeOf(StickyKeys), @StickyKeys, 0) then
|
|
Flags := StickyKeys.dwFlags
|
|
else
|
|
Flags := 0;
|
|
Result := [];
|
|
if Flags and SKF_AUDIBLEFEEDBACK = SKF_AUDIBLEFEEDBACK then
|
|
Include(Result, skfAudibleFeedback);
|
|
if Flags and SKF_AVAILABLE = SKF_AVAILABLE then
|
|
Include(Result, skfAvailable);
|
|
if Flags and SKF_CONFIRMHOTKEY = SKF_CONFIRMHOTKEY then
|
|
Include(Result, skfConfirmHotkey);
|
|
if Flags and SKF_HOTKEYACTIVE = SKF_HOTKEYACTIVE then
|
|
Include(Result, skfHotkeyActive);
|
|
if Flags and SKF_HOTKEYSOUND = SKF_HOTKEYSOUND then
|
|
Include(Result, skfHotkeySound);
|
|
if Flags and SKF_INDICATOR = SKF_INDICATOR then
|
|
Include(Result, skfIndicator);
|
|
if Flags and SKF_STICKYKEYSON = SKF_STICKYKEYSON then
|
|
Include(Result, skfStickyKeysOn);
|
|
if Flags and SKF_TRISTATE = SKF_TRISTATE then
|
|
Include(Result, skfTriState);
|
|
if Flags and SKF_TWOKEYSOFF = SKF_TWOKEYSOFF then
|
|
Include(Result, skfTwoKeysOff);
|
|
if Flags and SKF_LALTLATCHED = SKF_LALTLATCHED then
|
|
Include(Result, skfLeftAltLatched);
|
|
if Flags and SKF_LCTLLATCHED = SKF_LCTLLATCHED then
|
|
Include(Result, skfLeftCtrlLatched);
|
|
if Flags and SKF_LSHIFTLATCHED = SKF_LSHIFTLATCHED then
|
|
Include(Result, skfLeftShiftLatched);
|
|
if Flags and SKF_RALTLATCHED = SKF_RALTLATCHED then
|
|
Include(Result, skfRightAltLatched);
|
|
if Flags and SKF_RCTLLATCHED = SKF_RCTLLATCHED then
|
|
Include(Result, skfRightCtrlLatched);
|
|
if Flags and SKF_RSHIFTLATCHED = SKF_RSHIFTLATCHED then
|
|
Include(Result, skfRightShiftLatched);
|
|
if Flags and SKF_LWINLATCHED = SKF_LWINLATCHED then
|
|
Include(Result, skfLeftWinLatched);
|
|
if Flags and SKF_RWINLATCHED = SKF_RWINLATCHED then
|
|
Include(Result, skfRightWinLatched);
|
|
if Flags and SKF_LALTLOCKED = SKF_LALTLOCKED then
|
|
Include(Result, skfLeftAltLocked);
|
|
if Flags and SKF_LCTLLOCKED = SKF_LCTLLOCKED then
|
|
Include(Result, skfLeftCtrlLocked);
|
|
if Flags and SKF_LSHIFTLOCKED = SKF_LSHIFTLOCKED then
|
|
Include(Result, skfLeftShiftLocked);
|
|
if Flags and SKF_RALTLOCKED = SKF_RALTLOCKED then
|
|
Include(Result, skfRightAltLocked);
|
|
if Flags and SKF_RCTLLOCKED = SKF_RCTLLOCKED then
|
|
Include(Result, skfRightCtrlLocked);
|
|
if Flags and SKF_RSHIFTLOCKED = SKF_RSHIFTLOCKED then
|
|
Include(Result, skfRightShiftLocked);
|
|
if Flags and SKF_LWINLOCKED = SKF_LWINLOCKED then
|
|
Include(Result, skfLeftWinLocked);
|
|
if Flags and SKF_RWINLOCKED = SKF_RWINLOCKED then
|
|
Include(Result, skfRightWinLocked);
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetToggleKeys: TJvToggleKeysFlags;
|
|
var
|
|
ToggleKeys: TToggleKeys;
|
|
Flags: DWORD;
|
|
begin
|
|
ToggleKeys.cbSize := SizeOf(ToggleKeys);
|
|
if SystemParametersInfo(SPI_GETTOGGLEKEYS, SizeOf(ToggleKeys), @ToggleKeys, 0) then
|
|
Flags := ToggleKeys.dwFlags
|
|
else
|
|
Flags := 0;
|
|
Result := [];
|
|
if Flags and TKF_AVAILABLE = TKF_AVAILABLE then
|
|
Include(Result, tkfAvailable);
|
|
if Flags and TKF_CONFIRMHOTKEY = TKF_CONFIRMHOTKEY then
|
|
Include(Result, tkfConfirmHotkey);
|
|
if Flags and TKF_HOTKEYACTIVE = TKF_HOTKEYACTIVE then
|
|
Include(Result, tkfHotkeyActive);
|
|
if Flags and TKF_HOTKEYSOUND = TKF_HOTKEYSOUND then
|
|
Include(Result, tkfHotkeySound);
|
|
if Flags and TKF_TOGGLEKEYSON = TKF_TOGGLEKEYSON then
|
|
Include(Result, tkfToggleKeysOn);
|
|
end;
|
|
|
|
function TJvSystemParametersInfo.GetWorkArea: TJvRect;
|
|
var
|
|
Value: TRect;
|
|
begin
|
|
if not SystemParametersInfo(SPI_GETWORKAREA, 0, @Value, 0) then
|
|
Value := Rect(0, 0, 0, 0);
|
|
|
|
FWorkArea.Top := Value.Top;
|
|
FWorkArea.Left := Value.Left;
|
|
FWorkArea.Bottom := Value.Bottom;
|
|
FWorkArea.Right := Value.Right;
|
|
Result := FWorkArea;
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetAccessTimeOut(const Value: TJvAccessTimeOut);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetAnimationInfo(const Value: Boolean);
|
|
var
|
|
Info: ANIMATIONINFO;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
Info.cbSize := SizeOf(Info);
|
|
Info.iMinAnimate := Ord(Value);
|
|
SystemParametersInfo(SPI_SETANIMATION, SizeOf(Info), @Info, 0);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetBoolInfo(const Index: Integer;
|
|
const Value: Boolean);
|
|
begin
|
|
if not IsDesigning and not ReadOnly and (Index <> SPI_GETSCREENSAVERRUNNING) then
|
|
begin
|
|
if Index >= SPI_GETACTIVEWINDOWTRACKING then // new values use new style
|
|
SystemParametersInfo(MapToSet(Index), 0, @Value, DEFAULT_SPIF_SENDCHANGE)
|
|
else
|
|
SystemParametersInfo(MapToSet(Index), Ord(Value), nil, DEFAULT_SPIF_SENDCHANGE);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetDeskWallpaper(const Value: string);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
SystemParametersInfo(SPI_SETDESKWALLPAPER, Length(Value), Pointer(Value), 0)
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetFilterKeys(const Value: TJvFilterKeys);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetFontSmoothingType(const Value: TJvFontSmoothingType);
|
|
var
|
|
Smoothing: Integer;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
case Value of
|
|
fstClearType:
|
|
Smoothing := FE_FONTSMOOTHINGCLEARTYPE;
|
|
fstDocking:
|
|
Smoothing := FE_FONTSMOOTHINGDOCKING;
|
|
else
|
|
Smoothing := FE_FONTSMOOTHINGSTANDARD;
|
|
end;
|
|
SystemParametersInfo(SPI_SETFONTSMOOTHINGTYPE, Smoothing, nil, DEFAULT_SPIF_SENDCHANGE);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetHighContrast(const Value: TJvHighContrast);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetIconMetrics(const Value: TJvIconMetrics);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetIconSpacing(const Index, Value: Integer);
|
|
const
|
|
cIconSpacing: array [0..1] of DWORD =
|
|
(SPI_ICONHORIZONTALSPACING, SPI_ICONVERTICALSPACING);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
SystemParametersInfo(cIconSpacing[Index], Value, nil, 0)
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetIconTitleFont(const Value: TFont);
|
|
var
|
|
ALogFont: TLogFont;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
UpdateToLogFont(Value, ALogFont);
|
|
SystemParametersInfo(SPI_SETICONTITLELOGFONT, SizeOf(ALogFont), @ALogFont, 0);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetIntInfo(const Index, Value: Integer);
|
|
begin
|
|
if not IsDesigning and not ReadOnly and (Index <> SPI_GETSCREENSAVERRUNNING) then
|
|
begin
|
|
if Index >= SPI_GETACTIVEWINDOWTRACKING then // new values use new style
|
|
SystemParametersInfo(MapToSet(Index), 0, @Value, DEFAULT_SPIF_SENDCHANGE)
|
|
else
|
|
SystemParametersInfo(MapToSet(Index), Value, nil, DEFAULT_SPIF_SENDCHANGE);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetKeyboardLayoutName(const Value: string);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
LoadKeyboardLayout(PChar(Value), KLF_ACTIVATE)
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetMinimizedMetrics(const Value: TJvMinimizedMetrics);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetMouseInfo(const Index, Value: Integer);
|
|
var
|
|
Mouse: array [0..2] of Integer;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
if (Index in [0..2]) and SystemParametersInfo(SPI_GETMOUSE, SizeOf(Mouse), @Mouse, 0) then
|
|
begin
|
|
Mouse[Index] := Value;
|
|
SystemParametersInfo(SPI_SETMOUSE, SizeOf(Mouse), @Mouse, DEFAULT_SPIF_SENDCHANGE);
|
|
end;
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetMouseKeys(const Value: TJvMouseKeys);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetNonClientMetrics(const Value: TJvNonClientMetrics);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetSerialKeys(const Value: TJvSerialKeys);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetSoundSentry(const Value: TJvSoundSentry);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetStickyKeys(const Value: TJvStickyKeysFlags);
|
|
var
|
|
StickyKeys: TStickyKeys;
|
|
Flags: DWORD;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
Flags := 0;
|
|
if skfAudibleFeedback in Value then
|
|
Flags := Flags or SKF_AUDIBLEFEEDBACK;
|
|
if skfAvailable in Value then
|
|
Flags := Flags or SKF_AVAILABLE;
|
|
if skfConfirmHotkey in Value then
|
|
Flags := Flags or SKF_CONFIRMHOTKEY;
|
|
if skfHotkeyActive in Value then
|
|
Flags := Flags or SKF_HOTKEYACTIVE;
|
|
if skfHotkeySound in Value then
|
|
Flags := Flags or SKF_HOTKEYSOUND;
|
|
if skfIndicator in Value then
|
|
Flags := Flags or SKF_INDICATOR;
|
|
if skfStickyKeysOn in Value then
|
|
Flags := Flags or SKF_STICKYKEYSON;
|
|
if skfTriState in Value then
|
|
Flags := Flags or SKF_TRISTATE;
|
|
if skfTwoKeysOff in Value then
|
|
Flags := Flags or SKF_TWOKEYSOFF;
|
|
if skfAudibleFeedback in Value then
|
|
Flags := Flags or SKF_AUDIBLEFEEDBACK;
|
|
if skfAvailable in Value then
|
|
Flags := Flags or SKF_AVAILABLE;
|
|
if skfConfirmHotkey in Value then
|
|
Flags := Flags or SKF_CONFIRMHOTKEY;
|
|
if skfHotkeyActive in Value then
|
|
Flags := Flags or SKF_HOTKEYACTIVE;
|
|
if skfHotkeySound in Value then
|
|
Flags := Flags or SKF_HOTKEYSOUND;
|
|
if skfIndicator in Value then
|
|
Flags := Flags or SKF_INDICATOR;
|
|
if skfStickyKeysOn in Value then
|
|
Flags := Flags or SKF_STICKYKEYSON;
|
|
if skfTriState in Value then
|
|
Flags := Flags or SKF_TRISTATE;
|
|
if skfTwoKeysOff in Value then
|
|
Flags := Flags or SKF_TWOKEYSOFF;
|
|
if skfLeftAltLatched in Value then
|
|
Flags := Flags or SKF_LALTLATCHED;
|
|
if skfLeftCtrlLatched in Value then
|
|
Flags := Flags or SKF_LCTLLATCHED;
|
|
if skfLeftShiftLatched in Value then
|
|
Flags := Flags or SKF_LSHIFTLATCHED;
|
|
if skfRightAltLatched in Value then
|
|
Flags := Flags or SKF_RALTLATCHED;
|
|
if skfRightCtrlLatched in Value then
|
|
Flags := Flags or SKF_RCTLLATCHED;
|
|
if skfRightShiftLatched in Value then
|
|
Flags := Flags or SKF_RSHIFTLATCHED;
|
|
if skfLeftWinLatched in Value then
|
|
Flags := Flags or SKF_LWINLATCHED;
|
|
if skfRightWinLatched in Value then
|
|
Flags := Flags or SKF_RWINLATCHED;
|
|
if skfLeftAltLocked in Value then
|
|
Flags := Flags or SKF_LALTLOCKED;
|
|
if skfLeftCtrlLocked in Value then
|
|
Flags := Flags or SKF_LCTLLOCKED;
|
|
if skfLeftShiftLocked in Value then
|
|
Flags := Flags or SKF_LSHIFTLOCKED;
|
|
if skfRightAltLocked in Value then
|
|
Flags := Flags or SKF_RALTLOCKED;
|
|
if skfRightCtrlLocked in Value then
|
|
Flags := Flags or SKF_RCTLLOCKED;
|
|
if skfRightShiftLocked in Value then
|
|
Flags := Flags or SKF_RSHIFTLOCKED;
|
|
if skfLeftWinLocked in Value then
|
|
Flags := Flags or SKF_LWINLOCKED;
|
|
if skfRightWinLocked in Value then
|
|
Flags := Flags or SKF_RWINLOCKED;
|
|
StickyKeys.cbSize := SizeOf(StickyKeys);
|
|
StickyKeys.dwFlags := Flags;
|
|
SystemParametersInfo(SPI_SETSTICKYKEYS, SizeOf(StickyKeys), @StickyKeys, DEFAULT_SPIF_SENDCHANGE);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetToggleKeys(const Value: TJvToggleKeysFlags);
|
|
var
|
|
ToggleKeys: TToggleKeys;
|
|
Flags: DWORD;
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
begin
|
|
Flags := 0;
|
|
if tkfAvailable in Value then
|
|
Flags := Flags or TKF_AVAILABLE;
|
|
if tkfConfirmHotkey in Value then
|
|
Flags := Flags or TKF_CONFIRMHOTKEY;
|
|
if tkfHotkeyActive in Value then
|
|
Flags := Flags or TKF_HOTKEYACTIVE;
|
|
if tkfHotkeySound in Value then
|
|
Flags := Flags or TKF_HOTKEYSOUND;
|
|
if tkfToggleKeysOn in Value then
|
|
Flags := Flags or TKF_TOGGLEKEYSON;
|
|
ToggleKeys.cbSize := SizeOf(ToggleKeys);
|
|
ToggleKeys.dwFlags := Flags;
|
|
SystemParametersInfo(SPI_SETTOGGLEKEYS, SizeOf(ToggleKeys), @ToggleKeys, DEFAULT_SPIF_SENDCHANGE);
|
|
end
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemParametersInfo.SetWorkArea(const Value: TJvRect);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvSystemColorsInfo.SetColor(Index: Integer; Value: TColor);
|
|
begin
|
|
if not IsDesigning and not ReadOnly then
|
|
SetSysColors(1, Index, Value)
|
|
else
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
function TJvSystemColorsInfo.GetColor(Index: Integer): TColor;
|
|
begin
|
|
Result := GetSysColor(Index);
|
|
end;
|
|
|
|
//=== { TJvFileInfo } ========================================================
|
|
|
|
constructor TJvFileInfo.Create;
|
|
begin
|
|
inherited Create;
|
|
FIcon := TIcon.Create;
|
|
FModifiers := [imNormal];
|
|
GetLargeImages;
|
|
GetSmallImages;
|
|
end;
|
|
|
|
destructor TJvFileInfo.Destroy;
|
|
begin
|
|
FLargeImages.Free;
|
|
FSmallImages.Free;
|
|
FIcon.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TJvFileInfo.GetLargeImages: TImageList;
|
|
var
|
|
SysIL: THandle;
|
|
sfi: TSHFileInfo;
|
|
begin
|
|
if not Assigned(FLargeImages) then
|
|
FLargeImages := TImageList.Create(nil);
|
|
SysIL := GetFileInfo('', 0, sfi, SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
|
|
if SysIL <> 0 then
|
|
FLargeImages.Handle := SysIL;
|
|
FLargeImages.ShareImages := True;
|
|
Result := FLargeImages;
|
|
end;
|
|
|
|
function TJvFileInfo.GetSmallImages: TImageList;
|
|
var
|
|
SysIL: THandle;
|
|
sfi: TSHFileInfo;
|
|
begin
|
|
if not Assigned(FSmallImages) then
|
|
FSmallImages := TImageList.Create(nil);
|
|
SysIL := GetFileInfo('', 0, sfi, SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
|
|
if SysIL <> 0 then
|
|
FSmallImages.Handle := SysIL;
|
|
FSmallImages.ShareImages := True;
|
|
Result := FSmallImages;
|
|
end;
|
|
|
|
procedure TJvFileInfo.SetModifiers(Value: TJvIconModifiers);
|
|
begin
|
|
if FModifiers <> Value then
|
|
begin
|
|
FModifiers := Value;
|
|
Include(FModifiers, imNormal); // imNormal can never be removed (equals 0)
|
|
GetIconHandle;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvFileInfo.SetFileName(Value: TFileName);
|
|
begin
|
|
FFileName := Value;
|
|
GetIconHandle;
|
|
end;
|
|
|
|
procedure TJvFileInfo.SetExeDummy(const Value: TJvExeType);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvFileInfo.SetIconDummy(const Value: TIcon);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvFileInfo.SetIntDummy(const Value: Integer);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
procedure TJvFileInfo.SetStrDummy(const Value: string);
|
|
begin
|
|
RaiseReadOnly;
|
|
end;
|
|
|
|
{ returns index of icon for filename in the systemlist }
|
|
|
|
function TJvFileInfo.GetIconIndex: Integer;
|
|
var
|
|
sfi: TSHFileInfo;
|
|
begin
|
|
GetFileInfo(FFileName, 0, sfi, SHGFI_SYSICONINDEX);
|
|
Result := sfi.iIcon;
|
|
end;
|
|
|
|
function TJvFileInfo.GetDisplayName: string;
|
|
var
|
|
sfi: TSHFileInfo;
|
|
begin
|
|
GetFileInfo(FFileName, 0, sfi, SHGFI_DISPLAYNAME);
|
|
Result := sfi.szDisplayName;
|
|
end;
|
|
|
|
function TJvFileInfo.GetExeType: TJvExeType;
|
|
var
|
|
sfi: TSHFileInfo;
|
|
Res: Integer;
|
|
begin
|
|
Result := etNone;
|
|
|
|
Res := GetFileInfo(FFileName, 0, sfi, SHGFI_EXETYPE);
|
|
if Res = 0 then
|
|
Exit;
|
|
case Lo(Res) of
|
|
77:
|
|
Result := etMSDos;
|
|
78:
|
|
Result := etWin16;
|
|
80:
|
|
Result := etWin32;
|
|
else
|
|
Result := etConsole; { ? }
|
|
end;
|
|
end;
|
|
|
|
function TJvFileInfo.GetAttributes: Integer;
|
|
// var sfi: TSHFileInfo;
|
|
begin
|
|
{ this doesn't work, use "old" method instead }
|
|
{
|
|
GetFileInfo(FFileName, 0, sfi, SHGFI_ATTRIBUTES);
|
|
Result := sfi.dwAttributes;}
|
|
Result := GetFileAttributes(PChar(FFileName));
|
|
end;
|
|
|
|
function TJvFileInfo.GetAttrString: string;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
I := GetAttributes;
|
|
Result := '';
|
|
if (I and FILE_ATTRIBUTE_NORMAL) <> 0 then
|
|
Exit; { no attributes }
|
|
if (I and FILE_ATTRIBUTE_ARCHIVE) <> 0 then
|
|
Result := Result + RsAttrArchiveShortString;
|
|
if (I and FILE_ATTRIBUTE_COMPRESSED) <> 0 then
|
|
Result := Result + RsAttrCompressedShortString;
|
|
if (I and FILE_ATTRIBUTE_DIRECTORY) <> 0 then
|
|
Result := Result + RsAttrDirectoryShortString;
|
|
if (I and FILE_ATTRIBUTE_HIDDEN) <> 0 then
|
|
Result := Result + RsAttrHiddenShortString;
|
|
if (I and FILE_ATTRIBUTE_READONLY) <> 0 then
|
|
Result := Result + RsAttrReadOnlyShortString;
|
|
if (I and FILE_ATTRIBUTE_SYSTEM) <> 0 then
|
|
Result := Result + RsAttrSystemShortString;
|
|
end;
|
|
|
|
function StrTrimAll(const S: string; const Chars: TSysCharSet): string;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
for I := 1 to Length(S) do
|
|
if not CharInSet(S[I], Chars) then
|
|
Result := Result + S[I];
|
|
end;
|
|
|
|
function AddDot(S: string): string;
|
|
begin
|
|
Result := S;
|
|
if (Length(Result) > 0) and (Result[1] <> '.') then
|
|
Result := '.' + Result;
|
|
end;
|
|
|
|
function ExpandEnvVar(const Value: string): string;
|
|
var
|
|
Dest: array [0..MAX_PATH] of Char;
|
|
begin
|
|
ExpandEnvironmentStrings(PChar(Value), Dest, MAX_PATH - 1);
|
|
Result := Dest;
|
|
end;
|
|
|
|
function GetAdvancedIconLocation(const FileName: string; var iIcon: Integer): string;
|
|
var
|
|
Reg: TRegistry;
|
|
Ext, sPath, Tmp: string;
|
|
I: Integer;
|
|
sfi: TSHFileInfo;
|
|
begin
|
|
// first try the easy way:
|
|
SHGetFileInfo(PChar(FileName), 0, sfi, SizeOf(sfi), SHGFI_ICON or SHGFI_ICONLOCATION);
|
|
Result := sfi.szDisplayName;
|
|
if Result <> '' then
|
|
begin
|
|
iIcon := sfi.iIcon;
|
|
Exit;
|
|
end;
|
|
|
|
if Pos('.', FileName) > 0 then
|
|
Ext := ExtractFileExt(StrTrimAll(FileName, ['"', '''']))
|
|
else
|
|
Ext := AddDot(FileName);
|
|
|
|
if Length(Ext) = 0 then
|
|
Exit;
|
|
Reg := TRegistry.Create;
|
|
try
|
|
Reg.RootKey := HKEY_CLASSES_ROOT;
|
|
// is the key present ?
|
|
if Reg.OpenKey(Ext, False) then
|
|
// get ID to associated program:
|
|
Result := Reg.ReadString('');
|
|
if Reg.OpenKey('\' + Result + '\DefaultIcon', False) then
|
|
Result := Reg.ReadString(''); // path (and possibly index) to icon location
|
|
if Length(Result) > 0 then
|
|
begin
|
|
if Pos('%1', Result) > 0 then
|
|
Result := FileName; // instance specific icon
|
|
I := Pos(',', Result);
|
|
sPath := '';
|
|
if I > 0 then
|
|
begin
|
|
sPath := Copy(Result, I + 1, MaxInt);
|
|
Result := Copy(Result, 1, I - 1);
|
|
end;
|
|
Tmp := '';
|
|
for I := 1 to Length(sPath) do
|
|
if not CharInSet(sPath[I], ['-', '0'..'9']) then
|
|
Continue
|
|
else
|
|
Tmp := Tmp + sPath[I];
|
|
iIcon := Abs(StrToIntDef(Tmp, 0)); // convert to positive index
|
|
end
|
|
finally
|
|
Reg.Free;
|
|
end;
|
|
Result := ExpandEnvVar(Result); // replace any environment variables in path (like %systemroot%)
|
|
end;
|
|
|
|
function TJvFileInfo.GetIconLocation: string;
|
|
var
|
|
sfi: TSHFileInfo;
|
|
iIcon: Integer;
|
|
begin
|
|
{ this doesn't seem to work on files, only on directories (always returns an empty string)... }
|
|
GetFileInfo(FFileName, 0, sfi, SHGFI_ICONLOCATION);
|
|
Result := sfi.szDisplayName;
|
|
if Result = '' then
|
|
Result := StrTrimAll(GetAdvancedIconLocation(FFileName, iIcon), ['"']);
|
|
end;
|
|
|
|
function TJvFileInfo.GetTypeString: string;
|
|
var
|
|
sfi: TSHFileInfo;
|
|
begin
|
|
GetFileInfo(FFileName, 0, sfi, SHGFI_TYPENAME);
|
|
Result := sfi.szTypeName;
|
|
if Result = '' then
|
|
Result := Format(RsFileTypeString,[AnsiUpperCase(Copy(ExtractFileExt(FFileName), 2, MaxInt))]);
|
|
end;
|
|
|
|
function TJvFileInfo.GetIconHandle: THandle;
|
|
const
|
|
Modifier: array [TJvIconModifier] of Integer =
|
|
(0, SHGFI_LINKOVERLAY, SHGFI_SELECTED, SHGFI_OPENICON, SHGFI_SHELLICONSIZE, SHGFI_SMALLICON);
|
|
var
|
|
sfi: TSHFileInfo;
|
|
Flags: Integer;
|
|
I: TJvIconModifier;
|
|
begin
|
|
Flags := 0;
|
|
for I := Low(TJvIconModifier) to High(TJvIconModifier) do
|
|
if I in Modifiers then
|
|
Flags := Flags or Modifier[I];
|
|
GetFileInfo(FFileName, 0, sfi, SHGFI_SYSICONINDEX or SHGFI_ICON or Flags);
|
|
Result := sfi.hIcon;
|
|
FIcon.Handle := sfi.hIcon;
|
|
end;
|
|
|
|
function TJvFileInfo.GetFileInfo(const FileName: string; Attributes: Cardinal; out Info: ShFileInfo; Flags: Cardinal):
|
|
Cardinal;
|
|
begin
|
|
FillChar(Info, SizeOf(Info), 0);
|
|
Result := SHGetFileInfo(PChar(FileName), Attributes, Info, SizeOf(Info), Flags);
|
|
end;
|
|
|
|
//=== { TJvComputerInfoEx } ==================================================
|
|
|
|
constructor TJvComputerInfoEx.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
IsDesigning := csDesigning in ComponentState;
|
|
FReadOnly := True;
|
|
if not IsDesigning then
|
|
FDeviceHandle := AllocateHWndEx(WndProc);
|
|
end;
|
|
|
|
destructor TJvComputerInfoEx.Destroy;
|
|
begin
|
|
FAPMInfo.Free;
|
|
FBIOSInfo.Free;
|
|
FColors.Free;
|
|
FCPUInfo.Free;
|
|
FIdentification.Free;
|
|
FKeyInfo.Free;
|
|
FMemoryInfo.Free;
|
|
FMiscInfo.Free;
|
|
FOSVersionInfo.Free;
|
|
FScreenInfo.Free;
|
|
FSystemFolders.Free;
|
|
FMetrics.Free;
|
|
FSystem.Free;
|
|
FFileInfo.Free;
|
|
if not IsDesigning and (FDeviceHandle <> 0) then
|
|
DeallocateHWndEx(FDeviceHandle);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.DoDriveChange(Drive: Char; Removed: Boolean);
|
|
begin
|
|
if Removed then
|
|
begin
|
|
if Assigned(FOnDeviceRemoved) then
|
|
FOnDeviceRemoved(Self, Drive);
|
|
end
|
|
else
|
|
if Assigned(FOnDeviceAdded) then
|
|
FOnDeviceAdded(Self, Drive);
|
|
end;
|
|
|
|
function TJvComputerInfoEx.FirstDrive(AMask: Integer): Char;
|
|
var
|
|
Drive: Shortint;
|
|
begin
|
|
Drive := Ord('A');
|
|
while (AMask and 1) = 0 do
|
|
begin
|
|
AMask := AMask shr 1;
|
|
Inc(Drive);
|
|
end;
|
|
Result := Char(Drive);
|
|
end;
|
|
|
|
function TJvComputerInfoEx.GetAPMInfo: TJvAPMInfo;
|
|
begin
|
|
if FAPMInfo = nil then
|
|
FAPMInfo := TJvAPMInfo.Create;
|
|
Result := FAPMInfo;
|
|
end;
|
|
|
|
function TJvComputerInfoEx.GetBIOSInfo: TJvBIOSInfo;
|
|
begin
|
|
if FBIOSInfo = nil then
|
|
FBIOSInfo := TJvBIOSInfo.Create;
|
|
Result := FBIOSInfo;
|
|
end;
|
|
|
|
function TJvComputerInfoEx.GetColors: TJvSystemColorsInfo;
|
|
begin
|
|
if FColors = nil then
|
|
begin
|
|
FColors := TJvSystemColorsInfo.Create;
|
|
FColors.ReadOnly := ReadOnly;
|
|
end;
|
|
Result := FColors;
|
|
end;
|
|
|
|
function TJvComputerInfoEx.GetCPUInfo: TJvCPUInfo;
|
|
begin
|
|
if FCPUInfo = nil then
|
|
FCPUInfo := TJvCPUInfo.Create;
|
|
Result := FCPUInfo;
|
|
end;
|
|
|
|
function TJvComputerInfoEx.GetIdentification: TJvIdentification;
|
|
begin
|
|
if FIdentification = nil then
|
|
begin
|
|
FIdentification := TJvIdentification.Create;
|
|
FIdentification.ReadOnly := ReadOnly;
|
|
end;
|
|
Result := FIdentification;
|
|
end;
|
|
|
|
function TJvComputerInfoEx.GetKeyInfo: TJvKeyInfo;
|
|
begin
|
|
if FKeyInfo = nil then
|
|
begin
|
|
FKeyInfo := TJvKeyInfo.Create;
|
|
FKeyInfo.ReadOnly := ReadOnly;
|
|
end;
|
|
Result := FKeyInfo;
|
|
end;
|
|
|
|
function TJvComputerInfoEx.GetMemoryInfo: TJvMemInfo;
|
|
begin
|
|
if FMemoryInfo = nil then
|
|
FMemoryInfo := TJvMemInfo.Create;
|
|
Result := FMemoryInfo;
|
|
end;
|
|
|
|
function TJvComputerInfoEx.GetMetrics: TJvMetricsInfo;
|
|
begin
|
|
if FMetrics = nil then
|
|
FMetrics := TJvMetricsInfo.Create;
|
|
Result := FMetrics;
|
|
end;
|
|
|
|
function TJvComputerInfoEx.GetMiscInfo: TJvMiscInfo;
|
|
begin
|
|
if FMiscInfo = nil then
|
|
begin
|
|
FMiscInfo := TJvMiscInfo.Create;
|
|
FMiscInfo.ReadOnly := ReadOnly;
|
|
end;
|
|
Result := FMiscInfo;
|
|
end;
|
|
|
|
function TJvComputerInfoEx.GetOSVersionInfo: TJvOSVersionInfo;
|
|
begin
|
|
if FOSVersionInfo = nil then
|
|
FOSVersionInfo := TJvOSVersionInfo.Create;
|
|
Result := FOSVersionInfo;
|
|
end;
|
|
|
|
function TJvComputerInfoEx.GetScreenInfo: TJvScreenInfo;
|
|
begin
|
|
if FScreenInfo = nil then
|
|
begin
|
|
FScreenInfo := TJvScreenInfo.Create;
|
|
FScreenInfo.ReadOnly := ReadOnly;
|
|
end;
|
|
Result := FScreenInfo;
|
|
end;
|
|
|
|
function TJvComputerInfoEx.GetSystem: TJvSystemParametersInfo;
|
|
begin
|
|
if FSystem = nil then
|
|
begin
|
|
FSystem := TJvSystemParametersInfo.Create;
|
|
FSystem.ReadOnly := ReadOnly;
|
|
end;
|
|
Result := FSystem;
|
|
end;
|
|
|
|
function TJvComputerInfoEx.GetSystemFolders: TJvSystemFolders;
|
|
begin
|
|
if FSystemFolders = nil then
|
|
FSystemFolders := TJvSystemFolders.Create;
|
|
Result := FSystemFolders;
|
|
end;
|
|
|
|
function TJvComputerInfoEx.GetFileInfo: TJvFileInfo;
|
|
begin
|
|
if FFileInfo = nil then
|
|
FFileInfo := TJvFileInfo.Create;
|
|
Result := FFileInfo;
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.SetAPMInfo(const Value: TJvAPMInfo);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.SetBIOSInfo(const Value: TJvBIOSInfo);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.SetColors(const Value: TJvSystemColorsInfo);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.SetCPUInfo(const Value: TJvCPUInfo);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.SetIdentification(const Value: TJvIdentification);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.SetKeyInfo(const Value: TJvKeyInfo);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.SetMemoryInfo(const Value: TJvMemInfo);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.SetMetrics(const Value: TJvMetricsInfo);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.SetMiscInfo(const Value: TJvMiscInfo);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.SetOSVersionInfo(const Value: TJvOSVersionInfo);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.SetScreenInfo(const Value: TJvScreenInfo);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.SetSystem(const Value: TJvSystemParametersInfo);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.SetSystemFolders(const Value: TJvSystemFolders);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.SetFileInfo(const Value: TJvFileInfo);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.DoSettingChange(Flag: Integer; Section: string);
|
|
begin
|
|
if Assigned(FOnSettingChange) then
|
|
FOnSettingChange(Self, Flag, Section);
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.WMDeviceChange(var Msg: TWMDeviceChange);
|
|
var
|
|
lpdb: PDevBroadcastHdr;
|
|
lpdbv: PDevBroadcastVolume;
|
|
begin
|
|
lpdb := PDevBroadcastHdr(Msg.dwData);
|
|
case Msg.Event of
|
|
DBT_DEVICEARRIVAL:
|
|
if lpdb^.dbch_devicetype = DBT_DEVTYP_VOLUME then
|
|
begin
|
|
lpdbv := PDevBroadcastVolume(Msg.dwData);
|
|
if (lpdbv^.dbcv_flags and DBTF_MEDIA) = 1 then
|
|
DoDriveChange(FirstDrive(lpdbv^.dbcv_unitmask), False);
|
|
end;
|
|
DBT_DEVICEREMOVECOMPLETE:
|
|
if lpdb^.dbch_devicetype = DBT_DEVTYP_VOLUME then
|
|
begin
|
|
lpdbv := PDevBroadcastVolume(Msg.dwData);
|
|
if (lpdbv^.dbcv_flags and DBTF_MEDIA) = 1 then
|
|
DoDriveChange(FirstDrive(lpdbv^.dbcv_unitmask), True);
|
|
end;
|
|
// (rom) one of the rare occasions where ; before else is correct
|
|
else
|
|
with Msg do
|
|
DoDeviceChange(Event, dwData);
|
|
end
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.DoCompacting(Ratio: Integer);
|
|
begin
|
|
if Assigned(FOnCompacting) then
|
|
FOnCompacting(Self, Ratio);
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.DoPowerBroadcast(Event, Data: Integer);
|
|
begin
|
|
if Assigned(FOnPowerBroadcast) then
|
|
FOnPowerBroadcast(Self, Event, Data);
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.DoUserChanged;
|
|
begin
|
|
if Assigned(FOnUserChanged) then
|
|
FOnUserChanged(Self);
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.WndProc(var Message: TMessage);
|
|
begin
|
|
with Message do
|
|
begin
|
|
case Msg of
|
|
WM_DISPLAYCHANGE:
|
|
WMDisplayChange(TWMDisplayChange(Message));
|
|
WM_DEVMODECHANGE:
|
|
DoDevModeChange(TWMDevModeChange(Message).Device);
|
|
WM_SETTINGCHANGE:
|
|
with TWMSettingChange(Message) do
|
|
DoSettingChange(Flag, Section);
|
|
WM_DEVICECHANGE:
|
|
WMDeviceChange(TWMDeviceChange(Message));
|
|
WM_COMPACTING:
|
|
DoCompacting(wParam);
|
|
WM_POWER, WM_POWERBROADCAST:
|
|
DoPowerBroadcast(wParam, lParam);
|
|
WM_USERCHANGED:
|
|
DoUserChanged;
|
|
WM_TIMECHANGE:
|
|
DoTimeChange;
|
|
WM_FONTCHANGE:
|
|
DoFontChange;
|
|
WM_SYSCOLORCHANGE:
|
|
DoSysColorChange;
|
|
WM_SPOOLERSTATUS:
|
|
with TWMSpoolerStatus(Message) do
|
|
DoSpoolerStatus(JobStatus, JobsLeft);
|
|
WM_PALETTEISCHANGING:
|
|
with TWmPaletteIsChanging(Message) do
|
|
DoPaletteChanging(Realize);
|
|
WM_PALETTECHANGED:
|
|
with TWmPaletteChanged(Message) do
|
|
DoPaletteChanged(PalChg);
|
|
end;
|
|
Result := DefWindowProc(FDeviceHandle, Msg, wParam, lParam);
|
|
end;
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.DoDevModeChange(const Device: PChar);
|
|
begin
|
|
if Assigned(FOnDeviceModeChange) then
|
|
FOnDeviceModeChange(Self, Device);
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.WMDisplayChange(var Msg: TWMDisplayChange);
|
|
begin
|
|
if Assigned(FOnDisplayChange) then
|
|
FOnDisplayChange(Self, Msg.BitsPerPixel, Msg.Width, Msg.Height);
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.DoDeviceChange(Event: UINT; dwData: Pointer);
|
|
begin
|
|
if Assigned(FOnDeviceChange) then
|
|
FOnDeviceChange(Self, Event, dwData);
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.DoTimeChange;
|
|
begin
|
|
if Assigned(FOnTimeChange) then
|
|
FOnTimeChange(Self);
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.DoFontChange;
|
|
begin
|
|
if Assigned(FOnFontChange) then
|
|
FOnFontChange(Self);
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.DoSysColorChange;
|
|
begin
|
|
if Assigned(FOnSysColorChange) then
|
|
FOnSysColorChange(Self);
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.DoSpoolerStatus(JobStatus, JobsLeft: Integer);
|
|
begin
|
|
if Assigned(FOnSpoolerStatusChange) then
|
|
FOnSpoolerStatusChange(Self, JobStatus, JobsLeft);
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.DoPaletteChanging(Wnd: THandle);
|
|
begin
|
|
if Assigned(FOnPaletteChanging) then
|
|
FOnPaletteChanging(Self, Wnd);
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.DoPaletteChanged(Wnd: THandle);
|
|
begin
|
|
if Assigned(FOnPaletteChanged) then
|
|
FOnPaletteChanged(Self, Wnd);
|
|
end;
|
|
|
|
procedure TJvComputerInfoEx.SetReadOnly(const Value: Boolean);
|
|
begin
|
|
if FReadOnly <> Value then
|
|
begin
|
|
FReadOnly := Value;
|
|
if FColors <> nil then
|
|
FColors.ReadOnly := FReadOnly;
|
|
if FIdentification <> nil then
|
|
FIdentification.ReadOnly := FReadOnly;
|
|
if FKeyInfo <> nil then
|
|
FKeyInfo.ReadOnly := FReadOnly;
|
|
if FMiscInfo <> nil then
|
|
FMiscInfo.ReadOnly := FReadOnly;
|
|
if FScreenInfo <> nil then
|
|
FScreenInfo.ReadOnly := FReadOnly;
|
|
if FSystem <> nil then
|
|
FSystem.ReadOnly := FReadOnly;
|
|
end;
|
|
end;
|
|
|
|
function TJvComputerInfoEx.ResetSystemCursors: Boolean;
|
|
begin
|
|
Result := SystemParametersInfo(SPI_SETCURSORS, 0, nil, SPIF_SENDCHANGE);
|
|
end;
|
|
|
|
function TJvComputerInfoEx.ResetSystemIcons: Boolean;
|
|
const
|
|
HKCU_WINDOWMETRICS = '\Control Panel\Desktop\WindowMetrics';
|
|
cShellIconSize = 'Shell Icon Size';
|
|
var
|
|
DefaultValue: Integer;
|
|
begin
|
|
// Result := SystemParametersInfo(SPI_SETICONS, 0, nil, SPIF_SENDCHANGE);
|
|
// I stole the idea for this from the TortoiseCVS guys (thanks!)
|
|
DefaultValue := StrToIntDef(RegReadStringDef(HKEY_CURRENT_USER, HKCU_WINDOWMETRICS, cShellIconSize, '0'), 0);
|
|
Result := DefaultValue <> 0;
|
|
if Result then
|
|
begin
|
|
RegWriteString(HKEY_CURRENT_USER, HKCU_WINDOWMETRICS, cShellIconSize, IntToStr(Succ(DefaultValue)));
|
|
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0);
|
|
RegWriteString(HKEY_CURRENT_USER, HKCU_WINDOWMETRICS, cShellIconSize, IntToStr(DefaultValue));
|
|
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0);
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
{$IFDEF UNITVERSIONING}
|
|
RegisterUnitVersion(HInstance, UnitVersioning);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
finalization
|
|
UnloadNetLib;
|
|
{$IFDEF UNITVERSIONING}
|
|
UnregisterUnitVersion(HInstance);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
end.
|