Подобная проблема возникает при создании инсталляторов и деинсталляторов.
Наиболее простой и гибкий путь - использование DDE. При этом посылаются запросы
к PROGMAN. Для этого необходимо поместить на форму компонент для посылки DDE
запросов - объект типа TDdeClientConv. Для определенности назовем его DDEClient.
Затем добавим метод для запросов к PROGMAN:
function TForm2.ProgmanCommand(Command: string): boolean;
var
macrocmd: array[0..88] of char;
begin
DDEClient.SetLink('PROGMAN', 'PROGMAN');
DDEClient.OpenLink; { Устанавливаем связь по DDE }
strPCopy(macrocmd, '[' + Command + ']'); {Подготавливаем ASCIIZ строку }
ProgmanCommand := DDEClient.ExecuteMacro(MacroCmd, false);
DDEClient.CloseLink; { Закрываем связь по DDE }
end;
При вызове ProgmanCommand возвращает true, если посылка макроса была успешна.
Система команд (основных) приведена ниже:
Create(Имя группы, путь к GRP файлу)
Создать группу с именем "Имя группы",
причем в нем могут быть пробелы и знаки препинания. Путь к GRP файлу можно не
указывать, тогда он создастся в каталоге Windows.
Delete(Имя группы)
Удалить группу с именем "Имя группы"
ShowGroup(Имя группы, состояние)
Показать группу в окне, причем состояние
- число, определяющее параметры окна:
1-нормальное состояние + активация
2-миним.+ активация
3-макс. +
активация
4-нормальное состояние
5-Активация
AddItem(командная строка, имя раздела, путь к иконке, индекс иконки (с 0),
Xpos,Ypos, рабочий каталог, HotKey, Mimimize)
Добавить раздел к активной
группе. В командной строке, имени размера и путях допустимы пробелы, Xpos и Ypos
- координаты иконки в окне, лучше их не задавать, тогда PROGMAN использует
значения по умолчанию для свободного места. HotKey - виртуальный код горячей
клавиши. Mimimize - тип запуска, 0-в обычном окне, <>0 - в
минимизированном.
DeleteItem(имя раздела)
Удалить раздел с указанным именем в активной
группе
Пример использования:
ProgmanCommand('CreateGroup(Комплекс программ для каталогизации литературы,)');
ProgmanCommand('AddItem('+path+'vbase.hlp,Справка по VBase,'+
path +' vbase.hlp, 0, , , '+ path + ',,)');
где path - строка типа String, содержащая полный путь к каталогу
('C:\Catalog\');