Маленький гигант большого интерфейса Фленов Михаил Xakep, номер #069, стр. 069-120-2 Приложение, которое мы создали первым, можно закрыть и больше уже не открывать. Оно нужно только для размещения файлов KOLProject и KOLForm. Все остальные действия и компиляция должны происходить в автоматически созданном проекте TestProject.dpr. Итак, открой созданный проект и откомпилируй его. Посмотри на размер полученного запускающего файла. Если пустой VCL-проект занимает намного больше 200 кило, то KOL+MCK у меня занял чуть более 23 кило. Теперь можно визуально расставлять на форме компоненты с закладки KOL и использовать привычным образом. При этом размер файла будет увеличиваться очень медленно, пока ты не подключишь какой-нибудь заголовочный файл из состава VCL и он не потянет паровозом в екзешник всякую ненужную чушь. Генерим форму Мы с редактором долго решали, какой пример использовать для иллюстрации возможностей KOL+MCK, и никак не могли выбрать. Но тут я вспомнил одну маленькую утилиту, которая вышла с появлением Windows XP и которая умела заставлять проги отображаться в стиле XP, даже если это не было в них заложено. Сейчас я покажу, как эта прога работает. На форме нам понадобятся две кнопки KOLButton и поле ввода KOLEditBox. По нажатии первой кнопки будет отображаться окно выбора файла, а его имя будет попадать в поле ввода. Для отображения окна выбора файла на форму надо поместить и компонент KOLOpenSaveDialog. Итак, для первой кнопки пишем код: Код выбора файла procedure TForm1.Button2Click(Sender: PObj); begin if OpenSaveDialog1.Execute then EditBox1.Text:=OpenSaveDialog1.Filename; end; Пользователь должен будет только выбрать запускающий файл программы, которую нужно пропатчить. По нажатии второй кнопки должен быть создан файл манифеста Windows с таким же именем, как у исполняемого файла, и добавлено расширение .manifest. Содержимое, которое должно быть в файле, можно увидеть в листинге 2, а код патчинга показан в листинге 1. Доступ к файлам Самое сложное при создании необходимого файла – технология доступа. Я всегда рекомендую использовать объект TFileStream, потому что он удобен, универсален и легко адаптируется для будущего использования, например для перевода на .NET. Но в данном случае этот вариант не подходит, потому что нужно будет подключить модуль Classes и запускной файл увеличится с 23 кило до 90, а это нерационально. В качестве решения стоило было бы выбрать Windows API функции типа CreateFile или более старых функций fopen, но это привяжет нас к старой платформе и могут возникнуть проблемы с переходом на .NET. Delphi предоставляет хорошее решение - встроенные функции, не требующие подключения модулей и не увеличивающие размер исполняемого файла. AssignFile(file, name) – связать имя файла name с переменной file. Rewrite(file) – создать заранее связанный с переменной file файл. |