Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Индикация версии программы. [D5, D7, WinXP]


JohnKorsh ©   (2012-01-11 17:32:00) 

В Delphi в Project, Options есть закладка с номером версии и возможность его автоматического увеличения при каждой компиляции. Не подскажет ли кто, нельзя ли этот номер включить в исходный текст программы, так как он только по правому клику в свойствах скомпилированной программы виден.


JohnKorsh   (2012-01-15 15:07:00) [1]

Ещё раз спасибо, то, что спрашивал, получил и в  разных вариантах. Действительно, неграмотно выразился. (У нас фирма маленькая, следовательно, разработчиков мало, поэтому, помимо Delphi ещё Quartus, PCAD, ACAD, PIC, MSP, так, что, не серчайте шибко).


Anatoly Podgoretsky   (2012-01-12 15:16:00) [2]

> Ega23  (12.01.2012 14:46:14)  [14]

Все поняли, но каждый по своему.
Автор же не оспаривает ни один их вариантов


Ega23   (2012-01-12 14:46:00) [3]


>  включить в исходный текст программы

Не придирайся, товарищ не просто так в "Начинающих" пишет. Ну выразился неточно, все и так проблему поняли.


Anatoly Podgoretsky   (2012-01-12 14:25:00) [4]

> Ega23  (12.01.2012 14:01:12)  [12]

Цитата

> включить в исходный текст программы


Ega23   (2012-01-12 14:01:00) [5]


> он хочет включить эту информацию еще зачем то и в текст
> программы.


Гм.. Мне показалось, что автор хотел вполне конкретной вещи: чтобы в About-окошке был номер версии и билда. При этом он хотел, чтобы оно автоматом бралось из VersionInfo, а не ручками текст Label в About-форме править каждый раз.
Это нормально, все через это проходили. :)


Anatoly Podgoretsky   (2012-01-12 13:57:00) [6]


> автор лишь неправильно выразился, это очевидно

Не придумывай за автор, автор выразился однозначно правильно, он хочет включить эту информацию еще зачем то и в текст программы.
Или ты просто как обычно пришел потрепаться?


Anatoly Podgoretsky   (2012-01-12 13:55:00) [7]


> затем, что пользователю проще объяснить где посмотреть версию
> программы в ней самой, чем рассказывать как лазить по св-
> вам файла (которого он может и не видел ни разу) и выискивать
> там версию

А зачем кому то что-то объяснять? Или ты не программист?
Если программист то возьми сам эту информацию и другую информацию в VersionInfo, при том в том языке, на котором у пользователя Виндоус


antonn   (2012-01-12 13:29:00) [8]

автор лишь неправильно выразился, это очевидно


Германн   (2012-01-12 13:27:00) [9]


> antonn ©   (12.01.12 13:14) [7]

Так и при чем тут "текст программы"?
:)


antonn   (2012-01-12 13:14:00) [10]


> Зачем дублировать информацию в тексте программы, наверно
> чтобы самому запутаться. Информация об версии программы уже есть в VersionInfo, где ей и положено быть.

затем, что пользователю проще объяснить где посмотреть версию программы в ней самой, чем рассказывать как лазить по св-вам файла (которого он может и не видел ни разу) и выискивать там версию.
А информация VersionInfo отображается в том числеи в св-вах файла. А не потому что ей там положено быть.

