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 // General drawing routines
procedure DrawFocusRect(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); override; procedure DrawFocusRect(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); override;
procedure DrawRaisedFrame(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 DrawSunkenFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); override;
procedure DrawShallowSunkenFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); override; procedure DrawShallowSunkenFrame(ADest: TCanvas; ADestPos: TPoint; ASize: TSize); override;
procedure DrawTickmark(ADest: TCanvas; ADestPos: TPoint); override; procedure DrawTickmark(ADest: TCanvas; ADestPos: TPoint); override;
@ -80,7 +81,7 @@ type
AState: TCDControlState; AStateEx: TCDControlStateEx); override; AState: TCDControlState; AStateEx: TCDControlStateEx); override;
// TCDPanel // TCDPanel
procedure DrawPanel(ADest: TCanvas; ASize: TSize; procedure DrawPanel(ADest: TCanvas; ASize: TSize;
AState: TCDControlState; AStateEx: TCDControlStateEx); override; AState: TCDControlState; AStateEx: TCDPanelStateEx); override;
// =================================== // ===================================
// Additional Tab // Additional Tab
// =================================== // ===================================
@ -340,6 +341,23 @@ begin
ADest.LineTo(ADestPos.X+ASize.cx-2, ADestPos.Y-1); ADest.LineTo(ADestPos.X+ASize.cx-2, ADestPos.Y-1);
end; 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; procedure TCDDrawerCommon.DrawSunkenFrame(ADest: TCanvas; ADestPos: TPoint;
ASize: TSize); ASize: TSize);
begin begin
@ -1070,7 +1088,7 @@ begin
end; end;
procedure TCDDrawerCommon.DrawPanel(ADest: TCanvas; ASize: TSize; procedure TCDDrawerCommon.DrawPanel(ADest: TCanvas; ASize: TSize;
AState: TCDControlState; AStateEx: TCDControlStateEx); AState: TCDControlState; AStateEx: TCDPanelStateEx);
begin begin
// Background // Background
ADest.Brush.Color := Palette.BtnFace; ADest.Brush.Color := Palette.BtnFace;
@ -1078,8 +1096,10 @@ begin
ADest.Pen.Style := psClear; ADest.Pen.Style := psClear;
ADest.FillRect(0, 0, ASize.cx, ASize.cy); ADest.FillRect(0, 0, ASize.cx, ASize.cy);
// The frame // The outter frame
DrawRaisedFrame(ADest, Point(0, 0), ASize); DrawShallowRaisedFrame(ADest, Point(0, 0), ASize);
// Now the inner frame
end; end;
procedure TCDDrawerCommon.DrawStaticText(ADest: TCanvas; procedure TCDDrawerCommon.DrawStaticText(ADest: TCanvas;

View File

@ -355,14 +355,26 @@ type
TCDPanel = class(TCDControl) TCDPanel = class(TCDControl)
private private
function GetControlId: TCDControlID; override; FBevelInner: TPanelBevel;
FBevelOuter: TPanelBevel;
FBevelWidth: TBevelWidth;
procedure SetBevelInner(AValue: TPanelBevel);
procedure SetBevelOuter(AValue: TPanelBevel);
procedure SetBevelWidth(AValue: TBevelWidth);
protected protected
FPState: TCDPanelStateEx;
function GetControlId: TCDControlID; override;
procedure CreateControlStateEx; override;
procedure PrepareControlStateEx; override;
procedure RealSetText(const Value: TCaption); override; // to update on caption changes procedure RealSetText(const Value: TCaption); override; // to update on caption changes
public public
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
published published
//property AutoSize; //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 DrawStyle;
property Caption; property Caption;
property TabStop default False; property TabStop default False;
@ -643,6 +655,41 @@ begin
Result := cidPanel; Result := cidPanel;
end; 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); procedure TCDPanel.RealSetText(const Value: TCaption);
begin begin
inherited RealSetText(Value); inherited RealSetText(Value);

View File

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