Componentes.Terceros.jvcl/official/3.39/run/JvOfficeColorPanel.pas
2010-01-18 16:55:50 +00:00

2478 lines
78 KiB
ObjectPascal

{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: JvOfficeColorPanel.PAS, released on 2004-02-26.
The Initial Developer of the Original Code is dejoy [dejoy att ynl dott gov dott cn]
All Rights Reserved.
Contributor(s): dejoy.
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
located at http://jvcl.delphi-jedi.org
Description:
a Color panel look like Microsoft office Color picker,make to customable Highly.
Known Issues:
-----------------------------------------------------------------------------}
// $Id: JvOfficeColorPanel.pas 12461 2009-08-14 17:21:33Z obones $
unit JvOfficeColorPanel;
{$I jvcl.inc}
interface
uses
{$IFDEF UNITVERSIONING}
JclUnitVersioning,
{$ENDIF UNITVERSIONING}
SysUtils, Classes,
Windows, Graphics, Controls, Forms, Buttons, Dialogs,ExtCtrls,
JvTypes, JvHotTrackPersistent, JvExControls, JvSpeedButton,
JvPanel;
const
Tag_DefaultColorCaption = 0;
Tag_CustomColorCaption = 1;
Tag_NoneColorCaption = 2;
Tag_DefaultColorHint = 3;
Tag_CustomColorHint = 4;
Tag_NoneColorHint = 5;
Tag_ShowColorsHint = 10;
Tag_ShowAddInHint = 12;
Tag_ShowStandardColors = 15;
Tag_ShowSystemColors = 16;
Tag_ShowUserColors = 17;
Tag_HoldCustomColor = 18;
Tag_ButtonHeight = 20;
Tag_ButtonWidth = 21;
Tag_ColorSize = 22;
Tag_ColorSpace = 23;
Tag_ColorSpaceTop = 24;
Tag_ColorSpaceBottom = 25;
Tag_TopMargin = 26;
Tag_BottomMargin = 27;
Tag_HorizontalMargin = 28;
Tag_RightClickSelect = 29;
Tag_SelectIfPopup = 30;
MinColorSize = 18;
MinColorSpace = 0;
MinColorSpaceTop = 4;
MinColorSpaceBottom = 4;
MinTopMargin = 4;
MinBottomMargin = 4;
MinHorizontalMargin = 4;
MinButtonHeight = MinColorSize + 7;
MinButtonWidth = 23;
PrimaryGroupIndex = 1;
LineColorCount = 8;
MaxLineRow = 8;
MaxSectColorCount = LineColorCount * MaxLineRow;
type
TJvOfficeColorPanelClass = class of TJvCustomOfficeColorPanel;
TJvColorSpeedButton = class(TJvSpeedButton)
private
FDrawColor: TColor;
FDisabledDrawColor: TColor;
FCanDrawInnerFrame: Boolean;
FCanDrawGlyph: Boolean;
FCanDrawColorQuad: Boolean;
FColorQuadLayOut: TJvColorQuadLayOut;
FOnEnabledChagned: TNotifyEvent;
procedure SetDrawColor(const Value: TColor);
procedure SetDisabledDrawColor(const Value: TColor);
procedure SetEdgeWidth(const Value: Integer);
procedure SetFColorQuadLayOut(const Value: TJvColorQuadLayOut);
procedure SetCanDrawInnerFrame(const Value: Boolean);
procedure SetCanDrawGlyph(const Value: Boolean);
procedure SetCanDrawColorQuad(const Value: Boolean);
protected
FEdgeWidth: Integer;
procedure Paint; override;
procedure EnabledChanged; override;
function GetEdgeWidth: Integer; virtual;
public
constructor Create(AOwner: TComponent); override;
property Canvas;
property CanDrawColorQuad: Boolean read FCanDrawColorQuad write SetCanDrawColorQuad default True;
property CanDrawGlyph: Boolean read FCanDrawGlyph write SetCanDrawGlyph default True;
property CanDrawInnerFrame: Boolean read FCanDrawInnerFrame write SetCanDrawInnerFrame default False;
property ColorQuadLayOut: TJvColorQuadLayOut read FColorQuadLayOut write SetFColorQuadLayOut default cqlClient;
property DrawColor: TColor read FDrawColor write SetDrawColor default clDefault;
property DisabledDrawColor: TColor read FDisabledDrawColor write SetDisabledDrawColor default clGray;
property EdgeWidth: Integer read GetEdgeWidth write SetEdgeWidth;
property OnEnabledChagned: TNotifyEvent read FOnEnabledChagned write FOnEnabledChagned;
end;
TJvOfficeColorDrawer = class(TJvColorSpeedButton)
public
constructor Create(AOwner: TComponent); override;
property CanDrawGlyph default False;
end;
// (ahuser) TJvColorDialog is not registered as component
TJvOfficeColorDialog = class(TColorDialog)
published
property OnShow;
property OnClose;
end;
TJvOfficeColorPanelProperties = class(TJvPersistentProperty)
private
FShowNoneColor: Boolean;
FShowDefaultColor: Boolean;
FShowCustomColor: Boolean;
FDefaultColorColor: TColor;
FNoneColorColor: TColor;
FShowColorsHint: Boolean;
FShowAddInHint: Boolean;
FDefaultColorCaption: string;
FCustomColorCaption: string;
FNoneColorCaption: string;
FDefaultColorHint: string;
FCustomColorHint: string;
FNoneColorHint: string;
FTopMargin: Integer;
FColorSpaceBottom: Integer;
FHorizontalMargin: Integer;
FColorSpace: Integer;
FColorSpaceTop: Integer;
FButtonHeight: Integer;
FColorSize: Integer;
FBottomMargin: Integer;
FRightClickSelect: Boolean;
FSelectIfPopup: Boolean;
FCustomColorFont: TFont;
FDefaultColorFont: TFont;
FNoneColorFont: TFont;
FShowStandardColors: Boolean;
FShowSystemColors: Boolean;
FShowUserColors: Boolean;
FHoldCustomColor: Boolean;
FFilerTag:string;
procedure SetIntegerValue(const Index, Value: Integer);
procedure SetStringValue(const Index: Integer; const Value: string);
procedure SetBooleanValue(const Index: Integer; const Value: Boolean);
procedure SetColorValue(const Index: Integer; const Value: TColor);
procedure SetFontValue(const Index: Integer; const Value: TFont);
procedure OnFontChange(Sender: TObject);
procedure ReadData(Reader: TReader);
protected
procedure CreateDefaultText; virtual;
procedure DefineProperties(Filer: TFiler); override;
public
constructor Create(AOwner: TPersistent); override;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
property ShowStandardColors: Boolean index Tag_ShowStandardColors read FShowStandardColors write SetBooleanValue default True;
published
property ShowNoneColor: Boolean index Tag_NoneColorCaption read FShowNoneColor write SetBooleanValue default False;
property ShowDefaultColor: Boolean index Tag_DefaultColorCaption read FShowDefaultColor write SetBooleanValue default True;
property ShowCustomColor: Boolean index Tag_CustomColorCaption read FShowCustomColor write SetBooleanValue default True;
property ShowAddInHint: Boolean index Tag_ShowAddInHint read FShowAddInHint write SetBooleanValue default True;
property ShowColorsHint: Boolean index Tag_ShowColorsHint read FShowColorsHint write SetBooleanValue default True;
property ShowSystemColors: Boolean index Tag_ShowSystemColors read FShowSystemColors write SetBooleanValue default False;
property ShowUserColors: Boolean index Tag_ShowUserColors read FShowUserColors write SetBooleanValue default False;
property HoldCustomColor: Boolean index Tag_HoldCustomColor read FHoldCustomColor write SetBooleanValue default False;
property NoneColorCaption: string index Tag_NoneColorCaption read FNoneColorCaption write SetStringValue;
property DefaultColorCaption: string index Tag_DefaultColorCaption read FDefaultColorCaption write SetStringValue;
property CustomColorCaption: string index Tag_CustomColorCaption read FCustomColorCaption write SetStringValue;
property NoneColorHint: string index Tag_NoneColorHint read FNoneColorHint write SetStringValue;
property DefaultColorHint: string index Tag_DefaultColorHint read FDefaultColorHint write SetStringValue;
property CustomColorHint: string index Tag_CustomColorHint read FCustomColorHint write SetStringValue;
property NoneColorColor: TColor index Tag_NoneColorCaption read FNoneColorColor write SetColorValue default clNone;
property DefaultColorColor: TColor index Tag_DefaultColorCaption read FDefaultColorColor write SetColorValue default clDefault;
property NoneColorFont: TFont index Tag_NoneColorCaption read FNoneColorFont write SetFontValue;
property DefaultColorFont: TFont index Tag_DefaultColorCaption read FDefaultColorFont write SetFontValue;
property CustomColorFont: TFont index Tag_CustomColorCaption read FCustomColorFont write SetFontValue;
property TopMargin: Integer index Tag_TopMargin read FTopMargin write SetIntegerValue default MinTopMargin;
property BottomMargin: Integer index Tag_BottomMargin read FBottomMargin write SetIntegerValue default MinBottomMargin;
property HorizontalMargin: Integer index Tag_HorizontalMargin read FHorizontalMargin write SetIntegerValue default MinHorizontalMargin;
property ColorSpace: Integer index Tag_ColorSpace read FColorSpace write SetIntegerValue default MinColorSpace;
property ColorSpaceTop: Integer index Tag_ColorSpaceTop read FColorSpaceTop write SetIntegerValue default MinColorSpaceTop;
property ColorSpaceBottom: Integer index Tag_ColorSpaceBottom read FColorSpaceBottom write SetIntegerValue default MinColorSpaceBottom;
property ColorSize: Integer index Tag_ColorSize read FColorSize write SetIntegerValue default MinColorSize;
property ButtonHeight: Integer index Tag_ButtonHeight read FButtonHeight write SetIntegerValue default MinButtonHeight;
property RightClickSelect: Boolean index Tag_RightClickSelect read FRightClickSelect write SetBooleanValue default False;
property SelectIfPopup: Boolean index Tag_SelectIfPopup read FSelectIfPopup write SetBooleanValue default False;
end;
TJvCustomOfficeColorPanel = class(TJvCustomArrangePanel, IJvHotTrack)
private
FStandardColors: TStringList;
FSystemColors: TStringList;
FUserColors: TStringList;
FStandardColorDrawers: TList;
FSystemColorDrawers: TList;
FUserColorDrawers: TList;
FAddInControls: TList;
FButtonNoneColor: TJvColorSpeedButton;
FButtonDefaultColor: TJvColorSpeedButton;
FButtonCustomColor: TJvColorSpeedButton;
FCustomColorDrawer: TJvOfficeColorDrawer;
FPriorCheckedButton: TJvColorSpeedButton;
FDividerLine1: TControl;
FDividerLine2: TControl;
FDividerLine3: TControl;
FProperties: TJvOfficeColorPanelProperties;
FColorDialog: TJvOfficeColorDialog;
FSelectedColor: TColor;
FBackgroundColor: TColor;
FInited: Boolean;
FNeedReDrawDownState: Boolean;
//in SetSeletedColor,is need to refresh button down state.
FInRearrangeControls: Boolean;
FOnColorChange: TNotifyEvent;
FOnHoldCustomColor: TJvHoldCustomColorEvent;
FOnColorButtonClick: TNotifyEvent;
FOnShowOwnerColorDialog: TNotifyEvent;
FOnGetAddInControlSiteInfo: TJvGetAddInControlSiteInfoEvent;
FClickColorType: TJvClickColorType;
FHotTrackOptions: TJvHotTrackOptions;
FHotTrack: Boolean;
FHotTrackFont: TFont;
FHotTrackFontOptions: TJvTrackFontOptions;
FColorDialogOptions: TColorDialogOptions;
procedure SetColorDialogOptions(const Value: TColorDialogOptions);
procedure SetSelectedColor(const Value: TColor);
function GetColorDlgCustomColors: TStrings;
procedure SetColorDlgCustomColors(const Value: TStrings);
procedure SetProperties(const Value: TJvOfficeColorPanelProperties);
function GetControlBackgroundColor: TColor;
procedure SetControlBackgroundColor(const Value: TColor);
{IJvHotTrack}
function GetHotTrack: Boolean;
function GetHotTrackFont: TFont;
function GetHotTrackFontOptions: TJvTrackFontOptions;
function GetHotTrackOptions: TJvHotTrackOptions;
procedure SetHotTrack(Value: Boolean);
procedure SetHotTrackOptions(Value: TJvHotTrackOptions);
procedure SetHotTrackFont(Value: TFont);
procedure SetHotTrackFontOptions(Value: TJvTrackFontOptions);
procedure IJvHotTrack_Assign(Source: IJvHotTrack);
procedure IJvHotTrack.Assign = IJvHotTrack_Assign;
procedure SetStandardColors(const Value: TStringList);
procedure SetSystemColors(const Value: TStringList);
procedure SetUserColors(const Value: TStringList);
procedure RedirectToColorButtonClick(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure DoColorDrawersEnabledChange(Sender: TObject);
procedure DoHotTrackOptionsChanged(Sender: TObject);
procedure DoLoadedUserColors(Sender: TObject);
procedure DoHoldedCustomColor(Sender: TObject;AColor: TColor);
protected
procedure DoColorButtonClick(Sender: TObject); virtual;
procedure DoSelectedColorChange(Sender: TObject); virtual;
procedure DoGetAddInControlSiteInfo(Sender: TControl; var ASiteInfo:
TJvAddInControlSiteInfo); virtual;
procedure DoPropertiesChanged(Sender: TObject; const PropName: string); virtual;
procedure CreateWnd; override;
procedure Loaded; override;
procedure Resize; override;
procedure ShowHintChanged; override;
function CreateStandardColors(ColorList: TStrings): Integer; virtual;
function CreateSystemColors(ColorList: TStrings): Integer; virtual;
{ If you wnat to create published color list by default,override this procedure.
If you want to change ColorList,make sure call strings.beginupdate before change,
and call strings.EndUpdate after changed. }
function CreateUserColors(ColorList: TStrings): Integer; virtual;
procedure CreateColorDrawersByColors(DrawersList: TList; ColorsList: TStringList; AVisible: Boolean);
procedure SetEnabled( Value: Boolean); override;
// Don't change the following list, the result might unpredictability.
property StandardColorDrawers: TList read FStandardColorDrawers;
property SystemColorDrawers: TList read FSystemColorDrawers;
property UserColorDrawers: TList read FUserColorDrawers;
property AddInControls: TList read FAddInControls;
property ButtonNoneColor: TJvColorSpeedButton read FButtonNoneColor;
property ButtonDefaultColor: TJvColorSpeedButton read FButtonDefaultColor;
property ButtonCustomColor: TJvColorSpeedButton read FButtonCustomColor;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure CreateStandardColorDrawers; virtual;
procedure CreateSystemColorDrawers; virtual;
procedure CreateUserColorDrawers; virtual;
procedure RearrangeControls; virtual;
procedure RefreshControls;
property ColorDialog: TJvOfficeColorDialog read FColorDialog write FColorDialog;
property SelectedColor: TColor read FSelectedColor write SetSelectedColor default clBlack;
property BackColor: TColor read GetControlBackgroundColor write SetControlBackgroundColor default clBtnFace;
//overried property
property Color: TColor read GetControlBackgroundColor write SetControlBackgroundColor;
property ClickColorType: TJvClickColorType read FClickColorType;
{ //Each custom color is represented as a string of the form ColorValue=ColorDescription.
For example, the following string sets the custom color list.
clBlack = Black
$00003333 = Olive Green
if set ColorDescription to cUseDefaultColorHint('($)'),the ColorDescription will be put to ColorToPrettyName(ColorValue) at runtime,
such as:
'clBlack = ($)' will be put to 'clBlack = Black' at runtime;
'$00113333 = ($)' will be put to '$00113333 = $00113333' at runtime;
Up to MaxSectColorCount custom colors can be set.
// If you changed Colors list manual,also you must call CreateXXXColorButtons and RearrangeControls to refresh manual,
or call RefreshControls to refresh.
// The StandardColors and SystemColors did't published by default,so it's not stroed in DFM, you just only change the value at runtime,
if you want stroed StandardColors and SystemColors,create a new control descended from TJvOfficeColorPanel and
put them to published section.
//if you want to change ColorList,make sure call strings.beginupdate before change,
//and call strings.EndUpdate after changed.
}
property StandardColors: TStringList read FStandardColors write SetStandardColors;
property SystemColors: TStringList read FSystemColors write SetSystemColors;
property UserColors: TStringList read FUserColors write SetUserColors;
property HotTrack: Boolean read GetHotTrack write SetHotTrack default False;
property HotTrackFont: TFont read GetHotTrackFont write SetHotTrackFont;
property HotTrackFontOptions: TJvTrackFontOptions read GetHotTrackFontOptions write SetHotTrackFontOptions default DefaultTrackFontOptions;
property HotTrackOptions: TJvHotTrackOptions read GetHotTrackOptions write SetHotTrackOptions;
property Properties: TJvOfficeColorPanelProperties read FProperties write SetProperties;
property ColorDlgCustomColors: TStrings read GetColorDlgCustomColors write SetColorDlgCustomColors;
property ColorDialogOptions: TColorDialogOptions read FColorDialogOptions write SetColorDialogOptions default [];
property OnColorChange: TNotifyEvent read FOnColorChange write FOnColorChange;
property OnColorButtonClick: TNotifyEvent read FOnColorButtonClick write FOnColorButtonClick;
property OnHoldCustomColor: TJvHoldCustomColorEvent read FOnHoldCustomColor write FOnHoldCustomColor;
property OnShowOwnerColorDialog: TNotifyEvent read FOnShowOwnerColorDialog write FOnShowOwnerColorDialog;
property OnGetAddInControlSiteInfo: TJvGetAddInControlSiteInfoEvent read FOnGetAddInControlSiteInfo write FOnGetAddInControlSiteInfo;
end;
TJvOfficeColorPanel = class(TJvCustomOfficeColorPanel)
private
FFilerTag: string;
procedure ReadData(Reader: TReader);
protected
procedure DefineProperties(Filer: TFiler); override;
published
// UserColors must be load fist on read from the DFM file.
property UserColors;
property BevelInner;
property BevelOuter;
property BevelWidth;
property BorderWidth;
property FlatBorder;
property FlatBorderColor;
property BackColor;
property SelectedColor;
property ColorDlgCustomColors;
property HotTrack;
property HotTrackFont;
property HotTrackFontOptions;
property HotTrackOptions;
property ColorDialogOptions;
property BiDiMode;
property DragCursor;
property DragKind;
property ParentBiDiMode;
property OnCanResize;
property OnEndDock;
property OnGetSiteInfo;
property Align;
property Anchors;
property Constraints;
property DragMode;
property Enabled;
property Font;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnConstrainedResize;
property OnContextPopup;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnMouseEnter;
property OnMouseLeave;
property OnResize;
property OnStartDrag;
property Properties;
property OnColorChange;
property OnColorButtonClick;
{ If OnShowOwnerColorDialog not nil,the default ColorDialog will not show,
so you can show coustom ColorDialog yourself. }
property OnShowOwnerColorDialog;
property OnClick;
end;
TJvOfficePanelDividerLine = class(TBevel)
public
constructor Create(AOwner: TComponent); override;
published
property Shape default bsTopLine;
end;
var
JvDividerLineClass: TControlClass = TJvOfficePanelDividerLine;
function GetTopOwner(AComponent: TComponent): TComponent;
function JvReaderReadColor(Reader: TReader):TColor;
function JvReaderReadColorDialogOptions(Reader: TReader):TColorDialogOptions;
procedure JvReaderReadStrings(Reader: TReader;Strings:TStrings);
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$URL: https://jvcl.svn.sourceforge.net/svnroot/jvcl/tags/JVCL3_39/run/JvOfficeColorPanel.pas $';
Revision: '$Revision: 12461 $';
Date: '$Date: 2009-08-14 19:21:33 +0200 (ven., 14 août 2009) $';
LogPath: 'JVCL\run'
);
{$ENDIF UNITVERSIONING}
implementation
uses
JvJCLUtils, JvResources, Math;
const
cNoneColorCaption = 'NoneColorCaption';
cNoneColorColor = 'NoneColorColor';
cNoneColorFont = 'NoneColorFont';
cNoneColorHint = 'NoneColorHint';
cDefaultColorCaption = 'DefaultColorCaption';
cDefaultColorColor = 'DefaultColorColor';
cDefaultColorFont = 'DefaultColorFont';
cDefaultColorHint = 'DefaultColorHint';
cCustomColorCaption = 'CustomColorCaption';
cCustomColorFont = 'CustomColorFont';
cCustomColorHint = 'CustomColorHint';
cShowNoneColor = 'ShowNoneColor';
cShowDefaultColor = 'ShowDefaultColor';
cShowCustomColor = 'ShowCustomColor';
cShowAddInHint = 'ShowAddInHint';
cShowColorsHint = 'ShowColorsHint';
cShowStandardColors = 'ShowStandardColors';
cShowSystemColors = 'ShowSystemColors';
cShowUserColors = 'ShowUserColors';
cHoldCustomColor = 'HoldCustomColor';
cRightClickSelect = 'RightClickSelect';
cSelectIfPopup = 'SelectIfPopup';
cUseDefaultColorHint = '($)';
type
TControlAccessProtected = class(TControl);
{ TJvOfficePanelDividerLine }
constructor TJvOfficePanelDividerLine.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Shape := bsTopLine;
end;
//=== { TJvOfficeColorPanelProperties } ======================================
constructor TJvOfficeColorPanelProperties.Create(AOwner: TPersistent);
begin
inherited Create(AOwner);
FShowNoneColor := False;
FShowDefaultColor := True;
FShowCustomColor := True;
FShowColorsHint := True;
FShowAddInHint := True;
FShowStandardColors := True;
FShowSystemColors := False;
FShowUserColors := False;
FHoldCustomColor := False;
FNoneColorColor := clNone;
FDefaultColorColor := clDefault;
FDefaultColorFont := TFont.Create;
FDefaultColorFont.OnChange := OnFontChange;
FNoneColorFont := TFont.Create;
FNoneColorFont.OnChange := OnFontChange;
FCustomColorFont := TFont.Create;
FCustomColorFont.OnChange := OnFontChange;
FHorizontalMargin := MinHorizontalMargin;
FTopMargin := MinTopMargin;
FBottomMargin := MinBottomMargin;
FButtonHeight := MinButtonHeight;
FColorSpace := MinColorSpace;
FColorSpaceTop := MinColorSpaceTop;
FColorSpaceBottom := MinColorSpaceBottom;
FColorSize := MinColorSize;
FRightClickSelect := False;
FSelectIfPopup := False;
end;
destructor TJvOfficeColorPanelProperties.Destroy;
begin
FreeAndNil(FNoneColorFont);
FreeAndNil(FDefaultColorFont);
FreeAndNil(FCustomColorFont);
inherited Destroy;
end;
procedure TJvOfficeColorPanelProperties.Assign(Source: TPersistent);
begin
if Source is TJvOfficeColorPanelProperties then
begin
BeginUpdate;
try
with TJvOfficeColorPanelProperties(Source) do
begin
Self.ShowNoneColor := ShowNoneColor;
Self.ShowDefaultColor := ShowDefaultColor;
Self.ShowCustomColor := ShowCustomColor;
Self.ShowStandardColors := ShowStandardColors;
Self.ShowSystemColors := ShowSystemColors;
Self.ShowUserColors := ShowUserColors;
Self.ShowAddInHint := ShowAddInHint;
Self.ShowColorsHint := ShowColorsHint;
Self.HoldCustomColor := HoldCustomColor;
Self.TopMargin := TopMargin;
Self.BottomMargin := BottomMargin;
Self.HorizontalMargin := HorizontalMargin;
Self.ButtonHeight := ButtonHeight;
Self.ColorSpace := ColorSpace;
Self.ColorSpaceTop := ColorSpaceTop;
Self.ColorSpaceBottom := ColorSpaceBottom;
Self.ColorSize := ColorSize;
Self.NoneColorCaption := NoneColorCaption;
Self.DefaultColorCaption := DefaultColorCaption;
Self.CustomColorCaption := CustomColorCaption;
Self.NoneColorHint := NoneColorHint;
Self.DefaultColorHint := DefaultColorHint;
Self.CustomColorHint := CustomColorHint;
Self.NoneColorColor := NoneColorColor;
Self.DefaultColorColor := DefaultColorColor;
Self.NoneColorFont.Assign(NoneColorFont);
Self.DefaultColorFont.Assign(DefaultColorFont);
Self.CustomColorFont.Assign(CustomColorFont);
Self.RightClickSelect := RightClickSelect;
Self.SelectIfPopup := SelectIfPopup;
end;
finally
EndUpdate;
end;
end
else
inherited Assign(Source);
end;
const
cShowAutoButton = 'ShowAutoButton';
cShowOtherButton = 'ShowOtherButton';
cShowColorHint ='ShowColorHint';
cAutoCaption ='AutoCaption';
cOtherCaption ='OtherCaption';
cAutoHint ='AutoHint';
cOtherHint = 'OtherHint';
procedure TJvOfficeColorPanelProperties.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties(Filer);;
{ For backwards compatibility }
BeginUpdate;
try
FFilerTag := cShowAutoButton;
Filer.DefineProperty(FFilerTag, ReadData, nil, False);
FFilerTag := cShowOtherButton;
Filer.DefineProperty(FFilerTag, ReadData, nil, False);
FFilerTag := cShowColorHint;
Filer.DefineProperty(FFilerTag, ReadData, nil, False);
FFilerTag := cAutoCaption;
Filer.DefineProperty(FFilerTag, ReadData, nil, False);
FFilerTag := cOtherCaption;
Filer.DefineProperty(FFilerTag, ReadData, nil, False);
FFilerTag := cAutoHint;
Filer.DefineProperty(FFilerTag, ReadData, nil, False);
FFilerTag := cOtherHint;
Filer.DefineProperty(FFilerTag, ReadData, nil, False);
finally
EndUpdate;
end;
end;
procedure TJvOfficeColorPanelProperties.ReadData(Reader: TReader);
begin
if SameText(FFilerTag, cShowAutoButton) then
ShowDefaultColor := Reader.ReadBoolean
else
if SameText(FFilerTag, cShowOtherButton) then
ShowCustomColor := Reader.ReadBoolean
else
if SameText(FFilerTag, cShowColorHint) then
ShowColorsHint := Reader.ReadBoolean
else
if SameText(FFilerTag, cAutoCaption) then
DefaultColorCaption := Reader.ReadString
else
if SameText(FFilerTag, cOtherCaption) then
CustomColorCaption := Reader.ReadString
else
if SameText(FFilerTag, cAutoHint) then
DefaultColorHint := Reader.ReadString
else
if SameText(FFilerTag, cOtherHint) then
CustomColorHint := Reader.ReadString;
end;
procedure TJvOfficeColorPanelProperties.CreateDefaultText;
begin
BeginUpdate;
try
NoneColorCaption := RsNoneColorCaption;
DefaultColorCaption := RsDefaultColorCaption;
CustomColorCaption := RsCustomColorCaption;
DefaultColorHint := RsDefaultColorCaption;
NoneColorHint := RsNoneColorCaption;
CustomColorHint := RsCustomColorCaption;
finally
EndUpdate;
end;
end;
procedure TJvOfficeColorPanelProperties.SetIntegerValue(const Index, Value:
Integer);
var
MeasureItem: PInteger;
MeasureConst: Integer;
LName: string;
begin
case Index of
Tag_TopMargin:
begin
MeasureItem := @FTopMargin;
MeasureConst := MinTopMargin;
LName := 'TopMargin';
end;
Tag_BottomMargin:
begin
MeasureItem := @FBottomMargin;
MeasureConst := MinBottomMargin;
LName := 'BottomMargin';
end;
Tag_HorizontalMargin:
begin
MeasureItem := @FHorizontalMargin;
MeasureConst := MinHorizontalMargin;
LName := 'HorizontalMargin';
end;
Tag_ColorSpace:
begin
MeasureItem := @FColorSpace;
MeasureConst := MinColorSpace;
LName := 'ColorSpace';
end;
Tag_ColorSpaceTop:
begin
MeasureItem := @FColorSpaceTop;
MeasureConst := MinColorSpaceTop;
LName := 'ColorSpaceTop';
end;
Tag_ColorSpaceBottom:
begin
MeasureItem := @FColorSpaceBottom;
MeasureConst := MinColorSpaceBottom;
LName := 'ColorSpaceBottom';
end;
Tag_ColorSize:
begin
MeasureItem := @FColorSize;
MeasureConst := MinColorSize;
LName := 'ColorSize';
end;
Tag_ButtonHeight:
begin
MeasureItem := @FButtonHeight;
MeasureConst := MinButtonHeight;
LName := 'ButtonHeight';
end;
else
Exit;
end;
if MeasureItem^ = Value then
Exit;
Changing;
ChangingProperty(LName);
MeasureItem^ := Value;
if MeasureItem^ < MeasureConst then
MeasureItem^ := MeasureConst;
ChangedProperty(LName);
Changed;
end;
procedure TJvOfficeColorPanelProperties.SetStringValue(const Index: Integer;
const Value: string);
var
Prop: PString;
Name: string;
begin
case Index of
Tag_NoneColorCaption:
begin
Prop := @FNoneColorCaption;
Name := cNoneColorCaption;
end;
Tag_DefaultColorCaption:
begin
Prop := @FDefaultColorCaption;
Name := cDefaultColorCaption;
end;
Tag_CustomColorCaption:
begin
Prop := @FCustomColorCaption;
Name := cCustomColorCaption;
end;
Tag_NoneColorHint:
begin
Prop := @FNoneColorHint;
Name := cNoneColorHint;
end;
Tag_DefaultColorHint:
begin
Prop := @FDefaultColorHint;
Name := cDefaultColorHint;
end;
Tag_CustomColorHint:
begin
Prop := @FCustomColorHint;
Name := cCustomColorHint;
end;
else
Exit;
end;
if (Prop^ <> Value) then
begin
Changing;
ChangingProperty(Name);
Prop^ := Value;
ChangedProperty(Name);
Changed;
end;
end;
procedure TJvOfficeColorPanelProperties.SetBooleanValue(const Index: Integer;
const Value: Boolean);
var
Prop: PBoolean;
Name: string;
begin
case Index of
Tag_NoneColorCaption:
begin
Prop := @FShowNoneColor;
Name := cShowNoneColor;
end;
Tag_DefaultColorCaption:
begin
Prop := @FShowDefaultColor;
Name := cShowDefaultColor;
end;
Tag_CustomColorCaption:
begin
Prop := @FShowCustomColor;
Name := cShowCustomColor;
end;
Tag_ShowAddInHint:
begin
Prop := @FShowAddInHint;
Name := cShowAddInHint;
end;
Tag_ShowColorsHint:
begin
Prop := @FShowColorsHint;
Name := cShowColorsHint;
end;
Tag_ShowStandardColors:
begin
Prop := @FShowStandardColors;
Name := cShowStandardColors;
end;
Tag_ShowSystemColors:
begin
Prop := @FShowSystemColors;
Name := cShowSystemColors;
end;
Tag_ShowUserColors:
begin
Prop := @FShowUserColors;
Name := cShowUserColors;
end;
Tag_RightClickSelect:
begin
Prop := @FRightClickSelect;
Name := cRightClickSelect;
end;
Tag_SelectIfPopup:
begin
Prop := @FSelectIfPopup;
Name := cSelectIfPopup;
end;
Tag_HoldCustomColor:
begin
Prop := @HoldCustomColor;
Name := cHoldCustomColor;
end;
else
Exit;
end;
if (Prop^ <> Value) then
begin
Changing;
ChangingProperty(Name);
Prop^ := Value;
ChangedProperty(Name);
Changed;
end;
end;
procedure TJvOfficeColorPanelProperties.SetColorValue(const Index: Integer;
const Value: TColor);
var
Prop: PColor;
Name: string;
begin
case Index of
Tag_NoneColorCaption:
begin
Prop := @FNoneColorColor;
Name := cNoneColorColor;
end;
Tag_DefaultColorCaption:
begin
Prop := @FDefaultColorColor;
Name := cDefaultColorColor;
end;
else
Exit;
end;
if (Prop^ <> Value) then
begin
Changing;
ChangingProperty(Name);
Prop^ := Value;
ChangedProperty(Name);
Changed;
end;
end;
procedure TJvOfficeColorPanelProperties.SetFontValue(const Index: Integer;
const Value: TFont);
var
Prop: TFont;
Name: string;
begin
case Index of
Tag_NoneColorCaption:
begin
Prop := FNoneColorFont;
Name := cNoneColorFont;
end;
Tag_DefaultColorCaption:
begin
Prop := FDefaultColorFont;
Name := cDefaultColorFont;
end;
Tag_CustomColorCaption:
begin
Prop := FCustomColorFont;
Name := cCustomColorFont;
end;
else
Exit;
end;
if (Prop <> Value) then
begin
Changing;
ChangingProperty(Name);
Prop.Assign(Value);
ChangedProperty(Name);
Changed;
end;
end;
procedure TJvOfficeColorPanelProperties.OnFontChange(Sender: TObject);
begin
if Sender = FNoneColorFont then
ChangedProperty(cNoneColorFont)
else
if Sender = FDefaultColorFont then
ChangedProperty(cDefaultColorFont)
else
if Sender = FCustomColorFont then
ChangedProperty(cCustomColorFont);
end;
//=== { TJvColorSpeedButton } ================================================
constructor TJvColorSpeedButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FDrawColor := clDefault;
FDisabledDrawColor := clGray;
FEdgeWidth := 4;
FColorQuadLayOut := cqlClient;
FCanDrawColorQuad := True;
FCanDrawGlyph := True;
FCanDrawInnerFrame := False;
end;
function TJvColorSpeedButton.GetEdgeWidth: Integer;
begin
Result := Height div 5;
end;
procedure TJvColorSpeedButton.Paint;
var
B, X, Y: Integer;
PaintColor: TColor;
begin
inherited Paint;
if Enabled then
PaintColor := DrawColor
else
PaintColor := DisabledDrawColor;
if EdgeWidth >= 0 then
B := EdgeWidth
else
B := Height div 5;
with Canvas do
begin
if CanDrawGlyph and (not Glyph.Empty) then
begin
Glyph.Transparent := True;
X := (Width div 2) - 9 + Integer(FState in [TJvButtonState(bsDown)]);
Y := (Height div 2) + 4 + Integer(FState in [TJvButtonState(bsDown)]);
if CanDrawColorQuad then
begin
Pen.Color := PaintColor;
Brush.Color := PaintColor;
Brush.Style := bsSolid;
Rectangle(X, Y, X + 17, Y + 4);
end;
end
else
begin
if CanDrawInnerFrame then
begin
Pen.Color := clGray;
Brush.Style := bsClear;
Rectangle(B - 1, B - 1, Width - (B - 2), Height - (B - 2));
end;
if CanDrawColorQuad then
begin
Pen.Color := clGray;
Brush.Color := PaintColor;
Brush.Style := bsSolid;
case ColorQuadLayOut of
cqlLeft:
Rectangle(B + 1, B + 1, Height, Height - B);
cqlRight:
Rectangle(Width - Height + 1, B + 1, Width - B, Height - B);
cqlClient:
Rectangle(B, B, Width - B, Height - B);
end;
end;
end;
end;
end;
procedure TJvColorSpeedButton.EnabledChanged;
begin
inherited EnabledChanged;
if Assigned(OnEnabledChagned) then
OnEnabledChagned(Self);
end;
procedure TJvColorSpeedButton.SetDrawColor(const Value: TColor);
begin
if FDrawColor <> Value then
begin
FDrawColor := Value;
Invalidate;
end;
end;
procedure TJvColorSpeedButton.SetDisabledDrawColor(const Value: TColor);
begin
if FDisabledDrawColor <> Value then
begin
FDisabledDrawColor := Value;
Invalidate;
end;
end;
procedure TJvColorSpeedButton.SetCanDrawColorQuad(const Value: Boolean);
begin
if CanDrawColorQuad <> Value then
begin
FCanDrawColorQuad := Value;
Invalidate;
end;
end;
procedure TJvColorSpeedButton.SetCanDrawGlyph(const Value: Boolean);
begin
if FCanDrawGlyph <> Value then
begin
FCanDrawGlyph := Value;
Invalidate;
end;
end;
procedure TJvColorSpeedButton.SetCanDrawInnerFrame(const Value: Boolean);
begin
if FCanDrawInnerFrame <> Value then
begin
FCanDrawInnerFrame := Value;
Invalidate;
end;
end;
procedure TJvColorSpeedButton.SetEdgeWidth(const Value: Integer);
begin
if FEdgeWidth <> Value then
begin
FEdgeWidth := Value;
Invalidate;
end;
end;
procedure TJvColorSpeedButton.SetFColorQuadLayOut(
const Value: TJvColorQuadLayOut);
begin
if FColorQuadLayOut <> Value then
begin
FColorQuadLayOut := Value;
Invalidate;
end;
end;
//if you directed set the Visible property,the control visible state never changed in design mode.
//That can be hide control in design mode.
procedure SetControlVisible(Ctl: TControl; AVisible: Boolean);
begin
if Ctl.Visible = AVisible then
Exit;
if csDesigning in Ctl.ComponentState then
begin
with Ctl do
if AVisible then
ControlStyle := ControlStyle - [csNoDesignVisible]
else
ControlStyle := ControlStyle + [csNoDesignVisible];
end;
Ctl.Visible := AVisible;
end;
function GetTopOwner(AComponent: TComponent): TComponent;
begin
Result := AComponent;
while (AComponent <> nil) and
(AComponent.ComponentState * [csReading, csLoading] = []) do
AComponent := AComponent.Owner;
if AComponent <> nil then
Result := AComponent;
end;
function JvReaderReadColor(Reader: TReader):TColor;
begin
with Reader do
begin
if NextValue = vaIdent then
Result := StringToColor(ReadIdent)
else
Result := ReadInteger;
end;
end;
function JvReaderReadColorDialogOptions(Reader: TReader):TColorDialogOptions;
var
EnumName: string;
procedure SkipSetBody;
begin
while Reader.ReadStr <> '' do
{nothing};
end;
begin
try
if Reader.ReadValue <> vaSet then
Exit;
Result := [];
while True do
begin
EnumName := Reader.ReadStr;
if EnumName = '' then
Break;
if SameText(EnumName, 'cdFullOpen') then
Include(Result, cdFullOpen)
else
if SameText(EnumName, 'cdPreventFullOpen') then
Include(Result, cdPreventFullOpen)
else
if SameText(EnumName, 'cdShowHelp') then
Include(Result, cdShowHelp)
else
if SameText(EnumName, 'cdSolidColor') then
Include(Result, cdSolidColor)
else
if SameText(EnumName, 'cdAnyColor') then
Include(Result, cdAnyColor);
end;
except
SkipSetBody;
end;
end;
procedure JvReaderReadStrings(Reader: TReader;Strings:TStrings);
begin
Reader.ReadListBegin;
with Strings do
begin
BeginUpdate;
try
Clear;
while not Reader.EndOfList do
Add(Reader.ReadString);
finally
EndUpdate;
end;
end;
Reader.ReadListEnd;
end;
//=== { TJvOfficeColorDrawer } ===============================================
constructor TJvOfficeColorDrawer.Create(AOwner: TComponent);
begin
inherited;
FCanDrawGlyph := True;
end;
type
TJvDefaultColorSpeendButton = class(TJvColorSpeedButton)
public
function HintShow(var HintInfo: THintInfo): Boolean; override;
end;
//=== { TJvDefaultColorSpeendButton } ========================================
function TJvDefaultColorSpeendButton.HintShow(var HintInfo: THintInfo): Boolean;
var
ColorQuadRect:TRect;
B: Integer;
begin
Result := inherited HintShow(HintInfo);
if CanDrawColorQuad then
begin
if EdgeWidth >= 0 then
B := EdgeWidth
else
B := Height div 5;
case ColorQuadLayOut of
cqlLeft:
ColorQuadRect:= Rect(B + 1, B + 1, Height, Height - B);
cqlRight:
ColorQuadRect:= Rect(Width - Height + 1, B + 1, Width - B, Height - B);
cqlClient:
ColorQuadRect:= Rect(B, B, Width - B, Height - B);
end;
if PtInRect(ColorQuadRect,ScreenToClient(Mouse.CursorPos)) then
HintInfo.HintStr := ColorToPrettyName(DrawColor);
end;
end;
//=== { TJvCustomOfficeColorPanel } ==========================================
constructor TJvCustomOfficeColorPanel.Create(AOwner: TComponent);
var
TopOwner: TComponent;
begin
inherited Create(AOwner);
ControlStyle := ControlStyle - [csAcceptsControls];
FInited := False;
FNeedReDrawDownState := True;
FBackgroundColor := clBtnFace;
FHotTrack := False;
FHotTrackFont := TFont.Create;
FHotTrackFontOptions := DefaultTrackFontOptions;
FHotTrackOptions := TJvHotTrackOptions.Create(Self);
FHotTrackOptions.OnChanged := DoHotTrackOptionsChanged;
FStandardColors := TStringList.Create;
FSystemColors := TStringList.Create;
FUserColors := TStringList.Create;
FStandardColorDrawers := TList.Create;
FSystemColorDrawers := TList.Create;
FUserColorDrawers := TList.Create;
FAddInControls := TList.Create;
FColorDialogOptions := [];
FClickColorType := cctNone;
FProperties := TJvOfficeColorPanelProperties.Create(Self);
FProperties.OnChangedProperty := DoPropertiesChanged;
FSelectedColor := FProperties.DefaultColorColor;
FButtonNoneColor := TJvColorSpeedButton.Create(Self);
with FButtonNoneColor do
begin
Parent := Self;
GroupIndex := PrimaryGroupIndex;
Tag := FStandardColors.Count + 1;
DrawColor := FProperties.NoneColorColor;
Flat := True;
CanDrawColorQuad := False;
CanDrawGlyph := False;
CanDrawInnerFrame := False;
OnClick := DoColorButtonClick;
OnEnabledChagned := DoColorDrawersEnabledChange;
end;
FAddInControls.Add(FButtonNoneColor);
FButtonDefaultColor := TJvDefaultColorSpeendButton.Create(Self);
with FButtonDefaultColor do
begin
Parent := Self;
GroupIndex := PrimaryGroupIndex;
Tag := FButtonNoneColor.Tag + 1;
Down := True;
DrawColor := FProperties.DefaultColorColor;
Flat := True;
CanDrawColorQuad := True;
CanDrawGlyph := False;
CanDrawInnerFrame := True;
ColorQuadLayOut := cqlLeft;
OnClick := DoColorButtonClick;
OnMouseUp := RedirectToColorButtonClick;
OnEnabledChagned := DoColorDrawersEnabledChange;
end;
FAddInControls.Add(FButtonDefaultColor);
FPriorCheckedButton := FButtonDefaultColor;
FButtonCustomColor := TJvColorSpeedButton.Create(Self);
with FButtonCustomColor do
begin
Parent := Self;
GroupIndex := PrimaryGroupIndex;
Tag := FButtonDefaultColor.Tag + 1;
DrawColor := clDefault;
Flat := True;
CanDrawColorQuad := False;
CanDrawGlyph := False;
CanDrawInnerFrame := True;
OnClick := DoColorButtonClick;
OnMouseUp := RedirectToColorButtonClick;
OnEnabledChagned := DoColorDrawersEnabledChange;
end;
FAddInControls.Add(FButtonCustomColor);
FCustomColorDrawer := TJvOfficeColorDrawer.Create(Self);
with FCustomColorDrawer do
begin
Parent := Self;
GroupIndex := PrimaryGroupIndex;
Tag := FButtonCustomColor.Tag + 1;
Flat := True;
DrawColor := clDefault;
Hint := ColorToString(DrawColor);
CanDrawColorQuad := True;
CanDrawGlyph := False;
CanDrawInnerFrame := False;
ColorQuadLayOut := cqlClient;
OnClick := DoColorButtonClick;
OnMouseUp := RedirectToColorButtonClick;
OnEnabledChagned := DoColorDrawersEnabledChange;
end;
FAddInControls.Add(FCustomColorDrawer);
FDividerLine1 := JvDividerLineClass.Create(Self);
with FDividerLine1 do
begin
Parent := Self;
Visible := False;
Height := 2;
end;
FDividerLine2 := JvDividerLineClass.Create(Self);
with FDividerLine2 do
begin
Parent := Self;
Visible := False;
Height := 2;
end;
FDividerLine3 := JvDividerLineClass.Create(Self);
with FDividerLine3 do
begin
Parent := Self;
Visible := False;
Height := 2;
end;
FColorDialog := TJvOfficeColorDialog.Create(Self);
FColorDialog.Options := FColorDialogOptions;
FStandardColors.BeginUpdate;
try
CreateStandardColors(FStandardColors);
finally
FStandardColors.EndUpdate;
end;
FSystemColors.BeginUpdate;
try
CreateSystemColors(FSystemColors);
finally
FSystemColors.EndUpdate;
end;
TopOwner := GetTopOwner(Self);
// make sure that if this is not loading from DFM file or stream.
if (TopOwner <> nil) and (TopOwner.ComponentState * [csReading, csLoading] = [])
then
begin
FUserColors.BeginUpdate;
try
CreateUserColors(FUserColors);
finally
FUserColors.EndUpdate;
end;
CreateUserColorDrawers;
FProperties.CreateDefaultText;
end
else //When loaded UserColors,Call CreateUserColorDrawers at once in DoLoadedUserColors
FUserColors.OnChange := DoLoadedUserColors;
CreateStandardColorDrawers;
CreateSystemColorDrawers;
FInited := True;
end;
destructor TJvCustomOfficeColorPanel.Destroy;
begin
FreeAndNil(FProperties);
FreeAndNil(FHotTrackFont);
FreeAndNil(FHotTrackOptions);
FreeAndNil(FStandardColors);
FreeAndNil(FSystemColors);
FreeAndNil(FUserColors);
FreeAndNil(FStandardColorDrawers);
FreeAndNil(FSystemColorDrawers);
FreeAndNil(FUserColorDrawers);
FreeAndNil(FAddInControls);
inherited Destroy;
end;
function TJvCustomOfficeColorPanel.CreateStandardColors(ColorList: TStrings): Integer;
var
Index: Integer;
begin
Result := 0;
if ColorList <> nil then
begin
ColorList.BeginUpdate;
ColorList.Clear;
for Index := Low(StandardColorValues) to High(StandardColorValues) do
ColorList.Values[
ColorToString(StandardColorValues[Index].Value)] :=
StandardColorValues[Index].Description;
ColorList.EndUpdate;
Result := ColorList.Count;
end;
end;
function TJvCustomOfficeColorPanel.CreateSystemColors(ColorList: TStrings): Integer;
var
Index: Integer;
begin
Result := 0;
if ColorList <> nil then
begin
ColorList.BeginUpdate;
ColorList.Clear;
for Index := Low(SysColorValues) to High(SysColorValues) do
ColorList.Values[
ColorToString(SysColorValues[Index].Value)] :=
SysColorValues[Index].Description;
Result := ColorList.Count;
ColorList.EndUpdate;
end;
end;
function TJvCustomOfficeColorPanel.CreateUserColors(ColorList: TStrings): Integer;
begin
Result := 0;
end;
procedure TJvCustomOfficeColorPanel.CreateColorDrawersByColors(DrawersList: TList;
ColorsList: TStringList; AVisible: Boolean);
var
I, ValidColCount: Integer;
Drawer: TJvOfficeColorDrawer;
Value, NewHint: string;
ExceptionRaised: Boolean;
begin
DeleteEmptyLines(ColorsList);
if ColorsList.Count < 1 then
Exit;
//ignore the record that more then MaxSectColorCount .
ValidColCount := Min(ColorsList.Count, MaxSectColorCount);
if DrawersList.Count > ValidColCount then
begin
for I := ValidColCount to DrawersList.Count - 1 do
SetControlVisible(TControl(DrawersList[I]), False);
end
else
while DrawersList.Count < ValidColCount do
begin
Drawer := TJvOfficeColorDrawer.Create(Self);
with Drawer do
begin
CanDrawColorQuad := True;
CanDrawGlyph := False;
CanDrawInnerFrame := False;
ColorQuadLayOut := cqlClient;
end;
DrawersList.Add(Drawer);
end;
for I := 0 to ValidColCount - 1 do
begin
ExceptionRaised := False;
Drawer := TJvOfficeColorDrawer(DrawersList[I]);
with Drawer do
begin
Parent := Self;
GroupIndex := PrimaryGroupIndex;
Tag := I;
Flat := True;
try
Value := Trim(ColorsList.Names[I]);
DrawColor := StringToColor(Value);
except
on EConvertError do
begin
DrawColor := clDefault;
DisabledDrawColor := Self.BackColor;
ExceptionRaised := True;
end;
end;
if ExceptionRaised then
begin
Drawer.Enabled := False;
SetControlVisible(Drawer, False);
end
else
SetControlVisible(Drawer, AVisible);
{$IFDEF COMPILER7_UP}
NewHint := ColorsList.ValueFromIndex[I];
{$ELSE}
NewHint := ColorsList.Values[ColorsList.Names[I]];
{$ENDIF}
if SameText(NewHint, cUseDefaultColorHint) then
NewHint := ColorToPrettyName(DrawColor);
Hint := NewHint;
Transparent := False;
Color := Self.BackColor;
DisabledDrawColor := Self.BackColor;
HotTrack := Self.HotTrack;
HotTrackFont := Self.HotTrackFont;
HotTrackFontOptions := Self.HotTrackFontOptions;
HotTrackOptions := Self.HotTrackOptions;
OnClick := DoColorButtonClick;
OnEnabledChagned := DoColorDrawersEnabledChange;
OnMouseUp := RedirectToColorButtonClick;
end;
end;
end;
procedure TJvCustomOfficeColorPanel.CreateStandardColorDrawers;
begin
CreateColorDrawersByColors(FStandardColorDrawers, FStandardColors, Properties.ShowStandardColors);
end;
procedure TJvCustomOfficeColorPanel.CreateSystemColorDrawers;
begin
CreateColorDrawersByColors(FSystemColorDrawers, FSystemColors, Properties.ShowSystemColors);
end;
procedure TJvCustomOfficeColorPanel.CreateUserColorDrawers;
begin
CreateColorDrawersByColors(FUserColorDrawers, FUserColors, Properties.ShowUserColors);
end;
procedure TJvCustomOfficeColorPanel.RearrangeControls;
var
I, CtrlHeight: Integer;
ValidColCount: Integer;
TempTopInc: Integer;
StdColBtnsTop, StdColBtnsLeft: Integer;
SysColBtnsTop, SysColBtnsLeft: Integer;
UserColBtnsTop, UserColBtnsLeft: Integer;
Control, BottomControl: TControl; // the bottom most Button
CaclButtonWidth: Integer;
HotTrackIntf: IJvHotTrack;
R: TRect;
lSiteInfo: TJvAddInControlSiteInfo;
begin
if (not FInited) or (Parent = nil) or FInRearrangeControls then
Exit;
DisableAlign;
BottomControl := nil;
TempTopInc := 0;
FInRearrangeControls := True;
with Properties do
begin
CaclButtonWidth := LineColorCount * (ColorSize + ColorSpace) - ColorSpace;
StdColBtnsTop := BorderWidth;
StdColBtnsLeft :=BorderWidth + HorizontalMargin;
//set None Color Button Bounds
//do't direct set value to Visible property.
SetControlVisible(FButtonNoneColor, ShowNoneColor);
if FButtonNoneColor.Visible then
begin
FButtonNoneColor.Caption := NoneColorCaption;
FButtonNoneColor.SetBounds(HorizontalMargin + BorderWidth,BorderWidth + TopMargin + TempTopInc,
CaclButtonWidth, ButtonHeight);
StdColBtnsTop := FButtonNoneColor.Top + FButtonNoneColor.Height;
StdColBtnsLeft := FButtonNoneColor.Left;
TempTopInc := BorderWidth + TopMargin + FButtonNoneColor.Height;
BottomControl := FButtonNoneColor;
end;
//set Default Color Button Bounds
SetControlVisible(FButtonDefaultColor, ShowDefaultColor);
if FButtonDefaultColor.Visible then
begin
FButtonDefaultColor.Caption := DefaultColorCaption;
FButtonDefaultColor.SetBounds(StdColBtnsLeft, TopMargin + TempTopInc,
CaclButtonWidth, ButtonHeight);
StdColBtnsTop := FButtonDefaultColor.Top + FButtonDefaultColor.Height;
StdColBtnsLeft := FButtonDefaultColor.Left;
BottomControl := FButtonDefaultColor;
end;
//set Standard Colors drawer position
ValidColCount := Min(FStandardColors.Count, MaxSectColorCount);
if FStandardColorDrawers.Count < ValidColCount then
CreateStandardColorDrawers
else
if FStandardColorDrawers.Count > ValidColCount then
for I := ValidColCount to FStandardColorDrawers.Count - 1 do
SetControlVisible(TControl(FStandardColorDrawers[I]), False);
for I := 0 to ValidColCount - 1 do
begin
Control := TJvColorSpeedButton(FStandardColorDrawers[I]);
SetControlVisible(Control, ShowStandardColors);
if Control.Visible then
begin
Control.SetBounds(StdColBtnsLeft + (I mod LineColorCount) * (ColorSpace
+ ColorSize),
StdColBtnsTop + ColorSpaceTop + (I div LineColorCount) * (ColorSpace
+ ColorSize),
ColorSize, ColorSize);
BottomControl := Control;
end;
end;
SysColBtnsLeft := StdColBtnsLeft;
UserColBtnsLeft := StdColBtnsLeft;
if not Properties.ShowStandardColors then
SysColBtnsTop := StdColBtnsTop
else
SysColBtnsTop := BottomControl.Top + BottomControl.Height;
//System colors
ValidColCount := Min(FSystemColors.Count, MaxSectColorCount);
if FSystemColorDrawers.Count < ValidColCount then
CreateSystemColorDrawers
else
if FSystemColorDrawers.Count > ValidColCount then
for I := ValidColCount to FSystemColorDrawers.Count - 1 do
SetControlVisible(TControl(FSystemColorDrawers[I]), False);
//set Divider Line position up System Colors
SetControlVisible(FDividerLine1, (ShowSystemColors and (FSystemColorDrawers.Count > 0)) and
ShowStandardColors);
if FDividerLine1.Visible then
with FDividerLine1 do
begin
SetBounds(StdColBtnsLeft, SysColBtnsTop + ColorSpaceBottom, CaclButtonWidth, Height);
SysColBtnsTop := Top + Height;
end;
//set system Colors drawer position
for I := 0 to ValidColCount - 1 do
begin
Control := TControl(FSystemColorDrawers[I]);
SetControlVisible(Control, ShowSystemColors);
if Control.Visible then
begin
Control.SetBounds(SysColBtnsLeft + (I mod LineColorCount) * (ColorSpace + ColorSize),
SysColBtnsTop + ColorSpaceTop + (I div LineColorCount) * (ColorSpace + ColorSize),
ColorSize, ColorSize);
BottomControl := Control;
end;
end;
if not Properties.ShowSystemColors then
UserColBtnsTop := SysColBtnsTop
else
UserColBtnsTop := BottomControl.Top + BottomControl.Height;
// User colors
ValidColCount := Min(FUserColors.Count, MaxSectColorCount);
if FUserColorDrawers.Count < ValidColCount then
CreateUserColorDrawers
else
if FUserColorDrawers.Count > ValidColCount then
for I := ValidColCount to FUserColorDrawers.Count - 1 do
SetControlVisible(TControl(FUserColorDrawers[I]), False);
// set Divider Line position up user Colors
SetControlVisible(FDividerLine2,
(ShowUserColors and (FUserColorDrawers.Count > 0)) and
(ShowSystemColors or ShowStandardColors));
if FDividerLine2.Visible then
with FDividerLine2 do
begin
SetBounds(StdColBtnsLeft, UserColBtnsTop + ColorSpaceBottom,
CaclButtonWidth, Height);
UserColBtnsTop := Top + Height;
end;
// set User Colors drawer position
for I := 0 to ValidColCount - 1 do
begin
Control := TControl(FUserColorDrawers[I]);
SetControlVisible(Control, ShowUserColors);
if Control.Visible then
begin
Control.SetBounds(UserColBtnsLeft + (I mod LineColorCount) *
(ColorSpace + ColorSize),
UserColBtnsTop + ColorSpaceTop + (I div LineColorCount) * (ColorSpace + ColorSize),
ColorSize, ColorSize);
BottomControl := Control;
end;
end;
//set Divider Line position up custom color button
if BottomControl = nil then
TempTopInc := TopMargin
else
TempTopInc := BottomControl.Top + BottomControl.Height +
ColorSpaceBottom;
SetControlVisible(FDividerLine3,
(ShowCustomColor and
(ShowSystemColors or ShowStandardColors or ShowUserColors)) );
if FDividerLine3.Visible then
with FDividerLine3 do
begin
SetBounds(StdColBtnsLeft, TempTopInc, CaclButtonWidth, Height);
BottomControl := FDividerLine3;
end;
//set Custom color button Bounds
if BottomControl = nil then
TempTopInc := TopMargin
else
TempTopInc := BottomControl.Top + BottomControl.Height +
ColorSpaceBottom;
SetControlVisible(FCustomColorDrawer, ShowCustomColor);
SetControlVisible(FButtonCustomColor, ShowCustomColor);
with FCustomColorDrawer do
if Visible then
begin
CtrlHeight := ButtonHeight;
SetBounds(StdColBtnsLeft + CaclButtonWidth - CtrlHeight, TempTopInc,
CtrlHeight, CtrlHeight);
BottomControl := FCustomColorDrawer;
end;
with FButtonCustomColor do
if Visible then
begin
TJvSpeedButton(FButtonCustomColor).Caption := CustomColorCaption;
CtrlHeight := ButtonHeight;
SetBounds(StdColBtnsLeft, TempTopInc,
CaclButtonWidth - FCustomColorDrawer.Width - ColorSpace, CtrlHeight);
BottomControl := FButtonCustomColor;
end;
//set Other Add-in Controls Bounds
for I := 0 to FAddInControls.Count - 1 do
begin
Control := FAddInControls[I];
if (Control = FButtonNoneColor) or (Control = FButtonDefaultColor) or
(Control = FButtonCustomColor) or (Control = FCustomColorDrawer) then
Continue;
if BottomControl = nil then
TempTopInc := TopMargin
else
TempTopInc := BottomControl.Top + BottomControl.Height + ColorSpaceBottom;
with Control do
begin
if Visible then
begin
Parent := Self;
CtrlHeight := Height;
if Control is TJvCustomSpeedButton then
with TJvSpeedButton(Control) do
begin
Flat := True;
Color := Self.BackColor;
Enabled := Self.Enabled;
end;
if Supports(Control, IJvHotTrack, HotTrackIntf) then
with HotTrackIntf do
begin
HotTrack := Self.HotTrack;
HotTrackFont := Self.HotTrackFont;
HotTrackFontOptions := Self.HotTrackFontOptions;
HotTrackOptions := Self.HotTrackOptions;
end;
R := Rect(StdColBtnsLeft, TempTopInc,
StdColBtnsLeft + CaclButtonWidth, TempTopInc + CtrlHeight);
lSiteInfo.AddInControl:= Control;
lSiteInfo.BoundsRect := R;
DoGetAddInControlSiteInfo(Self, lSiteInfo);
BoundsRect := lSiteInfo.BoundsRect;
BottomControl := Control;
end;
end;
end;
//Set panel size
Width := (HorizontalMargin + BorderWidth) * 2 + ColorSize * LineColorCount +
ColorSpace * (LineColorCount - 1);
if BottomControl = nil then
Height := 0
else
Height := BottomControl.Top + BottomControl.Height + BottomMargin + BorderWidth;
end;
EnableAlign;
FInRearrangeControls := False;
end;
procedure TJvCustomOfficeColorPanel.RefreshControls;
begin
if FInRearrangeControls then
Exit;
with Properties do
begin
if ShowStandardColors then
CreateStandardColorDrawers;
if ShowSystemColors then
CreateSystemColorDrawers;
if ShowUserColors then
CreateUserColorDrawers;
if ShowStandardColors or ShowSystemColors or ShowUserColors then
RearrangeControls;
end;
end;
procedure TJvCustomOfficeColorPanel.DoColorButtonClick(Sender: TObject);
var
LastColor: TColor;
procedure HoldCustomColor(AColor: TColor);
var
StrColor: string;
begin
if ClickColorType = cctCustomColor then
begin
StrColor := ColorToString(AColor);
if (FButtonCustomColor.DrawColor <> AColor) then
begin //refresh CustomColorDrawer
FButtonCustomColor.DrawColor := AColor;
FCustomColorDrawer.DrawColor := AColor;
FCustomColorDrawer.Hint := ColorToPrettyName(AColor);
end;
if Properties.HoldCustomColor and
((FButtonCustomColor.DrawColor <> AColor) or (UserColors.IndexOfName(StrColor) = -1)) then
begin
UserColors.BeginUpdate;
try
UserColors.Values[StrColor] := cUseDefaultColorHint;
finally
UserColors.EndUpdate;
end;
CreateUserColorDrawers;
RearrangeControls;
DoHoldedCustomColor(Self,AColor);
end;
end;
end;
begin
if Sender is TJvColorSpeedButton then
begin
if Sender = FButtonNoneColor then
FClickColorType := cctNoneColor
else
if Sender = FButtonDefaultColor then
FClickColorType := cctDefaultColor
else
if Sender = FButtonCustomColor then
FClickColorType := cctCustomColor
else
if FAddInControls.IndexOf(Sender) <> -1 then
FClickColorType := cctAddInControl
else
FClickColorType := cctColors;
end
else
FClickColorType := cctNone;
FNeedReDrawDownState := False;
try
if Assigned(FOnColorButtonClick) then
FOnColorButtonClick(Sender);
if FClickColorType <> cctNone then
begin
if (FClickColorType = cctCustomColor) then
begin
LastColor := SelectedColor;
if Assigned(FOnShowOwnerColorDialog) then
begin
FOnShowOwnerColorDialog(Sender);
if LastColor = SelectedColor then //never changed SelectedColor
begin
if (FPriorCheckedButton <> nil) then
FPriorCheckedButton.Down := True;
end
else
HoldCustomColor(SelectedColor);
end
else
begin
FColorDialog.Options := FColorDialogOptions;
FColorDialog.Color := SelectedColor{FCustomColorDrawer.DrawColor};
if FColorDialog.Execute then
begin
HoldCustomColor(FColorDialog.Color);
SelectedColor := FColorDialog.Color;
end
else
if FPriorCheckedButton <> nil then //cancel the color dialog selection, restore the Prior Checked Button down
FPriorCheckedButton.Down := True;
end;
// the PriorCheckedButton have not been assign.
if ((FPriorCheckedButton <> nil) and (not FPriorCheckedButton.Down)) or
// if the PriorCheckedButton is ButtonCustom,Set CustomColorDrawer.Down to true for ever.
(FPriorCheckedButton = FButtonCustomColor) then
FCustomColorDrawer.Down := True;
end
else
begin
SelectedColor := TJvColorSpeedButton(Sender).DrawColor;
end;
end;
finally
FNeedReDrawDownState := True;
end;
if Sender is TJvCustomSpeedButton then
// the PriorCheckedButton have not been assign.
if (FPriorCheckedButton <> nil) and (not FPriorCheckedButton.Down) then
FPriorCheckedButton := TJvColorSpeedButton(Sender);
FClickColorType := cctNone;
end;
procedure TJvCustomOfficeColorPanel.DoSelectedColorChange(Sender: TObject);
begin
if Assigned(FOnColorChange) then
FOnColorChange(Self);
end;
procedure TJvCustomOfficeColorPanel.DoGetAddInControlSiteInfo(Sender: TControl;
var ASiteInfo: TJvAddInControlSiteInfo);
begin
if Assigned(FOnGetAddInControlSiteInfo) then
FOnGetAddInControlSiteInfo(Sender, ASiteInfo);
end;
function TJvCustomOfficeColorPanel.GetControlBackgroundColor: TColor;
begin
Result := FBackgroundColor;
end;
procedure TJvCustomOfficeColorPanel.SetControlBackgroundColor(const Value: TColor);
var
I: Integer;
begin
if FBackgroundColor <> Value then
begin
inherited Color := Value;
FBackgroundColor := Value;
for I := 0 to FStandardColorDrawers.Count - 1 do
with TJvColorSpeedButton(FStandardColorDrawers[I]) do
begin
Color := Value;
DisabledDrawColor := Value;
end;
for I := 0 to FSystemColorDrawers.Count - 1 do
with TJvColorSpeedButton(FSystemColorDrawers[I]) do
begin
Color := Value;
DisabledDrawColor := Value;
end;
for I := 0 to FUserColorDrawers.Count - 1 do
with TJvColorSpeedButton(FUserColorDrawers[I]) do
begin
Color := Value;
DisabledDrawColor := Value;
end;
for I := 0 to FAddInControls.Count - 1 do
begin
TControlAccessProtected(FAddInControls[I]).Color := Value;
if TObject(FAddInControls[I]) is TJvColorSpeedButton then
TJvColorSpeedButton(FAddInControls[I]).DisabledDrawColor := Value;
end;
end;
end;
procedure TJvCustomOfficeColorPanel.SetSelectedColor(const Value: TColor);
var
I: Integer;
Button: TJvColorSpeedButton;
ValidColCount: Integer;
lOut: Boolean; // (ahuser) find a better name
begin
if FSelectedColor <> Value then
begin
Button := nil;
FSelectedColor := Value;
lOut := False;
if FNeedReDrawDownState then
begin
if FButtonDefaultColor.DrawColor = Value then
begin
FButtonDefaultColor.Down := True;
if FPriorCheckedButton = nil then
FPriorCheckedButton := FButtonDefaultColor;
end
else
begin
FButtonDefaultColor.Down := False;
ValidColCount := Min(FStandardColorDrawers.Count, MaxSectColorCount);
for I := 0 to ValidColCount - 1 do
begin
Button := TJvColorSpeedButton(FStandardColorDrawers[I]);
Button.Down := Button.DrawColor = Value;
if Button.Down then
begin
lOut := True;
Break;
end;
end;
if not lOut then
begin
ValidColCount := Min(FSystemColorDrawers.Count, MaxSectColorCount);
for I := 0 to ValidColCount - 1 do
begin
Button := TJvColorSpeedButton(FSystemColorDrawers[I]);
Button.Down := Button.DrawColor = Value;
if Button.Down then
begin
lOut := True;
Break;
end;
end;
end;
if not lOut then
begin
ValidColCount := Min(FUserColorDrawers.Count, MaxSectColorCount);
for I := 0 to ValidColCount - 1 do
begin
Button := TJvColorSpeedButton(FUserColorDrawers[I]);
Button.Down := Button.DrawColor = Value;
if Button.Down then
Break;
end;
end;
if (FPriorCheckedButton = nil) and (Button <> nil) then
FPriorCheckedButton := Button;
end;
end;
DoSelectedColorChange(Self);
end;
end;
function TJvCustomOfficeColorPanel.GetHotTrack: Boolean;
begin
Result := FHotTrack;
end;
function TJvCustomOfficeColorPanel.GetHotTrackFont: TFont;
begin
Result := FHotTrackFont;
end;
function TJvCustomOfficeColorPanel.GetHotTrackFontOptions: TJvTrackFontOptions;
begin
Result := FHotTrackFontOptions;
end;
function TJvCustomOfficeColorPanel.GetHotTrackOptions: TJvHotTrackOptions;
begin
Result := FHotTrackOptions;
end;
procedure TJvCustomOfficeColorPanel.SetHotTrack(Value: Boolean);
var
I: Integer;
HotTrackIntf: IJvHotTrack;
begin
if FHotTrack <> Value then
begin
FHotTrack := Value;
for I := 0 to FStandardColorDrawers.Count - 1 do
TJvColorSpeedButton(FStandardColorDrawers[I]).HotTrack := Value;
for I := 0 to FSystemColorDrawers.Count - 1 do
TJvColorSpeedButton(FSystemColorDrawers[I]).HotTrack := Value;
for I := 0 to FUserColorDrawers.Count - 1 do
TJvColorSpeedButton(FUserColorDrawers[I]).HotTrack := Value;
for I := 0 to FAddInControls.Count - 1 do
if Supports(TObject(FAddInControls[I]), IJvHotTrack, HotTrackIntf) then
HotTrackIntf.HotTrack := Value;
end;
end;
procedure TJvCustomOfficeColorPanel.SetHotTrackFont(Value: TFont);
var
I: Integer;
HotTrackIntf: IJvHotTrack;
begin
if (FHotTrackFont <> Value) and (Value <> nil) then
begin
FHotTrackFont.Assign(Value);
for I := 0 to FStandardColorDrawers.Count - 1 do
TJvColorSpeedButton(FStandardColorDrawers[I]).HotTrackFont := Value;
for I := 0 to FSystemColorDrawers.Count - 1 do
TJvColorSpeedButton(FSystemColorDrawers[I]).HotTrackFont := Value;
for I := 0 to FAddInControls.Count - 1 do
if Supports(TObject(FAddInControls[I]), IJvHotTrack, HotTrackIntf) then
HotTrackIntf.HotTrackFont := Value;
end;
end;
procedure TJvCustomOfficeColorPanel.SetHotTrackFontOptions(Value: TJvTrackFontOptions);
var
I: Integer;
HotTrackIntf: IJvHotTrack;
begin
if FHotTrackFontOptions <> Value then
begin
FHotTrackFontOptions := Value;
for I := 0 to FStandardColorDrawers.Count - 1 do
TJvColorSpeedButton(FStandardColorDrawers[I]).HotTrackFontOptions :=
Value;
for I := 0 to FSystemColorDrawers.Count - 1 do
TJvColorSpeedButton(FSystemColorDrawers[I]).HotTrackFontOptions := Value;
for I := 0 to FAddInControls.Count - 1 do
if Supports(TObject(FAddInControls[I]), IJvHotTrack, HotTrackIntf) then
HotTrackIntf.HotTrackFontOptions := Value;
end;
end;
procedure TJvCustomOfficeColorPanel.SetHotTrackOptions(Value: TJvHotTrackOptions);
var
I: Integer;
HotTrackIntf: IJvHotTrack;
begin
if (FHotTrackOptions <> Value) and (Value <> nil) then
begin
FHotTrackOptions.Assign(Value);
for I := 0 to FStandardColorDrawers.Count - 1 do
TJvColorSpeedButton(FStandardColorDrawers[I]).HotTrackOptions := Value;
for I := 0 to FSystemColorDrawers.Count - 1 do
TJvColorSpeedButton(FSystemColorDrawers[I]).HotTrackOptions := Value;
for I := 0 to FUserColorDrawers.Count - 1 do
TJvColorSpeedButton(FUserColorDrawers[I]).HotTrackOptions := Value;
for I := 0 to FAddInControls.Count - 1 do
if Supports(TObject(FAddInControls[I]), IJvHotTrack, HotTrackIntf) then
HotTrackIntf.HotTrackOptions := Value;
end;
end;
procedure TJvCustomOfficeColorPanel.IJvHotTrack_Assign(
Source: IJvHotTrack);
begin
if (Source <> nil) and (IJvHotTrack(Self) <> Source) then
begin
HotTrack := Source.HotTrack;
HotTrackFont :=Source.HotTrackFont;
HotTrackFontOptions := Source.HotTrackFontOptions;
HotTrackOptions := Source.HotTrackOptions;
end;
end;
procedure TJvCustomOfficeColorPanel.DoHotTrackOptionsChanged(Sender: TObject);
var
I: Integer;
HotTrackIntf: IJvHotTrack;
DrawInnerFrame: Boolean;
begin
DrawInnerFrame := not HotTrackOptions.Enabled;
FButtonDefaultColor.CanDrawInnerFrame := DrawInnerFrame;
FButtonCustomColor.CanDrawInnerFrame := DrawInnerFrame;
for I := 0 to FStandardColorDrawers.Count - 1 do
TJvColorSpeedButton(FStandardColorDrawers[I]).HotTrackOptions :=
FHotTrackOptions;
for I := 0 to FSystemColorDrawers.Count - 1 do
TJvColorSpeedButton(FSystemColorDrawers[I]).HotTrackOptions :=
FHotTrackOptions;
for I := 0 to FUserColorDrawers.Count - 1 do
TJvColorSpeedButton(FUserColorDrawers[I]).HotTrackOptions :=
FHotTrackOptions;
for I := 0 to FAddInControls.Count - 1 do
if Supports(TObject(FAddInControls[I]), IJvHotTrack, HotTrackIntf) then
HotTrackIntf.HotTrackOptions := FHotTrackOptions;
end;
function TJvCustomOfficeColorPanel.GetColorDlgCustomColors: TStrings;
begin
Result := FColorDialog.CustomColors;
end;
procedure TJvCustomOfficeColorPanel.SetColorDlgCustomColors(const Value: TStrings);
begin
FColorDialog.CustomColors.Assign(Value);
end;
procedure TJvCustomOfficeColorPanel.SetStandardColors(const Value: TStringList);
begin
if (FStandardColors <> Value) and (Value <> nil) then
begin
FStandardColors.Assign(Value);
RefreshControls;
end;
end;
procedure TJvCustomOfficeColorPanel.SetSystemColors(const Value: TStringList);
begin
if (FSystemColors <> Value) and (Value <> nil) then
begin
FSystemColors.Assign(Value);
RefreshControls;
end;
end;
procedure TJvCustomOfficeColorPanel.SetUserColors(const Value: TStringList);
begin
if (FUserColors <> Value) and (Value <> nil) then
begin
FUserColors.Assign(Value);
RefreshControls;
end;
end;
procedure TJvCustomOfficeColorPanel.DoColorDrawersEnabledChange(Sender: TObject);
begin
if Sender is TJvColorSpeedButton then
TJvColorSpeedButton(Sender).DisabledDrawColor := BackColor;
end;
procedure TJvCustomOfficeColorPanel.DoLoadedUserColors(Sender: TObject);
begin
FUserColors.OnChange := nil; // Run once time only.
CreateUserColorDrawers;
end;
procedure TJvCustomOfficeColorPanel.DoHoldedCustomColor(Sender: TObject;AColor: TColor);
begin
if Assigned(FOnHoldCustomColor) then
FOnHoldCustomColor(Self,AColor);
end;
procedure TJvCustomOfficeColorPanel.Loaded;
begin
inherited Loaded;
FUserColors.OnChange := nil;
end;
procedure TJvCustomOfficeColorPanel.Resize;
begin
inherited Resize;
if not FInRearrangeControls then
RearrangeControls;
end;
procedure TJvCustomOfficeColorPanel.SetEnabled(Value: Boolean);
var
I: Integer;
begin
inherited SetEnabled(Value);
for I := 0 to FStandardColorDrawers.Count - 1 do
TControl(FStandardColorDrawers[I]).Enabled := Value;
for I := 0 to FSystemColorDrawers.Count - 1 do
TControl(FSystemColorDrawers[I]).Enabled := Value;
for I := 0 to FUserColorDrawers.Count - 1 do
TControl(FUserColorDrawers[I]).Enabled := Value;
for I := 0 to FAddInControls.Count - 1 do
TControl(FAddInControls[I]).Enabled := Value;
end;
procedure TJvCustomOfficeColorPanel.ShowHintChanged;
var
I: Integer;
begin
inherited ShowHintChanged;
for I := 0 to FStandardColorDrawers.Count - 1 do
TControl(FStandardColorDrawers[I]).ShowHint := ShowHint;
for I := 0 to FSystemColorDrawers.Count - 1 do
TControl(FSystemColorDrawers[I]).ShowHint := ShowHint;
for I := 0 to FUserColorDrawers.Count - 1 do
TControl(FUserColorDrawers[I]).ShowHint := ShowHint;
for I := 0 to FAddInControls.Count - 1 do
TControl(FAddInControls[I]).ShowHint := ShowHint;
end;
procedure TJvCustomOfficeColorPanel.SetColorDialogOptions(const Value: TColorDialogOptions);
begin
FColorDialogOptions := Value;
end;
procedure TJvCustomOfficeColorPanel.CreateWnd;
begin
inherited CreateWnd;
RearrangeControls;
end;
procedure TJvCustomOfficeColorPanel.SetProperties(const Value: TJvOfficeColorPanelProperties);
begin
if (FProperties <> Value) and (Value <> nil) then
FProperties.Assign(Value);
end;
procedure TJvCustomOfficeColorPanel.DoPropertiesChanged(Sender: TObject;
const PropName: string);
var
RealignFlag: Boolean;
I: Integer;
begin
{ The initial value is do't Adjust size,if you wan't adjust size when a property changed,
add a sentence like following to do nothing to skip notify. }
RealignFlag := False;
if SameText(PropName, cNoneColorCaption) then
FButtonNoneColor.Caption := Properties.NoneColorCaption
else
if SameText(PropName, cDefaultColorCaption) then
FButtonDefaultColor.Caption := Properties.DefaultColorCaption
else
if SameText(PropName, cCustomColorCaption) then
FButtonCustomColor.Caption := Properties.CustomColorCaption
else
if SameText(PropName, cNoneColorHint) then
FButtonNoneColor.Hint := Properties.NoneColorHint
else
if SameText(PropName, cDefaultColorHint) then
FButtonDefaultColor.Hint := Properties.DefaultColorHint
else
if SameText(PropName, cCustomColorHint) then
FButtonCustomColor.Hint := Properties.CustomColorHint
else
if SameText(PropName, cNoneColorColor) then
FButtonNoneColor.DrawColor := Properties.NoneColorColor
else
if SameText(PropName, cDefaultColorColor) then
FButtonDefaultColor.DrawColor := Properties.DefaultColorColor
else
if SameText(PropName, cNoneColorFont) then
FButtonNoneColor.Font := Properties.NoneColorFont
else
if SameText(PropName, cDefaultColorFont) then
FButtonDefaultColor.Font := Properties.DefaultColorFont
else
if SameText(PropName, cCustomColorFont) then
FButtonCustomColor.Font := Properties.CustomColorFont
else
if SameText(PropName, cShowAddInHint) then
begin
FButtonNoneColor.ShowHint := Properties.ShowAddInHint;
FButtonDefaultColor.ShowHint := Properties.ShowAddInHint;
FButtonCustomColor.ShowHint := Properties.ShowAddInHint;
end
else
if SameText(PropName, cShowColorsHint) then
begin
for I := 0 to FStandardColorDrawers.Count - 1 do
TControl(FStandardColorDrawers[I]).ShowHint := Properties.ShowColorsHint;
for I := 0 to FSystemColorDrawers.Count - 1 do
TControl(FSystemColorDrawers[I]).ShowHint := Properties.ShowColorsHint;
for I := 0 to FUserColorDrawers.Count - 1 do
TControl(FUserColorDrawers[I]).ShowHint := Properties.ShowColorsHint;
end
else
if SameText(PropName, cRightClickSelect) or
SameText(PropName, cHoldCustomColor) or
SameText(PropName, cRightClickSelect) then
else // Other property change will adjust size by default.
RealignFlag := True;
if RealignFlag then
RearrangeControls;
end;
procedure TJvCustomOfficeColorPanel.RedirectToColorButtonClick(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
Parent: TWinControl;
begin
if Assigned(OnMouseUp) then
OnMouseUp(Sender, Button, Shift, X, Y);
// If any of the possible parents has a popup menu, we let it
// run, and do not select the button (hence the exit), unless
// the properties tell us to select anyway
Parent := Self;
while Assigned(Parent) do
if Assigned(TControlAccessProtected(Parent).PopupMenu) then
begin
if not Properties.SelectIfPopup then
Exit;
end
else
Parent := Parent.Parent;
// if the user asked not to right click select, we stop here
if not Properties.RightClickSelect then
Exit;
if Button = mbRight then
DoColorButtonClick(Sender);
end;
{ TJvOfficeColorPanel }
procedure TJvOfficeColorPanel.DefineProperties(Filer: TFiler);
begin
inherited DefineProperties(Filer);
{ For backwards compatibility }
FFilerTag := 'Color';
Filer.DefineProperty(FFilerTag, ReadData, nil, False);
FFilerTag := 'Flat';
Filer.DefineProperty(FFilerTag, ReadData, nil, False);
FFilerTag := 'CustomColors';
Filer.DefineProperty(FFilerTag, ReadData, nil, False);
FFilerTag := 'Options';
Filer.DefineProperty(FFilerTag, ReadData, nil, False);
end;
procedure TJvOfficeColorPanel.ReadData(Reader: TReader);
begin
if SameText(FFilerTag, 'Color') then
SelectedColor := JvReaderReadColor(Reader)
else
if SameText(FFilerTag, 'Flat') then
FlatBorder := Reader.ReadBoolean
else
if SameText(FFilerTag, 'CustomColors') then
JvReaderReadStrings(Reader,ColorDlgCustomColors)
else
if SameText(FFilerTag, 'Options') then
ColorDialogOptions := JvReaderReadColorDialogOptions(Reader)
;
end;
{$IFDEF UNITVERSIONING}
initialization
RegisterUnitVersion(HInstance, UnitVersioning);
finalization
UnregisterUnitVersion(HInstance);
{$ENDIF UNITVERSIONING}
end.