Я пользую такую функцию (вроде бы у _Rouse взял, не помню и коменты вычещены :()
function CurrentVersion: String;
var
VerInfoSize, Dummy: DWORD;
PVerBbuff, PFixed : Pointer;
FlName : PChar;
FixLength : UINT;
FVersionMS : Cardinal;
FVersionLS : Cardinal;
begin
Result := '';
FlName := PChar(paramstr(0));
VerInfoSize := GetFileVersionInfoSize(FlName, Dummy);
if VerInfoSize = 0 then Exit;
GetMem(PVerBbuff, VerInfoSize);
try
  if GetFileVersionInfo(FlName, 0, VerInfoSize, PVerBbuff) then
  begin
    if VerQueryValue(PVerBbuff, '\', PFixed, FixLength) then
    begin
      FVersionMS := PVSFixedFileInfo(PFixed)^.dwFileVersionMS;
      FVersionLS := PVSFixedFileInfo(PFixed)^.dwFileVersionLS;
      Result :=
        Format('%d.%d.%d.%d', [LongRec(FVersionMS).Hi,LongRec(FVersionMS).Lo, LongRec(FVersionLS).Hi, LongRec(FVersionLS).Lo]);
    end;
  end;
finally
  FreeMem(PVerBbuff);
end;
end;


Германн   (2012-01-12 12:41:00) [11]


> JohnKorsh   (12.01.12 09:38) [4]
>
> Германн. Хочу номер версии в окно About поместить, чтобы
> не маяться самому, что за версия. Видимо, в Quartus и многих
> других программах именно так сделано. Там не версия, а Build
> в окне About и именно в том формате, как в Delphi версии
> инндицируются.

Обрати внимание на поля dwFileVersionMS и dwFileVersionLS структуры VS_FIXEDFILEINFO, которую вернет VerQueryValue вызванная с параметром '\'.
Разбери эти поля на слова и получишь тот самый "номер версии".


Anatoly Podgoretsky   (2012-01-12 12:27:00) [12]

Зачем дублировать информацию в тексте программы, наверно чтобы самому запутаться. Информация об версии программы уже есть в VersionInfo, где ей и положено быть.


JohnKorsh   (2012-01-12 09:38:00) [13]

Спасибо, Омлет.
Германн. Хочу номер версии в окно About поместить, чтобы не маяться самому, что за версия. Видимо, в Quartus и многих других программах именно так сделано. Там не версия, а Build в окне About и именно в том формате, как в Delphi версии инндицируются.


Германн   (2012-01-12 01:22:00) [14]


> нельзя ли этот номер включить в исходный текст программы

А зачем этот номер нужен именно в "исходном тексте программы"?


Омлет   (2012-01-11 22:03:00) [15]

function GetExeVersion: string;
var
 VersionInfo, Info, Translation: Pointer;
 InfoResSize: DWORD;
 Zero: DWORD;
 FileName, InfoPath: string;
 VersionInfoSize: UINT;
begin
 Result :=  '';
 FileName := Application.ExeName;
 if GetFileAttributes(PChar(FileName)) = $FFFFFFFF then Exit;
 InfoResSize := GetFileVersionInfoSize(PChar(Filename), Zero);
 if InfoResSize = 0 then Exit;
 VersionInfo := nil;
 try
   GetMem(VersionInfo, InfoResSize);
   if not GetFileVersionInfo(PChar(FileName), 0, InfoResSize, VersionInfo) then
     Exit;
   if VerQueryValue(VersionInfo, '\VarFileInfo\Translation', Translation, VersionInfoSize) then
   begin
     InfoPath :='\StringFileInfo\'+
        IntToHex(LoWord(LongInt(Translation^)),4) + IntToHex(HiWord(LongInt(Translation^)),4) +  '\';
   end
   else
     InfoPath :='\StringFileInfo\040904E4\';
   if VerQueryValue(VersionInfo, PChar(InfoPath + 'FileVersion'), Info, VersionInfoSize) then
     Result := string(PChar(Info));
   //if VerQueryValue(VersionInfo, '\', Info, VersionInfoSize) then
   //  if BOOL(TVSFixedFileInfo(Info^).dwFileFlags and VS_FF_PRERELEASE) then
   //    Result := Result + ' Beta';
 finally
   FreeMem(VersionInfo, InfoResSize);
 end;
end;


Anatoly Podgoretsky   (2012-01-11 17:39:00) [16]

> JohnKorsh  (11.01.2012 17:32:00)  [0]

Это называется VersionInfo


Наверх

Титульная страница Поиск, карта сайта Написать письмо