VrBorder.pas
上传用户:hbszzs
上传日期:2008-08-20
资源大小:628k
文件大小:5k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {*****************************************************}
  2. {                                                     }
  3. {     Varian Component Workshop                       }
  4. {                                                     }
  5. {     Varian Software NL (c) 1996-2000                }
  6. {     All Rights Reserved                             }
  7. {                                                     }
  8. {*****************************************************}
  9. unit VrBorder;
  10. {$I VRLIB.INC}
  11. interface
  12. uses
  13.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  14.   VrClasses, VrControls, VrSysUtils;
  15. type
  16.   TVrBorderStyle = (bsLowered, bsRaised);
  17.   TVrBorderShape = (bsBox, bsFrame, bsTopLine, bsBottomLine, bsLeftLine,
  18.     bsRightLine, bsSpacer);
  19.   TVrBorder = class(TVrGraphicControl)
  20.   private
  21.     FStyle: TVrBorderStyle;
  22.     FShape: TVrBorderShape;
  23.     FShadowColor: TColor;
  24.     FHighlightColor: TColor;
  25.     procedure SetStyle(Value: TVrBorderStyle);
  26.     procedure SetShape(Value: TVrBorderShape);
  27.     procedure SetShadowColor(Value: TColor);
  28.     procedure SetHighlightColor(Value: TColor);
  29.   protected
  30.     procedure Paint; override;
  31.   public
  32.     constructor Create(AOwner: TComponent); override;
  33.   published
  34.     property Shape: TVrBorderShape read FShape write SetShape default bsFrame;
  35.     property Style: TVrBorderStyle read FStyle write SetStyle default bsRaised;
  36.     property ShadowColor: TColor read FShadowColor write SetShadowColor default clGreen;
  37.     property HighlightColor: TColor read FHighlightColor write SetHighlightColor default clLime;
  38.     property Align;
  39. {$IFDEF VER110}
  40.     property Anchors;
  41.     property Constraints;
  42. {$ENDIF}    
  43.     property ParentShowHint;
  44.     property ShowHint;
  45.     property Visible;
  46.   end;
  47. implementation
  48. { TVrBorder }
  49. constructor TVrBorder.Create(AOwner: TComponent);
  50. begin
  51.   inherited Create(AOwner);
  52.   ControlStyle := ControlStyle + [csReplicatable];
  53.   Width := 50;
  54.   Height := 50;
  55.   FStyle := bsRaised;
  56.   FShape := bsFrame;
  57.   FShadowColor := clGreen;
  58.   FHighlightColor := clLime;
  59. end;
  60. procedure TVrBorder.SetStyle(Value: TVrBorderStyle);
  61. begin
  62.   if FStyle <> Value then
  63.   begin
  64.     FStyle := Value;
  65.     Invalidate;
  66.   end;
  67. end;
  68. procedure TVrBorder.SetShape(Value: TVrBorderShape);
  69. begin
  70.   if FShape <> Value  then
  71.   begin
  72.     FShape := Value;
  73.     Invalidate;
  74.   end;
  75. end;
  76. procedure TVrBorder.SetShadowColor(Value: TColor);
  77. begin
  78.   if FShadowColor <> Value then
  79.   begin
  80.     FShadowColor := Value;
  81.     Invalidate;
  82.   end;
  83. end;
  84. procedure TVrBorder.SetHighlightColor(Value: TColor);
  85. begin
  86.   if FHighlightColor <> Value then
  87.   begin
  88.     FHighlightColor := Value;
  89.     Invalidate;
  90.   end;
  91. end;
  92. procedure TVrBorder.Paint;
  93. const
  94.   XorColor = $00FFD8CE;
  95. var
  96.   Color1, Color2: TColor;
  97.   Temp: TColor;
  98.   procedure BevelRect(const R: TRect);
  99.   begin
  100.     with Canvas do
  101.     begin
  102.       Pen.Color := Color1;
  103.       PolyLine([Point(R.Left, R.Bottom), Point(R.Left, R.Top),
  104.         Point(R.Right, R.Top)]);
  105.       Pen.Color := Color2;
  106.       PolyLine([Point(R.Right, R.Top), Point(R.Right, R.Bottom),
  107.         Point(R.Left, R.Bottom)]);
  108.     end;
  109.   end;
  110.   procedure BevelLine(C: TColor; X1, Y1, X2, Y2: Integer);
  111.   begin
  112.     with Canvas do
  113.     begin
  114.       Pen.Color := C;
  115.       MoveTo(X1, Y1);
  116.       LineTo(X2, Y2);
  117.     end;
  118.   end;
  119. begin
  120.   with Canvas do
  121.   begin
  122.     if Designing then
  123.     begin
  124.       if (FShape = bsSpacer) then
  125.       begin
  126.         Pen.Style := psDot;
  127.         Pen.Mode := pmXor;
  128.         Pen.Color := XorColor;
  129.         Brush.Style := bsClear;
  130.         Rectangle(0, 0, ClientWidth, ClientHeight);
  131.         Exit;
  132.       end
  133.       else
  134.       begin
  135.         Pen.Style := psSolid;
  136.         Pen.Mode  := pmCopy;
  137.         Pen.Color := clBlack;
  138.         Brush.Style := bsSolid;
  139.       end;
  140.     end;
  141.     Pen.Width := 1;
  142.     if FStyle = bsLowered then
  143.     begin
  144.       Color1 := FShadowColor;
  145.       Color2 := FHighlightColor;
  146.     end
  147.     else
  148.     begin
  149.       Color1 := FHighlightColor;
  150.       Color2 := FShadowColor;
  151.     end;
  152.     case FShape of
  153.       bsBox: BevelRect(Rect(0, 0, Width - 1, Height - 1));
  154.       bsFrame:
  155.         begin
  156.           Temp := Color1;
  157.           Color1 := Color2;
  158.           BevelRect(Rect(1, 1, Width - 1, Height - 1));
  159.           Color2 := Temp;
  160.           Color1 := Temp;
  161.           BevelRect(Rect(0, 0, Width - 2, Height - 2));
  162.         end;
  163.       bsTopLine:
  164.         begin
  165.           BevelLine(Color1, 0, 0, Width, 0);
  166.           BevelLine(Color2, 0, 1, Width, 1);
  167.         end;
  168.       bsBottomLine:
  169.         begin
  170.           BevelLine(Color1, 0, Height - 2, Width, Height - 2);
  171.           BevelLine(Color2, 0, Height - 1, Width, Height - 1);
  172.         end;
  173.       bsLeftLine:
  174.         begin
  175.           BevelLine(Color1, 0, 0, 0, Height);
  176.           BevelLine(Color2, 1, 0, 1, Height);
  177.         end;
  178.       bsRightLine:
  179.         begin
  180.           BevelLine(Color1, Width - 2, 0, Width - 2, Height);
  181.           BevelLine(Color2, Width - 1, 0, Width - 1, Height);
  182.         end;
  183.     end;
  184.   end;
  185. end;
  186. end.