home *** CD-ROM | disk | FTP | other *** search
/ PC Format Collection 48 / SENT14D.ISO / tech / delphi / disk12 / lib.pak / DDEREG.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-08-24  |  6.1 KB  |  245 lines

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