?? bsskintabs.pas
字號:
{*******************************************************************}
{ }
{ Almediadev Visual Component Library }
{ BusinessSkinForm }
{ Version 6.15 }
{ }
{ Copyright (c) 2000-2008 Almediadev }
{ ALL RIGHTS RESERVED }
{ }
{ Home: http://www.almdev.com }
{ Support: support@almdev.com }
{ }
{*******************************************************************}
unit bsSkinTabs;
{$P+,S-,W-,R-}
{$WARNINGS OFF}
{$HINTS OFF}
interface
uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, StdCtrls,
CommCtrl, ComCtrls, ExtCtrls, bsSkinData, bsSkinBoxCtrls, bsUtils, bsSkinCtrls,
ImgList;
type
TbsSkinCustomTabSheet = class(TTabSheet)
private
FWallPaper: TBitMap;
protected
ButtonRect: TRect;
ButtonMouseIn, ButtonMouseDown:Boolean;
procedure CheckControlsBackground;
procedure WMSize(var Msg: TWMSize); message WM_SIZE;
procedure WMEraseBkGnd(var Msg: TWMEraseBkGnd); message WM_ERASEBKGND;
procedure CreateParams(var Params: TCreateParams); override;
procedure SetWallPaper(Value: TBitmap);
procedure CMSENCPaint(var Message: TMessage); message CM_SENCPAINT;
public
procedure PaintBG(DC: HDC);
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property WallPaper: TBitMap read FWallPaper write SetWallPaper;
end;
TbsSkinTabSheet = class(TbsSkinCustomTabSheet)
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
public
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
end;
TbsDrawSkinTabEvent = procedure(TabIndex: Integer; const Rct: TRect; Active,
MouseIn: Boolean; Cnvs: TCanvas) of object;
TbsCloseEvent = procedure(Sender: TObject; var CanClose: Boolean) of object;
TbsSkinPageControl = class(TPageControl)
private
//
FHideTabs: Boolean;
FOLdTabPosition: TTabPosition;
FOldMultiLine: Boolean;
FOldTabHeight: Integer;
FCloseSize: Integer;
FOnClose: TbsCloseEvent;
FOnAfterClose: TNotifyEvent;
FFreeOnClose: Boolean;
FIsVistaOS: Boolean;
FShowCloseButtons: Boolean;
FTabsBGTransparent: Boolean;
FActiveTab, FOldActiveTab: Integer;
FActiveTabIndex, FOldActiveTabIndex: Integer;
FOnDrawSkinTab: TbsDrawSkinTabEvent;
//
FImages: TCustomImageList;
FTempImages: TCustomImageList;
function GetCloseSize: Integer;
procedure SetImages(value: TCustomImageList);
procedure DrawCloseButton(Cnvs: TCanvas; R: TRect; I, W, H: Integer);
//
procedure SetShowCloseButtons(Value: Boolean);
function GetPosition: Integer;
function GetInVisibleItemCount: Integer;
procedure OnUpDownChange(Sender: TObject);
procedure DrawTabs(Cnvs: TCanvas);
procedure DrawTab(TI: Integer; const Rct: TRect; Active, MouseIn: Boolean; Cnvs: TCanvas);
function GetItemRect(index: integer): TRect;
procedure SetItemSize(AWidth, AHeight: integer);
procedure CheckScroll;
procedure ShowSkinUpDown;
procedure HideSkinUpDown;
procedure TestActive(X, Y: Integer);
procedure SetTabsBGTransparent(Value: Boolean);
procedure DrawEmptyBackGround(DC: HDC);
procedure CMSENCPaint(var Message: TMessage); message CM_SENCPAINT;
function CheckVisibleTabs: Boolean;
function GetActiveTabRect: TRect;
protected
//
FSD: TbsSkinData;
FSkinDataName: String;
FIndex: Integer;
FSkinUpDown: TbsSkinUpDown;
FDefaultFont: TFont;
FUseSkinFont: Boolean;
FDefaultItemHeight: Integer;
CloseButtonRect, ClosebuttonActiveRect, CloseButtonDownRect: TRect;
ButtonTransparent: Boolean;
ButtonTransparentColor: TColor;
procedure SetDefaultItemHeight(Value: Integer);
procedure SetDefaultFont(Value: TFont);
procedure Change; override;
procedure Change2;
procedure GetSkinData;
//
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure SetSkinData(Value: TbsSkinData);
procedure WMEraseBkGnd(var Msg: TWMEraseBkGnd); message WM_ERASEBKGND;
procedure WMHSCROLL(var Msg: TWMEraseBkGnd); message WM_HSCROLL;
procedure WMSize(var Msg: TWMSize); message WM_SIZE;
procedure PaintDefaultWindow(Cnvs: TCanvas);
procedure PaintSkinWindow(Cnvs: TCanvas);
procedure PaintWindow(DC: HDC); override;
procedure WndProc(var Message:TMessage); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
procedure WMCHECKPARENTBG(var Msg: TWMEraseBkgnd); message WM_CHECKPARENTBG;
procedure DoClose;
public
//
Picture: TBitMap;
SkinRect, ClRect, TabRect,
ActiveTabRect, FocusTabRect, MouseInTabRect: TRect;
TabsBGRect: TRect;
LTPoint, RTPoint, LBPoint, RBPoint: TPoint;
TabLeftOffset, TabRightOffset: Integer;
FontName: String;
FontStyle: TFontStyles;
FontHeight: Integer;
FontColor, ActiveFontColor, FocusFontColor, MouseInFontColor: TColor;
UpDown: String;
BGPictureIndex: Integer;
TabStretchEffect: Boolean;
ShowFocus: Boolean;
FocusOffsetX, FocusOffsetY: Integer;
StretchEffect, LeftStretch, TopStretch, RightStretch, BottomStretch: Boolean;
StretchType: TbsStretchType;
//
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ChangeSkinData;
procedure Loaded; override;
procedure UpDateTabs;
procedure HideTabs;
procedure ShowTabs;
published
property FreeOnClose: Boolean read FFreeOnClose write FFreeOnClose;
property ShowCloseButtons: Boolean read FShowCloseButtons write SetShowCloseButtons;
property Images: TCustomImageList read FImages write SetImages;
property TabsBGTransparent: Boolean read FTabsBGTransparent write SetTabsBGTransparent;
property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
property DefaultItemHeight: Integer read FDefaultItemHeight write SetDefaultItemHeight;
property SkinData: TbsSkinData read FSD write SetSkinData;
property SkinDataName: String read FSkinDataName write FSkinDataName;
property Color;
property ActivePage;
property Align;
property Anchors;
property BiDiMode;
property Constraints;
property DockSite;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Font;
property HotTrack;
// property Images;
property OwnerDraw;
property ParentBiDiMode;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property RaggedRight;
property ScrollOpposite;
property ShowHint;
property TabHeight;
property TabOrder;
property TabPosition;
property TabStop;
property TabWidth;
property Visible;
property OnClose: TbsCloseEvent read FOnClose write FOnClose;
property OnAfterClose: TNotifyEvent read FOnAfterClose write FOnAfterClose;
property OnChange;
property OnDrawSkinTab: TbsDrawSkinTabEvent
read FOnDrawSkinTab write FOnDrawSkinTab;
property OnChanging;
property OnDockDrop;
property OnDockOver;
property OnDragDrop;
property OnDragOver;
property OnDrawTab;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnGetImageIndex;
property OnGetSiteInfo;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnResize;
property OnStartDock;
property OnStartDrag;
property OnUnDock;
end;
TbsRectArray = array of TRect;
TbsBolArray = array of Boolean;
TbsCloseEvent2 = procedure(Index: Integer; var CanClose: Boolean) of object;
TbsSkinTabControl = class(TTabControl)
private
FOnClose: TbsCloseEvent2;
FOnAfterClose: TNotifyEvent;
TabButtonMouseDown: TbsBolArray;
TabButtonMouseIn: TbsBolArray;
TabButtonR: TbsRectArray;
FCloseSize: Integer;
FShowCloseButtons: Boolean;
FTabsBGTransparent: Boolean;
FOnDrawSkinTab: TbsDrawSkinTabEvent;
FromWMPaint: Boolean;
FOldTop, FOldBottom: Integer;
FActiveTab, FOldActiveTab: Integer;
//
FImages: TCustomImageList;
FTempImages: TCustomImageList;
//
procedure DrawCloseButton(Cnvs: TCanvas; R: TRect; I, W, H: Integer);
procedure SetShowCloseButtons(Value: Boolean);
function GetPosition: Integer;
function GetInVisibleItemCount: Integer;
procedure OnUpDownChange(Sender: TObject);
procedure DrawTabs(Cnvs: TCanvas);
procedure DrawTab(TI: Integer; const Rct: TRect; Active, MouseIn: Boolean; Cnvs: TCanvas);
function GetItemRect(index: integer): TRect;
procedure SetItemSize(AWidth, AHeight: integer);
procedure CheckScroll;
procedure ShowSkinUpDown;
procedure HideSkinUpDown;
procedure TestActive(X, Y: Integer);
procedure SetTabsBGTransparent(Value: Boolean);
procedure SetImages(value: TCustomImageList);
protected
//
FSD: TbsSkinData;
FSkinDataName: String;
FIndex: Integer;
FSkinUpDown: TbsSkinUpDown;
FDefaultFont: TFont;
FUseSkinFont: Boolean;
FDefaultItemHeight: Integer;
function GetCloseSize: Integer;
procedure SetDefaultItemHeight(Value: Integer);
procedure SetDefaultFont(Value: TFont);
procedure WMSize(var Msg: TWMSize); message WM_SIZE;
procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
procedure GetSkinData;
//
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure SetSkinData(Value: TbsSkinData);
procedure WMEraseBkGnd(var Msg: TWMEraseBkGnd); message WM_ERASEBKGND;
procedure WMHSCROLL(var Msg: TWMEraseBkGnd); message WM_HSCROLL;
procedure PaintDefaultWindow(Cnvs: TCanvas);
procedure PaintSkinWindow(Cnvs: TCanvas);
procedure PaintWindow(DC: HDC); override;
procedure WndProc(var Message:TMessage); override;
procedure Change; override;
procedure Change2;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure WMCHECKPARENTBG(var Msg: TWMEraseBkgnd); message WM_CHECKPARENTBG;
procedure CheckControlsBackground;
function GetActiveTabRect: TRect;
procedure DoClose;
public
Picture: TBitMap;
SkinRect, ClRect, TabRect,
ActiveTabRect, FocusTabRect, MouseInTabRect: TRect;
TabsBGRect: TRect;
LTPoint, RTPoint, LBPoint, RBPoint: TPoint;
TabLeftOffset, TabRightOffset: Integer;
FontName: String;
FontStyle: TFontStyles;
FontHeight: Integer;
FontColor, ActiveFontColor, FocusFontColor, MouseInFontColor: TColor;
UpDown: String;
BGPictureIndex: Integer;
TabStretchEffect: Boolean;
StretchEffect, LeftStretch, TopStretch, RightStretch, BottomStretch: Boolean;
ShowFocus: Boolean;
FocusOffsetX, FocusOffsetY: Integer;
StretchType: TbsStretchType;
CloseButtonRect, ClosebuttonActiveRect, CloseButtonDownRect: TRect;
ButtonTransparent: Boolean;
ButtonTransparentColor: TColor;
//
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ChangeSkinData;
procedure Loaded; override;
procedure UpDateTabs;
//
procedure PaintBG(DC: HDC);
//
published
property Images: TCustomImageList read FImages write SetImages;
property ShowCloseButtons: Boolean read FShowCloseButtons write SetShowCloseButtons;
property TabsBGTransparent: Boolean read FTabsBGTransparent write SetTabsBGTransparent;
property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
property DefaultItemHeight: Integer read FDefaultItemHeight write SetDefaultItemHeight;
property SkinData: TbsSkinData read FSD write SetSkinData;
property SkinDataName: String read FSkinDataName write FSkinDataName;
property Color;
property Align;
property Anchors;
property BiDiMode;
property Constraints;
property DockSite;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Font;
property HotTrack;
property OwnerDraw;
property ParentBiDiMode;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property RaggedRight;
property ScrollOpposite;
property ShowHint;
property TabHeight;
property TabOrder;
property TabPosition;
property TabStop;
property TabWidth;
property Visible;
property OnClose: TbsCloseEvent2 read FOnClose write FOnClose;
property OnAfterClose: TNotifyEvent read FOnAfterClose write FOnAfterClose;
property OnDrawSkinTab: TbsDrawSkinTabEvent
read FOnDrawSkinTab write FOnDrawSkinTab;
property OnChange;
property OnChanging;
property OnDockDrop;
property OnDockOver;
property OnDragDrop;
property OnDragOver;
property OnDrawTab;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnGetImageIndex;
property OnGetSiteInfo;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnResize;
property OnStartDock;
property OnStartDrag;
property OnUnDock;
end;
implementation
uses Consts, ComStrs, BusinessSkinForm, bsEffects;
const
CLOSE_SIZE = 14;
procedure DrawRotate90_1(Cnvs: TCanvas; B: TBitMap; X, Y: Integer);
var
B1, B2: TbsEffectBmp;
begin
B1 := TbsEffectBmp.CreateFromhWnd(B.Handle);
B2 := TbsEffectBmp.Create(B1.Height, B1.Width);
B1.Rotate90_1(B2);
B2.Draw(Cnvs.Handle, X, Y);
B1.Free;
B2.Free;
end;
procedure DrawFlipVert(B: TBitMap);
var
B1, B2: TbsEffectBmp;
begin
B1 := TbsEffectBmp.CreateFromhWnd(B.Handle);
B2 := TbsEffectBmp.Create(B1.Width, B1.Height);
B1.FlipVert(B2);
B2.Draw(B.Canvas.Handle, 0, 0);
B1.Free;
B2.Free;
end;
procedure DrawRotate90_2(Cnvs: TCanvas; B: TBitMap; X, Y: Integer);
var
B1, B2: TbsEffectBmp;
begin
B1 := TbsEffectBmp.CreateFromhWnd(B.Handle);
B2 := TbsEffectBmp.Create(B1.Height, B1.Width);
B1.Rotate90_2(B2);
B2.Draw(Cnvs.Handle, X, Y);
B1.Free;
B2.Free;
end;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -