Управление Program Manager в Win95 с помощью DDE |
Previous Top Next |
Для управления программными группами в Program Manager с помощью DDE мною был использован следующий модуль. За основу был взят код Steve Texeira (sp) из руководства Dephi Developers Guide.
Работает под Win 3.1 и '95.
Code: |
unit Pm;
interface
uses SysUtils, Classes, DdeMan;
type EProgManError = class(Exception);
TProgMan = class(TComponent) private FDdeClientConv: TDdeClientConv; procedure InitDDEConversation; function ExecMacroString(Macro: string): Boolean; public constructor 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;
implementation
uses 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); begin
inherited Create(AOwner); InitDDEConversation; end;
destructor TProgMan.Destroy; begin
if 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); if not FDdeClientConv.SetLink('PROGMAN', 'PROGMAN') then raise EProgManError.Create('Не могу установить DDE Link'); end;
procedure TProgMan.CreateGroup(GroupName: string; ShowGroup: Boolean); begin
{ Удаляем группу, если она существует } ExecMacroString(Format(SDDEDeleteGroup, [GroupName]));
if not ExecMacroString(Format(SDDECreateGroup, [GroupName])) then raise EProgManError.Create('Не могу создать группу ' + GroupName); if ShowGroup then if not ExecMacroString(Format(SDDEShowGroup, [GroupName])) then raise EProgManError.Create('Не могу показать группу ' + GroupName); end;
procedure TProgMan.DeleteGroup(GroupName: string); begin
if not ExecMacroString(Format(SDDEDeleteGroup, [GroupName])) then raise EProgManError.Create('Не могу удалить группу ' + GroupName); end;
procedure TProgMan.DeleteItem(ItemName: string); begin
if not ExecMacroString(Format(SDDEDeleteGroup, [ItemName])) then raise 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]); if not FDdeClientConv.ExecuteMacro(P, False) then raise EProgManError.Create('Не могу добавить элемент ' + ItemName); finally FreeMem(P, PSize); end; end;
end.
|
©Drkb::04507
DelphiWorld 6.0