Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.05.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.005 c
2-1326697088
Nikitos
2012-01-16 10:58
2012.05.20
Перевод чисел из арабских в почтовый индекс


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


15-1326539168
SQLEX
2012-01-14 15:06
2012.05.20
Шахматы. Короткие партии. Аля "Клуб13"


2-1326953184
OW
2012-01-19 10:06
2012.05.20
Из потока надо передать строку в VCL сообщением


15-1326499809
KilkennyCat
2012-01-14 04:10
2012.05.20
новый вид памяти





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский