Предлагаю вариант кода, позволяющий быстро и просто узнать версию своей программы.
Обычно используют общий код, для извлечения версии, пробега по полям и т.д... Но, если нужно узнать номер версии своей программы, то всё гораздо проще.
Версия программы хранится в ресурсах. VERSIONINFO своей программы можно извлечь из ресурса с именем '#1'. В данном ресурсе версия программы всегда хранится по смещению 49. Вот пример кода, который достаёт версию из себя:
function GetMyVersion:string;
type
TVerInfo=packedrecord
Nevazhno: array[0..47]ofbyte; // ненужные нам 48 байт
Minor,Major,Build,Release: word; // а тут версияend;
var
s:TResourceStream;
v:TVerInfo;
begin
result:='';
try
s:=TResourceStream.Create(HInstance,'#1',RT_VERSION); // достаём ресурсif s.Size>0thenbegin
s.Read(v,SizeOf(v)); // читаем нужные нам байты
result:=IntToStr(v.Major)+'.'+IntToStr(v.Minor)+'.'+ // вот и версия...IntToStr(v.Release)+'.'+IntToStr(v.Build);
end;
s.Free;
except; end;
end;
Нормальные у кодгира классы. Не нравится - не ешь. Пиши на ц++
А твой код работает по общему принципу.
Подобное решение есть и в спраке дельфи.
Фишка моего кода как раз в другом - получение своей версии из своего ресурса, а не обращение к своему файлу, как к постороннему.
Мой код показывает именно это.
Что-то неправильное происходит - в Хелпе - перечислены ключи типов ресурсов, а в самой Дельфи - нет.... 8о
В конструкторе TResourceStream.Create просто заполняется внутреннее поле ResType: PChar.
Нигде этот ResType не сравнивается, а просто вызывается Kernel32-функция FindResource и ей передается значение этого ключа (у нас - RT_VERSION)...
Подскажите, пожалуйста, где копать? Я буду рад даже за константу (PChar), чтобы вручную определить RT_VERSION
type
TLangChrSet = array[0..1] of word;
PLangChrset = ^TLangChrSet;
var
s, res: string;
n, Len, i: DWORD;
Buf: PChar;
Value: PChar;
LangChrSet: PLangChrSet;
begin
Res:='';
S := Application.ExeName;
n := GetFileVersionInfoSi
ze(PChar(S), n);
if n > 0 then
begin
Buf := AllocMem(n);
GetFileVersionInfo(P
Char(S), 0, n, Buf);
if VerQueryValue(Buf, PChar('VarFileInfo\Translation'), pointer(LangChrset),
Len) then
begin
s:=Format('%.4x%. 4x',[LangChrSet^[0],
LangChrSet^[1]]); // Определил кодовую страницу информации
i:=3; // FileVersion
if VerQueryValue(Buf, PChar('StringFileInf
o\' + s + '\' + InfoStr[i]), Pointer(Value), L...
ответ - лучший дизайн интерьера квартиры в Киеве и области
ничего нового автор не открыл для тех кто интересуется, а вообще...
Нет никакого совпадения - тут же написано, что вышла новая верси...
Ссылка вдогонку - Официальный сайт:http://crosskylix.untergrund....
Обновление CrossKylix - Удивительно всё совпало, но в день напис...
Ошибка - Установил Delphi 2010,При использовании кряка (Ctrl + A...
Перезалейте - Перезайлейте плиз delphi 7 на другой файлообменник...
Проще Lazarus использовать
Turbo Delphi Explorer - >Snowyспасибо за ключик! обыскался
re: Программы на Delphi - [quote=Chrome]Чтобы бесплатно распрост...