mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-15 05:59:30 +02:00
Improves the wince drawing of TCDPageControl
git-svn-id: trunk@32988 -
This commit is contained in:
parent
190bd0e68d
commit
faf7563d26
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user