Консультация № 186468
25.07.2012, 15:02
133.23 руб.
0 7 1
Здравствуйте! У меня возникли сложности с таким вопросом: Получить версию файла.
Я использую такой метод (найден на просторах интернета).
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);///Получить полную информацию о файле
const
Tabulator: array[0..0] of Integer = (70);
BoolValues: array[Boolean] of string = ('No', 'Yes');
var
FvI: TFileVersionInfo;
begin
FvI := FileVersionInfo('D:\Прога\.Test.exe');
ListBox1.TabWidth := 1;
SendMessage(ListBox1.Handle, LB_SETTABSTOPS, 1, Longint(@Tabulator));
with FvI, ListBox1.Items do
begin
Add('FileType:'#9 + FileType);
Add('CompanyName:'#9 + CompanyName);
Add('CompanyName:'#9 + FileDescription);
Add('FileVersion:'#9 + FileVersion);
Add('InternalName:'#9 + InternalName);
Add('LegalCopyRight:'#9 + LegalCopyRight);
Add('LegalTradeMarks:'#9 + LegalTradeMarks);
Add('OriginalFileName:'#9 + OriginalFileName);
Add('ProductName:'#9 + ProductName);
Add('ProductVersion:'#9 + ProductVersion);
Add('SpecialBuildStr:'#9 + SpecialBuildStr);
Add('PrivateBuildStr:'#9 + PrivateBuildStr);
Add('FileFunction:'#9 + FileFunction);
Add('DebugBuild:'#9 + BoolValues[DebugBuild]);
Add('PreRelease:'#9 + BoolValues[PreRelease]);
Add('PrivateBuild:'#9 + BoolValues[PrivateBuild]);
Add('SpecialBuild:'#9 + BoolValues[SpecialBuild]);
end;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);///Информация только о версии
const
Tabulator: array[0..0] of Integer = (70);
BoolValues: array[Boolean] of string = ('No', 'Yes');
var
FvI: TFileVersionInfo;
begin
FvI := FileVersionInfo('D:\Прога\.Test.exe');
ListBox1.TabWidth := 1;
SendMessage(ListBox1.Handle, LB_SETTABSTOPS, 1, Longint(@Tabulator));
with FvI, ListBox1.Items do
begin
Add('FileVersion:'#9 + FileVersion);
end;
end;
end.

Вопрос в том, как мне при нажатии BitBtn2 получить данные не в ListBox1 а скажем в Edit1. При этом меня интересует последние цифры сборки. То есть к примеру 1.0.0.14, мне в Edit1 нужно получить данные до первой точки справа, в Edit1 вывести 14.
Заранее благодарю за помощь.

Обсуждение

Неизвестный
25.07.2012, 15:26
общий
25.07.2012, 15:29
Адресаты:
Например так:
Код:
Edit1.Text:='';
i:=Lenght(FvI.FileVersion);
while (i>=1) and (i<>'.') do begin
Edit1.Text:=FvI.FileVersion[i]+Edit1.Text;
dec(i);
end;

PS: Данный код заменяет 43-46 строки вашего кода, и вначеле процедуры перед первым begin нужно добавить объявление переменной i: integer;
Неизвестный
25.07.2012, 16:08
общий
Адресаты:
Это что за зверь? TFileVersionInfo ??? В Delphi7 его нет.
А так на Ваш вопрос будет на подобии моего прошлого - теми же функциями если хотите могу поподробнее расписать :).

Только вот TFileVersionInfo нету :(.

А так Ваш код могу переделатьПеределать?
давно
Посетитель
352040
133
25.07.2012, 16:14
общий
Доброго дня. Если Вас не затруднит переделайте. Я не полностью код привел, не стал засорять. Этот пример я откопал delphiworld Благодарю за отклик.
Об авторе:
Пользуюсь Delphi Enterprise Version7.
Неизвестный
25.07.2012, 16:22
общий
это ответ
Здравствуйте, Владимир!

Код:

procedure TForm1.BitBtn2Click(Sender: TObject);///Информация только о версии
const
Tabulator: array[0..0] of Integer = (70);
BoolValues: array[Boolean] of string = ('No', 'Yes');
var
FvI: TFileVersionInfo;
myPos : Byte;
begin
FvI := FileVersionInfo('D:\Прога\Test.exe'); //символ точки "." наверное надо удалить перед Test.exe

//узнаем где последняя точка:
myPos:=PosEx('.',ReverseString(FvI.FileVersion))-1;
//мы точно знаем что версия находится после ПОСЛЕДНЕЙ точки - при этом цифр может быть и не две...
//такое бывает...
//для этого командой ReverseString переворачиваем строку - чтобы не делать цикл поиска
//и командой PosEx ищем ПЕРВОЕ место где есть точка...
//минус 1 символ - саму точку то нам не надо выводить...


//копируем текст справа от вычисленной позиции точки:
Edt1.Text:=RightStr(FvI.FileVersion, myPos);
//всё.
end;
Неизвестный
25.07.2012, 16:26
общий
Адресаты:
Добрый день, на этот раз постарался расписать подробно - Вы если не понимаете используемые функции - так спросите про них :), просто задача слишком простая...

И да!

Не забудьте в Ваш проект в начале включить:

Код:

uses
Windows, ...., StrUtils;


StrUtils - стандартный Delphi модуль почитайте его справку там много интересных функций для работы со строками.
Неизвестный
25.07.2012, 16:30
общий
25.07.2012, 16:31
Адресаты:
И да, можно всё решить одной строкой:

Edt1.Text:=RightStr(FvI.FileVersion, PosEx('.',ReverseString(FvI.FileVersion))-1);

Т.е. то что написано для MyPos вставить сразу в функцию копирования...
Тогда не надо заводить переменную MyPos...
Только вот "читать" такой код уже будет сложноватенько...
Да и комментарий написать бррр.

УДАЧИ
давно
Посетитель
352040
133
25.07.2012, 17:06
общий
Благодарю. Все получилось как нужно. Я так сказать начинающий, потому иногда и спотыкаюсь на казалось бы простых вопросах.
Ещу раз благодарю за помощь. Думаю можно тему закрывать.
Об авторе:
Пользуюсь Delphi Enterprise Version7.
Форма ответа