Форум: "Начинающим";
Текущий архив: 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.004 c