Registriert seit: 26. Dez 2002
Ort: Berlin
140 Beiträge
Delphi 5 Standard
|
Datei von Programmversion abhängig machen
10. Nov 2009, 21:44
Ich habe eine Dat-Datei welche ich von der Versionsnummer meines Programmes abhängig machen möchte.
Also wenn ich mein Programm starte und auf die Dat-Datei zugreife, soll das Programm prüfen, ob die
Dat-Datei mit dieser Programmversion auch erstellt wurde.
So die Idee
Ihr Habt mir hier im Forum schon mal mit der Versionsauslesung geholfen
dazu habe ich in meinem Programm den Code eingearbeitet der auch klasse ist.
Delphi-Quellcode:
procedure TAboutBox.GetVersionInfo(const AFilename:String);
const
cCaptions : array[0..5] of String =
('Firmenname','Interner Name','Original-Dateiname','Produktname',
'Produktversion','Sprache');
cIdents : array[0..4] of String =
('CompanyName','InternalName','OriginalFilename','ProductName','ProductVersion');
type
PLanguageCharSet = ^TLanguageCharSet;
TLanguageCharSet = packed record L,C : Word end;
var
V1, V2, V3, V4 : Word;
VerInfoSize : Integer;
VerValueSize : DWord;
VerInfo : Pointer;
VerValue : PVSFixedFileInfo;
BufLen : DWord;
LanguageCharSet : PLanguageCharSet;
s : String;
i : Integer;
function GetStringValue(const AIdent:String):String;
var
BufLen : DWord;
p : Pointer;
begin
if VerQueryValue(VerInfo,
PChar(Format('\StringFileInfo\%.4x%.4x\%s',
[LanguageCharSet^.L,LanguageCharSet^.C,AIdent])),
p,BufLen) and (BufLen>0) then begin
SetString(Result,PChar(p),BufLen-1);
end
else begin
Result:='';
end;
end;
begin
VerInfoSize:=GetFileVersionInfoSize(PChar(AFilename),BufLen);
if VerInfoSize>0 then begin
GetMem(VerInfo,VerInfoSize);
try
if GetFileVersionInfo(PChar(AFilename),0,VerInfoSize,VerInfo) then begin
if VerQueryValue(VerInfo,'\',Pointer(VerValue),VerValueSize) then
with VerValue^ do begin
V1:=dwFileVersionMS shr 16;
V2:=dwFileVersionMS and $FFFF;
V3:=dwFileVersionLS shr 16;
V4:=dwFileVersionLS and $FFFF;
LblDateiVersionN.Caption:=Format('%d.%d.%d.%d',[V1,V2,V3,V4]);
end;
if VerQueryValue(VerInfo,
'\VarFileInfo\Translation',
Pointer(LanguageCharSet),BufLen) then begin
LblDateiVersion.Caption:=GetStringValue('FileVersion');
LblBeschreibung.Caption:=GetStringValue('FileDescription');
LblCopyright.Caption:=GetStringValue('LegalCopyright');
with StringGrid1 do begin
ColWidths[0]:=100;
ColWidths[1]:=300;
for i:=0 to 4 do begin
Cells[0,i]:=cCaptions[i];
Cells[1,i]:=GetStringValue(cIdents[i]);
end;
SetLength(s,100);
BufLen:=VerLanguageName(LanguageCharSet.L,PChar(s),100);
if BufLen>0 then begin
SetLength(s,StrLen(PChar(s)));
Cells[0,5]:=cCaptions[5];
Cells[1,5]:=s;
end;
end;
end;
end;
finally
FreeMem(VerInfo,VerInfoSize);
end;
end;
end;
procedure TAboutBox.FormCreate(Sender: TObject);
begin
GetVersionInfo(Application.Exename);
end;
Jetzt suche ich den Zündigen Gedanken zu meiner Idee, könnt Ihr mir da helfen?
|