home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 March / Chip_1999-03_cd.bin / zkuste / delphi / D234C13 / RALIB.ZIP / RALib / Lib / RADsgn.pas < prev    next >
Pascal/Delphi Source File  |  1998-09-06  |  4KB  |  159 lines

  1. {***********************************************************
  2.                 R&A Library
  3.        Copyright (C) 1996-98 R&A
  4.  
  5.        description : routines for design-time
  6.  
  7.        programer   : black
  8.        e-mail      : blacknbs@chat.ru
  9.        www         : www.chat.ru\~blacknbs\ralib
  10. ************************************************************}
  11.  
  12. {$INCLUDE RA.INC}
  13.  
  14. unit RADsgn;
  15.  
  16. interface
  17.  
  18. uses
  19.   Windows, Messages, Forms, Controls, Graphics, SysUtils, Classes,
  20.   DsgnIntf;
  21.  
  22.   { DrawDesignFrame draws frame on the rect, Rect.
  23.     R&A using this function to drawing frame around controls at design-time }
  24.  
  25.   procedure DrawDesignFrame(Canvas : TCanvas; Rect : TRect);
  26.  
  27.  
  28.   procedure DesignerNotify(Self, Item: TComponent; Operation: TOperation);
  29.   procedure DesignerModified(Self : TComponent);
  30.   procedure DesignerSelectComponent(Self : TComponent);
  31.  
  32. implementation
  33.  
  34. procedure DrawDesignFrame(Canvas : TCanvas; Rect : TRect);
  35. begin
  36.   if Canvas.Handle <> 0 then
  37.   begin
  38.     Canvas.Brush.Style := bsClear;
  39.     Canvas.Pen.Color := clGray;
  40.     Canvas.Pen.Style := psDot;
  41.     Canvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
  42.   end;
  43. end;
  44.  
  45. {$IFDEF RA_D4H}
  46. type
  47.   TMyComponent = class(TComponent);
  48.  
  49. procedure GetDesigner(Self: TPersistent; out Result: IDesignerNotify);
  50. var
  51.   Temp: TPersistent;
  52. begin
  53.   Result := nil;
  54.   if Self = nil then Exit;
  55.   Temp := TMyComponent(Self).GetOwner;
  56.   if Temp = nil then
  57.   begin
  58.     if (Self is TComponent) and (csDesigning in TComponent(Self).ComponentState) then
  59.       TMyComponent(Self).QueryInterface(IDesignerNotify, Result);
  60.   end
  61.   else
  62.   begin
  63.     if (Self is TComponent) and
  64.       not (csDesigning in TComponent(Self).ComponentState) then Exit;
  65.     GetDesigner(Temp, Result);
  66.   end;
  67. end;
  68.  
  69. procedure DesignerNotify(Self, Item: TComponent; Operation: TOperation);
  70. var
  71.   Designer: IDesignerNotify;
  72. begin
  73.   if csDesigning in Self.ComponentState then
  74.   begin
  75.     GetDesigner(Self, Designer);
  76.     if Designer <> nil then
  77.       Designer.Notification(Item, Operation);
  78.   end;    
  79. end;
  80.  
  81. procedure DesignerModified(Self : TComponent);
  82. var
  83.   Designer: IDesignerNotify;
  84. begin
  85.   if csDesigning in Self.ComponentState then
  86.   begin
  87.     GetDesigner(Self, Designer);
  88.     if Designer <> nil then
  89.       Designer.Modified;
  90.   end;
  91. end;
  92.  
  93. procedure DesignerSelectComponent(Self : TComponent);
  94. var
  95.   Designer: IDesignerNotify;
  96.   Designer1: IFormDesigner;
  97. begin
  98.   if csDesigning in Self.ComponentState then
  99.   begin
  100.     GetDesigner(Self, Designer);
  101.     if (Designer <> nil) then
  102.     begin
  103.       Designer.QueryInterface(IFormDesigner, Designer1);
  104.       if Designer1 <> nil then
  105.         Designer1.SelectComponent(Self);
  106.     end;
  107.   end;
  108. end;
  109.  
  110. {$ELSE}
  111.  
  112. function GetDesigner(Self : TComponent) : TDesigner;
  113. begin
  114.   Result := nil;
  115.   while (Self <> nil) and not (Self is TForm) and (Self.Owner <> nil) do
  116.     Self := Self.Owner;
  117.   if Self is TForm then
  118.     Result := (Self as TForm).Designer;
  119. end;
  120.  
  121. procedure DesignerNotify(Self, Item: TComponent; Operation: TOperation);
  122. var
  123.   Designer: TDesigner;
  124. begin
  125.   if csDesigning in Self.ComponentState then
  126.   begin
  127.     Designer := GetDesigner(Self);
  128.     if Designer <> nil then
  129.       Designer.Notification(Item, Operation);
  130.   end;
  131. end;
  132.  
  133. procedure DesignerModified(Self : TComponent);
  134. var
  135.   Designer : TDesigner;
  136. begin
  137.   if csDesigning in Self.ComponentState then
  138.   begin
  139.     Designer := GetDesigner(Self);
  140.     if Designer <> nil then Designer.Modified;
  141.   end;
  142. end;
  143.  
  144. procedure DesignerSelectComponent(Self : TComponent);
  145. var
  146.   Designer : TDesigner;
  147. begin
  148.   if csDesigning in Self.ComponentState then
  149.   begin
  150.     Designer := GetDesigner(Self);
  151.     if (Designer is TFormDesigner) then
  152.       (Designer as TFormDesigner).SelectComponent(Self);
  153.   end;
  154. end;
  155.  
  156. {$ENDIF}
  157.  
  158. end.
  159.