📄 versinfo.pas
字号:
{$I DFS.INC} { Standard defines for all Delphi Free Stuff components }
{------------------------------------------------------------------------------}
{ TdfsVersionInfoResource v2.36 }
{------------------------------------------------------------------------------}
{ A component to read version info resources. It is intended for Delphi 3, }
{ but should work with any file that contains a properly formatted resource. }
{ }
{ Copyright 2000-2001, Brad Stowers. All Rights Reserved. }
{ }
{ Copyright: }
{ All Delphi Free Stuff (hereafter "DFS") source code is copyrighted by }
{ Bradley D. Stowers (hereafter "author"), and shall remain the exclusive }
{ property of the author. }
{ }
{ Distribution Rights: }
{ You are granted a non-exlusive, royalty-free right to produce and distribute }
{ compiled binary files (executables, DLLs, etc.) that are built with any of }
{ the DFS source code unless specifically stated otherwise. }
{ You are further granted permission to redistribute any of the DFS source }
{ code in source code form, provided that the original archive as found on the }
{ DFS web site (http://www.delphifreestuff.com) is distributed unmodified. For }
{ example, if you create a descendant of TDFSColorButton, you must include in }
{ the distribution package the colorbtn.zip file in the exact form that you }
{ downloaded it from http://www.delphifreestuff.com/mine/files/colorbtn.zip. }
{ }
{ Restrictions: }
{ Without the express written consent of the author, you may not: }
{ * Distribute modified versions of any DFS source code by itself. You must }
{ include the original archive as you found it at the DFS site. }
{ * Sell or lease any portion of DFS source code. You are, of course, free }
{ to sell any of your own original code that works with, enhances, etc. }
{ DFS source code. }
{ * Distribute DFS source code for profit. }
{ }
{ Warranty: }
{ There is absolutely no warranty of any kind whatsoever with any of the DFS }
{ source code (hereafter "software"). The software is provided to you "AS-IS", }
{ and all risks and losses associated with it's use are assumed by you. In no }
{ event shall the author of the softare, Bradley D. Stowers, be held }
{ accountable for any damages or losses that may occur from use or misuse of }
{ the software. }
{ }
{ Support: }
{ Support is provided via the DFS Support Forum, which is a web-based message }
{ system. You can find it at http://www.delphifreestuff.com/discus/ }
{ All DFS source code is provided free of charge. As such, I can not guarantee }
{ any support whatsoever. While I do try to answer all questions that I }
{ receive, and address all problems that are reported to me, you must }
{ understand that I simply can not guarantee that this will always be so. }
{ }
{ Clarifications: }
{ If you need any further information, please feel free to contact me directly.}
{ This agreement can be found online at my site in the "Miscellaneous" section.}
{------------------------------------------------------------------------------}
{ The lateset version of my components are always available on the web at: }
{ http://www.delphifreestuff.com/ }
{ See VersInfo.txt for notes, known issues, and revision history. }
{------------------------------------------------------------------------------}
{ Date last modified: June 28, 2001 }
{------------------------------------------------------------------------------}
unit VersInfo;
interface
uses
{$IFDEF DFS_VERSION_INFO_AS_CLASS}
{$IFDEF DFS_WIN32}
Windows,
{$ELSE}
WinTypes, WinProcs, Ver,
{$ENDIF}
Classes, SysUtils; { I really hate Forms }
{$ELSE}
{$IFDEF DFS_WIN32}
Windows, ComCtrls,
{$ELSE}
WinTypes, WinProcs, Ver, Grids,
{$ENDIF}
Messages, SysUtils, Classes, Graphics, Forms, StdCtrls;
{$ENDIF}
const
{ This shuts up C++Builder 3 about the redefiniton being different. There
seems to be no equivalent in C1. Sorry. }
{$IFDEF DFS_CPPB_3_UP}
{$EXTERNALSYM DFS_COMPONENT_VERSION}
{$ENDIF}
DFS_COMPONENT_VERSION = 'TdfsVersionInfoResource v2.36';
DEFAULT_LANG_ID = $0409;
DEFAULT_CHAR_SET_ID = $04E4;
DEFAULT_LANG_CHAR_SET = '040904E4';
{$IFDEF DFS_COMPILER_3_UP}
resourcestring
{$ELSE}
const
{$ENDIF}
SFlagDebug = 'Debug';
SFlagInfoInferred = 'Info Inferred';
SFlagPatched = 'Patched';
SFlagPreRelease = 'Pre-Release';
SFlagPrivate = 'Private';
SFlagSpecial = 'Special';
SHeaderResource = 'Resource';
SHeaderValue ='Value';
{ Predefined resource item captions. }
SResCapCompanyName = 'Company Name';
SResCapFileDescription = 'File Description';
SResCapFileVersion = 'File Version';
SResCapInternalName = 'Internal Name';
SResCapLegalCopyright = 'Legal Copyright';
SResCapLegalTrademarks = 'Legal Trademarks';
SResCapOriginalFilename = 'Original Filename';
SResCapProductName = 'Product Name';
SResCapProductVersion = 'Product Version';
SResCapComments = 'Comments';
SResCapBuildFlags = 'Build Flags';
{ set values to choose which resources are seen in the grid/listview }
type
TPreDef = (pdCompanyName, pdFileDescription, pdFileVersion,
pdInternalName, pdLegalCopyright, pdLegalTrademarks,
pdOriginalFilename, pdProductName, pdProductVersion,
pdComments, pdBuildFlags);
TPreDefs = set of TPreDef;
{ but to index properties we need integers }
const
IDX_COMPANYNAME = ord (pdCompanyName);
IDX_FILEDESCRIPTION = ord (pdFileDescription);
IDX_FILEVERSION = ord (pdFileVersion);
IDX_INTERNALNAME = ord (pdInternalName);
IDX_LEGALCOPYRIGHT = ord (pdLegalCopyright);
IDX_LEGALTRADEMARKS = ord (pdLegalTrademarks);
IDX_ORIGINALFILENAME = ord (pdOriginalFilename);
IDX_PRODUCTNAME = ord (pdProductName);
IDX_PRODUCTVERSION = ord (pdProductVersion);
IDX_COMMENTS = ord (pdComments);
IDX_BUILDFLAGS = ord (pdBuildFlags);
const
IDX_VER_MAJOR = 0;
IDX_VER_MINOR = 1;
IDX_VER_RELEASE = 2;
IDX_VER_BUILD = 3;
type
{$IFNDEF DFS_WIN32}
PVSFixedFileInfo = PVS_FixedFileInfo;
DWORD = longint;
UINT = word;
{$ENDIF}
TFixedFileInfoFlag = (ffDebug, ffInfoInferred, ffPatched, ffPreRelease,
ffPrivateBuild, ffSpecialBuild);
TFixedFileInfoFlags = set of TFixedFileInfoFlag;
TVersionOperatingSystemFlag = (vosUnknown, vosDOS, vosOS2_16, vosOS2_32,
vosNT, vosWindows16, vosPresentationManager16, vosPresentationManager32, vosWindows32);
{ This is supposed to be one of the first line, and one of the second line. }
TVersionOperatingSystemFlags = set of TVersionOperatingSystemFlag;
TVersionFileType = (vftUnknown, vftApplication, vftDLL, vftDriver, vftFont,
vftVXD, vftStaticLib);
TdfsVersionInfoResource = class; { forward declaration }
TFixedFileVersionInfo = class
private
FParent: TdfsVersionInfoResource;
FData: PVSFixedFileInfo;
function GetSignature: DWORD;
function GetStructureVersion: DWORD;
function GetFileVersionMS: DWORD;
function GetFileVersionLS: DWORD;
function GetProductVersionMS: DWORD;
function GetProductVersionLS: DWORD;
function GetValidFlags: TFixedFileInfoFlags;
function GetFlags: TFixedFileInfoFlags;
function GetFileOperatingSystem: TVersionOperatingSystemFlags;
function GetFileType: TVersionFileType;
function GetFileSubType: DWORD;
function GetCreationDate: TDateTime;
public
constructor Create(AParent: TdfsVersionInfoResource);
property Parent: TdfsVersionInfoResource
read FParent write FParent;
property Data: PVSFixedFileInfo
read FData write FData;
property Signature: DWORD
read GetSignature;
property StructureVersion: DWORD
read GetStructureVersion;
property FileVersionMS: DWORD
read GetFileVersionMS;
property FileVersionLS: DWORD
read GetFileVersionLS;
property ProductVersionMS: DWORD
read GetProductVersionMS;
property ProductVersionLS: DWORD
read GetProductVersionLS;
property ValidFlags: TFixedFileInfoFlags
read GetValidFlags;
property Flags: TFixedFileInfoFlags
read GetFlags;
property FileOperatingSystem: TVersionOperatingSystemFlags
read GetFileOperatingSystem;
property FileType: TVersionFileType
read GetFileType;
property FileSubType: DWORD
read GetFileSubType;
property CreationDate: TDateTime
read GetCreationDate;
end;
TVersionNumberInformation = class
private
FValid : boolean;
FMostSignificant: DWORD;
FLeastSignificant: DWORD;
FVersionNumberString: string;
function GetVersionNumber(Index: integer): word;
function GetVersionNumberString: string;
public
constructor Create(MSVer, LSVer: DWORD);
property Valid : boolean read FValid write FValid;
property Major: word
index IDX_VER_MAJOR
read GetVersionNumber;
property Minor: word
index IDX_VER_MINOR
read GetVersionNumber;
property Release: word
index IDX_VER_RELEASE
read GetVersionNumber;
property Build: word
index IDX_VER_BUILD
read GetVersionNumber;
property AsString: string
read GetVersionNumberString;
end;
{$IFDEF DFS_DELPHI_1}
TVersionFilename = string;
{$ELSE}
TVersionFilename = type string;
{$ENDIF}
TdfsVersionInfoResource = class{$IFNDEF DFS_VERSION_INFO_AS_CLASS}(TComponent){$ENDIF}
private
FVersionInfo: PChar;
FVersionInfoSize: DWORD;
FFilename: TVersionFilename;
FTranslationIDs: TStringList;
FTranslationIDIndex: integer;
FFixedInfo: TFixedFileVersionInfo;
FForceEXE: boolean;
FFileVersion: TVersionNumberInformation;
FProductVersion: TVersionNumberInformation;
{$IFNDEF DFS_VERSION_INFO_AS_CLASS}
FFileVersionLabel: TLabel;
FCopyrightLabel: TLabel;
{$IFDEF DFS_WIN32}
FVersionListView: TListView;
{$ELSE}
FVersionGrid: TStringGrid;
{$ENDIF}
FDescriptionLabel: TLabel;
FProductLabel: TLabel;
FShowResource: TPreDefs;
{$ENDIF}
protected
procedure SetFilename(const Val: TVersionFilename);
procedure SetTranslationIDIndex(Val: integer);
function GetTranslationIDs: TStrings;
procedure SetForceEXE(Val: boolean);
{$IFNDEF DFS_VERSION_INFO_AS_CLASS}
{$IFDEF DFS_WIN32}
procedure SetVersionListView (Value: TListView);
{$ELSE}
procedure SetVersionGrid(Value: TStringGrid);
{$ENDIF}
procedure SetShowResource(Value: TPreDefs);
procedure SetFileVersionLabel(Value: TLabel);
procedure SetCopyrightLabel(Value: TLabel);
procedure SetProductLabel(Value: TLabel);
procedure SetDescriptionLabel(Value: TLabel);
function GetVersion: string;
procedure SetVersion(const Val: string);
{$ENDIF}
function GetResourceFilename: string; virtual;
{$IFNDEF DFS_VERSION_INFO_AS_CLASS}
procedure PopulateControls; virtual;
{$IFDEF DFS_WIN32}
procedure BuildListView; virtual;
{$ELSE}
procedure BuildGrid; virtual;
{$ENDIF}
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure Loaded; override;
{$ENDIF}
function BuildFlags : string; virtual;
procedure ReadVersionInfoData; virtual;
function GetVersionInfoString(Index: integer): string;
function GetResourceStr(Index: string): string;
public
{$IFDEF DFS_VERSION_INFO_AS_CLASS}
constructor Create; virtual;
{$ELSE}
constructor Create(AOwner: TComponent); override;
{$ENDIF}
destructor Destroy; override;
property TranslationIDIndex: integer
read FTranslationIDIndex
write SetTranslationIDIndex;
property TranslationIDs: TStrings
read GetTranslationIDs;
property FixedInfo: TFixedFileVersionInfo
read FFixedInfo;
property UserResource[Index: string]: string
read GetResourceStr;
property FileVersion: TVersionNumberInformation
read FFileVersion;
property ProductVersion: TVersionNumberInformation
read FProductVersion;
published
{$IFNDEF DFS_VERSION_INFO_AS_CLASS}
property Version: string
read GetVersion
write SetVersion
stored FALSE;
{$ENDIF}
property Filename: TVersionFilename
read FFilename
write SetFilename;
property ForceEXE: boolean
read FForceEXE
write SetForceEXE
default FALSE;
property CompanyName: string
index IDX_COMPANYNAME
read GetVersionInfoString;
property FileDescription: string
index IDX_FILEDESCRIPTION
read GetVersionInfoString;
property InternalName: string
index IDX_INTERNALNAME
read GetVersionInfoString;
property LegalCopyright: string
index IDX_LEGALCOPYRIGHT
read GetVersionInfoString;
property LegalTrademarks: string
index IDX_LEGALTRADEMARKS
read GetVersionInfoString;
property OriginalFilename: string
index IDX_ORIGINALFILENAME
read GetVersionInfoString;
property ProductName: string
index IDX_PRODUCTNAME
read GetVersionInfoString;
property Comments: string
index IDX_COMMENTS
read GetVersionInfoString;
{$IFNDEF DFS_VERSION_INFO_AS_CLASS}
property VersionLabel: TLabel
read FFileVersionLabel
write SetFileVersionLabel;
{$IFDEF DFS_WIN32}
property VersionListView: TListView
read FVersionListView
write SetVersionListView;
{$ELSE}
property VersionGrid: TStringGrid
read FVersionGrid
write SetVersionGrid;
{$ENDIF}
property DescriptionLabel: TLabel
read FDescriptionLabel
write SetDescriptionLabel;
property CopyrightLabel: TLabel
read FCopyrightLabel
write SetCopyrightLabel;
property ProductLabel: TLabel
read FProductLabel
write SetProductLabel;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -