[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]
Once again, the dcr is attached...
(*
TTransparentGroupBox - Eddie Shipman
TGroupBox that is transparent and allows colored bevels.
Added two properties:
****************************************************************************
***
Property: - BevelShadowColor-
This is the color of the Bevel's Shadow, Default clBtnShadow.
Change this color to change the color of the Bevel's Shadow.
****************************************************************************
***
Property: BevelHighlightColor-
This is the color of the Bevel's Highlight, Default clBtnHighlight.
Change this color to change the color of the Bevel's Highlight.
****************************************************************************
***
12/22/97 - Added DrawFrame procedure to correct the way the frame
is drawn to let background actually show thorugh transparent
text., {ES}
*)
unit TransparentGroupBox;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;
type
TTransparentGroupBox = class(TGroupBox)
private
{ Private declarations }
FBevelLowColor: TColor;
FBevelHiColor: TColor;
procedure SetBvlLowColor(Value: TColor);
procedure SetBvlHiColor(Value: TColor);
Procedure WMEraseBkGnd(Var Message:TWMEraseBkGnd); Message WM_EraseBkGnd;
Procedure WMMove(Var Message:TWMMove); Message WM_Move;
protected
{ Protected declarations }
Procedure CreateParams(Var Params:TCreateParams); Override;
Procedure Paint; Override;
Procedure SetParent(AParent:TWinControl); Override;
procedure DrawFrame(Rect:TRect);
public
{ Public declarations }
Constructor Create(AOwner:TComponent); Override;
Procedure Invalidate; Override;
published
{ Published declarations }
property BevelShadowColor:TColor read FBevelLowColor
write SetBvlLowColor;
property BevelHighlightColor:TColor read FBevelHiColor
write SetBvlHiColor;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Standard', [TTransparentGroupBox]);
end;
constructor TTransparentGroupBox.Create (AOwner: TComponent);
Begin
Inherited Create(AOwner);
ControlStyle:= ControlStyle - [csOpaque];
FBevelLowColor := clBtnShadow;
FBevelHiColor := clBtnHighlight;
End;
Procedure TTransparentGroupBox.CreateParams(Var Params:TCreateParams);
Begin
inherited CreateParams (Params);
Params.ExStyle := Params.ExStyle + WS_EX_TRANSPARENT;
End;
Procedure TTransparentGroupBox.Paint;
var
H: Integer;
R: TRect;
begin
with Canvas do
begin
Font := Self.Font;
H := TextHeight('0');
R := Rect(0, H div 2 - 1, Width, Height);
if Ctl3D then
begin
DrawFrame(R);
end else
begin
Brush.Color := clWindowFrame;
FrameRect(R);
end;
if Text <> '' then
begin
R := Rect(8, 0, 0, H);
DrawText(Handle, PChar(Text), Length(Text), R, DT_LEFT or
DT_SINGLELINE or
DT_CALCRECT);
if Ctl3D then
Brush.Style:= bsClear
else
Brush.Color := Color;
DrawText(Handle, PChar(Text), Length(Text), R, DT_LEFT or
DT_SINGLELINE);
end;
end;
End;
Procedure TTransparentGroupBox.WMEraseBkGnd(Var Message:TWMEraseBkGnd);
Begin
Repaint;
End;
Procedure TTransparentGroupBox.SetParent(AParent:TWinControl);
Begin
Inherited SetParent(AParent);
If Parent <> Nil then
SetWindowLong(Parent.Handle, GWL_STYLE,
GetWindowLong(Parent.Handle, GWL_STYLE)
And Not WS_ClipChildren);
End;
Procedure TTransparentGroupBox.Invalidate;
Var
Rect :TRect;
Begin
Rect:= BoundsRect;
If (Parent <> Nil) and Parent.HandleAllocated then
InvalidateRect(Parent.Handle, @Rect, True)
Else
Inherited Invalidate;
End;
Procedure TTransparentGroupBox.WMMove(Var Message:TWMMove);
Begin
Invalidate;
End;
procedure TTransparentGroupBox.SetBvlLowColor(Value: TColor);
begin
if FBevelLowColor <> Value then
FBevelLowColor := Value;
Invalidate;
end;
procedure TTransparentGroupBox.SetBvlHiColor(Value: TColor);
begin
if FBevelHiColor <> Value then
FBevelHiColor := Value;
Invalidate;
end;
procedure TTransparentGroupBox.DrawFrame(Rect: TRect);
var
CaptionLength: Integer;
begin
with Canvas do
begin
Inc(Rect.Left);
Inc(Rect.Top);
Dec(Rect.Right);
Dec(Rect.Bottom);
CaptionLength := TextWidth(Text);
Pen.Color := FBevelHiColor;
MoveTo(Rect.Left, Rect.Top);
LineTo(6,Rect.Top);
MoveTo(8+CaptionLength+2, Rect.Top);
LineTo(Rect.Right,Rect.Top);
LineTo(Rect.Right,Rect.Bottom);
LineTo(Rect.Left,Rect.Bottom);
LineTo(Rect.Left, Rect.Top);
OffsetRect(Rect, -1, -1);
Pen.Color := FBevelLowColor;
MoveTo(Rect.Left, Rect.Top);
LineTo(6,Rect.Top);
MoveTo(8+CaptionLength+2, Rect.Top);
LineTo(Rect.Right,Rect.Top);
LineTo(Rect.Right,Rect.Bottom);
LineTo(Rect.Left,Rect.Bottom);
LineTo(Rect.Left, Rect.Top);
end;
end;
end.
{ --------------------------- TransparentGroupbox.dcr ------------------------------
Content-Transfer-Encoding: base64
{ cut this out, and save to a file .. then use a base64 processor to create
TransparentGroupbox.dcr .. there is one in SWAG that works fine !}
AAAAACAAAAD//wAA//8AAAAAAAAAAAAAAAAAAAAAAACIAQAASAAAAP//AgBUAFQAUgBBAE4AUwBQ
AEEAUgBFAE4AVABHAFIATwBVAFAAQgBPAFgAAAAAAAAAAAAQEAkEAAAAAAAAAAAoAAAAGAAAABgA
AAABAAQAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAA
AICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////ADMzMzMzMzMzMzMzMzMzMzMzMzMz
MzMzMzAAAAAAAAAAAAAAAzDMzMzMzMzMzMzMAzDMzMzMzMzMzMzMAzDMzd3d3d3d3d3cAzDMXFVV
VVVVVVXSAzDMXczMzMzMzCXSAzDMXczMzMzMIiXSAzDvXe/v7+8iIiXSAzD+Xf7+/v7+IiXSAzDv
Xe/v7+/v7yXSAzD+Xf7+/v7+/vXSAzDvXe/v7+/v7+XSAzD+Xf74jv7+/vXeAzDvXe+PuO/v7+Xf
AzD+Xf4L+P7+/vXeAzDvXeDoDw8P7+XfAzD+XdDQ3Q0N3d7eAzDvVVAAUFBVVVXvAzD+/v4O8P7+
/v7+AzAAAAAAAAAAAAAAAzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMw==
[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]