Предлагаю вариант кода, позволяющий быстро и просто узнать версию своей программы.
Обычно используют общий код, для извлечения версии, пробега по полям и т.д... Но, если нужно узнать номер версии своей программы, то всё гораздо проще.
Версия программы хранится в ресурсах. 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