VERSLAB.PAS
上传用户:llfxmlw
上传日期:2009-09-14
资源大小:335k
文件大小:6k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {
  2. Unit        : verslab.pas
  3. Description : A TCustomLabel derivative that displays Win32 VersionInfo data
  4. Version     : 1.00, 15 June 1997
  5. Status      : Freeware
  6. Contact     : Marc Evans, marc@leviathn.demon.co.uk
  7. }
  8. unit verslab;
  9. interface
  10. uses
  11.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  12.   StdCtrls;
  13. const
  14.     {The order of this array must be the same as the VersionResources
  15.     enum type as that is used for the index lookup}
  16.     VersionLookup: array[0..8, 0..1] of string = (
  17.                     ('CompanyName', 'Company Name:'),
  18.                     ('FileDescription', 'File Description:'),
  19.                     ('FileVersion', 'File Version:'),
  20.                     ('InternalName', 'Internal Name:'),
  21.                     ('LegalCopyright', 'Legal Copyright:'),
  22.                     ('OriginalFilename', 'Original Filename:'),
  23.                     ('ProductName', 'Product Name:'),
  24.                     ('ProductVersion', 'Product Version:'),
  25.                     ('Comments', 'Comments:'));
  26. type
  27.     TVersionResources = (vrCompanyName, vrFileDescription, vrFileVersion,
  28.                          vrInternalName, vrLegalCopyright, vrOriginalFilename,
  29.                          vrProductName, vrProductVersion, vrComments);
  30. type
  31.   TVersionLabel = class(TCustomLabel)
  32.   private
  33.     { Private declarations }
  34.     FVersionResource: TVersionResources;
  35.     FInfoPrefix: string;
  36.     FShowInfoPrefix: boolean;
  37.     FVersionResourceKey: string;
  38.     FLangCharset: string;
  39.     procedure SetupInfoPrefix;
  40.     procedure SetupResourceKey;
  41.     procedure SetupCaption;
  42.   protected
  43.     { Protected declarations }
  44.     procedure SetInfoPrefix(Value: String);
  45.     function GetInfoPrefix: string;
  46.     procedure SetVersionResource(Value: TVersionResources);
  47.     procedure SetShowInfoPrefix(Value: boolean);
  48.     procedure SetVersionResourceKey(Value: string);
  49.   public
  50.     { Public declarations }
  51.     constructor Create(AOwner: TComponent); override;
  52.     destructor Destroy; override;
  53.     function GetInfo: string;
  54.   published
  55.     { Published declarations }
  56.     property VersionResource: TVersionResources read FVersionResource
  57.                                                 write SetVersionResource;
  58.     property VersionResourceKey: string read FVersionResourceKey
  59.                                          write SetVersionResourceKey;
  60.     property InfoPrefix: String read GetInfoPrefix write SetInfoPrefix;
  61.     property ShowInfoPrefix: boolean read FShowInfoPrefix write SetShowInfoPrefix;
  62.     property LangCharset: string read FLangCharset write FLangCharset;    
  63.     property WordWrap;
  64.     property Align;
  65.     property Color;
  66.     property Font;
  67.     property AutoSize;
  68.     property Alignment;
  69.     property ParentFont;
  70.     property OnMouseDown;
  71.     property OnMouseMove;
  72.     property OnMouseUp;
  73.     property OnClick;
  74.     property OnDblClick;
  75.     property OnStartDrag;
  76.     property OnEndDrag;
  77.     property OnDragOver;
  78.     property OnDragDrop;
  79.   end;
  80. procedure Register;
  81. implementation
  82. procedure Register;
  83. begin
  84.   RegisterComponents('BenTools', [TVersionLabel]);
  85. end;
  86. constructor TVersionLabel.Create(AOwner: TComponent);
  87. begin
  88.     inherited Create(AOwner);
  89.     WordWrap := false;
  90.     Autosize := true;
  91.     ShowInfoPrefix := true;
  92.     LangCharset :='040904E4';   {0409 is US prefix I think}
  93.     VersionResource := vrFileVersion;
  94. end;
  95. destructor TVersionLabel.Destroy;
  96. begin
  97.     inherited Destroy;
  98. end;
  99. procedure TVersionLabel.SetVersionResource(Value: TVersionResources);
  100. begin
  101.     FVersionResource := Value;
  102.     SetupResourceKey;
  103.     SetupInfoPrefix;
  104. end;
  105. procedure TVersionLabel.SetupInfoPrefix;
  106. var s: string;
  107. begin
  108.     s := VersionLookup[Integer(Self.VersionResource), 1];
  109.     InfoPrefix := s;
  110. end;
  111. procedure TVersionLabel.SetupResourceKey;
  112. var s: string;
  113. begin
  114.     s := VersionLookup[Integer(Self.VersionResource), 0];
  115.     VersionResourceKey := s;
  116. end;
  117. function TVersionLabel.GetInfo: string;
  118. var dump, s: integer;
  119.     vallen: integer;
  120.     buffer, VersionValue: pchar;
  121.     VersionPointer: pchar;
  122. begin
  123.     if csDesigning in Self.ComponentState then result := '< No design info >'
  124.     else
  125.     begin
  126. s := GetFileVersionInfoSize(pchar(Application.Exename), cardinal(dump));
  127.         if  s = 0 then
  128.         begin
  129.             Result := '< No Data Available >';
  130.         end
  131.         else
  132.         begin
  133.             buffer := StrAlloc(s+1);
  134.             GetFileVersionInfo(Pchar(Application.Exename), 0, s, buffer);
  135.             if VerQueryValue(buffer, pchar('\StringFileInfo\'+LangCharSet+'\'+
  136.                              VersionResourceKey),
  137.                              pointer(VersionPointer), cardinal(vallen)) then
  138.             begin
  139.                 if (Vallen > 1) then
  140.                 begin
  141.                     VersionValue := StrAlloc(vallen+1);
  142.                     StrLCopy(VersionValue, VersionPointer, vallen);
  143.                     Result := VersionValue;
  144.                     StrDispose(Buffer);
  145.                     StrDispose(VersionValue);
  146.                 end
  147.                 else Result := 'No Version Info';
  148.             end
  149.             else result := 'Error retrieving version info';
  150.         end;
  151.     end;
  152.     if ShowInfoPrefix then Result := InfoPrefix+' '+Result;
  153. end;
  154. procedure TVersionLabel.SetInfoPrefix(Value: String);
  155. begin
  156.     if FInfoPrefix = Value then exit;
  157.     FInfoPrefix := Value;
  158.     {The caption needs to be recalculated everytime the prefix is
  159.     changed, otherwise the detaults override the user specified one}
  160.     SetupCaption;
  161. end;
  162. procedure TVersionLabel.SetVersionResourceKey(Value: string);
  163. begin
  164.     if FVersionResourceKey = Value then exit;
  165.     FVersionResourceKey := Value;
  166.     InfoPrefix := Value;
  167. end;
  168. function TVersionLabel.GetInfoPrefix: string;
  169. begin
  170.     result := FInfoPrefix;
  171. end;
  172. procedure TVersionLabel.SetShowInfoPrefix(Value: boolean);
  173. begin
  174.     if FShowInfoPrefix = value then exit;
  175.     FShowInfoPrefix := Value;
  176.     SetupCaption;
  177. end;
  178. procedure TVersionLabel.SetupCaption;
  179. begin
  180.     Caption := GetInfo;
  181. end;
  182. end.