customdrawn: Improves TCDPanel

git-svn-id: trunk@33991 -
This commit is contained in:
sekelsenmat 2011-12-06 11:06:36 +00:00
parent 2b22ea06cb
commit c51860c5a2
3 changed files with 83 additions and 8 deletions

View File

@ -37,6 +37,7 @@ type
// General drawing routines
procedure DrawFocusRect(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); override;
procedure DrawRaisedFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); override;
procedure DrawShallowRaisedFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); override;
procedure DrawSunkenFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); override;
procedure DrawShallowSunkenFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); override;
procedure DrawTickmark(ADest: TCanvas; ADestPos: TPoint); override;
@ -80,7 +81,7 @@ type
AState: TCDControlState; AStateEx: TCDControlStateEx); override;
// TCDPanel
procedure DrawPanel(ADest: TCanvas; ASize: TSize;
AState: TCDControlState; AStateEx: TCDControlStateEx); override;
AState: TCDControlState; AStateEx: TCDPanelStateEx); override;
// ===================================
// Additional Tab
// ===================================
@ -340,6 +341,23 @@ begin
ADest.LineTo(ADestPos.X+ASize.cx-2, ADestPos.Y-1);
end;
procedure TCDDrawerCommon.DrawShallowRaisedFrame(ADest: TCanvas;
ADestPos: TPoint; ASize: TSize);
begin
// white lines in the left and top
ADest.Pen.Style := psSolid;
ADest.Brush.Style := bsClear;
ADest.Pen.Color := WIN2000_FRAME_WHITE;
ADest.MoveTo(ADestPos.X, ADestPos.Y+ASize.cy-1);
ADest.LineTo(ADestPos.X, ADestPos.Y);
ADest.LineTo(ADestPos.X+ASize.cy-1, ADestPos.Y);
// Dark grey line on the right and bottom
ADest.Pen.Color := WIN2000_FRAME_DARK_GRAY;
ADest.MoveTo(ADestPos.X, ADestPos.Y+ASize.cy-1);
ADest.LineTo(ADestPos.X+ASize.cx-1, ADestPos.Y+ASize.cy-1);
ADest.LineTo(ADestPos.X+ASize.cx-1, ADestPos.Y);
end;
procedure TCDDrawerCommon.DrawSunkenFrame(ADest: TCanvas; ADestPos: TPoint;
ASize: TSize);
begin
@ -1070,7 +1088,7 @@ begin
end;
procedure TCDDrawerCommon.DrawPanel(ADest: TCanvas; ASize: TSize;
AState: TCDControlState; AStateEx: TCDControlStateEx);
AState: TCDControlState; AStateEx: TCDPanelStateEx);
begin
// Background
ADest.Brush.Color := Palette.BtnFace;
@ -1078,8 +1096,10 @@ begin
ADest.Pen.Style := psClear;
ADest.FillRect(0, 0, ASize.cx, ASize.cy);
// The frame
DrawRaisedFrame(ADest, Point(0, 0), ASize);
// The outter frame
DrawShallowRaisedFrame(ADest, Point(0, 0), ASize);
// Now the inner frame
end;
procedure TCDDrawerCommon.DrawStaticText(ADest: TCanvas;

View File

@ -355,14 +355,26 @@ type
TCDPanel = class(TCDControl)
private
function GetControlId: TCDControlID; override;
FBevelInner: TPanelBevel;
FBevelOuter: TPanelBevel;
FBevelWidth: TBevelWidth;
procedure SetBevelInner(AValue: TPanelBevel);
procedure SetBevelOuter(AValue: TPanelBevel);
procedure SetBevelWidth(AValue: TBevelWidth);
protected
FPState: TCDPanelStateEx;
function GetControlId: TCDControlID; override;
procedure CreateControlStateEx; override;
procedure PrepareControlStateEx; override;
procedure RealSetText(const Value: TCaption); override; // to update on caption changes
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
//property AutoSize;
property BevelInner: TPanelBevel read FBevelInner write SetBevelInner default bvNone;
property BevelOuter: TPanelBevel read FBevelOuter write SetBevelOuter default bvRaised;
property BevelWidth: TBevelWidth read FBevelWidth write SetBevelWidth default 1;
property DrawStyle;
property Caption;
property TabStop default False;
@ -643,6 +655,41 @@ begin
Result := cidPanel;
end;
procedure TCDPanel.CreateControlStateEx;
begin
FPState := TCDPanelStateEx.Create;
FStateEx := FPState;
end;
procedure TCDPanel.PrepareControlStateEx;
begin
inherited PrepareControlStateEx;
FPState.BevelInner := FBevelInner;
FPState.BevelOuter := FBevelOuter;
FPState.BevelWidth := FBevelWidth;
end;
procedure TCDPanel.SetBevelInner(AValue: TPanelBevel);
begin
if FBevelInner=AValue then Exit;
FBevelInner:=AValue;
if not (csLoading in ComponentState) then Invalidate;
end;
procedure TCDPanel.SetBevelOuter(AValue: TPanelBevel);
begin
if FBevelOuter=AValue then Exit;
FBevelOuter:=AValue;
if not (csLoading in ComponentState) then Invalidate;
end;
procedure TCDPanel.SetBevelWidth(AValue: TBevelWidth);
begin
if FBevelWidth=AValue then Exit;
FBevelWidth:=AValue;
if not (csLoading in ComponentState) then Invalidate;
end;
procedure TCDPanel.RealSetText(const Value: TCaption);
begin
inherited RealSetText(Value);

View File

@ -7,7 +7,7 @@ interface
uses
Classes, SysUtils, Types,
// LCL for types
Graphics, ComCtrls;
Graphics, ComCtrls, ExtCtrls;
const
CDDRAWSTYLE_COUNT = 19;
@ -152,6 +152,13 @@ type
LeftTextMargin, RightTextMargin: Integer;
end;
TCDPanelStateEx = class(TCDControlStateEx)
public
BevelInner: TPanelBevel;
BevelOuter: TPanelBevel;
BevelWidth: TBevelWidth;
end;
TCDPositionedCStateEx = class(TCDControlStateEx)
public
PosCount: integer; // The number of positions, calculated as Max - Min + 1
@ -281,6 +288,7 @@ type
// General drawing routines
procedure DrawFocusRect(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); virtual; abstract;
procedure DrawRaisedFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); virtual; abstract;
procedure DrawShallowRaisedFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); virtual; abstract;
procedure DrawSunkenFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); virtual; abstract;
procedure DrawShallowSunkenFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); virtual; abstract;
procedure DrawTickmark(ADest: TCanvas; ADestPos: TPoint); virtual; abstract;
@ -321,7 +329,7 @@ type
AState: TCDControlState; AStateEx: TCDControlStateEx); virtual; abstract;
// TCDPanel
procedure DrawPanel(ADest: TCanvas; ASize: TSize;
AState: TCDControlState; AStateEx: TCDControlStateEx); virtual; abstract;
AState: TCDControlState; AStateEx: TCDPanelStateEx); virtual; abstract;
// ===================================
// Additional Tab
// ===================================
@ -622,7 +630,7 @@ begin
cidRadioButton:DrawRadioButton(ADest, ASize, AState, AStateEx);
cidScrollBar: DrawScrollBar(ADest, ASize, AState, TCDPositionedCStateEx(AStateEx));
cidGroupBox: DrawGroupBox(ADest, ASize, AState, AStateEx);
cidPanel: DrawPanel(ADest, ASize, AState, AStateEx);
cidPanel: DrawPanel(ADest, ASize, AState, TCDPanelStateEx(AStateEx));
//
cidStaticText: DrawStaticText(ADest, ASize, AState, AStateEx);
//