![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Индикация версии программы. [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