05. september 2001 - 08:28
Der er
6 kommentarer og
2 løsninger
Dll sprogfiler
Nogen der har erfaring med at placere deres sprog i dll filer. Så man kan skifte en dll ud og få et nyt sprog (feks. DK, UK, D)i ens program. Skal man anvende en ressource fil eller anvende en kæmpe case struktur. Der kan være flere hundrede strenge der skal oversættes.
06. september 2001 - 09:38
#3
OK her er er component til at gører det
Note: Ikke alle skriver det samme sted hvergang so
du kan IKKE være 100% ikke op at det bliver the du får ps denne version er der lidt rod i
hvis du vil have en version unde rod i så skriv like igen så skal jeg nok send når get komme til den comp den er på
{Zardic}
unit Cvgrap;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TProjInfo = class(TComponent)
private
{ Private declarations }
sFileName ,
sFileVersion ,
sFileDescription ,
sLegalCopyright,
sComments ,
sCompanyName ,
sInternalName ,
sLegalTrademarks ,
sOriginalFilename ,
sProductName ,
sProductVersion ,
sLanguage : string;
slAllItems: TStrings;
procedure SetFileName (exename : string);
procedure SetFileVersion (ver : string);
procedure SetFileDescription(desc : string);
procedure SetLegalCopyright(cr : string);
procedure SetComments(cmt : string);
procedure SetCompanyName(cn : string);
procedure SetInternalName(intn : string);
procedure SetLegalTrademarks(tm : string);
procedure SetOriginalFilename(ofn : string);
procedure SetProductName(pn : string);
procedure SetProductVersion(pv : string);
procedure SetLanguage(lang : string);
procedure SetAllItems(items : Tstrings);
procedure GetVersionInfo(AVersionList: TStrings);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
procedure execute;
published
property EXEName : string read sFileName write SetFileName;
property FileVersion: String read sFileVersion write SetFileVersion;
property FileDescription: String read sFileDescription write SetFileDescription;
property LegalCopyright: String read sLegalCopyright write SetLegalCopyright;
property Comments: String read sComments write SetComments;
property CompanyName: String read sCompanyName write SetCompanyName;
property InternalName: String read sInternalName write SetInternalName;
property LegalTrademarks: String read sLegalTrademarks write SetLegalTrademarks;
property OriginalFilename: String read sOriginalFilename write SetOriginalFilename;
property ProductName: String read sProductName write SetProductName;
property ProductVersion: String read sProductVersion write SetProductVersion;
property Language: String read sLanguage write SetLanguage;
property AllItems: TStrings read slAllItems write SetAllItems;
{ Published declarations }
end;
procedure Register;
implementation
// simply change this to register to a different location
procedure Register;
begin
RegisterComponents(\'Tusborg\', [TProjInfo]);
end;
// constructor - creates the needed items
constructor TProjInfo.Create(AOwner: TComponent);
begin
sFileName := \'\';
slAllItems := TStringList.create;
inherited create(Aowner);
end;
// set the exename property
procedure TProjInfo.SetFileName(exename : string);
begin
if fileexists(exename) then
begin
sFileName := exename;
end
else
begin
sFileName := \'\';
end;
end;
{**********************************************}
{** set the various properties **}
{**********************************************}
procedure TProjInfo.SetFileVersion(ver: string);
begin
sFileVersion := ver;
end;
procedure TProjInfo.SetFileDescription(desc : string);
begin
sFileDescription := desc;
end;
procedure TProjInfo.SetLegalCopyright(cr : string);
begin
sLegalCopyright := cr;
end;
procedure TProjInfo.SetComments(cmt : string);
begin
sComments := cmt;
end;
procedure TProjInfo.SetCompanyName(cn : string);
begin
sCompanyName := cn;
end;
procedure TProjInfo.SetInternalName(intn : string);
begin
sInternalName := intn;
end;
procedure TProjInfo.SetLegalTrademarks(tm : string);
begin
sLegalTrademarks := tm;
end;
procedure TProjInfo.SetOriginalFilename(ofn : string);
begin
sOriginalFilename := ofn;
end;
procedure TProjInfo.SetProductName(pn : string);
begin
sProductName := pn;
end;
procedure TProjInfo.SetProductVersion(pv : string);
begin
sProductVersion := pv;
end;
procedure TProjInfo.SetLanguage(lang : string);
begin
sLanguage := lang;
end;
procedure TProjInfo.SetAllItems(items : Tstrings);
begin
slAllItems.assign(items);
end;
// execute method
procedure TProjInfo.execute;
var alist: TStrings;
begin
alist := TStringList.create;
getversioninfo(alist); // stores the version information into the stringlist
// only do if information obtained
if alist.count > 0 then
begin
setfileversion(alist.strings[0]);
SetFileDescription(alist.strings[1]);
setLegalCopyright(alist.strings[2]);
SetComments(alist.strings[3]);
SetProductName(alist.strings[4]);
SetCompanyName(alist.strings[5]);
SetInternalName(alist.strings[6]);
SetLegalTrademarks(alist.strings[7]);
SetOriginalFilename(alist.strings[8]);
if alist.Count > 9 Then
SetProductVersion(alist.strings[9])
else
SetProductVersion(\'\');
if alist.Count > 10 Then
SetLanguage(alist.strings[10])
else
SetLanguage(\'\');
SetAllItems(alist);
end;
alist.free;
end;
procedure TProjInfo.GetVersionInfo(AVersionList: TStrings);
const
// all version information items
CInfoStr : array[1..10] of string =
(\'FileVersion\',\'FileDescription\',\'LegalCopyright\',\'Comments\',
\'CompanyName\', \'InternalName\',\'LegalTrademarks\',
\'OriginalFilename\',\'ProductName\', \'ProductVersion\');
type
PTransBuffer = ^TTransBuffer;
TTransBuffer = array[1..4] of smallint;
var
transStr,
typeStr,
filename,
language : string;
i : integer;
ptrans : PTransBuffer;
value : PChar;
verBuf : pointer;
infoSize,
verSize,
wnd : DWORD;
begin
// clear the list
AVersionList.Clear;
// get application information
filename := sFileName;
infoSize := GetFileVersioninfoSize(PChar(filename), wnd);
// if information exists . . .
if infoSize <> 0 then
begin
GetMem(verBuf, infoSize);
try
if GetFileVersionInfo(PChar(filename), wnd, infoSize, verBuf) then
begin
VerQueryvalue(verBuf, PChar(\'\\VarFileInfo\\Translation\'),
Pointer(ptrans), verSize);
transStr := IntToHex(ptrans^[1], 4) + IntToHex(ptrans^[2], 4);
// loop through all version information
for i := Low(CInfoStr) to High(CInfoStr) do
begin
typeStr := \'StringFileInfo\\\' + transStr + \'\\\' + CInfoStr[i];
// get information and store into list
if VerQueryvalue(verBuf, PChar(typeStr),Pointer(value), verSize) then
// use this if you wish to add the title
//AVersionList.Add(CInfoStr[i] + \': \' + value);
AVersionList.Add(value);
end;
// only add language if the rest completed sucessfully
if AVersionList.Count > 0 then
begin
SetLength(language, 256);
// get language info and convert to string
VerLanguageName(ptrans^[1], PChar(language), 256);
SetLength(language, StrLen(PChar(language)));
// use this if you wish to add the title
// AVersionList.Add(\'Language: \' + language);
AVersionList.Add(language);
end;
end;
finally
// memory cleanup
FreeMem(verBuf);
end;
end;
end;
// thus endeth the component and all the code contained therein.
end.