home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 August / VPR9608A.BIN / del20try / install / data.z / DDEREG.PAS < prev    next >
Pascal/Delphi Source File  |  1996-05-08  |  7KB  |  259 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. {$IFDEF JAPAN}
  85.   if (AnsiCompareText(PropName, 'ONEXECUTEMACRO') = 0) then
  86. {$ELSE}
  87.   if (CompareText(PropName, 'ONEXECUTEMACRO') = 0) then
  88. {$ENDIF}
  89.   begin
  90.     PropertyEditor.Edit;
  91.     Continue := False;
  92.   end
  93.   else
  94.     inherited EditProperty(PropertyEditor, Continue, FreeEditor);
  95. end;
  96.  
  97.  
  98. procedure TCliConvEdit.EditProperty(PropertyEditor: TPropertyEditor;
  99.   var Continue, FreeEditor: Boolean);
  100. var
  101.   PropName: string;
  102. begin
  103.   PropName := PropertyEditor.GetName;
  104. {$IFDEF JAPAN}
  105.   if (AnsiCompareText(PropName, 'ONOPEN') = 0) then
  106. {$ELSE}
  107.   if (CompareText(PropName, 'ONOPEN') = 0) then
  108. {$ENDIF}
  109.   begin
  110.     PropertyEditor.Edit;
  111.     Continue := False;
  112.   end
  113.   else
  114.     inherited EditProperty(PropertyEditor, Continue, FreeEditor);
  115. end;
  116.  
  117. procedure TSrvrItemEdit.Copy;
  118. begin
  119.   TDdeServerItem(Component).CopyToClipboard;
  120. end;
  121.  
  122.  
  123. {---------------------------------------}
  124. { TDdeLinkInfoProperty }
  125.  
  126. function TDdeLinkInfoProperty.GetAttributes: TPropertyAttributes;
  127. begin
  128.   Result := inherited GetAttributes + [paDialog, paReadOnly]
  129.                       - [paMultiSelect, paSubProperties];
  130. end;
  131.  
  132. function TDdeLinkInfoProperty.GetValue: string;
  133. begin
  134.   if GetStrValue = '' then Result := LoadStr(SDdeEmptyConnection)
  135.   else Result := Format ('(%s)', [GetStrValue]);
  136. end;
  137.  
  138. procedure TDdeLinkInfoProperty.Edit;
  139. var
  140.   DdeCli      : TDdeClientConv;
  141.   LinkDlg     : TDdeLinkDlg;
  142. begin
  143.   DdeCli := TDdeClientConv (GetComponent(0));
  144.   LinkDlg := TDdeLinkDlg.Create(Application);
  145.   try
  146.     LinkDlg.AppEdit.Text    :=   DdeCli.DdeService;
  147.     LinkDlg.TopicEdit.Text  :=   DdeCli.DdeTopic;
  148.  
  149.     if LinkDlg.ShowModal = idOk then
  150.     begin
  151.       if Not DdeCli.SetLink(LinkDlg.AppEdit.Text,
  152.                             LinkDlg.TopicEdit.Text) then
  153.         MessageDlg(LoadStr(SDdeNoConnect), mtError, [mbOK], 0);
  154.       Modified;
  155.     end;
  156.   finally
  157.     LinkDlg.Free;
  158.   end;
  159. end;
  160.  
  161. {---------------------------------------}
  162.  
  163. procedure TDdeLinkDlg.doPasteLink(Sender: TObject);
  164. var
  165.   Service, Topic, Item : String;
  166. begin
  167.   if  GetPasteLinkInfo (Service, Topic, Item) = True  then
  168.   begin
  169.     AppEdit.Text   := Service;
  170.     TopicEdit.Text := Topic;
  171.   end
  172.   else
  173.   begin
  174.     AppEdit.Text   := EmptyStr;
  175.     TopicEdit.Text := EmptyStr;
  176.   end;
  177. end;
  178.  
  179. procedure TDdeLinkDlg.DoPasteCheck(Sender: TObject);
  180. var
  181.   enable : Boolean;
  182.   Service, Topic, Item : String;
  183. begin
  184.   enable := False;
  185.   if  GetPasteLinkInfo (Service, Topic, Item) = True  then
  186.     enable := True;
  187.   if enable <> PasteBtn.Enabled then
  188.     PasteBtn.Enabled := enable;
  189. end;
  190.  
  191. procedure TDdeLinkDlg.WMActivate(var Message: TWMActivate);
  192. begin
  193.   inherited;
  194.   if Message.Active <> WA_INACTIVE then DoPasteCheck(Self);
  195. end;
  196.  
  197. procedure TDdeLinkDlg.FormCreate(Sender: TObject);
  198. begin
  199.   HelpContext := hcDDDEInfo;
  200. end;
  201.  
  202. procedure TDdeLinkDlg.HelpBtnClick(Sender: TObject);
  203. begin
  204.   Application.HelpContext(HelpContext);
  205. end;
  206.  
  207. {-------}
  208. { TDdeClientItemProperty }
  209.  
  210. function TDdeClientItemProperty.GetAttributes: TPropertyAttributes;
  211. begin
  212.   Result := inherited GetAttributes + [paValueList] - [paMultiSelect,
  213.     paSubProperties];
  214. end;
  215.  
  216. procedure TDdeClientItemProperty.GetValues(Proc: TGetStrProc);
  217. var
  218.   Cli  : TDdeClientConv;
  219.   Service, Topic, Item : String;
  220. begin
  221.   Cli := TDdeClientConv(TDdeClientItem (GetComponent(0)).DdeConv);
  222.   if Cli <> Nil then
  223.   begin
  224.     if  GetPasteLinkInfo (Service, Topic, Item) = True  then
  225.     begin
  226.       if (Service = Cli.DdeService) and
  227.          (Topic = Cli.DdeTopic) then
  228.         Proc (Item);
  229.     end;
  230.   end;
  231. end;
  232.  
  233. {---------------------------------------}
  234.  
  235. procedure TLibDde.SetProjectName (Name : String);
  236. begin
  237.   if Length (Name) <> 0 then
  238.     ddeMgr.AppName := Name
  239.   else
  240.     ddeMgr.AppName := ddeMgr.GetExeName;
  241. end;
  242.  
  243. {---------------------------------------}
  244.  
  245. procedure Register;
  246. begin
  247.   LibDdeHelper := TLibDde.Create;
  248.   RegisterComponents(LoadStr(srSystem),
  249.             [TDdeClientConv, TDdeClientItem, TDdeServerConv, TDdeServerItem]);
  250.   RegisterPropertyEditor(TypeInfo(string), TDdeClientConv, 'DdeService', TDdeLinkInfoProperty);
  251.   RegisterPropertyEditor(TypeInfo(string), TDdeClientConv, 'DdeTopic', TDdeLinkInfoProperty);
  252.   RegisterPropertyEditor(TypeInfo(string), TDdeClientItem, 'DdeItem', TDdeClientItemProperty);
  253.   RegisterComponentEditor(TDdeServerItem, TSrvrItemEdit);
  254.   RegisterComponentEditor(TDdeServerConv, TSrvrConvEdit);
  255.   RegisterComponentEditor(TDdeClientConv, TCliConvEdit);
  256. end;
  257.  
  258. end.
  259.