Componentes.Terceros.DevExp.../internal/x.44/1/ExpressSkins Library/Sources/dxBarSkinnedCustForm.pas
2009-06-29 12:09:02 +00:00

800 lines
28 KiB
ObjectPascal

{*******************************************************************}
{ }
{ Developer Express Visual Component Library }
{ ExpressBars Customization Form }
{ }
{ Copyright (c) 1998-2009 Developer Express Inc. }
{ ALL RIGHTS RESERVED }
{ }
{ The entire contents of this file is protected by U.S. and }
{ International Copyright Laws. Unauthorized reproduction, }
{ reverse-engineering, and distribution of all or any portion of }
{ the code contained in this file is strictly prohibited and may }
{ result in severe civil and criminal penalties and will be }
{ prosecuted to the maximum extent possible under the law. }
{ }
{ RESTRICTIONS }
{ }
{ THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES }
{ (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE }
{ SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS }
{ LICENSED TO DISTRIBUTE THE EXPRESSBARS AND ALL ACCOMPANYING VCL }
{ CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY. }
{ }
{ THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED }
{ FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE }
{ COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE }
{ AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT }
{ AND PERMISSION FROM DEVELOPER EXPRESS INC. }
{ }
{ CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON }
{ ADDITIONAL RESTRICTIONS. }
{ }
{*******************************************************************}
unit dxBarSkinnedCustForm;
{$I cxVer.inc}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls, Menus, Buttons, cxClasses, dxBar, ActnList,
ToolWin, ImgList, Contnrs, dxBarCustomCustomizationForm, dxSkinsCore, cxButtons,
cxControls, cxContainer, cxEdit, cxLabel, cxCheckBox, cxGroupBox, cxGraphics,
cxTextEdit, cxMaskEdit, cxDropDownEdit, cxListBox, dxSkinscxPCPainter,
cxPC, cxCheckListBox, cxLookAndFeels, cxLookAndFeelPainters,
dxSkinsDefaultPainters, dxSkinsdxBarPainter;
type
TdxBarPermissiveProc = function (Sender: TComponent): Boolean of object;
TdxBarSkinnedCustomizationForm = class(TdxBarCustomCustomizationForm)
BBarDelete: TcxButton;
BBarNew: TcxButton;
BBarRename: TcxButton;
BBarReset: TcxButton;
BClose: TcxButton;
Bevel1: TBevel;
Bevel2: TBevel;
Bevel3: TBevel;
BHelp: TcxButton;
BResetUsageData: TcxButton;
CategoriesPopupButtonPlace: TcxButton;
CBHint1Ex: TcxCheckBox;
CBHint2: TcxCheckBox;
CBHint2Ex: TcxCheckBox;
CBLargeIcons: TcxCheckBox;
CBLargeIconsEx: TcxCheckBox;
CBMenusShowRecentItemsFirst: TcxCheckBox;
CBShowFullMenusAfterDelay: TcxCheckBox;
ComboBoxMenuAnimations: TcxComboBox;
ComboBoxMenuAnimationsEx: TcxComboBox;
CommandsPopupButtonPlace: TcxButton;
DescriptionLabel: TcxLabel;
EnhancedOptionsPanel: TPanel;
Label1: TcxLabel;
Label2: TcxLabel;
Label3: TcxLabel;
LabelCategories: TcxLabel;
LabelCommands: TcxLabel;
LabelDescription: TcxLabel;
LabelMenuAnimations: TcxLabel;
LabelToobars: TcxLabel;
lbCategories: TcxListBox;
lbItems: TcxListBox;
LeftBevel: TBevel;
PageControl: TcxPageControl;
Panel1: TPanel;
Panel6: TPanel;
Panel7: TPanel;
Panel9: TPanel;
RightBevel: TBevel;
StandardOptionsPanel: TPanel;
TabSheet1: TcxTabSheet;
TopBevel: TBevel;
tsItems: TcxTabSheet;
tsOptions: TcxTabSheet;
tsToolbars: TcxTabSheet;
tvKeyTips: TTreeView;
lbBarsList: TcxListBox;
CBHint1: TcxCheckBox;
Bevel4: TBevel;
Bevel5: TBevel;
function GetIsSkinUsed: Boolean;
procedure BResetUsageDataClick(Sender: TObject);
procedure CBHint1Click(Sender: TObject);
procedure CBHint1ExClick(Sender: TObject);
procedure CBHint2Click(Sender: TObject);
procedure CBLargeIconsClick(Sender: TObject);
procedure CBMenusShowRecentItemsFirstClick(Sender: TObject);
procedure CBShowFullMenusAfterDelayClick(Sender: TObject);
procedure ComboBoxMenuAnimationsClick(Sender: TObject);
procedure lbItemsDrawItem(AControl: TcxListBox; ACanvas: TcxCanvas;
AIndex: Integer; ARect: TRect; AState: TOwnerDrawState);
procedure BCloseClick(Sender: TObject);
procedure BHelpClick(Sender: TObject);
private
FLookAndFeel: TcxLookAndFeel;
protected
function GetBarItemsBackgroundColor: TColor; override;
function GetBarListBox: TListBox; override;
function GetCategoriesList: TListBox; override;
function GetItemsListBox: TListBox; override;
function GetPainterClass: TdxBarCustomizationFormPainterClass; override;
procedure PrepareControls; override;
procedure SynchronizeListBoxes; override;
property IsSkinUsed: Boolean read GetIsSkinUsed;
property LookAndFeel: TcxLookAndFeel read FLookAndFeel;
public
constructor CreateEx(ABarManager: TdxBarManager); override;
destructor Destroy; override;
procedure BarManagerStyleChanged; override;
procedure DesignSelectionChanged(Sender: TObject); override;
procedure SelectPage(APageIndex: Integer); override;
procedure SwitchToItemsPage; override;
procedure UpdateHelpButton; override;
procedure UpdateOptions; override;
end;
implementation
{$R *.DFM}
uses
{$IFDEF DELPHI8}
Types,
{$ENDIF}
dxBarNameEd, dxBarPopupMenuEd, dxBarItemEd, dxBarStrs, dxBarAddGroupItemsEd,
TypInfo, dxUxTheme, dxThemeManager, dxThemeConsts, dxOffice11, dxBarCustForm,
dxSkinInfo, dxSkinsLookAndFeelPainter, Math, cxGeometry;
const
dxBarButtonHeight = 24;
type
TdxBarAccess = class(TdxBar);
TdxBarItemAccess = class(TdxBarItem);
TdxBarManagerAccess = class(TdxBarManager);
TcxControlAccess = class(TcxControl);
{ TdxBarCustomizationFormSkinPainter }
TdxBarCustomizationFormSkinPainter = class(TdxBarCustomizationFormPainter)
private
class function GetLookAndFeelPainter: TcxCustomLookAndFeelPainterClass;
class function GetPopupMenuElement: TdxSkinElement;
class function GetPopupMenuLinkDropButtonElement: TdxSkinElement;
class function GetPopupMenuLinkSelectedElement(AIsDropDown: Boolean): TdxSkinElement;
class function GetSideStripElement: TdxSkinElement;
class function GetSkinElementColor(AElement: TdxSkinElement; ATextColor: Boolean): TColor;
class function GetSkinInfo(var ASkinInfo: TdxSkinInfo): Boolean;
protected
class procedure DrawSkinElement(ACanvas: TCanvas; const R: TRect;
AElement: TdxSkinElement);
class procedure DrawSkinElementContent(ACanvas: TCanvas; R: TRect;
AElement: TdxSkinElement);
class procedure DrawButtonOrSubItemArrowBackground(ACanvas: TCanvas;
R: TRect; AItem: TdxBarItem; Selected: Boolean); override;
class procedure DrawButtonOrSubItemBackground(ACanvas: TCanvas;
AItem: TdxBarItem; const ABounds, ASideStripRect, AArrowRect: TRect;
ASelected: Boolean); override;
class procedure DrawButtonOrSubItemGlyph(ACanvas: TCanvas; R: TRect;
AItem: TdxBarItem; ASelected: Boolean); override;
class procedure DrawEditEdge(ACanvas: TCanvas; var AItemRect: TRect;
AItem: TdxCustomBarEdit; ASelected: Boolean); override;
class procedure InternalDrawCaption(ACanvas: TCanvas;
var ATextRect: TRect; const AText: string; AItem: TdxCustomBarEdit;
ASelected: Boolean); override;
public
class function BrushColors(Selected: Boolean; AItem: TdxBarItem): TColor; override;
class procedure DrawCheckBox(ACanvas: TCanvas; R: TRect; AChecked, AEnabled: Boolean); override;
class procedure DrawComboBoxButton(ACanvas: TCanvas; AItem: TdxBarItem;
ARect: TRect; ASelected: Boolean); override;
class procedure DrawEdit(ACanvas: TCanvas; ARect: TRect; AItem: TdxCustomBarEdit;
Selected: Boolean; ADrawArrowButton: Boolean); override;
class procedure DrawFocusedRect(ACanvas: TCanvas; ARect: TRect; AItem: TdxBarItem); override;
class function FontColors(Selected: Boolean): TColor; override;
class function GetBarButtonHeight: Integer; override;
class function GetComboBoxButtonWidth: Integer; override;
end;
{ TdxBarCustomizationForm }
constructor TdxBarSkinnedCustomizationForm.CreateEx(ABarManager: TdxBarManager);
{$IFDEF DELPHI7}
procedure SetupBevelSize(ALabel: TcxLabel; ABevel: TBevel);
begin
with ABevel, BoundsRect do
BoundsRect := Rect(ALabel.BoundsRect.Right, Top, Right, Bottom);
end;
{$ENDIF}
begin
FLookAndFeel := TcxLookAndFeel.Create(Self);
inherited CreateEx(ABarManager);
Constraints.MinWidth := Width;
Constraints.MaxWidth := Width;
{$IFDEF DELPHI7}
SetupBevelSize(LabelDescription, Bevel1);
SetupBevelSize(Label3, Bevel3);
SetupBevelSize(Label2, Bevel2);
{$ENDIF}
end;
destructor TdxBarSkinnedCustomizationForm.Destroy;
begin
FreeAndNil(FLookAndFeel);
inherited Destroy;
end;
function TdxBarSkinnedCustomizationForm.GetBarItemsBackgroundColor: TColor;
begin
Result := LookAndFeelPainter.DefaultEditorBackgroundColor(False);
if Result = clDefault then
Result := inherited GetBarItemsBackgroundColor;
end;
procedure TdxBarSkinnedCustomizationForm.PrepareControls;
procedure PrepareMenuAnimationsLabel(ALabel: TcxLabel; ComboBox: TcxComboBox);
begin
with ALabel do
begin
Caption := cxGetResourceString(@dxSBAR_MENUANIMATIONS);
if Left + Width + 10 > ComboBox.Left then
ComboBox.Left := Left + Width + 10;
end;
end;
procedure PrepareToolBarsSheet;
begin
BBarReset.Visible := not BarManager.Designing and TdxBarManagerAccess(BarManager).CanReset;
LabelToobars.Caption := cxGetResourceString(@dxSBAR_TOOLBARS);
LabelToobars.FocusControl := lbBarsList;
tsToolbars.Caption := cxGetResourceString(@dxSBAR_TABSHEET1);
end;
procedure PrepareItemsSheet;
begin
tsItems.Caption := cxGetResourceString(@dxSBAR_TABSHEET2);
LabelCommands.FocusControl := lbItems;
ReplaceByCheckableButton(cxGetResourceString(@dxSBAR_MODIFY),
CategoriesPopupButtonPlace, LabelCategories, CategoriesPopupMenu);
ReplaceByCheckableButton(cxGetResourceString(@dxSBAR_MODIFY),
CommandsPopupButtonPlace, LabelCommands, CommandsPopupMenu);
LabelCategories.Caption := cxGetResourceString(@dxSBAR_CATEGORIES);
LabelCommands.Caption := cxGetResourceString(@dxSBAR_COMMANDS);
LabelDescription.Caption := cxGetResourceString(@dxSBAR_DESCRIPTION);
end;
procedure PrepareOptionsSheet;
begin
tsOptions.Caption := cxGetResourceString(@dxSBAR_TABSHEET3);
if BarManager.GetPaintStyle = bmsStandard then
begin
CBLargeIcons.Caption := cxGetResourceString(@dxSBAR_LARGEICONS);
CBHint1.Caption := cxGetResourceString(@dxSBAR_HINTOPT1);
CBHint2.Caption := cxGetResourceString(@dxSBAR_HINTOPT2);
PrepareMenuAnimationsLabel(LabelMenuAnimations, ComboBoxMenuAnimations);
with ComboBoxMenuAnimations do
Width := PrepareMenuAnimationsComboBox(Font, Properties.Items);
end
else
begin
Label3.Caption := cxGetResourceString(@dxSBAR_PERSMENUSANDTOOLBARS);
CBMenusShowRecentItemsFirst.Caption := cxGetResourceString(@dxSBAR_MENUSSHOWRECENTITEMS);
CBShowFullMenusAfterDelay.Caption := cxGetResourceString(@dxSBAR_SHOWFULLMENUSAFTERDELAY);
with BResetUsageData do
begin
Caption := cxGetResourceString(@dxSBAR_RESETUSAGEDATA);
Width := cxTextWidth(Font, GetTextOf(Caption)) + 17;
end;
Label2.Caption := cxGetResourceString(@dxSBAR_OTHEROPTIONS);
CBLargeIconsEx.Caption := cxGetResourceString(@dxSBAR_LARGEICONS);
CBHint1Ex.Caption := cxGetResourceString(@dxSBAR_HINTOPT1);
CBHint2Ex.Caption := cxGetResourceString(@dxSBAR_HINTOPT2);
PrepareMenuAnimationsLabel(Label1, ComboBoxMenuAnimationsEx);
with ComboBoxMenuAnimationsEx do
Width := PrepareMenuAnimationsComboBox(Font, Properties.Items);
end;
end;
procedure PrepareKeyTipsSheet;
procedure GetKeyTipsTree(AContainer: IdxBarAccessibilityHelper;
ANodes: TTreeNodes; AParentNode: TTreeNode);
var
AChild, AContainerHelper: TdxBarAccessibilityHelper;
I: Integer;
begin
AContainerHelper := AContainer.GetBarHelper;
if AContainerHelper.Selectable then
AParentNode := ANodes.AddChild(AParentNode, AContainerHelper.OwnerObject.ClassName);
for I := 0 to AContainerHelper.ChildCount - 1 do
begin
AChild := AContainerHelper.Childs[I];
GetKeyTipsTree(AChild, ANodes, AParentNode);
end;
end;
var
AKeyTipWindowsManager: IdxBarKeyTipWindowsManager;
ARootAccessibleObject: IdxBarAccessibilityHelper;
begin
ARootAccessibleObject := GetRootAccessibleObject(BarManager.Owner.Handle);
if (ARootAccessibleObject <> nil) and ARootAccessibleObject.AreKeyTipsSupported(AKeyTipWindowsManager) then
begin
GetKeyTipsTree(ARootAccessibleObject, tvKeyTips.Items, nil);
end;
end;
procedure PrepareButtons;
begin
BResetUsageData.Enabled := not BarManager.Designing;
with BClose do
begin
Caption := cxGetResourceString(@dxSBAR_CLOSE);
Width := Max(cxTextWidth(Font, GetTextOf(Caption)) + 49, BBarNew.Width);
Left := Parent.Width - RightBevel.Width - Width;
end;
UpdateHelpButton;
end;
procedure PrepareButtonsActions;
begin
BBarNew.Action := aNewToolBar;
BBarReset.Action := aResetToolBar;
BBarDelete.Action := aDeleteToolBar;
BBarRename.Action := aRenameToolBar;
end;
begin
PrepareButtons;
PrepareButtonsActions;
PrepareToolBarsSheet;
PrepareItemsSheet;
PrepareOptionsSheet;
PrepareKeyTipsSheet;
end;
procedure TdxBarSkinnedCustomizationForm.SynchronizeListBoxes;
begin
SynchronizeListBox(lbBarsList.InnerListBox);
SynchronizeListBox(lbCategories.InnerListBox);
SynchronizeListBox(lbItems.InnerListBox);
end;
function TdxBarSkinnedCustomizationForm.GetBarListBox: TListBox;
begin
Result := lbBarsList.InnerListBox;
end;
function TdxBarSkinnedCustomizationForm.GetItemsListBox: TListBox;
begin
Result := lbItems.InnerListBox;
end;
function TdxBarSkinnedCustomizationForm.GetCategoriesList: TListBox;
begin
Result := lbCategories.InnerListBox;
end;
function TdxBarSkinnedCustomizationForm.GetPainterClass: TdxBarCustomizationFormPainterClass;
begin
if BarManager.PainterClass = TdxBarSkinPainter then
Result := TdxBarCustomizationFormSkinPainter
else
Result := inherited GetPainterClass;
end;
procedure TdxBarSkinnedCustomizationForm.BarManagerStyleChanged;
const
LookAndFeelKindMap: array[TdxBarManagerStyle] of TcxLookAndFeelKind = (
lfStandard, lfStandard, lfUltraFlat, cxDefaultLookAndFeelKind,
lfOffice11, cxDefaultLookAndFeelKind);
begin
inherited BarManagerStyleChanged;
if IsLookAndFeelUsed then
LookAndFeel.Assign(BarManager.LookAndFeel)
else
begin
LookAndFeel.SkinName := '';
LookAndFeel.NativeStyle := BarManager.Style = bmsXP;
LookAndFeel.Kind := LookAndFeelKindMap[BarManager.Style];
end;
SetControlLookAndFeel(Self, LookAndFeel);
end;
procedure TdxBarSkinnedCustomizationForm.DesignSelectionChanged(Sender: TObject);
begin
if not (csDestroying in (Application.ComponentState + ComponentState)) then
begin
SynchronizeListBoxSelection(lbBarsList.InnerListBox);
SynchronizeListBoxSelection(lbItems.InnerListBox);
end;
end;
procedure TdxBarSkinnedCustomizationForm.SelectPage(APageIndex: Integer);
begin
PageControl.ActivePageIndex := APageIndex;
end;
procedure TdxBarSkinnedCustomizationForm.SwitchToItemsPage;
begin
PageControl.ActivePage := tsItems;
end;
procedure TdxBarSkinnedCustomizationForm.UpdateHelpButton;
begin
BHelp.Glyph := BarManager.HelpButtonGlyph;
BHelp.Visible := BarManager.ShowHelpButton;
end;
procedure TdxBarSkinnedCustomizationForm.UpdateOptions;
begin
StandardOptionsPanel.Visible := BarManager.GetPaintStyle = bmsStandard;
EnhancedOptionsPanel.Visible := BarManager.GetPaintStyle <> bmsStandard;
CBMenusShowRecentItemsFirst.Checked := BarManager.MenusShowRecentItemsFirst;
CBShowFullMenusAfterDelay.Checked := BarManager.ShowFullMenusAfterDelay;
CBShowFullMenusAfterDelay.Enabled := CBMenusShowRecentItemsFirst.Checked;
CBLargeIcons.Checked := BarManager.LargeIcons;
CBLargeIconsEx.Checked := BarManager.LargeIcons;
CBHint1.Checked := BarManager.ShowHint;
CBHint1Ex.Checked := BarManager.ShowHint;
CBHint2.Checked := BarManager.ShowShortcutInHint;
CBHint2Ex.Checked := BarManager.ShowShortcutInHint;
CBHint2Ex.Enabled := CBHint1Ex.Checked;
ComboBoxMenuAnimations.ItemIndex := Ord(BarManager.MenuAnimations);
ComboBoxMenuAnimationsEx.ItemIndex := Ord(BarManager.MenuAnimations);
end;
procedure TdxBarSkinnedCustomizationForm.CBMenusShowRecentItemsFirstClick(Sender: TObject);
begin
CBShowFullMenusAfterDelay.Enabled := CBMenusShowRecentItemsFirst.Checked;
BarManager.MenusShowRecentItemsFirst := CBMenusShowRecentItemsFirst.Checked;
end;
procedure TdxBarSkinnedCustomizationForm.CBShowFullMenusAfterDelayClick(Sender: TObject);
begin
BarManager.ShowFullMenusAfterDelay := CBShowFullMenusAfterDelay.Checked;
end;
procedure TdxBarSkinnedCustomizationForm.BResetUsageDataClick(Sender: TObject);
begin
BarManager.ResetUsageDataWithConfirmation;
end;
procedure TdxBarSkinnedCustomizationForm.CBLargeIconsClick(Sender: TObject);
begin
BarManager.LargeIcons := TcxCheckBox(Sender).Checked;
end;
procedure TdxBarSkinnedCustomizationForm.CBHint1Click(Sender: TObject);
begin
BarManager.ShowHint := TcxCheckBox(Sender).Checked;
end;
procedure TdxBarSkinnedCustomizationForm.CBHint1ExClick(Sender: TObject);
begin
CBHint2Ex.Enabled := CBHint1Ex.Checked;
CBHint1Click(Sender);
end;
procedure TdxBarSkinnedCustomizationForm.CBHint2Click(Sender: TObject);
begin
BarManager.ShowShortCutInHint := TcxCheckBox(Sender).Checked;
end;
procedure TdxBarSkinnedCustomizationForm.ComboBoxMenuAnimationsClick(Sender: TObject);
begin
BarManager.MenuAnimations := TdxBarMenuAnimations(TcxComboBox(Sender).ItemIndex);
end;
function TdxBarSkinnedCustomizationForm.GetIsSkinUsed: Boolean;
begin
Result := Assigned(LookAndFeel.SkinPainter);
end;
procedure TdxBarSkinnedCustomizationForm.lbItemsDrawItem(
AControl: TcxListBox; ACanvas: TcxCanvas; AIndex: Integer; ARect: TRect;
AState: TOwnerDrawState);
var
ABitmap: TcxBitmap;
AItem: TdxBarItem;
R: TRect;
begin
AItem := ItemList[AIndex];
if Assigned(AItem) then
begin
ABitmap := TcxBitmap.CreateSize(ARect, pf32bit);
try
ABitmap.Canvas.Font := ACanvas.Font;
TdxBarItemAccess(AItem).DrawCustomizingImage(ABitmap.Canvas, ABitmap.ClientRect, AState);
if odFocused in AState then
PainterClass.DrawFocusedRect(ABitmap.Canvas, ABitmap.ClientRect, AItem);
cxBitBlt(ACanvas.Handle, ABitmap.Canvas.Handle, ARect, cxNullPoint, SRCCOPY);
finally
ABitmap.Free;
end;
if AIndex + 1 = lbItems.Items.Count then
begin
R := ARect;
R.Top := R.Bottom;
R.Bottom := ClientHeight;
ACanvas.FillRect(R, PainterClass.BrushColors(False, AItem));
end;
end;
end;
{ TdxBarCustomizationFormSkinPainter }
class function TdxBarCustomizationFormSkinPainter.BrushColors(
Selected: Boolean; AItem: TdxBarItem): TColor;
begin
Result := GetSkinElementColor(GetPopupMenuElement, False);
if Result = clDefault then
Result := inherited BrushColors(Selected, AItem)
end;
class procedure TdxBarCustomizationFormSkinPainter.DrawCheckBox(
ACanvas: TCanvas; R: TRect; AChecked, AEnabled: Boolean);
const
EnableMap: array[Boolean] of TcxButtonState = (cxbsDisabled, cxbsNormal);
var
AcxCanvas: TcxCanvas;
begin
AcxCanvas := TcxCanvas.Create(ACanvas);
try
InflateRect(R, -1, -1);
GetLookAndFeelPainter.DrawCheckButton(AcxCanvas, R, EnableMap[AEnabled], AChecked);
finally
AcxCanvas.Free;
end;
end;
class procedure TdxBarCustomizationFormSkinPainter.DrawComboBoxButton(
ACanvas: TCanvas; AItem: TdxBarItem; ARect: TRect; ASelected: Boolean);
const
ComboBoxStateMap: array[Boolean] of TcxButtonState = (cxbsNormal, cxbsHot);
var
AcxCanvas: TcxCanvas;
begin
AcxCanvas := TcxCanvas.Create(ACanvas);
try
FillRectByColor(ACanvas.Handle, ARect,
GetLookAndFeelPainter.DefaultEditorBackgroundColorEx(esckNormal));
GetLookAndFeelPainter.DrawEditorButton(AcxCanvas, ARect,
cxbkComboBtn, ComboBoxStateMap[ASelected]);
finally
AcxCanvas.Free;
end;
end;
class procedure TdxBarCustomizationFormSkinPainter.DrawEdit(ACanvas: TCanvas;
ARect: TRect; AItem: TdxCustomBarEdit; Selected: Boolean; ADrawArrowButton: Boolean);
var
R, ASideStripRect: TRect;
begin
CalcButtonOrSubItemRects(AItem, ARect, ASideStripRect, R, R);
DrawSkinElementContent(ACanvas, ARect, GetPopupMenuElement);
DrawSkinElement(ACanvas, ASideStripRect, GetSideStripElement);
if Selected then
DrawSkinElement(ACanvas, ARect, GetPopupMenuLinkSelectedElement(False));
ARect.Left := ASideStripRect.Right + 5;
inherited DrawEdit(ACanvas, ARect, AItem, Selected, ADrawArrowButton);
end;
class procedure TdxBarCustomizationFormSkinPainter.DrawFocusedRect(
ACanvas: TCanvas; ARect: TRect; AItem: TdxBarItem);
begin
// nothing
end;
class procedure TdxBarCustomizationFormSkinPainter.DrawButtonOrSubItemArrowBackground(
ACanvas: TCanvas; R: TRect; AItem: TdxBarItem; Selected: Boolean);
begin
if Selected then
DrawSkinElement(ACanvas, R, GetPopupMenuLinkDropButtonElement);
end;
class procedure TdxBarCustomizationFormSkinPainter.DrawButtonOrSubItemBackground(
ACanvas: TCanvas; AItem: TdxBarItem; const ABounds, ASideStripRect: TRect;
const AArrowRect: TRect; ASelected: Boolean);
var
AIsDropDown: Boolean;
begin
AIsDropDown := (AItem is TdxBarButton) and (TdxBarButton(AItem).ButtonStyle = bsDropDown);
DrawSkinElementContent(ACanvas, ABounds, GetPopupMenuElement);
DrawSkinElement(ACanvas, ASideStripRect, GetSideStripElement);
if ASelected then
DrawSkinElement(ACanvas, cxRectSetRight(ABounds, AArrowRect.Left),
GetPopupMenuLinkSelectedElement(AIsDropDown));
if AIsDropDown then
DrawButtonOrSubItemArrowBackground(ACanvas, AArrowRect, AItem, ASelected);
end;
class procedure TdxBarCustomizationFormSkinPainter.DrawButtonOrSubItemGlyph(
ACanvas: TCanvas; R: TRect; AItem: TdxBarItem; ASelected: Boolean);
begin
R := cxRectCenter(R, GetGlyphSize(AItem));
TransparentDraw(ACanvas.Handle, 0, R, R, AItem.Glyph, AItem.GetCurImages,
AItem.ImageIndex, AItem.BarManager.ImageListBkColor, True, False, False{Flat},
ASelected, False, False, False{Shadow}, False{Faded},
AItem.BarManager.ImageOptions.UseLeftBottomPixelAsTransparent);
end;
class procedure TdxBarCustomizationFormSkinPainter.DrawEditEdge(ACanvas: TCanvas;
var AItemRect: TRect; AItem: TdxCustomBarEdit; ASelected: Boolean);
begin
InflateRect(AItemRect, -2, -2);
FrameRectByColor(ACanvas.Handle, AItemRect,
GetLookAndFeelPainter.GetContainerBorderColor(ASelected));
InflateRect(AItemRect, -1, -1);
end;
class procedure TdxBarCustomizationFormSkinPainter.DrawSkinElement(
ACanvas: TCanvas; const R: TRect; AElement: TdxSkinElement);
begin
if Assigned(AElement) then
AElement.Draw(ACanvas.Handle, R);
end;
class procedure TdxBarCustomizationFormSkinPainter.DrawSkinElementContent(
ACanvas: TCanvas; R: TRect; AElement: TdxSkinElement);
var
AcxCanvas: TcxCanvas;
begin
if Assigned(AElement) then
begin
AcxCanvas := TcxCanvas.Create(ACanvas);
try
AcxCanvas.SaveClipRegion;
try
AcxCanvas.SetClipRegion(TcxRegion.Create(R), roIntersect);
with AElement.Image, AElement.Borders do
begin
Dec(R.Left, Max(Margins.Left, Left.Thin));
Dec(R.Top, Max(Margins.Top, Top.Thin));
Inc(R.Bottom, Max(Margins.Bottom, Bottom.Thin));
Inc(R.Right, Max(Margins.Right, Right.Thin));
end;
AElement.Draw(ACanvas.Handle, R);
finally
AcxCanvas.RestoreClipRegion;
end;
finally
AcxCanvas.Free;
end;
end;
end;
class function TdxBarCustomizationFormSkinPainter.FontColors(Selected: Boolean): TColor;
begin
Result := GetSkinElementColor(GetPopupMenuElement, True);
if Result = clDefault then
Result := inherited FontColors(Selected);
end;
class function TdxBarCustomizationFormSkinPainter.GetSkinElementColor(
AElement: TdxSkinElement; ATextColor: Boolean): TColor;
begin
if AElement = nil then
Result := clDefault
else
if ATextColor then
Result := AElement.TextColor
else
Result := AElement.Color;
end;
class function TdxBarCustomizationFormSkinPainter.GetLookAndFeelPainter: TcxCustomLookAndFeelPainterClass;
begin
Result := dxBarCustomizingForm.LookAndFeelPainter;
end;
class function TdxBarCustomizationFormSkinPainter.GetPopupMenuElement: TdxSkinElement;
var
ASkinInfo: TdxSkinInfo;
begin
if GetSkinInfo(ASkinInfo) then
Result := ASkinInfo.PopupMenu
else
Result := nil;
end;
class function TdxBarCustomizationFormSkinPainter.GetPopupMenuLinkDropButtonElement: TdxSkinElement;
var
ASkinInfo: TdxSkinInfo;
begin
if GetSkinInfo(ASkinInfo) then
Result := ASkinInfo.PopupMenuSplitButton2
else
Result := nil;
end;
class function TdxBarCustomizationFormSkinPainter.GetPopupMenuLinkSelectedElement(
AIsDropDown: Boolean): TdxSkinElement;
var
ASkinInfo: TdxSkinInfo;
begin
if not GetSkinInfo(ASkinInfo) then
Result := nil
else
if AIsDropDown then
Result := ASkinInfo.PopupMenuSplitButton
else
Result := ASkinInfo.PopupMenuLinkSelected;
end;
class function TdxBarCustomizationFormSkinPainter.GetSideStripElement: TdxSkinElement;
var
ASkinInfo: TdxSkinInfo;
begin
if GetSkinInfo(ASkinInfo) then
Result := ASkinInfo.PopupMenuSideStrip
else
Result := nil;
end;
class function TdxBarCustomizationFormSkinPainter.GetSkinInfo(
var ASkinInfo: TdxSkinInfo): Boolean;
begin
Result := GetExtendedStylePainters.GetPainterData(GetLookAndFeelPainter, ASkinInfo);
end;
class function TdxBarCustomizationFormSkinPainter.GetBarButtonHeight: Integer;
begin
Result := dxBarButtonHeight;
end;
class function TdxBarCustomizationFormSkinPainter.GetComboBoxButtonWidth: Integer;
var
ASize: TSize;
begin
ASize := GetLookAndFeelPainter.EditButtonSize;
Result := Max(ASize.cx, ASize.cy);
if Result = 0 then
Result := inherited GetComboBoxButtonWidth;
end;
class procedure TdxBarCustomizationFormSkinPainter.InternalDrawCaption(
ACanvas: TCanvas; var ATextRect: TRect; const AText: string;
AItem: TdxCustomBarEdit; ASelected: Boolean);
begin
Inc(ATextRect.Right, cxTextOffset + 1);
ACanvas.Font.Color := FontColors(ASelected);
ACanvas.Brush.Style := bsClear;
cxDrawText(ACanvas.Handle, AText, ATextRect,
DT_NOCLIP or DT_NOPREFIX or DT_SINGLELINE or DT_LEFT or DT_VCENTER);
end;
procedure TdxBarSkinnedCustomizationForm.BCloseClick(Sender: TObject);
begin
Close;
end;
procedure TdxBarSkinnedCustomizationForm.BHelpClick(Sender: TObject);
begin
DoShowHelp;
end;
initialization
dxBarCustomizationFormClass := TdxBarSkinnedCustomizationForm;
finalization
dxBarCustomizationFormClass := TdxBarCustomizationForm;
end.