home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / cb / setup / cbuilder / data.z / OLEREG.PAS < prev    next >
Pascal/Delphi Source File  |  1997-02-28  |  3KB  |  111 lines

  1. unit OLEReg;
  2.  
  3. interface
  4.  
  5. procedure Register;
  6.  
  7. implementation
  8.  
  9. uses SysUtils, Classes, DsgnIntf, LibConst, OleCtnrs;
  10.  
  11. { TOleContainerEditor }
  12.  
  13. type
  14.   TOleContainerEditor = class(TDefaultEditor)
  15.   private
  16.     FEditVerbs: TStringList;
  17.   public
  18.     constructor Create(AComponent: TComponent; ADesigner: TFormDesigner); override;
  19.     destructor Destroy; override;
  20.     procedure Edit; override;
  21.     procedure ExecuteVerb(Index: Integer); override;
  22.     function GetVerb(Index: Integer): string; override;
  23.     function GetVerbCount: Integer; override;
  24.   end;
  25.  
  26. constructor TOleContainerEditor.Create(AComponent: TComponent;
  27.   ADesigner: TFormDesigner);
  28. begin
  29.   inherited Create(AComponent, ADesigner);
  30.   FEditVerbs := TStringList.Create;
  31. end;
  32.  
  33. destructor TOleContainerEditor.Destroy;
  34. begin
  35.   FEditVerbs.Free;
  36.   inherited Destroy;
  37. end;
  38.  
  39. procedure TOleContainerEditor.Edit;
  40. begin
  41.   with TOleContainer(Component) do
  42.     if State <> osEmpty then DoVerb(ovPrimary) else InsertObjectDialog;
  43. end;
  44.  
  45. procedure TOleContainerEditor.ExecuteVerb(Index: Integer);
  46. var
  47.   Action: Integer;
  48. begin
  49.   Action := Integer(FEditVerbs.Objects[Index]);
  50.   with TOleContainer(Component) do
  51.     if Action >= 0 then
  52.       DoVerb(Action)
  53.     else
  54.       case Action of
  55.         -1: if InsertObjectDialog and NewInserted then DoVerb(ovOpen);
  56.         -2: PasteSpecialDialog;
  57.         -3: Copy;
  58.         -4: DestroyObject;
  59.         -5: ObjectPropertiesDialog;
  60.       end;
  61. end;
  62.  
  63. function TOleContainerEditor.GetVerb(Index: Integer): string;
  64. begin
  65.   Result := FEditVerbs[Index];
  66. end;
  67.  
  68. function TOleContainerEditor.GetVerbCount: Integer;
  69. var
  70.   I, P: Integer;
  71.   S: string;
  72. begin
  73.   with TOleContainer(Component) do
  74.   begin
  75.     FEditVerbs.Clear;
  76.     if State <> osEmpty then
  77.     begin
  78.       UpdateVerbs;
  79.       if ObjectVerbs.Count > 0 then
  80.       begin
  81.         for I := 0 to ObjectVerbs.Count - 1 do
  82.         begin
  83.           S := ObjectVerbs[I];
  84.           for P := Length(S) downto 1 do
  85.             if S[P] = '&' then Delete(S, P, 1);
  86.           FEditVerbs.AddObject(S, TObject(I));
  87.         end;
  88.         FEditVerbs.Add('-');
  89.       end;
  90.     end;
  91.     FEditVerbs.AddObject(LoadStr(SInsertObjectVerb), TObject(-1));
  92.     if CanPaste then
  93.       FEditVerbs.AddObject(LoadStr(SPasteSpecialVerb), TObject(-2));
  94.     if State <> osEmpty then
  95.     begin
  96.       FEditVerbs.AddObject(LoadStr(SCopyObjectVerb), TObject(-3));
  97.       FEditVerbs.AddObject(LoadStr(SDeleteObjectVerb), TObject(-4));
  98.       FEditVerbs.AddObject(LoadStr(SObjectPropertiesVerb), TObject(-5));
  99.     end;
  100.   end;
  101.   Result := FEditVerbs.Count;
  102. end;
  103.  
  104. procedure Register;
  105. begin
  106.   RegisterComponents(LoadStr(srSystem), [TOleContainer]);
  107.   RegisterComponentEditor(TOleContainer, TOleContainerEditor);
  108. end;
  109.  
  110. end.
  111.