Для управления программными группами в Program Manager с помощью DDE мною был
использован следующий модуль. За основу был взят код Steve Texeira (sp) из
руководства Dephi Developers Guide.
Работает под Win 3.1 и '95.
unit Pm;
interfaceuses
SysUtils, Classes, DdeMan;
type
EProgManError = class(Exception);
TProgMan = class(TComponent)
private
FDdeClientConv: TDdeClientConv;
procedure InitDDEConversation;
function ExecMacroString(Macro: string): Boolean;
publicconstructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure CreateGroup(GroupName: string; ShowGroup: Boolean);
procedure DeleteGroup(GroupName: string);
procedure DeleteItem(ItemName: string);
procedure AddItem(CmdLine, ItemName: string);
end;
implementationuses Utils;
const{ DDE-макростроки для Program Manager }
SDDECreateGroup = '[CreateGroup(%s)]';
SDDEShowGroup = '[ShowGroup(%s, 1)]';
SDDEDeleteGroup = '[DeleteGroup(%s)]';
SDDEDeleteItem = '[DeleteItem(%s)]';
SDDEAddItem = '[AddItem(%s, "%s", %s)]';
constructor TProgMan.Create(AOwner: TComponent);
begininherited Create(AOwner);
InitDDEConversation;
end;
destructor TProgMan.Destroy;
beginif Assigned(FDDEClientConv) then
FDdeClientConv.CloseLink;
inherited Destroy;
end;
function TProgMan.ExecMacroString(Macro: string): Boolean;
begin
StringAsPchar(Macro);
Result := FDdeClientConv.ExecuteMacro(@Macro[1], False);
end;
procedure TProgMan.InitDDEConversation;
begin
FDdeClientConv := TDdeClientConv.Create(Self);
ifnot FDdeClientConv.SetLink('PROGMAN', 'PROGMAN') thenraise EProgManError.Create('Не могу установить DDE Link');
end;
procedure TProgMan.CreateGroup(GroupName: string; ShowGroup: Boolean);
begin{ Удаляем группу, если она существует }
ExecMacroString(Format(SDDEDeleteGroup, [GroupName]));
ifnot ExecMacroString(Format(SDDECreateGroup, [GroupName])) thenraise EProgManError.Create('Не могу создать группу ' + GroupName);
if ShowGroup thenifnot ExecMacroString(Format(SDDEShowGroup, [GroupName])) thenraise EProgManError.Create('Не могу показать группу ' + GroupName);
end;
procedure TProgMan.DeleteGroup(GroupName: string);
beginifnot ExecMacroString(Format(SDDEDeleteGroup, [GroupName])) thenraise EProgManError.Create('Не могу удалить группу ' + GroupName);
end;
procedure TProgMan.DeleteItem(ItemName: string);
beginifnot ExecMacroString(Format(SDDEDeleteGroup, [ItemName])) thenraise EProgManError.Create('Не могу удалить элемент ' + ItemName);
end;
procedure TProgMan.AddItem(CmdLine, ItemName: string);
var
P: PChar;
PSize: Word;
begin
PSize := StrLen(SDDEAddItem) + (Length(CmdLine) * 2) + Length(ItemName) + 1;
GetMem(P, PSize);
try
StrFmt(P, SDDEAddItem, [CmdLine, ItemName, CmdLine]);
ifnot FDdeClientConv.ExecuteMacro(P, False) thenraise EProgManError.Create('Не могу добавить элемент ' + ItemName);
finally
FreeMem(P, PSize);
end;
end;
end.
Это модуль Delphi, который реализует клиент для менеджера программ (PM) с использованием динамической передачи данных (DDE) для управления группами и элементами программ в Windows 3.1 и 95. Код основан на примере из книги "Delphi Developer's Guide" Стива Тексейры.
Единица определяет компонент TProgMan, который предоставляет методы для создания, удаления и изменения групп и элементов программ с помощью конверсаций DDE с менеджером программ.
Вот разбивка кода:
Секция интерфейса объявляет класс исключения EProgManError и компонент TProgMan.
Секция реализации начинается с определения констант для макросов DDE, используемых для взаимодействия с менеджером программ.
Конструктор Create инициализирует конверсацию DDE и настраивает связь с менеджером программ.
Деструктор Destroy закрывает связь DDE при уничтожении объекта.
Функция ExecMacroString выполняет макросную строку DDE, которая может использоваться для создания, удаления или изменения групп и элементов программ.
Процедура InitDDEConversation настраивает конверсацию DDE с менеджером программ.
Процедуры CreateGroup, DeleteGroup, DeleteItem и AddItem используют макросы DDE для взаимодействия с менеджером программ.
Код довольно прост, но есть несколько вещей, которые могут быть worth noting:
Функция ExecMacroString использует функцию StringAsPchar для преобразования входной строки в PChar, который необходим для метода ExecuteMacro.
Процедура CreateGroup удаляет любую существующую группу с тем же именем перед созданием новой. Это обеспечивает, что группа не дублируется.
Процедура AddItem использует временный блок памяти для сооружения макросной строки DDE и затем выполняет ее с помощью метода FDdeClientConv.ExecuteMacro.
В целом, этот код предоставляет полезный пример использования DDE для взаимодействия с менеджером программ в Delphi.
В статье описывается модуль на Delphi для управления программными группами в Program Manager с помощью DDE (Dynamic Data Exchange) под Windows 3.1 и 95.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.