mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-29 17:49:25 +02:00
customdrawn: Improves TCDPanel
git-svn-id: trunk@33991 -
This commit is contained in:
parent
2b22ea06cb
commit
c51860c5a2
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
//
|
||||
|
Loading…
Reference in New Issue
Block a user