home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1997 April
/
Chip_1997-04_cd.bin
/
prezent
/
cb
/
data.z
/
DSGNWNDS.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1997-01-16
|
5KB
|
183 lines
{*******************************************************}
{ }
{ Delphi Visual Component Library }
{ }
{ Copyright (c) 1995,96 Borland International }
{ }
{*******************************************************}
unit DsgnWnds;
interface
uses Messages, SysUtils, Classes, Controls, Forms, LibIntf, DsgnIntf;
type
TDesignWindow = class(TForm)
private
FSelection: TComponentList;
FOwner: TComponent;
FDesigner: TFormDesigner;
FActive: Boolean;
FReserved: Byte;
procedure ComponentRead(Component: TComponent);
procedure ReaderSetName(Reader: TReader; Component: TComponent;
var Name: string);
procedure WMActivate(var Msg: TWMActivate); message WM_ACTIVATE;
protected
procedure Activated; dynamic;
procedure ActivateInspector(Ch: Char);
function ClipboardComponents: Boolean;
procedure CopyComponents(Root: TComponent; Components: TComponentList);
procedure PasteComponents(AOwner, AParent: TComponent;
Components: TComponentList);
procedure SetSelection(Components: TComponentList);
function UniqueName(Component: TComponent): string; virtual; abstract;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ComponentDeleted(Component: TComponent); virtual;
function GetEditState: TEditState; virtual;
procedure EditAction(Action: TEditAction); virtual;
procedure FormClosed(AForm: TForm); virtual;
procedure FormModified; virtual;
procedure SelectionChanged(ASelection: TComponentList); virtual;
property Active: Boolean read FActive;
property Designer: TFormDesigner read FDesigner write FDesigner;
end;
implementation
uses Windows, LibMain, Clipbrd;
constructor TDesignWindow.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
RegisterDesignWindow(Self);
SetBounds(200, AppBuilder.GetMainWindowSize.Bottom + 2, Width, Height);
end;
destructor TDesignWindow.Destroy;
begin
UnregisterDesignWindow(Self);
inherited Destroy;
end;
procedure TDesignWindow.Activated;
begin
end;
procedure TDesignWindow.WMActivate(var Msg: TWMActivate);
begin
inherited;
FActive := Msg.Active <> 0;
if FActive then
begin
AppBuilder.FormActivated;
Activated;
end;
end;
procedure TDesignWindow.ActivateInspector(Ch: Char);
begin
AppBuilder.ModalEdit(Ch, Self);
end;
function TDesignWindow.ClipboardComponents: Boolean;
begin
Result := Clipboard.HasFormat(CF_COMPONENTS) or
(Clipboard.HasFormat(CF_TEXT) and PossibleStream(Clipboard.AsText));
end;
procedure TDesignWindow.ComponentDeleted(Component: TComponent);
begin
end;
procedure TDesignWindow.CopyComponents(Root: TComponent; Components: TComponentList);
var
S: TMemoryStream;
W: TWriter;
I: Integer;
begin
S := TMemoryStream.Create;
try
W := TWriter.Create(S, 1024);
try
W.Root := Root;
for I := 0 to Components.Count - 1 do
begin
W.WriteSignature;
W.WriteComponent(TComponent(Components[I]));
end;
W.WriteListEnd;
finally
W.Free;
end;
CopyStreamToClipboard(S);
finally
S.Free;
end;
end;
function TDesignWindow.GetEditState: TEditState;
begin
Result := [];
end;
procedure TDesignWindow.EditAction(Action: TEditAction);
begin
end;
procedure TDesignWindow.FormClosed(AForm: TForm);
begin
end;
procedure TDesignWindow.FormModified;
begin
end;
procedure TDesignWindow.ComponentRead(Component: TComponent);
begin
FSelection.Add(Component);
end;
procedure TDesignWindow.ReaderSetName(Reader: TReader; Component: TComponent;
var Name: string);
begin
if (Reader.Root = FOwner) and (FOwner.FindComponent(Name) <> nil) then
Name := UniqueName(Component);
end;
procedure TDesignWindow.PasteComponents(AOwner, AParent: TComponent; Components: TComponentList);
var
S: TStream;
R: TReader;
begin
S := GetClipboardStream;
try
R := TReader.Create(S, 1024);
try
R.OnSetName := ReaderSetName;
FOwner := AOwner;
FSelection := Components;
R.ReadComponents(AOwner, AParent, ComponentRead);
finally
R.Free;
end;
finally
S.Free;
end;
end;
procedure TDesignWindow.SelectionChanged(ASelection: TComponentList);
begin
end;
procedure TDesignWindow.SetSelection(Components: TComponentList);
begin
CompLib.SetSelection(Designer, Self, Components);
end;
end.