avianrand Ответов: 1

Как сделать проект по теме > дополнительно > Информация о версии &ГТ; клавиши программно


Я работаю на Delphi RAD Studio 10.2

Как вы получаете информацию из настроек в разделе Project > Options > Version Info? Я говорю о ключах. Такие вещи, как "LegalCopyright", "FileDescription" и "комментарии" от этого? Они хранятся в файле dbproj, но мне нужно знать, как получить эти ключевые значения в коде, чтобы я мог отображать их в некоторых местах моего приложения.

Я знаю, как получить название из проекта "параметры", "приложение", "внешний вид", "название". Это очень просто. Это просто приложение.Заглавие. Но ключи наверху ускользают от меня. Я мог бы написать некоторый код, чтобы получить значения из XML в файле dproj, но не похоже, что нам нужно это делать.

Надеюсь, кто-нибудь сможет помочь. Спасибо,

Кит

Кстати, это, как правило, чтобы быть хорошим местом, чтобы задавать вопросы в Delphi? Форумы Embarcadero не очень хороши из того, что я вижу. Я обновил проект Borland Delphi 7 до RAD Studio 10.2. еще в начале 2000-х годов группы usenet были великолепны для такого рода вещей, но они пошли по пути dodo, как мы все знаем. Мне действительно нужно надежное место, чтобы получить ответы на вопросы Дельфи. :-)

Что я уже пробовал:

Очень мало. Я не могу найти в интернете ничего, что помогло бы мне разобраться в этом. Я потратил больше часа на поиски.

1 Ответов

Рейтинг:
0

User 10574164

procedure TForm1.FormCreate(Sender: TObject);

   function ReadVerInfo(const fn: string;
                        var Desc: string;
                        const lv: integer = 0;
                        const ky: string = ''): string;
   var
     VerHandle,
     VerSize        : DWORD;
     pItem,
     pVerInfo       : Pointer;
     FixedFileInfo  : PVSFixedFileInfo;
     il             : UINT;
     version, key   : string;
     sRes,
     LangS, CharS	: string;
     pFName         : array [0..MAX_PATH-1] of Char;
   begin
     version:=''; Desc:=''; sRes:='';
     if fn<>'' then begin
       StrPCopy(pFName,fn);
       VerHandle:=0;
       VerSize:=GetFileVersionInfoSize(pFName,VerHandle);
       if VerSize=0 then Exit;
       GetMem(pVerInfo,VerSize);
       try
         if GetFileVersionInfo(pFName,VerHandle,VerSize,pVerInfo)
         then
         begin
           LangS:='0409'; CharS:='04E4';
           il:=0; pItem:=nil; FixedFileInfo:=nil;
           if VerQueryValue(pVerInfo,
                            '\VarFileInfo\Translation',pItem,il)
           then
           begin
             LangS:=IntToHex(  Integer(pItem^) and $0000FFFF     ,4);
             CharS:=IntToHex(((Integer(pItem^) and $FFFF0000) shr 16)
                                                        and $FFFF,4);
           end;
           if VerQueryValue(pVerInfo,'\',Pointer(FixedFileInfo),il)
           then
           with FixedFileInfo^
           do version:=
               IntToStr(HiWord(dwFileVersionMS))+'.'
              +IntToStr(LoWord(dwFileVersionMS))+'.'
              +IntToStr(HiWord(dwFileVersionLS))+'.'
              +IntToStr(LoWord(dwFileVersionLS));
           key:=ky;
           if key='' then key:='FileDescription';
           if VerQueryValue(pVerInfo,
              PChar('\StringFileInfo\'+LangS+CharS+'\'+Key),pItem,il)
           then
              Desc:=PChar(pItem);
           if VerQueryValue(pVerInfo,
              PChar('\StringFileInfo\'+LangS+CharS+'\FileVersion'),pItem,il)
           then
              version:=PChar(pItem);
         end;
       finally
         FreeMem(pVerInfo,VerSize);
         sRes:=version;
         if lv<>0 then
         begin
            sRes:='';
            if version[length(version)]<>'.' then version:=version+'.';
            for il:=1 to lv do
            begin
               if sRes<>'' then sRes:=sRes+'.';
               sRes:=sRes+copy(version,1,pos('.',version)-1);
               version:=copy(version,pos('.',version)+1,Length(version));
            end;
         end;
       end;
     end;
     ReadVerInfo:=sRes;
   end;
var
  sName, sVers: string;
begin
  sName:='';
  sVers:=ReadVerInfo(Application.ExeName, sName);
  Self.Caption:=sName+' (v'+sVers+')';
end