📄 jvnavigationpane.pas
字号:
property ButtonWidth: Integer read FButtonWidth write SetButtonWidth default 22;
property NavPanelFont: TFont read FNavPanelFont write SetNavPanelFont;
property NavPanelHotTrackFont: TFont read FNavPanelHotTrackFont write SetNavPanelHotTrackFont;
property NavPanelHotTrackFontOptions: TJvTrackFontOptions read FNavPanelHotTrackFontOptions write SetNavPanelHotTrackFontOptions;
property Color default clWindow;
property Colors: TJvNavPanelColors read FColors write SetColors;
property StyleManager: TJvNavPaneStyleManager read FStyleManager write SetStyleManager;
// (p3) must be published after StyleManager
property ParentStyleManager: Boolean read FParentStyleManager write SetParentStyleManager default True;
property DropDownMenu: TPopupMenu read GetDropDownMenu write SetDropDownMenu;
property LargeImages: TCustomImageList read FLargeImages write SetLargeImages;
property MaximizedCount: Integer read GetMaximizedCount write SetMaximizedCount;
property ParentColor default False;
property Resizable: Boolean read FResizable write SetResizable default True;
property SmallImages: TCustomImageList read GetSmallImages write SetSmallImages;
property SplitterHeight: Integer read GetSplitterHeight write SetSplitterHeight default 7;
property WordWrap: Boolean read FWordWrap write SetWordWrap default False;
property Splitter: TJvOutlookSplitter read FSplitter;
property IconPanel: TJvIconPanel read FIconPanel;
property OnDropDownMenu: TContextPopupEvent read FOnDropDownMenu write FOnDropDownMenu;
property OnSplitterCanResize: TCanResizeEvent read GetSplitterCanResize write SetSplitterCanResize;
property OnSplitterMoved: TNotifyEvent read GetSplitterMoved write SetSplitterMoved;
property OnSplitterPaint: TNotifyEvent read GetSplitterPaint write SetSplitterPaint;
property OnSplitterClick: TNotifyEvent read GetSplitterClick write SetSplitterClick;
property OnSplitterMouseEnter: TNotifyEvent read GetSplitterMouseEnter write SetSplitterMouseEnter;
property OnSplitterMouseLeave: TNotifyEvent read GetSplitterMouseLeave write SetSplitterMouseLeave;
property OnSplitterDblClick: TNotifyEvent read GetSplitterDblClick write SetSplitterDblClick;
property OnSplitterMouseDown: TMouseEvent read GetSplitterMouseDown write SetSplitterMouseDown;
property OnSplitterMouseMove: TMouseMoveEvent read GetSplitterMouseMove write SetSplitterMouseMove;
property OnSplitterMouseUp: TMouseEvent read GetSplitterMouseUp write SetSplitterMouseUp;
end;
TJvNavigationPane = class(TJvCustomNavigationPane)
public
property NavPages;
property Splitter;
property IconPanel;
published
property ActivePage;
// property Alignment;
property Align;
property Anchors;
property AutoHeaders;
{$IFDEF VCL}
property BorderWidth;
property DragCursor;
property DragKind;
property OnStartDock;
property OnDockDrop;
property OnDockOver;
property OnUnDock;
property OnEndDock;
{$ENDIF VCL}
property Background;
property ButtonHeight;
property ButtonWidth;
property Caption;
property Color;
property Colors stored IsColorsStored;
property StyleManager;
// (p3) must be published after StyleManager
property ParentStyleManager;
property Constraints;
property DragMode;
property DropDownMenu;
property Enabled;
property Font;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property SplitterHeight;
property Visible;
property LargeImages;
property MaximizedCount;
property NavPanelFont stored IsNavPanelFontStored;
property NavPanelHotTrackFont stored IsNavPanelFontHotTrackStored;
property NavPanelHotTrackFontOptions stored IsNavPanelHotTrackFontOptionsStored;
property Resizable;
property SmallImages;
// property WordWrap;
property OnChange;
property OnChanging;
property OnDropDownMenu;
property OnClick;
property OnContextPopup;
{$IFDEF VCL}
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnStartDrag;
{$ENDIF VCL}
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseEnter;
property OnMouseLeave;
property OnMouseMove;
property OnMouseUp;
property OnMouseWheel;
property OnMouseWheelDown;
property OnMouseWheelUp;
property OnResize;
property OnSplitterCanResize;
property OnSplitterMoved;
property OnSplitterPaint;
property OnSplitterClick;
property OnSplitterMouseEnter;
property OnSplitterMouseLeave;
property OnSplitterDblClick;
property OnSplitterMouseDown;
property OnSplitterMouseMove;
property OnSplitterMouseUp;
end;
TJvNavStyleLink = class(TObject)
private
FSender: TObject;
FOnChange: TNotifyEvent;
public
destructor Destroy; override;
procedure Change; dynamic;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
property Sender: TObject read FSender write FSender;
end;
TJvNavPanelTheme = (nptStandard, nptXPBlue, nptXPSilver, nptXPOlive, nptCustom);
TJvNavPaneStyleManager = class(TJvComponent)
private
FColors: TJvNavPanelColors;
FTheme: TJvNavPanelTheme;
FClients: TList;
FFonts: TJvNavPanelFonts;
FOnThemeChange: TNotifyEvent;
procedure SetColors(const Value: TJvNavPanelColors);
procedure SetTheme(const Value: TJvNavPanelTheme);
procedure DoThemeChange(Sender: TObject);
procedure SetFonts(const Value: TJvNavPanelFonts);
function IsColorsStored: Boolean;
function IsFontsStored: Boolean;
protected
procedure Change; virtual;
procedure AssignTo(Dest: TPersistent); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
procedure RegisterChanges(Value: TJvNavStyleLink);
procedure UnregisterChanges(Value: TJvNavStyleLink);
published
property Colors: TJvNavPanelColors read FColors write SetColors stored IsColorsStored;
property Fonts: TJvNavPanelFonts read FFonts write SetFonts stored IsFontsStored;
property Theme: TJvNavPanelTheme read FTheme write SetTheme nodefault;
property OnThemeChange: TNotifyEvent read FOnThemeChange write FOnThemeChange;
end;
type
{$IFDEF COMPILER5}
TCustomImageListEx = class(TCustomImageList)
public
procedure Draw(Canvas: TCanvas; X, Y, Index: Integer;
ADrawingStyle: TDrawingStyle; AImageType: TImageType;
Enabled: Boolean); overload;
end;
{$ELSE}
TCustomImageListEx = TCustomImageList;
{$ENDIF COMPILER5}
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$RCSfile: JvNavigationPane.pas,v $';
Revision: '$Revision: 1.81 $';
Date: '$Date: 2005/03/09 14:57:27 $';
LogPath: 'JVCL\run'
);
{$ENDIF UNITVERSIONING}
implementation
uses
Math,
{$IFDEF COMPILER5}
CommCtrl,
{$ENDIF COMPILER5}
Forms, ActnList,
JvJVCLUtils, JvJCLUtils, JvResources;
const
cNavPanelButtonGroupIndex = 113;
cToolButtonHeight = 18;
cToolButtonOffset = 14;
cToolButtonWidth = 18;
procedure InternalStyleManagerChanged(AControl: TWinControl; AStyleManager: TJvNavPaneStyleManager);
var
Msg: TMsgStyleManagerChange;
{$IFDEF VisualCLX}
I: Integer;
{$ENDIF VisualCLX}
begin
Msg.Msg := CM_PARENTSTYLEMANAGERCHANGED;
Msg.Sender := AControl;
Msg.StyleManager := AStyleManager;
Msg.Result := 0;
AControl.Broadcast(Msg);
{$IFDEF VisualCLX}
with Msg do
for I := 0 to AControl.ControlCount - 1 do
if QWindows.Perform(AControl.Controls[I], Msg, Integer(Sender), Integer(StyleManager)) <> 0 then
Exit;
{$ENDIF VisualCLX}
end;
//=== { TCustomImageListEx } =================================================
{$IFDEF COMPILER5}
procedure TCustomImageListEx.Draw(Canvas: TCanvas; X, Y, Index: Integer;
ADrawingStyle: TDrawingStyle; AImageType: TImageType; Enabled: Boolean);
const
DrawingStyles: array[TDrawingStyle] of Longint =
(ILD_FOCUS, ILD_SELECTED, ILD_NORMAL, ILD_TRANSPARENT);
Images: array[TImageType] of Longint =
(0, ILD_MASK);
begin
if HandleAllocated then
DoDraw(Index, Canvas, X, Y, DrawingStyles[ADrawingStyle] or
Images[AImageType], Enabled);
end;
{$ENDIF COMPILER5}
//=== { TJvIconPanel } =======================================================
constructor TJvIconPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := ControlStyle - [csAcceptsControls];
FStyleLink := TJvNavStyleLink.Create;
FStyleLink.OnChange := DoStyleChange;
ControlStyle := ControlStyle + [csOpaque, csAcceptsControls];
Height := 28;
FDropButton := TJvNavIconButton.Create(Self);
FDropButton.Visible := False;
FDropButton.ButtonType := nibDropDown;
FDropButton.GroupIndex := 0;
FDropButton.Width := 22;
FDropButton.Left := Width + 10;
FDropButton.Align := alRight;
FDropButton.Parent := Self;
FDropButton.OnDropDownMenu := DoDropDownMenu;
FColors := TJvNavPanelColors.Create;
FColors.OnChange := DoColorsChange;
FParentStyleManager := True;
{$IFDEF VisualCLX}
ParentFont := False;
ParentColor := False;
{$ENDIF VisualCLX}
end;
destructor TJvIconPanel.Destroy;
begin
FStyleLink.Free;
FColors.Free;
// Don't free FDropButton: it is freed automatically
inherited Destroy;
end;
procedure TJvIconPanel.DoColorsChange(Sender: TObject);
begin
Invalidate;
end;
procedure TJvIconPanel.DoStyleChange(Sender: TObject);
begin
Colors := (Sender as TJvNavPaneStyleManager).Colors;
Font := (Sender as TJvNavPaneStyleManager).Fonts.NavPanelFont;
end;
function TJvIconPanel.GetDropDownMenu: TPopupMenu;
begin
Result := FDropButton.DropDownMenu
end;
procedure TJvIconPanel.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if Operation = opRemove then
begin
if AComponent = StyleManager then
StyleManager := nil;
end;
end;
procedure TJvIconPanel.Paint;
begin
GradientFillRect(Canvas, ClientRect, Colors.ButtonColorFrom, Colors.ButtonColorTo, fdTopToBottom, 32);
Canvas.Pen.Color := Colors.FrameColor;
if Align = alBottom then
begin
Canvas.MoveTo(0, 0);
Canvas.LineTo(Width + 1, 0);
end
else
begin
Canvas.MoveTo(0, ClientHeight - 1);
Canvas.LineTo(Width + 1, ClientHeight - 1);
end;
end;
procedure TJvIconPanel.SetColors(const Value: TJvNavPanelColors);
begin
FColors.Assign(Value);
FDropButton.Colors := Value;
end;
procedure TJvIconPanel.SetStyleManager(const Value: TJvNavPaneStyleManager);
//var
// I: Integer;
begin
if FStyleManager <> Value then
begin
ParentStyleManager := False;
if FStyleManager <> nil then
FStyleManager.UnregisterChanges(FStyleLink);
FStyleManager := Value;
if FStyleManager <> nil then
begin
FStyleManager.RegisterChanges(FStyleLink);
FStyleManager.FreeNotification(Self);
Colors := FStyleManager.Colors;
end;
end;
// FDropButton.StyleManager := Value;
InternalStyleManagerChanged(Self, Value);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -