home *** CD-ROM | disk | FTP | other *** search
/ Chip 1997 April / Chip_1997-04_cd.bin / prezent / cb / data.z / DSGNWNDS.PAS < prev    next >
Pascal/Delphi Source File  |  1997-01-16  |  5KB  |  183 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Delphi Visual Component Library                 }
  5. {                                                       }
  6. {       Copyright (c) 1995,96 Borland International     }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit DsgnWnds;
  11.  
  12. interface
  13.  
  14. uses Messages, SysUtils, Classes, Controls, Forms, LibIntf, DsgnIntf;
  15.  
  16. type
  17.   TDesignWindow = class(TForm)
  18.   private
  19.     FSelection: TComponentList;
  20.     FOwner: TComponent;
  21.     FDesigner: TFormDesigner;
  22.     FActive: Boolean;
  23.     FReserved: Byte;
  24.     procedure ComponentRead(Component: TComponent);
  25.     procedure ReaderSetName(Reader: TReader; Component: TComponent;
  26.       var Name: string);
  27.     procedure WMActivate(var Msg: TWMActivate); message WM_ACTIVATE;
  28.   protected
  29.     procedure Activated; dynamic;
  30.     procedure ActivateInspector(Ch: Char);
  31.     function ClipboardComponents: Boolean;
  32.     procedure CopyComponents(Root: TComponent; Components: TComponentList);
  33.     procedure PasteComponents(AOwner, AParent: TComponent;
  34.       Components: TComponentList);
  35.     procedure SetSelection(Components: TComponentList);
  36.     function UniqueName(Component: TComponent): string; virtual; abstract;
  37.   public
  38.     constructor Create(AOwner: TComponent); override;
  39.     destructor Destroy; override;
  40.     procedure ComponentDeleted(Component: TComponent); virtual;
  41.     function GetEditState: TEditState; virtual;
  42.     procedure EditAction(Action: TEditAction); virtual;
  43.     procedure FormClosed(AForm: TForm); virtual;
  44.     procedure FormModified; virtual;
  45.     procedure SelectionChanged(ASelection: TComponentList); virtual;
  46.     property Active: Boolean read FActive;
  47.     property Designer: TFormDesigner read FDesigner write FDesigner;
  48.   end;
  49.  
  50. implementation
  51.  
  52. uses Windows, LibMain, Clipbrd;
  53.  
  54. constructor TDesignWindow.Create(AOwner: TComponent);
  55. begin
  56.   inherited Create(AOwner);
  57.   RegisterDesignWindow(Self);
  58.   SetBounds(200, AppBuilder.GetMainWindowSize.Bottom + 2, Width, Height);
  59. end;
  60.  
  61. destructor TDesignWindow.Destroy;
  62. begin
  63.   UnregisterDesignWindow(Self);
  64.   inherited Destroy;
  65. end;
  66.  
  67. procedure TDesignWindow.Activated;
  68. begin
  69. end;
  70.  
  71. procedure TDesignWindow.WMActivate(var Msg: TWMActivate);
  72. begin
  73.   inherited;
  74.   FActive := Msg.Active <> 0;
  75.   if FActive then
  76.   begin
  77.     AppBuilder.FormActivated;
  78.     Activated;
  79.   end;
  80. end;
  81.  
  82. procedure TDesignWindow.ActivateInspector(Ch: Char);
  83. begin
  84.   AppBuilder.ModalEdit(Ch, Self);
  85. end;
  86.  
  87. function TDesignWindow.ClipboardComponents: Boolean;
  88. begin
  89.   Result := Clipboard.HasFormat(CF_COMPONENTS) or
  90.     (Clipboard.HasFormat(CF_TEXT) and PossibleStream(Clipboard.AsText));
  91. end;
  92.  
  93. procedure TDesignWindow.ComponentDeleted(Component: TComponent);
  94. begin
  95. end;
  96.  
  97. procedure TDesignWindow.CopyComponents(Root: TComponent; Components: TComponentList);
  98. var
  99.   S: TMemoryStream;
  100.   W: TWriter;
  101.   I: Integer;
  102. begin
  103.   S := TMemoryStream.Create;
  104.   try
  105.     W := TWriter.Create(S, 1024);
  106.     try
  107.       W.Root := Root;
  108.       for I := 0 to Components.Count - 1 do
  109.       begin
  110.         W.WriteSignature;
  111.         W.WriteComponent(TComponent(Components[I]));
  112.       end;
  113.       W.WriteListEnd;
  114.     finally
  115.       W.Free;
  116.     end;
  117.     CopyStreamToClipboard(S);
  118.   finally
  119.     S.Free;
  120.   end;
  121. end;
  122.  
  123. function TDesignWindow.GetEditState: TEditState;
  124. begin
  125.   Result := [];
  126. end;
  127.  
  128. procedure TDesignWindow.EditAction(Action: TEditAction);
  129. begin
  130. end;
  131.  
  132. procedure TDesignWindow.FormClosed(AForm: TForm);
  133. begin
  134. end;
  135.  
  136. procedure TDesignWindow.FormModified;
  137. begin
  138. end;
  139.  
  140. procedure TDesignWindow.ComponentRead(Component: TComponent);
  141. begin
  142.   FSelection.Add(Component);
  143. end;
  144.  
  145. procedure TDesignWindow.ReaderSetName(Reader: TReader; Component: TComponent;
  146.   var Name: string);
  147. begin
  148.   if (Reader.Root = FOwner) and (FOwner.FindComponent(Name) <> nil) then
  149.     Name := UniqueName(Component);
  150. end;
  151.  
  152. procedure TDesignWindow.PasteComponents(AOwner, AParent: TComponent; Components: TComponentList);
  153. var
  154.   S: TStream;
  155.   R: TReader;
  156. begin
  157.   S := GetClipboardStream;
  158.   try
  159.     R := TReader.Create(S, 1024);
  160.     try
  161.       R.OnSetName := ReaderSetName;
  162.       FOwner := AOwner;
  163.       FSelection := Components;
  164.       R.ReadComponents(AOwner, AParent, ComponentRead);
  165.     finally
  166.       R.Free;
  167.     end;
  168.   finally
  169.     S.Free;
  170.   end;
  171. end;
  172.  
  173. procedure TDesignWindow.SelectionChanged(ASelection: TComponentList);
  174. begin
  175. end;
  176.  
  177. procedure TDesignWindow.SetSelection(Components: TComponentList);
  178. begin
  179.   CompLib.SetSelection(Designer, Self, Components);
  180. end;
  181.  
  182. end.
  183.