Improves the wince drawing of TCDPageControl

git-svn-id: trunk@32988 -
This commit is contained in:
sekelsenmat 2011-10-19 20:58:06 +00:00
parent 190bd0e68d
commit faf7563d26

View File

@ -550,14 +550,14 @@ type
{ TCDTabSheet } { TCDTabSheet }
TCDTabSheetDrawerGraph = class;
TCDPageControl = class; TCDPageControl = class;
TCDTabSheet = class(TCustomControl) TCDTabSheet = class(TCustomControl)
private private
FCurrentDrawer: TCDTabSheetDrawerGraph;
FIndex: integer; FIndex: integer;
public public
StoredWidth: Integer;
CDPageControl: TCDPageControl;
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
procedure EraseBackground(DC: HDC); override; procedure EraseBackground(DC: HDC); override;
@ -569,20 +569,6 @@ type
property Index: integer read FIndex write FIndex; property Index: integer read FIndex write FIndex;
end; end;
{ TCDTabSheetDrawer }
TCDTabSheetDrawer = class
public
procedure DrawToIntfImage(ADest: TFPImageCanvas; FPImg: TLazIntfImage;
CDTrackBar: TCDTabSheet); virtual; abstract;
end;
TCDTabSheetDrawerGraph = class(TCDTabSheetDrawer)
public
procedure DrawToIntfImage(ADest: TFPImageCanvas; FPImg: TLazIntfImage;
CDTabSheet: TCDTabSheet); override;
end;
{ TCDPageControl } { TCDPageControl }
TCDPageControlDrawer = class; TCDPageControlDrawer = class;
@ -611,6 +597,7 @@ type
FMEnterL, FMEnterR: boolean; FMEnterL, FMEnterR: boolean;
FPageIndex: integer; //FPageCount FPageIndex: integer; //FPageCount
function GetPageCount: integer; function GetPageCount: integer;
procedure SetDrawStyle(AValue: TCDDrawStyle);
procedure SetMouseUP; procedure SetMouseUP;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: integer); override; X, Y: integer); override;
@ -623,6 +610,7 @@ type
procedure SetPageIndex(Value: integer); procedure SetPageIndex(Value: integer);
procedure UpdateAllDesignerFlags; procedure UpdateAllDesignerFlags;
procedure UpdateDesignerFlags(APageIndex: integer); procedure UpdateDesignerFlags(APageIndex: integer);
procedure PositionTabSheet(ATabSheet: TCDTabSheet);
protected protected
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
@ -636,6 +624,7 @@ type
procedure InsertPage(aIndex: integer; S: string); procedure InsertPage(aIndex: integer; S: string);
procedure RemovePage(aIndex: integer); procedure RemovePage(aIndex: integer);
procedure AddPage(S: string); procedure AddPage(S: string);
function GetPage(aIndex: integer): TCDTabSheet;
published published
property ActivePage: TCDTabSheet read FActivePage write SetActivePage; property ActivePage: TCDTabSheet read FActivePage write SetActivePage;
property DrawStyle: TCDDrawStyle read FDrawStyle write SetDrawStyle; property DrawStyle: TCDDrawStyle read FDrawStyle write SetDrawStyle;
@ -655,13 +644,13 @@ type
TCDPageControlDrawer = class(TCDControlDrawer) TCDPageControlDrawer = class(TCDControlDrawer)
public public
CDPageControl: TCDPageControl;
function GetPageIndexFromXY(x, y: integer): integer; virtual; abstract; function GetPageIndexFromXY(x, y: integer): integer; virtual; abstract;
function GetTabHeight(AIndex: Integer; CDPageControl: TCDPageControl): Integer; virtual; abstract; function GetTabHeight(AIndex: Integer): Integer; virtual; abstract;
function GetTabWidth(AIndex: Integer; CDPageControl: TCDPageControl): Integer; virtual; abstract; function GetTabWidth(ADest: TCanvas; AIndex: Integer): Integer; virtual; abstract;
procedure DrawToIntfImage(ADest: TFPImageCanvas; FPImg: TLazIntfImage; procedure DrawToIntfImage(ADest: TFPImageCanvas; FPImg: TLazIntfImage); virtual; abstract;
CDPageControl: TCDPageControl); virtual; abstract; procedure DrawToCanvas(ADest: TCanvas); virtual; abstract;
procedure DrawToCanvas(ADest: TCanvas; CDPageControl: TCDPageControl); procedure DrawTabSheet(ADest: TCanvas; ATabSheet: TCDTabSheet); virtual; abstract;
virtual; abstract;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: integer); virtual; abstract; X, Y: integer); virtual; abstract;
end; end;
@ -671,15 +660,18 @@ type
TCDPageControlDrawerWinCE = class(TCDPageControlDrawer) TCDPageControlDrawerWinCE = class(TCDPageControlDrawer)
private private
StartIndex: integer; //FEndIndex StartIndex: integer; //FEndIndex
procedure DrawCaptionBar(ADest: TCanvas; lRect: TRect; CL: TColor; CDPageControl: TCDPageControl); LeftmostTabVisibleIndex: Integer;
procedure DrawCaptionBar(ADest: TCanvas; lRect: TRect; CL: TColor);
procedure DrawTabs(ADest: TCanvas);
procedure DrawTab(ADest: TCanvas; AIndex: Integer; ACurStartLeftPos: Integer; ACurPage: TCDTabSheet);
public public
function GetPageIndexFromXY(x, y: integer): integer; override; function GetPageIndexFromXY(x, y: integer): integer; override;
function GetTabHeight(AIndex: Integer; CDPageControl: TCDPageControl): Integer; override; function GetTabHeight(AIndex: Integer): Integer; override;
function GetTabWidth(AIndex: Integer; CDPageControl: TCDPageControl): Integer; override; function GetTabWidth(ADest: TCanvas; AIndex: Integer): Integer; override;
function GetClientRect(AControl: TCDControl): TRect; override; function GetClientRect(AControl: TCDControl): TRect; override;
procedure DrawToIntfImage(ADest: TFPImageCanvas; FPImg: TLazIntfImage; procedure DrawToIntfImage(ADest: TFPImageCanvas; FPImg: TLazIntfImage); override;
CDPageControl: TCDPageControl); override; procedure DrawToCanvas(ADest: TCanvas); override;
procedure DrawToCanvas(ADest: TCanvas; CDPageControl: TCDPageControl); override; procedure DrawTabSheet(ADest: TCanvas; ATabSheet: TCDTabSheet); override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: integer); override; X, Y: integer); override;
end; end;
@ -2423,12 +2415,10 @@ begin
csDesignFixedBounds, csDoubleClicks, csDesignInteractive]; csDesignFixedBounds, csDoubleClicks, csDesignInteractive];
//ControlStyle := ControlStyle + [csAcceptsControls, csDesignFixedBounds, //ControlStyle := ControlStyle + [csAcceptsControls, csDesignFixedBounds,
// csNoDesignVisible, csNoFocus]; // csNoDesignVisible, csNoFocus];
FCurrentDrawer := TCDTabSheetDrawerGraph.Create;
end; end;
destructor TCDTabSheet.Destroy; destructor TCDTabSheet.Destroy;
begin begin
FCurrentDrawer.Free;
inherited Destroy; inherited Destroy;
end; end;
@ -2438,37 +2428,15 @@ begin
end; end;
procedure TCDTabSheet.Paint; procedure TCDTabSheet.Paint;
var
AImage: TLazIntfImage = nil;
ABmp: TBitmap = nil;
lCanvas: TFPImageCanvas = nil;
begin begin
inherited Paint; inherited Paint;
ABmp := TBitmap.Create; if CDPageControl <> nil then
try begin
ABmp.Width := Width; TCDPageControlDrawer(CDPageControl.FCurrentDrawer).DrawTabSheet(Canvas, Self);
ABmp.Height := Height;
AImage := ABmp.CreateIntfImage;
lCanvas := TFPImageCanvas.Create(AImage);
FCurrentDrawer.DrawToIntfImage(lCanvas, AImage, Self);
ABmp.LoadFromIntfImage(AImage);
Canvas.Draw(0, 0, ABmp);
finally
if lCanvas <> nil then
lCanvas.Free;
if AImage <> nil then
AImage.Free;
ABmp.Free;
end; end;
end; end;
procedure TCDTabSheetDrawerGraph.DrawToIntfImage(ADest: TFPImageCanvas;
FPImg: TLazIntfImage; CDTabSheet: TCDTabSheet);
begin
ADest.Rectangle(0, 0, CDTabSheet.Width - 1, CDTabSheet.Height - 1);
end;
{ TCDPageControlEditor } { TCDPageControlEditor }
procedure TCDPageControlEditor.ShowPageMenuItemClick(Sender: TObject); procedure TCDPageControlEditor.ShowPageMenuItemClick(Sender: TObject);
@ -2608,16 +2576,11 @@ begin
NewPage.Caption := NewPage.Name NewPage.Caption := NewPage.Name
else else
NewPage.Caption := S; NewPage.Caption := S;
NewPage.SetBounds(1, 32 + 1, Width - 3, Height - 32 - 4);
NewPage.BorderSpacing.Top := 32 + 2; PositionTabSheet(NewPage);
NewPage.BorderSpacing.Left := 2;
NewPage.BorderSpacing.Right := 3; SetActivePage(NewPage);
NewPage.BorderSpacing.Bottom := 3;
NewPage.Align := alClient;
if ActivePage <> nil then
ActivePage.Hide;
ActivePage := NewPage;
NewPage.Show;
//FPages.AddObject(NewPage.Name, NewPage); //FPages.AddObject(NewPage.Name, NewPage);
FPages.Insert(FPages.Count); FPages.Insert(FPages.Count);
FPages.Items[FPages.Count - 1].DisplayName := NewPage.Name; FPages.Items[FPages.Count - 1].DisplayName := NewPage.Name;
@ -2627,6 +2590,11 @@ begin
//FPageCount := PageCount + 1; //FPageCount := PageCount + 1;
enD; enD;
function TCDPageControl.GetPage(aIndex: integer): TCDTabSheet;
begin
Result := FPages[aIndex].TabPage;
end;
procedure TCDPageControl.InsertPage(aIndex: integer; S: string); procedure TCDPageControl.InsertPage(aIndex: integer; S: string);
var var
NewPage: TCDTabSheet; NewPage: TCDTabSheet;
@ -2640,17 +2608,10 @@ begin
else else
NewPage.Caption := S; NewPage.Caption := S;
NewPage.SetBounds(1, 32 + 1, Width - 3, Height - 32 - 4); PositionTabSheet(NewPage);
NewPage.BorderSpacing.Top := 32 + 2;
NewPage.BorderSpacing.Left := 2; SetActivePage(NewPage);
NewPage.BorderSpacing.Right := 3;
NewPage.BorderSpacing.Bottom := 3;
NewPage.Align := alClient;
if ActivePage <> nil then
ActivePage.Hide;
ActivePage := NewPage;
NewPage.Show;
//FPages.AddObject(NewPage.Name, NewPage); //FPages.AddObject(NewPage.Name, NewPage);
FPages.Insert(aIndex); FPages.Insert(aIndex);
FPages.Items[aIndex].DisplayName := NewPage.Name; FPages.Items[aIndex].DisplayName := NewPage.Name;
@ -2744,6 +2705,7 @@ begin
TabStop := True; TabStop := True;
FDrawerWinCE := TCDPageControlDrawerWinCE.Create; FDrawerWinCE := TCDPageControlDrawerWinCE.Create;
TCDPageControlDrawer(FDrawerWinCE).CDPageControl := Self;
CustomDrawer := FDrawerWinCE; // Dummy to avoid designer crashes CustomDrawer := FDrawerWinCE; // Dummy to avoid designer crashes
FDrawStyle := dsWinCE; FDrawStyle := dsWinCE;
@ -2762,21 +2724,26 @@ end;
procedure TCDPageControl.SetActivePage(Value: TCDTabSheet); procedure TCDPageControl.SetActivePage(Value: TCDTabSheet);
var var
i: integer; i: integer;
CurPage: TCDTabSheet;
begin begin
for i := 0 to FPages.Count - 1 do for i := 0 to FPages.Count - 1 do
begin begin
if FPages[i].TabPage = Value then CurPage := FPages[i].TabPage;
if CurPage = Value then
begin begin
Value.Show; PositionTabSheet(CurPage);
CurPage.BringToFront;
// Check first, Tab is Visible? // Check first, Tab is Visible?
FPageIndex := i; FPageIndex := i;
end end
else else
Value.Hide; begin
CurPage.Align := alNone;
CurPage.Height := 0;
end;
end; end;
FActivePage := Value; FActivePage := Value;
Value.BringToFront;
Invalidate; Invalidate;
end; end;
@ -2807,11 +2774,11 @@ begin
AImage := ABmp.CreateIntfImage; AImage := ABmp.CreateIntfImage;
lCanvas := TFPImageCanvas.Create(AImage); lCanvas := TFPImageCanvas.Create(AImage);
// First step of the drawing: FCL TFPCustomCanvas for fast pixel access // First step of the drawing: FCL TFPCustomCanvas for fast pixel access
TCDPageControlDrawer(FCurrentDrawer).DrawToIntfImage(lCanvas, AImage, Self); TCDPageControlDrawer(FCurrentDrawer).DrawToIntfImage(lCanvas, AImage);
ABmp.LoadFromIntfImage(AImage); ABmp.LoadFromIntfImage(AImage);
ABmp.Canvas.Font.Assign(Font); ABmp.Canvas.Font.Assign(Font);
// Second step of the drawing: LCL TCustomCanvas for easy font access // Second step of the drawing: LCL TCustomCanvas for easy font access
TCDPageControlDrawer(FCurrentDrawer).DrawToCanvas(ABmp.Canvas, Self); TCDPageControlDrawer(FCurrentDrawer).DrawToCanvas(ABmp.Canvas);
Canvas.Draw(0, 0, ABmp); Canvas.Draw(0, 0, ABmp);
finally finally
if lCanvas <> nil then if lCanvas <> nil then
@ -2845,6 +2812,16 @@ begin
FPages[APageIndex].TabPage.ControlStyle - [csNoDesignVisible]; FPages[APageIndex].TabPage.ControlStyle - [csNoDesignVisible];
end; end;
procedure TCDPageControl.PositionTabSheet(ATabSheet: TCDTabSheet);
begin
ATabSheet.SetBounds(1, 32 + 1, Width - 3, Height - 32 - 4);
ATabSheet.BorderSpacing.Top := 32 + 2;
ATabSheet.BorderSpacing.Left := 2;
ATabSheet.BorderSpacing.Right := 3;
ATabSheet.BorderSpacing.Bottom := 3;
ATabSheet.Align := alClient;
end;
procedure TCDPageControl.SetMouseUP; procedure TCDPageControl.SetMouseUP;
begin begin
FMDownL := False; FMDownL := False;
@ -2856,6 +2833,12 @@ begin
Result := FPages.Count; Result := FPages.Count;
end; end;
procedure TCDPageControl.SetDrawStyle(AValue: TCDDrawStyle);
begin
if FDrawStyle=AValue then Exit;
FDrawStyle:=AValue;
end;
procedure TCDPageControl.MouseDown(Button: TMouseButton; Shift: TShiftState; procedure TCDPageControl.MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: integer); X, Y: integer);
begin begin
@ -2866,18 +2849,9 @@ end;
{ TCDPageControlDrawerWinCE } { TCDPageControlDrawerWinCE }
procedure TCDPageControlDrawerWinCE.DrawCaptionBar(ADest: TCanvas; procedure TCDPageControlDrawerWinCE.DrawCaptionBar(ADest: TCanvas;
lRect: TRect; CL: TColor; CDPageControl: TCDPageControl); lRect: TRect; CL: TColor);
var
aRect, bRect, cRect: TRect;
i: integer;
rWidth: integer;
aText, bText: string;
CornerColor: TFPColor;
MaskColor: TColor;
CaptionHeight: Integer;
RButtHeight: integer;
begin begin
CaptionHeight := GetTabHeight(CDPageControl.PageIndex, CDPageControl) - 4; { CaptionHeight := GetTabHeight(CDPageControl.PageIndex, CDPageControl) - 4;
RButtHeight := GetTabHeight(CDPageControl.PageIndex, CDPageControl); RButtHeight := GetTabHeight(CDPageControl.PageIndex, CDPageControl);
aRect := lRect; aRect := lRect;
ADest.Pen.Style := psSolid; ADest.Pen.Style := psSolid;
@ -2986,7 +2960,94 @@ begin
ADest.Line(lRect.Right, 1, lRect.Right, 25); ADest.Line(lRect.Right, 1, lRect.Right, 25);
ADest.Line(lRect.Right, 25, lRect.Right - 51, 25); ADest.Line(lRect.Right, 25, lRect.Right - 51, 25);
ADest.Line(lRect.Right - 51, 25, lRect.Right - 51, 1); ADest.Line(lRect.Right - 51, 25, lRect.Right - 51, 1);
ADest.Pen.FPColor := TColorToFPColor(ColorToRGB($00FFFFFF)); ADest.Pen.FPColor := TColorToFPColor(ColorToRGB($00FFFFFF));}
end;
procedure TCDPageControlDrawerWinCE.DrawTabs(ADest: TCanvas);
var
CurVisibleIndex: Integer = 0;
IsPainting: Boolean = False;
CurPage: TCDTabSheet;
CurStartLeftPos: Integer = 0;
i: Integer;
begin
for i := 0 to CDPageControl.Pages.Count - 1 do
begin
CurPage := CDPageControl.GetPage(i);
if CurPage.Visible then
begin
if CurVisibleIndex = LeftmostTabVisibleIndex then
IsPainting := True;
if IsPainting then
begin
DrawTab(ADest, i, CurStartLeftPos, CurPage);
CurStartLeftPos := CurStartLeftPos + GetTabWidth(ADest, i);
end;
Inc(CurVisibleIndex);
end;
end;
end;
procedure TCDPageControlDrawerWinCE.DrawTab(ADest: TCanvas; AIndex: Integer;
ACurStartLeftPos: Integer; ACurPage: TCDTabSheet);
var
IsSelected: Boolean;
lTabWidth, lTabHeight, lTabTopPos: Integer;
Points: array of TPoint;
begin
IsSelected := CDPageControl.ActivePage = ACurPage;
if IsSelected then
begin
lTabTopPos := 0;
lTabHeight := GetTabHeight(AIndex);
end
else
begin
lTabTopPos := 5;
lTabHeight := GetTabHeight(AIndex)-5;
end;
lTabWidth := GetTabWidth(ADest, AIndex);
// Fill the area inside the outer border
ADest.Pen.Style := psClear;
ADest.Brush.Style := bsSolid;
ADest.Brush.Color := clWhite;
SetLength(Points, 5);
Points[0] := Point(ACurStartLeftPos, lTabTopPos);
Points[1] := Point(ACurStartLeftPos+lTabWidth-5, lTabTopPos);
Points[2] := Point(ACurStartLeftPos+lTabWidth, lTabTopPos+5);
Points[3] := Point(ACurStartLeftPos+lTabWidth, lTabTopPos+lTabHeight);
Points[4] := Point(ACurStartLeftPos, lTabTopPos+lTabHeight);
ADest.Polygon(Points);
// Draw the outer border only in the top and right sides,
// and bottom if unselected
ADest.Pen.Style := psSolid;
ADest.Brush.Style := bsClear;
ADest.Pen.Color := ColorToRGB($009C9B91);
ADest.MoveTo(ACurStartLeftPos+1, lTabTopPos);
ADest.LineTo(ACurStartLeftPos+lTabWidth-5, lTabTopPos);
ADest.LineTo(ACurStartLeftPos+lTabWidth, lTabTopPos+5);
ADest.LineTo(ACurStartLeftPos+lTabWidth, lTabTopPos+lTabHeight);
// If it is selected, add a selection frame
if IsSelected then
begin
ADest.Pen.Color := ColorToRGB($00D6C731);
ADest.Pen.Style := psSolid;
ADest.Brush.Style := bsClear;
ADest.Rectangle(
ACurStartLeftPos+3, lTabTopPos+3,
ACurStartLeftPos+lTabWidth-5, lTabTopPos+lTabHeight-5
);
end;
// Now the text
ADest.TextOut(ACurStartLeftPos+5, lTabTopPos+5, ACurPage.Caption);
end; end;
function TCDPageControlDrawerWinCE.GetPageIndexFromXY(x, y: integer): integer; function TCDPageControlDrawerWinCE.GetPageIndexFromXY(x, y: integer): integer;
@ -3000,42 +3061,54 @@ begin
// PageIndex := Result; // PageIndex := Result;
end; end;
function TCDPageControlDrawerWinCE.GetTabHeight(AIndex: Integer; CDPageControl: TCDPageControl): Integer; function TCDPageControlDrawerWinCE.GetTabHeight(AIndex: Integer): Integer;
//var
// CurPage: TCDTabSheet;
begin begin
//CurPage := CDPageControl.GetPage(AIndex);
if CDPageControl.Font.Size = 0 then if CDPageControl.Font.Size = 0 then
Result := 32 Result := 32
else else
Result := CDPageControl.Font.Size + 22; Result := CDPageControl.Font.Size + 22;
end; end;
function TCDPageControlDrawerWinCE.GetTabWidth(AIndex: Integer; CDPageControl: TCDPageControl): Integer; function TCDPageControlDrawerWinCE.GetTabWidth(ADest: TCanvas; AIndex: Integer): Integer;
const
TCDPageControl_WinCE_TabCaptionExtraWidth = 20;
var
CurPage: TCDTabSheet;
begin begin
CurPage := CDPageControl.GetPage(AIndex);
if ADest <> nil then
begin
Result := ADest.TextWidth(CurPage.Caption) + TCDPageControl_WinCE_TabCaptionExtraWidth;
CurPage.StoredWidth := Result;
end
else
Result := CurPage.StoredWidth;
end; end;
function TCDPageControlDrawerWinCE.GetClientRect(AControl: TCDControl): TRect; function TCDPageControlDrawerWinCE.GetClientRect(AControl: TCDControl): TRect;
var var
CDPageControl: TCDPageControl absolute AControl;
lCaptionHeight: Integer; lCaptionHeight: Integer;
begin begin
lCaptionHeight := GetTabHeight(CDPageControl.PageIndex, CDPageControl) - 4; lCaptionHeight := GetTabHeight(CDPageControl.PageIndex) - 4;
Result := Rect(5, lCaptionHeight + 1, CDPageControl.Width - 10, Result := Rect(5, lCaptionHeight + 1, CDPageControl.Width - 10,
CDPageControl.Height - lCaptionHeight - 5); CDPageControl.Height - lCaptionHeight - 5);
end; end;
procedure TCDPageControlDrawerWinCE.DrawToIntfImage(ADest: TFPImageCanvas; procedure TCDPageControlDrawerWinCE.DrawToIntfImage(ADest: TFPImageCanvas;
FPImg: TLazIntfImage; CDPageControl: TCDPageControl); FPImg: TLazIntfImage);
begin begin
end; end;
procedure TCDPageControlDrawerWinCE.DrawToCanvas(ADest: TCanvas; procedure TCDPageControlDrawerWinCE.DrawToCanvas(ADest: TCanvas);
CDPageControl: TCDPageControl);
var var
CaptionHeight: Integer; CaptionHeight: Integer;
lColor: TColor; lColor: TColor;
begin begin
CaptionHeight := GetTabHeight(CDPageControl.PageIndex, CDPageControl) - 4; CaptionHeight := GetTabHeight(CDPageControl.PageIndex);
if CDPageControl.Color = clDefault then lColor := clSilver if CDPageControl.Color = clDefault then lColor := clSilver
else lColor := ColorToRGB(CDPageControl.Color); else lColor := ColorToRGB(CDPageControl.Color);
@ -3068,14 +3141,51 @@ begin
// Tabs // Tabs
ADest.Font.Name := CDPageControl.Font.Name; ADest.Font.Name := CDPageControl.Font.Name;
ADest.Font.Size := CDPageControl.Font.Size; ADest.Font.Size := CDPageControl.Font.Size;
DrawCaptionBar(ADest, Rect(0, 0, CDPageControl.Width - // DrawCaptionBar(ADest, Rect(0, 0, CDPageControl.Width -
2, CaptionHeight + 1), CDPageControl.Color, CDPageControl); // 2, CaptionHeight + 1), CDPageControl.Color, CDPageControl);
DrawTabs(ADest);
end;
procedure TCDPageControlDrawerWinCE.DrawTabSheet(ADest: TCanvas; ATabSheet: TCDTabSheet);
begin
ADest.Brush.Color := CDPageControl.Color;
ADest.Brush.Style := bsSolid;
ADest.Pen.Style := psClear;
ADest.Rectangle(0, 0, ATabSheet.Width, ATabSheet.Height);
end; end;
procedure TCDPageControlDrawerWinCE.MouseDown(Button: TMouseButton; procedure TCDPageControlDrawerWinCE.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: integer); Shift: TShiftState; X, Y: integer);
var
i: Integer;
CurPage: TCDTabSheet;
CurVisibleIndex: Integer = 0;
CurStartLeftPos: Integer = 0;
VisiblePagesStarted: Boolean = False;
begin begin
for i := 0 to CDPageControl.Pages.Count - 1 do
begin
CurPage := CDPageControl.GetPage(i);
if CurPage.Visible then
begin
if CurVisibleIndex = LeftmostTabVisibleIndex then
VisiblePagesStarted := True;
if VisiblePagesStarted then
begin
if (X > CurStartLeftPos) and
(X < CurStartLeftPos + GetTabWidth(nil, i)) and
(Y < GetTabHeight(i)) then
begin
CDPageControl.ActivePage := CurPage;
Exit;
end;
CurStartLeftPos := CurStartLeftPos + GetTabWidth(nil, i);
end;
Inc(CurVisibleIndex);
end;
end;
end; end;
end. end.