unit OS_AboutVersionDlg;
interface
uses
Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls;
type
TOsAboutBox = class(TForm)
Panel1: TPanel;
ProgramIcon: TImage;
ProductName: TLabel;
Version: TLabel;
Copyright: TLabel;
BitBtn1: TBitBtn;
private
{ Private declarations }
FileName : array[0..255] of Char;
protected
function GetAppVersion: String;
public
{ Public declarations }
constructor Create(Owner: TComponent); override;
end;
var
OsAboutBox: TOsAboutBox;
implementation
{$R *.DFM}
constructor TOsAboutBox.Create(Owner: TComponent);
resourcestring
cNoVersInfo = '(Keine Versioninfo)';
begin
inherited Create(Owner);
// Anwendungsname aus Application übernehmen
ProductName.Caption := Application.Title;
// Anwendungsicon aus Application übernehmen
ProgramIcon.Picture.Icon:= Application.Icon;
try
// Name der Programmdatei auslesen
GetModuleFileName(0, FileName, SizeOf(FileName));
// Versionsnummer auslesen
Version.Caption := GetAppVersion;
except
Version.Caption := cNoVersInfo;
end;
end;
function TOsAboutBox.GetAppVersion: string;
var
ptrBlock, verInfo : Pointer;
verInfoSize : Integer;
dwTmp : DWord;
begin
Result := '';
// sind Versionsinformationen enthalten ?
verInfoSize := GetFileVersionInfoSize(FileName, dwTmp);
if verInfoSize > 0 then
begin
// entsprechend großen Datenbank anfordern
ptrBlock := AllocMem(verInfoSize);
try
// Daten auslesen
GetFileVersionInfo(FileName, 0, verInfoSize, ptrBlock);
// feststehende Daten auslesen
VerQueryValue(ptrBlock, '\', verInfo, dwTmp);
with PVSFixedFileInfo(verInfo)^ do
Result := Format('Version %d.%d.%d.%d',
[HIWORD(dwProductVersionMS),
LOWORD(dwProductVersionMS),
HIWORD(dwProductVersionLS),
LOWORD(dwProductVersionLS)]);
finally
FreeMem(ptrBlock);
end;
end;
end;
end.