Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Нестандартные приемы программирования Delphi - Ревич Ю.

Ревич Ю. Нестандартные приемы программирования Delphi — Спб.: БХВ-Петербург, 2005. — 560 c.
ISBN 5-94157-686-2
Скачать (прямая ссылка): nestandartniepriemiprogrammirovanie2005.djvu
Предыдущая << 1 .. 107 108 109 110 111 112 < 113 > 114 115 116 117 118 119 .. 218 >> Следующая

сборки (Build), которые мы не заполняем, см. закладку Version Info в
Project | Options), и справедливо предполагается, что они могут быть
разными для различных языков. Отсюда и вся "навороченность" - несомненно
те, кто все это придумал, были типичными представителями высшей касты
"настоящих программистов".
Так что комментировать эту совершенно неоправданно усложненную процедуру
я не буду - если кому-то надо разобраться подробнее, милости просим в
Интернет. Дополним начало процедуры TForml. FormCreate следующим текстом:
procedure TForml.FormCreate(Sender: TObject); var x:integer;
versize: integer; verh:dword;
verbuffer,versionNum,P: PChar;
FLangCharSet,stver:string; begin
( =-определение номера версии и загрузка в заголовок-^ I
versize:-GetFileVersionInfoSize(PChar(Application.ExeName),verh);
verbuffer := StrAlloc(versize+1);
try
GetE'ileVersionlnfo (PChar (Application. ExeName),
0, versize, verbuffer);
VerQueryValue(verbuffer,1\VarFileInfo\Translation',
pointer(P),verh);
x: =0 ;
StrLCopy(0x, P, 2);
FLangCharSet:=IntToHex(x, 4);
StrLCopy(@x,P+2,2);
FLangCharSet:=FLangCharSet+IntToHex(x, 4);
(строка '041904E3'=10491251 - язык + кодовая страница)
VerQueryValue(verbuffer, pchar('\StringFileInfo\'+FLangCharSet+
'\*+'FileVersion'), pointer(versionNum), verh);
(получили полный номер версии)
stver:=copy(versionNum,1,4); (получаем сокращенный номер версии/
Formi.Caption:='SlideShow '+stver; (выводим в заголовок) finally
StrDispose(verbuffer); end;
Возобновляемые ресурсы
269
{====)
end;
Номер версии в приложении без формы
Самостоятельно задать в ресурсном файле номер версии и другую информацию
несколько проще, чем се оттуда извлечь. Вот шаблон заготовки ресурсного
файла для нашего перекодировщика текстов Layout из главы Н\
1 VERSIONINFO FILEVERSION 1,0, О, О PRODUCTVERSION 1,0,0,0 FILEFLAGSMASK
VS_FFI_FILEFLAGSMASK
FILEOS VOS WINDOWS32
FILETYPE VFT_APP
!
BLOCK "StcingFilelnfo"
I
BLOCK "041904E3"
(
VALUE "CompanyName", ""
VALUE "FileDescription", "Layout switcher Mainfile\000"
VALUE "FileVersion", "1.0. 0.0"
VALUE "InternalName", ""
VALUE "LegalCopyright", "SRevich Y.V.\000"
VALUE "Legal Trademarks", ""
VALUE "OriginalFilename", "Layout.exe\000"
VALUE "ProductName", "Layout\000"
VALUE "ProductVersion", "1.0.0.0"
VALUE "Comments", "No Comments"
}
)
BLOCK "VarFilelnfo"
{
VALUE "Translation", 1049, 1251
)
I
Строки требуется заканчивать символами нуля, иначе они будут отображаться
неадекватно - я же говорил, что придумали все это "настоящие програм-
270
Глава 11
мисты". Скомпилировав полученный ресурс под названием info.res, мы можем
внести строку {sr info.res) в текст программы Layout из папки (Glava8\4)
и заново скомпилировать ее (папка Glaval 1\3).
Произвольные ресурсы
Если вы поковыряетесь в файлах, созданных с помощью Delphi, с помощью
одной из упомянутых ранее программ для доступа к ресурсам, то увидите,
что все интерфейсные элементы задаются именно через ресурсы. С помощью
определяемого пользователем ресурса типа rt_rcdata можно загрузить в
ресурсы приложения практически любой объект. Вот какова может быть
последовательность действий при размещении в ресурсах, например, нашей
таблицы перекодировок из проекта Layout главы 5. Сначала мы создаем
вспомогательную программу из одного модуля для записи таблицы в файл:
program Makefile;
const CharEngRus: array [32..126] of byte =
($20, $21, $DD, $B9, $3B, $25, $3F, $FD, $28, $29, $2A, {*>
$2B,$E1,$2D,$FE,$2E,$30,$31,$32,$33,$34,$35, {5}
$36,$37,$38,$39,$C6,$E6,$Cl,$3D,$DE,$2c,$22, (в)
$D4,$C8,$D1,$C2,$D3,$C0,$CF,$D0,$D8,$CE,$CB, {K}
1, $DC, $D2, $D9, $C7, $C9, $CA, $DB, $C5, $C3, $CC, (V)
, $D7, $CD,$DF,$F5,$5C,$FA,$3A,$5F,$B8,$F4,{aI , $F1, $E2, $F3, $E0, $EF,
$F0, $F8, $EE, $EB, $E4, 11)
$FC,$F2,$F9,$E7,$E9,$EA,$FB,$E5,$E3,$EC,$F6,(w)
$F7,$ED,$FF,$D5,$2F,$DA,$A8 ); var
fCode: file of array [32..126] of byte; begin
assign(fCode, 'CharEngRus.dat'); rewrite(fCode); write(fCode, Cha
rEngRus); close(fCode); end.
Обратите внимание на то, что для файла мы используем паскалевские
процедуры assign и close - т. к. здесь нет никаких форм и других
объектов, то нет и боязни, что мы случайно вызовем соответствующий метод
какого-нибудь объекта. Однако "во избежание" делать этого в Delphi-
программах не рекомендуется - так, и в программе-шпионе из главы б, и в
переключателе
Возобновляемые ресурсы
271
клавиатуры из главы 7 мы применяли привычные assignfile и closefile, хотя
там это тоже было безразлично.
Получив таким образом дисковый файл с таблицей, мы загружаем его в
ресурсы. В нашем приложении создаем файл CharEngRus.rc со строкой
CharEngRus RCDATA "CharEngRus.dat"
Затем компилируем его с помощью rescomp.bat, подключаем полученный RES-
файл к проекту и загружаем ресурс в секции initialization:
type
TCharEngRus=array [32..126] of byte; var
PCha rEngRus; ATCha rEngRus;
CharEngRus: TCha rEngRus; inplementation ($R CharEngRus.res)
initialization
Предыдущая << 1 .. 107 108 109 110 111 112 < 113 > 114 115 116 117 118 119 .. 218 >> Следующая