?? bsskintabs.pas
字號:
DrawCloseImage(Cnvs, CIX, CIY, clBlack);
end;
//
TbsSkinCustomTabSheet(Self.Pages[I]).ButtonRect := ButtonR;
if TabPosition = tpLeft
then
begin
R1 := TbsSkinCustomTabSheet(Self.Pages[I]).ButtonRect;
R2 := Rect(R1.Top, W - R1.Right, R1.Bottom, W - R1.Left);
TbsSkinCustomTabSheet(Self.Pages[I]).ButtonRect := R2;
end
else
if TabPosition = tpRight
then
begin
R1 := TbsSkinCustomTabSheet(Self.Pages[I]).ButtonRect;
R2 := Rect(H - R1.Bottom, R1.Left, H - R1.Top, R1.Right);
TbsSkinCustomTabSheet(Self.Pages[I]).ButtonRect := R2;
end;
Exit;
end;
if not IsNullRect(CloseButtonRect)
then
begin
if TbsSkinCustomTabSheet(Self.Pages[I]).ButtonMouseDown and
TbsSkinCustomTabSheet(Self.Pages[I]).ButtonMouseIn
then
R1 := CloseButtonDownRect
else
if TbsSkinCustomTabSheet(Self.Pages[I]).ButtonMouseIn
then
R1 := CloseButtonActiveRect
else
R1 := CloseButtonRect;
X := R.Left;
Y := R.Top + RectHeight(R) div 2 - RectHeight(R1) div 2;
ButtonR := Rect(X, Y, X + RectWidth(R1), Y + RectHeight(R1));
if ButtonTransparent
then
begin
Buffer := TBitMap.Create;
Buffer.Width := RectWidth(R1);
Buffer.Height := RectHeight(R1);
Buffer.Transparent := True;
Buffer.TransparentMode := tmFixed;
Buffer.TransparentColor := ButtonTransparentColor;
Buffer.Canvas.CopyRect(Rect(0, 0, Buffer.Width, Buffer.Height),
Picture.Canvas, R1);
Cnvs.Draw(ButtonR.Left, ButtonR.Top, Buffer);
Buffer.Free;
end
else
Cnvs.CopyRect(ButtonR, Picture.Canvas, R1);
//
TbsSkinCustomTabSheet(Self.Pages[I]).ButtonRect := ButtonR;
if TabPosition = tpLeft
then
begin
R1 := TbsSkinCustomTabSheet(Self.Pages[I]).ButtonRect;
R2 := Rect(R1.Top, W - R1.Right, R1.Bottom, W - R1.Left);
TbsSkinCustomTabSheet(Self.Pages[I]).ButtonRect := R2;
end
else
if TabPosition = tpRight
then
begin
R1 := TbsSkinCustomTabSheet(Self.Pages[I]).ButtonRect;
R2 := Rect(H - R1.Bottom, R1.Left, H - R1.Top, R1.Right);
TbsSkinCustomTabSheet(Self.Pages[I]).ButtonRect := R2;
end;
Exit;
end;
ButtonData := nil;
CIndex := FSD.GetControlIndex('resizetoolbutton');
if CIndex <> -1
then
ButtonData := TbsDataSkinButtonControl(FSD.CtrlList[CIndex]);
if ButtonData = nil then Exit;
//
ButtonR := Rect(0, 0, FCloseSize, FCloseSize);
//
Buffer := TBitMap.Create;
Buffer.Width := RectWidth(ButtonR);
Buffer.Height := RectHeight(ButtonR);
//
with ButtonData do
begin
XO := RectWidth(ButtonR) - RectWidth(SkinRect);
YO := RectHeight(ButtonR) - RectHeight(SkinRect);
BtnLTPoint := LTPoint;
BtnRTPoint := Point(RTPoint.X + XO, RTPoint.Y);
BtnLBPoint := Point(LBPoint.X, LBPoint.Y + YO);
BtnRBPoint := Point(RBPoint.X + XO, RBPoint.Y + YO);
BtnClRect := Rect(CLRect.Left, ClRect.Top,
CLRect.Right + XO, ClRect.Bottom + YO);
BtnSkinPicture := TBitMap(SkinData.FActivePictures.Items[ButtonData.PictureIndex]);
BSR := SkinRect;
ABSR := ActiveSkinRect;
DBSR := DownSkinRect;
if IsNullRect(ABSR) then ABSR := BSR;
if IsNullRect(DBSR) then DBSR := ABSR;
//
if TbsSkinCustomTabSheet(Self.Pages[I]).ButtonMouseDown and
TbsSkinCustomTabSheet(Self.Pages[I]).ButtonMouseIn
then
begin
CreateSkinImage(LTPoint, RTPoint, LBPoint, RBPoint, CLRect,
BtnLtPoint, BtnRTPoint, BtnLBPoint, BtnRBPoint, BtnCLRect,
Buffer, BtnSkinPicture, DBSR, Buffer.Width, Buffer.Height, True,
LeftStretch, TopStretch, RightStretch, BottomStretch,
StretchEffect, StretchType);
Buffer.Canvas.Font.Color := DownFontColor;
end
else
if TbsSkinCustomTabSheet(Self.Pages[I]).ButtonMouseIn
then
begin
CreateSkinImage(LTPoint, RTPoint, LBPoint, RBPoint, CLRect,
BtnLtPoint, BtnRTPoint, BtnLBPoint, BtnRBPoint, BtnCLRect,
Buffer, BtnSkinPicture, ABSR, Buffer.Width, Buffer.Height, True,
LeftStretch, TopStretch, RightStretch, BottomStretch,
StretchEffect, StretchType);
Buffer.Canvas.Font.Color := ActiveFontColor;
end
else
begin
CreateSkinImage(LTPoint, RTPoint, LBPoint, RBPoint, CLRect,
BtnLtPoint, BtnRTPoint, BtnLBPoint, BtnRBPoint, BtnCLRect,
Buffer, BtnSkinPicture, BSR, Buffer.Width, Buffer.Height, True,
LeftStretch, TopStretch, RightStretch, BottomStretch,
StretchEffect, StretchType);
Buffer.Canvas.Font.Color := FontColor;
end;
end;
CIX := Buffer.Width div 2 - 5;
CIY := Buffer.Height div 2 - 5;
DrawCloseImage(Buffer.Canvas, CIX, CIY, Buffer.Canvas.Font.Color);
X := R.Left;
Y := R.Top + RectHeight(R) div 2 - Buffer.Height div 2;
TbsSkinCustomTabSheet(Self.Pages[I]).ButtonRect := Rect(X, Y,
X + Buffer.Width, Y + Buffer.Height);
if TabPosition = tpLeft
then
begin
R1 := TbsSkinCustomTabSheet(Self.Pages[I]).ButtonRect;
R2 := Rect(R1.Top, W - R1.Right, R1.Bottom, W - R1.Left);
TbsSkinCustomTabSheet(Self.Pages[I]).ButtonRect := R2;
end
else
if TabPosition = tpRight
then
begin
R1 := TbsSkinCustomTabSheet(Self.Pages[I]).ButtonRect;
R2 := Rect(H - R1.Bottom, R1.Left, H - R1.Top, R1.Right);
TbsSkinCustomTabSheet(Self.Pages[I]).ButtonRect := R2;
end;
Cnvs.Draw(X, Y, Buffer);
Buffer.Free;
end;
procedure TbsSkinPageControl.SetShowCloseButtons(Value: Boolean);
begin
if FShowCloseButtons <> Value
then
begin
FShowCloseButtons := Value;
if FShowCloseButtons
then
begin
if TabPosition in [tpTop, tpBottom]
then
FTempImages.Width := FTempImages.Width + FCloseSize
else
FTempImages.Height := FTempImages.Height + FCloseSize
end
else
begin
if TabPosition in [tpTop, tpBottom]
then
FTempImages.Width := FTempImages.Width - FCloseSize
else
FTempImages.Height := FTempImages.Height - FCloseSize;
end;
end;
Invalidate;
end;
procedure TbsSkinPageControl.SetImages(value: TCustomImageList);
begin
if FImages <> nil then
begin
if TabPosition in [tpTop, tpBottom] then
FTempImages.Width := FTempImages.Width - FImages.Width
else
FTempImages.Height := FTempImages.Height - FImages.Height;
end;
FImages := Value;
if FImages <> nil then
begin
if TabPosition in [tpTop, tpBottom] then
FTempImages.Width := FTempImages.Width + FImages.Width
else // tpLeft, tpRight
FTempImages.Height := FTempImages.Height + FImages.Height;
end;
Invalidate;
end;
procedure TbsSkinPageControl.WMCHECKPARENTBG;
begin
if TabsBGTransparent then RePaint;
end;
procedure TbsSkinPageControl.DrawEmptyBackGround(DC: HDC);
var
C: TCanvas;
TabSheetBG, Buffer2: TBitMap;
X, Y, XCnt, YCnt, w, h, w1, h1: Integer;
begin
if (Width <= 0) or (Height <=0) then Exit;
C := TCanvas.Create;
C.Handle := DC;
if BGPictureIndex <> -1
then
begin
TabSheetBG := TBitMap(FSD.FActivePictures.Items[BGPictureIndex]);
if StretchEffect and (Width > 0) and (Height > 0)
then
begin
case StretchType of
bsstFull:
begin
C.StretchDraw(Rect(0, 0, Width, Height), TabSheetBG);
end;
bsstVert:
begin
Buffer2 := TBitMap.Create;
Buffer2.Width := Width;
Buffer2.Height := TabSheetBG.Height;
Buffer2.Canvas.StretchDraw(Rect(0, 0, Buffer2.Width, Buffer2.Height), TabSheetBG);
YCnt := Height div Buffer2.Height;
for Y := 0 to YCnt do
C.Draw(0, Y * Buffer2.Height, Buffer2);
Buffer2.Free;
end;
bsstHorz:
begin
Buffer2 := TBitMap.Create;
Buffer2.Width := TabSheetBG.Width;
Buffer2.Height := Height;
Buffer2.Canvas.StretchDraw(Rect(0, 0, Buffer2.Width, Buffer2.Height), TabSheetBG);
XCnt := Width div Buffer2.Width;
for X := 0 to XCnt do
C.Draw(X * Buffer2.Width, 0, Buffer2);
Buffer2.Free;
end;
end;
end
else
if (Width > 0) and (Height > 0)
then
begin
XCnt := Width div TabSheetBG.Width;
YCnt := Height div TabSheetBG.Height;
for X := 0 to XCnt do
for Y := 0 to YCnt do
C.Draw(X * TabSheetBG.Width, Y * TabSheetBG.Height, TabSheetBG);
end;
end
else
begin
w1 := Width;
h1 := Height;
TabSheetBG := TBitMap.Create;
TabSheetBG.Width := RectWidth(ClRect);
TabSheetBG.Height := RectHeight(ClRect);
TabSheetBG.Canvas.CopyRect(Rect(0, 0, TabSheetBG.Width, TabSheetBG.Height),
Picture.Canvas,
Rect(SkinRect.Left + ClRect.Left, SkinRect.Top + ClRect.Top,
SkinRect.Left + ClRect.Right,
SkinRect.Top + ClRect.Bottom));
if StretchEffect and (Width > 0) and (Height > 0)
then
begin
case StretchType of
bsstFull:
begin
C.StretchDraw(Rect(0, 0, Width, Height), TabSheetBG);
end;
bsstVert:
begin
Buffer2 := TBitMap.Create;
Buffer2.Width := Width;
Buffer2.Height := TabSheetBG.Height;
Buffer2.Canvas.StretchDraw(Rect(0, 0, Buffer2.Width, Buffer2.Height), TabSheetBG);
YCnt := Height div Buffer2.Height;
for Y := 0 to YCnt do
C.Draw(0, Y * Buffer2.Height, Buffer2);
Buffer2.Free;
end;
bsstHorz:
begin
Buffer2 := TBitMap.Create;
Buffer2.Width := TabSheetBG.Width;
Buffer2.Height := Height;
Buffer2.Canvas.StretchDraw(Rect(0, 0, Buffer2.Width, Buffer2.Height), TabSheetBG);
XCnt := Width div Buffer2.Width;
for X := 0 to XCnt do
C.Draw(X * Buffer2.Width, 0, Buffer2);
Buffer2.Free;
end;
end;
end
else
begin
w := RectWidth(ClRect);
h := RectHeight(ClRect);
XCnt := w1 div w;
YCnt := h1 div h;
for X := 0 to XCnt do
for Y := 0 to YCnt do
C.Draw(X * w, Y * h, TabSheetBG);
end;
TabSheetBG.Free;
end;
C.Free;
end;
procedure TbsSkinPageControl.SetTabsBGTransparent(Value: Boolean);
begin
if FTabsBGTransparent <> Value
then
begin
FTabsBGTransparent := Value;
Invalidate;
end;
end;
procedure TbsSkinPageControl.UpDateTabs;
begin
if FIndex <> -1
then
begin
if TabHeight <= 0
then
SetItemSize(TabWidth, RectHeight(TabRect))
else
SetItemSize(TabWidth, TabHeight);
end
else
begin
if TabHeight <= 0
then
SetItemSize(TabWidth, FDefaultItemHeight)
else
SetItemSize(TabWidth, TabHeight);
end;
if MultiLine and (FSkinUpDown <> nil)
then
HideSkinUpDown;
ReAlign;
end;
procedure TbsSkinPageControl.CMMouseLeave;
begin
if FHideTabs then Exit;
if (FOldActiveTabIndex <> - 1) and (FOldActiveTabIndex <> TabIndex) and
(FOldActiveTabIndex < PageCount)
then
begin
DrawTabs(Canvas);
FOldActiveTabIndex := -1;
FOldActiveTab := -1;
end;
if (FActiveTabIndex <> - 1) and (FActiveTabIndex <> TabIndex) and
(FActiveTabIndex < PageCount)
then
begin
DrawTabs(Canvas);
FActiveTabIndex := -1;
FActiveTab := -1;
end;
end;
procedure TbsSkinPageControl.MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
var
R, BR: TRect;
begin
inherited;
if FHideTabs then Exit;
if (Button = mbLeft) and not (csDesigning in ComponentState)
then
TestActive(X, Y);
if (FActiveTabIndex <> -1) and FShowCloseButtons and (Button = mbLeft)
then
with TbsSkinCustomTabSheet(Pages[FActiveTab]) do
begin
R := GetItemRect(FActiveTabIndex);
BR := ButtonRect;
OffsetRect(BR, R.Left, R.Top);
if PtInRect(BR, Point(X, Y))
then
begin
ButtonMouseIn := True;
ButtonMouseDown := False;
DrawTabs(Canvas);
DoClose;
end
else
if not PtInRect(BR, Point(X, Y))
then
begin
ButtonMouseIn := False;
ButtonMouseDown := False;
end;
end;
end;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -