Initial sketch of the custom drawn group box

git-svn-id: trunk@28070 -
This commit is contained in:
sekelsenmat 2010-11-04 10:50:05 +00:00
parent 9eee5d1c46
commit b7d2ca7755

View File

@ -15,7 +15,9 @@ interface
uses
Classes, SysUtils, Graphics, Controls, LCLType, LCLIntf, IntfGraphics,
Math;
Math,
// fpimage
fpcanvas, fpimgcanv, fpimage;
type
@ -144,6 +146,52 @@ type
property Options;
end;
TCDDrawStyle = (dsWinCE, dsCustom);
{@@
TCDGroupBox is a custom-drawn group box control
}
TCDGroupBoxDrawer = class;
TCDGroupBoxDrawerWinCE = class;
{ TCDGroupBox }
TCDGroupBox = class(TCustomControl)
private
FDrawStyle: TCDDrawStyle;
FCurrentDrawer: TCDGroupBoxDrawer;
FDrawerWinCE: TCDGroupBoxDrawerWinCE;
procedure PrepareCurrentDrawer();
procedure SetDrawStyle(const AValue: TCDDrawStyle);
public
CustomDrawer: TCDGroupBoxDrawer; // Fill the field to use the dsCustom draw mode
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure EraseBackground(DC: HDC); override;
procedure Paint; override;
published
property DrawStyle: TCDDrawStyle read FDrawStyle write SetDrawStyle;
property Caption;
property TabStop default False;
end;
{ TCDGroupBoxDrawer }
TCDGroupBoxDrawer = class
public
procedure SetClientRectPos(CDGroupBox: TCDGroupBox); virtual; abstract;
procedure DrawToIntfImage(ADest: TFPImageCanvas; CDGroupBox: TCDGroupBox); virtual; abstract;
end;
{ TCDGroupBoxDrawerWinCE }
TCDGroupBoxDrawerWinCE = class(TCDGroupBoxDrawer)
public
procedure SetClientRectPos(CDGroupBox: TCDGroupBox); override;
procedure DrawToIntfImage(ADest: TFPImageCanvas; CDGroupBox: TCDGroupBox); override;
end;
{@@
TCDTrackBar is a custom-drawn trackbar control
}
@ -405,6 +453,90 @@ begin
end;
end;
{ TCDGroupBox }
procedure TCDGroupBox.PrepareCurrentDrawer();
begin
case DrawStyle of
dsWince: FCurrentDrawer := FDrawerWinCE;
dsCustom: FCurrentDrawer := CustomDrawer;
end;
end;
procedure TCDGroupBox.SetDrawStyle(const AValue: TCDDrawStyle);
begin
if FDrawStyle=AValue then exit;
FDrawStyle:=AValue;
Invalidate;
PrepareCurrentDrawer();
FCurrentDrawer.SetClientRectPos(Self);
end;
constructor TCDGroupBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
TabStop := False;
FDrawerWinCE := TCDGroupBoxDrawerWinCE.Create;
end;
destructor TCDGroupBox.Destroy;
begin
inherited Destroy;
end;
procedure TCDGroupBox.EraseBackground(DC: HDC);
begin
end;
procedure TCDGroupBox.Paint;
var
AImage: TLazIntfImage = nil;
ABmp: TBitmap = nil;
lCanvas: TFPImageCanvas = nil;
begin
// inherited Paint;
PrepareCurrentDrawer();
ABmp := TBitmap.Create;
try
ABmp.Width := Width;
ABmp.Height := Height;
AImage := ABmp.CreateIntfImage;
lCanvas := TFPImageCanvas.create(AImage);
FCurrentDrawer.DrawToIntfImage(lCanvas, Self);
ABmp.LoadFromIntfImage(AImage);
finally
if lCanvas <> nil then lCanvas.Free;
if AImage <> nil then AImage.Free;
ABmp.Free;
end;
end;
{ TCDGroupBoxDrawerWinCE }
procedure TCDGroupBoxDrawerWinCE.SetClientRectPos(CDGroupBox: TCDGroupBox);
var
lRect: TRect;
lCaptionHeight: Integer;
begin
lCaptionHeight := 10;
lRect := Rect(1, lCaptionHeight, CDGroupBox.Width - 1, CDGroupBox.Height - 1);
CDGroupBox.AdjustClientRect(lRect);
end;
procedure TCDGroupBoxDrawerWinCE.DrawToIntfImage(ADest: TFPImageCanvas;
CDGroupBox: TCDGroupBox);
begin
ADest.Brush.FPColor := colRed;
ADest.Rectangle(0, 0, CDGroupBox.Width, CDGroupBox.height);
end;
{ TCDTrackBar }
{procedure TCDTrackBar.SetMax(Value: Integer);