home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 February / DPPCPRO0299.ISO / February / Delphi / Install / DATA.Z / DDEREG.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-06-11  |  6.2 KB  |  251 lines

  1. unit DDEReg;
  2.  
  3. interface
  4.  
  5. uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Buttons, TypInfo,
  6.   DsgnIntf, DdeMan, Messages, StdCtrls, LibMain, ExtCtrls;
  7.  
  8. {  TComponentEditors }
  9.  
  10. type
  11.   TSrvrConvEdit = class(TDefaultEditor)
  12.   protected
  13.     procedure EditProperty(PropertyEditor: TPropertyEditor;
  14.       var Continue, FreeEditor: Boolean); override;
  15.   end;
  16.  
  17.   TCliConvEdit = class(TDefaultEditor)
  18.   protected
  19.     procedure EditProperty(PropertyEditor: TPropertyEditor;
  20.       var Continue, FreeEditor: Boolean); override;
  21.   end;
  22.  
  23.   TSrvrItemEdit = class(TDefaultEditor)
  24.   public
  25.     procedure Copy; override;
  26.   end;
  27.  
  28.  
  29. {  TForms }
  30. type
  31.   TDdeLinkDlg = class(TForm)
  32.     TopicEdit: TEdit;
  33.     AppEdit: TEdit;
  34.     Label1: TLabel;
  35.     Label2: TLabel;
  36.     OK: TButton;
  37.     CancelBtn: TButton;
  38.     PasteBtn: TButton;
  39.     HelpBtn: TButton;
  40.     procedure doPasteLink(Sender: TObject);
  41.     procedure DoPasteCheck(Sender: TObject);
  42.     procedure FormCreate(Sender: TObject);
  43.     procedure HelpBtnClick(Sender: TObject);
  44.   private
  45.     procedure WMActivate(var Message: TWMActivate); message WM_ACTIVATE;
  46.   end;
  47.  
  48.  
  49.   TDdeLinkInfoProperty = class(TPropertyEditor)
  50.   public
  51.     function GetAttributes: TPropertyAttributes; override;
  52.     procedure Edit; override;
  53.     function  GetValue: string; override;
  54.   end;
  55.  
  56.   TDdeClientItemProperty = class(TStringProperty)
  57.   public
  58.     function GetAttributes: TPropertyAttributes; override;
  59.     procedure GetValues(Proc: TGetStrProc); override;
  60.   end;
  61.  
  62.   { Dde Helper Delegate }
  63.   TLibDde = class (TLibDdeHelper)
  64.   public
  65.     procedure SetProjectName (Name : String);  override;
  66.   end;
  67.  
  68. procedure Register;
  69. {}
  70.  
  71. implementation
  72.  
  73. uses Dialogs, LibConst, Consts, LibHelp;
  74.  
  75. {$R *.DFM}
  76. {---------------------------------------}
  77.  
  78. procedure TSrvrConvEdit.EditProperty(PropertyEditor: TPropertyEditor;
  79.   var Continue, FreeEditor: Boolean);
  80. var
  81.   PropName: string;
  82. begin
  83.   PropName := PropertyEditor.GetName;
  84.   if (CompareText(PropName, 'ONEXECUTEMACRO') = 0) then
  85.   begin
  86.     PropertyEditor.Edit;
  87.     Continue := False;
  88.   end
  89.   else
  90.     inherited EditProperty(PropertyEditor, Continue, FreeEditor);
  91. end;
  92.  
  93.  
  94. procedure TCliConvEdit.EditProperty(PropertyEditor: TPropertyEditor;
  95.   var Continue, FreeEditor: Boolean);
  96. var
  97.   PropName: string;
  98. begin
  99.   PropName := PropertyEditor.GetName;
  100.   if (CompareText(PropName, 'ONOPEN') = 0) then
  101.   begin
  102.     PropertyEditor.Edit;
  103.     Continue := False;
  104.   end
  105.   else
  106.     inherited EditProperty(PropertyEditor, Continue, FreeEditor);
  107. end;
  108.  
  109. procedure TSrvrItemEdit.Copy;
  110. begin
  111.   TDdeServerItem(Component).CopyToClipboard;
  112. end;
  113.  
  114.  
  115. {---------------------------------------}
  116. { TDdeLinkInfoProperty }
  117.  
  118. function TDdeLinkInfoProperty.GetAttributes: TPropertyAttributes;
  119. begin
  120.   Result := inherited GetAttributes + [paDialog, paReadOnly]
  121.                       - [paMultiSelect, paSubProperties];
  122. end;
  123.  
  124. function TDdeLinkInfoProperty.GetValue: string;
  125. begin
  126.   if GetStrValue = '' then Result := LoadStr(SDdeEmptyConnection)
  127.   else Result := Format ('(%s)', [GetStrValue]);
  128. end;
  129.  
  130. procedure TDdeLinkInfoProperty.Edit;
  131. var
  132.   DdeCli      : TDdeClientConv;
  133.   LinkDlg     : TDdeLinkDlg;
  134. begin
  135.   DdeCli := TDdeClientConv (GetComponent(0));
  136.   LinkDlg := TDdeLinkDlg.Create(Application);
  137.   try
  138.     LinkDlg.AppEdit.Text    :=   DdeCli.DdeService;
  139.     LinkDlg.TopicEdit.Text  :=   DdeCli.DdeTopic;
  140.  
  141.     if LinkDlg.ShowModal = idOk then
  142.     begin
  143.       if Not DdeCli.SetLink(LinkDlg.AppEdit.Text,
  144.                             LinkDlg.TopicEdit.Text) then
  145.         MessageDlg(LoadStr(SDdeNoConnect), mtError, [mbOK], 0);
  146.       Modified;
  147.     end;
  148.   finally
  149.     LinkDlg.Free;
  150.   end;
  151. end;
  152.  
  153. {---------------------------------------}
  154.  
  155. procedure TDdeLinkDlg.doPasteLink(Sender: TObject);
  156. var
  157.   Service, Topic, Item : String;
  158. begin
  159.   if  GetPasteLinkInfo (Service, Topic, Item) = True  then
  160.   begin
  161.     AppEdit.Text   := Service;
  162.     TopicEdit.Text := Topic;
  163.   end
  164.   else
  165.   begin
  166.     AppEdit.Text   := EmptyStr;
  167.     TopicEdit.Text := EmptyStr;
  168.   end;
  169. end;
  170.  
  171. procedure TDdeLinkDlg.DoPasteCheck(Sender: TObject);
  172. var
  173.   enable : Boolean;
  174.   Service, Topic, Item : String;
  175. begin
  176.   enable := False;
  177.   if  GetPasteLinkInfo (Service, Topic, Item) = True  then
  178.     enable := True;
  179.   if enable <> PasteBtn.Enabled then
  180.     PasteBtn.Enabled := enable;
  181. end;
  182.  
  183. procedure TDdeLinkDlg.WMActivate(var Message: TWMActivate);
  184. begin
  185.   inherited;
  186.   if Message.Active <> WA_INACTIVE then DoPasteCheck(Self);
  187. end;
  188.  
  189. procedure TDdeLinkDlg.FormCreate(Sender: TObject);
  190. begin
  191.   HelpContext := hcDDDEInfo;
  192. end;
  193.  
  194. procedure TDdeLinkDlg.HelpBtnClick(Sender: TObject);
  195. begin
  196.   Application.HelpContext(HelpContext);
  197. end;
  198.  
  199. {-------}
  200. { TDdeClientItemProperty }
  201.  
  202. function TDdeClientItemProperty.GetAttributes: TPropertyAttributes;
  203. begin
  204.   Result := inherited GetAttributes + [paValueList] - [paMultiSelect,
  205.     paSubProperties];
  206. end;
  207.  
  208. procedure TDdeClientItemProperty.GetValues(Proc: TGetStrProc);
  209. var
  210.   Cli  : TDdeClientConv;
  211.   Service, Topic, Item : String;
  212. begin
  213.   Cli := TDdeClientConv(TDdeClientItem (GetComponent(0)).DdeConv);
  214.   if Cli <> Nil then
  215.   begin
  216.     if  GetPasteLinkInfo (Service, Topic, Item) = True  then
  217.     begin
  218.       if (Service = Cli.DdeService) and
  219.          (Topic = Cli.DdeTopic) then
  220.         Proc (Item);
  221.     end;
  222.   end;
  223. end;
  224.  
  225. {---------------------------------------}
  226.  
  227. procedure TLibDde.SetProjectName (Name : String);
  228. begin
  229.   if Length (Name) <> 0 then
  230.     ddeMgr.AppName := Name
  231.   else
  232.     ddeMgr.AppName := ddeMgr.GetExeName;
  233. end;
  234.  
  235. {---------------------------------------}
  236.  
  237. procedure Register;
  238. begin
  239.   LibDdeHelper := TLibDde.Create;
  240.   RegisterComponents(LoadStr(srSystem),
  241.             [TDdeClientConv, TDdeClientItem, TDdeServerConv, TDdeServerItem]);
  242.   RegisterPropertyEditor(TypeInfo(string), TDdeClientConv, 'DdeService', TDdeLinkInfoProperty);
  243.   RegisterPropertyEditor(TypeInfo(string), TDdeClientConv, 'DdeTopic', TDdeLinkInfoProperty);
  244.   RegisterPropertyEditor(TypeInfo(string), TDdeClientItem, 'DdeItem', TDdeClientItemProperty);
  245.   RegisterComponentEditor(TDdeServerItem, TSrvrItemEdit);
  246.   RegisterComponentEditor(TDdeServerConv, TSrvrConvEdit);
  247.   RegisterComponentEditor(TDdeClientConv, TCliConvEdit);
  248. end;
  249.  
  250. end.
  251.