Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.05.20;
Скачать: CL | DM;

Вниз

Индикация версии программы.   Найти похожие ветки 

 
JohnKorsh   (2012-01-11 17:32) [0]

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


 
Anatoly Podgoretsky ©   (2012-01-11 17:39) [1]

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

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


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

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;


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


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

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


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

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


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

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


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


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

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


 
antonn ©   (2012-01-12 13:14) [7]


> Зачем дублировать информацию в тексте программы, наверно
> чтобы самому запутаться. Информация об версии программы уже есть в 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 13:27) [8]


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

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


 
antonn ©   (2012-01-12 13:29) [9]

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


 
Anatoly Podgoretsky ©   (2012-01-12 13:55) [10]


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

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


 
Anatoly Podgoretsky ©   (2012-01-12 13:57) [11]


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

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


 
Ega23 ©   (2012-01-12 14:01) [12]


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


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


 
Anatoly Podgoretsky ©   (2012-01-12 14:25) [13]

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

Цитата

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


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


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

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


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

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

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


 
JohnKorsh   (2012-01-15 15:07) [16]

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



Страницы: 1 вся ветка

Текущий архив: 2012.05.20;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.006 c
15-1326277214
OW
2012-01-11 14:20
2012.05.20
по Oracle и PL/SQL Developer. Как его научить автоформатировать?


15-1326227402
Юрий
2012-01-11 00:30
2012.05.20
С днем рождения ! 11 января 2012 среда


15-1326217120
Jimmy
2012-01-10 21:38
2012.05.20
Глубина и разряд в шахматах


2-1326607720
AlxAY
2012-01-15 10:08
2012.05.20
Как циклично выполнять процедуру при нажатой кнопке?


2-1326795550
illiya
2012-01-17 14:19
2012.05.20
Method identifier expected