Маленький гигант большого интерфейса Фленов Михаил Xakep, номер #069, стр. 069-120-3 Reset(file) – открыть связанный с переменной file файл. Такой файл уже должен существовать. Writeln(file, str) – записать в файл строку str. ReadLn(file, str) – если файл открыт для чтения, то этой функцией можно прочитать строку. CloseFile(file) – закрыть указанный файл. Логика Несмотря на то что файл манифеста состоит из множества строк, мы сохраняем все в один заход. Для этого подготавливается переменная s типа String, которая содержит все строки и переводы каретки, и одним вызовом функции writeln содержимое строки записывается в файл. Диск – это одно из слабых мест современного компьютера, потому что это механика, а не электроника. Старайтесь всегда оптимизировать доступ к файлам и читать или записывать данные большими блоками. Если не понравилось, как программа выглядит или работает в XP-шном стиле, то можно все вернуть на родину, удалив файл манифеста. Для этого в программе добавим кнопку, по нажатии которой произойдет удаление: DeleteFile(PChar(EditBox1.Text+'.manifest')); Итого На рисунке 4 показано окно программы The Bat! после добавления файла манифеста (патчинга сегодняшней прогой). Эта версия не умела отображаться в стиле XP и кнопки, элементы управления были квадратными до моего вмешательства. Если тебе нужна утилита маленького размера и не хочется заморачиваться с Windows API, то выбирай KOL+MCK. Это отличный способ оптимизировать размер программы без потери скорости разработки. Лично я с этой библиотекой познакомился недавно и теперь все исполняемые файлы, которые должны будут пересылаться через инет, пишу только с ее помощью. Листинг 1. Код патчинга procedure TForm1.Button1Click(Sender: PObj); var s : String; f:TextFile; begin AssignFile(f, EditBox1.Text+'.manifest'); Rewrite(f); s:='<?xml version="1.0" encoding="UTF-8" standalone="yes"?> '+#13#10+ '<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> '+#13#10+ '<assemblyIdentity'+#13#10+ 'version="1.0.0.0"'+#13#10+ 'processorArchitecture="X86"'+#13#10+ 'name="Microsoft.Windows.Program"'+#13#10+ 'type="win32"'+#13#10+ '/> '+#13#10+ '<description> Your app description here</description> '+#13#10+ '<dependency> '+#13#10+ '<dependentAssembly> '+#13#10+ '<assemblyIdentity'+#13#10+ 'type="win32"'+#13#10+ 'name="Microsoft.Windows.Common-Controls"'+#13#10+ 'version="6.0.0.0"'+#13#10+ 'processorArchitecture="X86"'+#13#10+ 'publicKeyToken="6595b64144ccf1df"'+#13#10+ 'language="*"'+#13#10+ '/> '+#13#10+ '</dependentAssembly> '+#13#10+ '</dependency> '+#13#10+ '</assembly> '; writeln(f, s); CloseFile(f); end; Листинг 2. Содержимое файла манифеста <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="Microsoft.Windows.Program" type="win32" > <description> Your app description here</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" |