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