git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@55 05c56307-c608-d34a-929d-697000501d7a
235 lines
8.8 KiB
ObjectPascal
235 lines
8.8 KiB
ObjectPascal
{*******************************************************************}
|
|
{ }
|
|
{ Developer Express Visual Component Library }
|
|
{ ExpressPrinting System COMPONENT SUITE }
|
|
{ }
|
|
{ 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 EXPRESSPRINTINGSYSTEM 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 dxPSHFToolBarBld;
|
|
|
|
interface
|
|
|
|
{$I cxVer.inc}
|
|
|
|
uses
|
|
Classes, ComCtrls, Controls, ImgList, cxButtons, ExtCtrls;
|
|
|
|
type
|
|
|
|
{ TdxPSHFToolBarBuilder }
|
|
|
|
TdxPSHFToolBarBuilder = class(TObject)
|
|
protected
|
|
class function CalcButtonOffset(AToolBarPanel: TWinControl): Integer;
|
|
class function CalcMenuButtonWidth(AIncludeAutoTextEntries: Boolean): Integer;
|
|
class procedure CalcViewInfo(AToolBarPanel: TWinControl;
|
|
AMenuButtonWidth: Integer; var ASummaryWidth, AMaxButtonCount: Integer);
|
|
class procedure CreateAutoTextMenuButton(AToolBarPanel: TWinControl;
|
|
AMenuButtonWidth: Integer; AAutoHFTextEntries: TStrings;
|
|
AAutoTextEntriesClickEvent: TNotifyEvent);
|
|
class function CreateButton(AToolBarPanel: TWinControl;
|
|
AWidth, ATag: Integer; AClickEvent: TNotifyEvent): TcxButton;
|
|
class function GetAutoTextButtonCaption: string;
|
|
class procedure RemoveAllButtons(AToolBarPanel: TWinControl);
|
|
public
|
|
class procedure Build(AToolBarPanel: TWinControl; AImageList: TCustomImageList;
|
|
AIncludeAutoTextEntries: Boolean; AFunctionList, AAutoHFTextEntries: TStrings;
|
|
AButtonClickEvent, AAutoTextEntriesClickEvent: TNotifyEvent; ACenteringToolbar: Boolean);
|
|
class procedure ShowAutoHFTextEntriesPopup(Sender: TObject);
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
Windows, Buttons, Menus, Graphics, SysUtils, cxClasses, dxPSGlBl, dxPSUtl,
|
|
dxPgSDlg, dxPSRes, dxPSPopupMan, Types, cxControls, dxPSHFLibrary;
|
|
|
|
const
|
|
ToolBarButtonOffset = 3;
|
|
ToolBarButtonWidth = 26;
|
|
|
|
var
|
|
FDropDownGlyph: TBitmap;
|
|
|
|
class procedure TdxPSHFToolBarBuilder.Build(AToolBarPanel: TWinControl;
|
|
AImageList: TCustomImageList; AIncludeAutoTextEntries: Boolean;
|
|
AFunctionList, AAutoHFTextEntries: TStrings; AButtonClickEvent: TNotifyEvent;
|
|
AAutoTextEntriesClickEvent: TNotifyEvent; ACenteringToolbar: Boolean);
|
|
var
|
|
AButton: TcxButton;
|
|
AFunction: TdxHFCustomFunction;
|
|
I, ASummaryWidth, AMaxButtonCount, AMenuButtonWidth: Integer;
|
|
begin
|
|
RemoveAllButtons(AToolBarPanel);
|
|
AMenuButtonWidth := CalcMenuButtonWidth(AIncludeAutoTextEntries);
|
|
if AIncludeAutoTextEntries then
|
|
begin
|
|
CreateAutoTextMenuButton(AToolBarPanel, AMenuButtonWidth,
|
|
AAutoHFTextEntries, AAutoTextEntriesClickEvent);
|
|
end;
|
|
if AFunctionList.Count > 0 then
|
|
begin
|
|
AMaxButtonCount := AFunctionList.Count;
|
|
CalcViewInfo(AToolBarPanel, AMenuButtonWidth, ASummaryWidth, AMaxButtonCount);
|
|
AToolBarPanel.Width := ASummaryWidth;
|
|
if ACenteringToolbar then
|
|
AToolBarPanel.Left := (AToolBarPanel.Parent.Width - ASummaryWidth) div 2;
|
|
for I := 0 to AMaxButtonCount - 1 do
|
|
begin
|
|
AFunction := TdxHFCustomFunction(AFunctionList.Objects[I]);
|
|
AButton := CreateButton(AToolBarPanel, ToolBarButtonWidth, MakeTTag(I), AButtonClickEvent);
|
|
AButton.Glyph := AFunction.Glyph;
|
|
AButton.Hint := AFunction.Hint;
|
|
end;
|
|
end;
|
|
AToolBarPanel.Visible := AToolBarPanel.ControlCount > 0;
|
|
end;
|
|
|
|
class function TdxPSHFToolBarBuilder.CalcButtonOffset(AToolBarPanel: TWinControl): Integer;
|
|
begin
|
|
if AToolBarPanel.ControlCount > 0 then
|
|
Result := AToolBarPanel.Controls[AToolBarPanel.ControlCount - 1].BoundsRect.Right + ToolBarButtonOffset
|
|
else
|
|
Result := 0;
|
|
end;
|
|
|
|
class function TdxPSHFToolBarBuilder.CalcMenuButtonWidth(
|
|
AIncludeAutoTextEntries: Boolean): Integer;
|
|
var
|
|
ACaption: string;
|
|
ATextSize: TSize;
|
|
DC: HDC;
|
|
begin
|
|
Result := 0;
|
|
if AIncludeAutoTextEntries then
|
|
begin
|
|
DC := GetDC(0);
|
|
try
|
|
ACaption := GetAutoTextButtonCaption;
|
|
GetTextExtentPoint32(DC, PChar(ACaption), Length(ACaption), ATextSize);
|
|
Result := ATextSize.cx{ + 16};
|
|
finally
|
|
ReleaseDC(0, DC);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
class procedure TdxPSHFToolBarBuilder.CalcViewInfo(AToolBarPanel: TWinControl;
|
|
AMenuButtonWidth: Integer; var ASummaryWidth, AMaxButtonCount: Integer);
|
|
var
|
|
AButtonWidth: Integer;
|
|
begin
|
|
AButtonWidth := ToolBarButtonWidth + ToolBarButtonOffset;
|
|
AMaxButtonCount := Min(AMaxButtonCount,
|
|
(AToolBarPanel.Parent.Width - AMenuButtonWidth) div AButtonWidth);
|
|
ASummaryWidth := AMenuButtonWidth + AButtonWidth * AMaxButtonCount;
|
|
end;
|
|
|
|
class procedure TdxPSHFToolBarBuilder.CreateAutoTextMenuButton(
|
|
AToolBarPanel: TWinControl; AMenuButtonWidth: Integer; AAutoHFTextEntries: TStrings;
|
|
AAutoTextEntriesClickEvent: TNotifyEvent);
|
|
var
|
|
AAutoHFTextEntriesPopup: TPopupMenu;
|
|
AButton: TcxButton;
|
|
AMenuItem: TMenuItem;
|
|
I: Integer;
|
|
begin
|
|
AAutoHFTextEntriesPopup := TPopupMenu.Create(AToolBarPanel);
|
|
AAutoHFTextEntriesPopup.AutoHotkeys := maManual;
|
|
|
|
AButton := CreateButton(AToolBarPanel, AMenuButtonWidth,
|
|
MakeTTag(AAutoHFTextEntriesPopup), ShowAutoHFTextEntriesPopup);
|
|
AButton.Caption := GetAutoTextButtonCaption;
|
|
AButton.Glyph := FDropDownGlyph;
|
|
|
|
if Assigned(AAutoHFTextEntries) then
|
|
begin
|
|
for I := 0 to AAutoHFTextEntries.Count - 1 do
|
|
begin
|
|
AMenuItem := TMenuItem.Create(AToolBarPanel);
|
|
AMenuItem.Caption := AAutoHFTextEntries[I];
|
|
AMenuItem.Tag := MakeTTag(I);
|
|
AMenuItem.OnClick := AAutoTextEntriesClickEvent;
|
|
AAutoHFTextEntriesPopup.Items.Add(AMenuItem);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
class function TdxPSHFToolBarBuilder.CreateButton(AToolBarPanel: TWinControl;
|
|
AWidth, ATag: Integer; AClickEvent: TNotifyEvent): TcxButton;
|
|
var
|
|
AOffset: Integer;
|
|
begin
|
|
AOffset := CalcButtonOffset(AToolBarPanel);
|
|
Result := TcxButton.Create(AToolBarPanel);
|
|
Result.Tag := ATag;
|
|
Result.Parent := AToolBarPanel;
|
|
Result.Layout := blGlyphRight;
|
|
Result.OnClick := AClickEvent;
|
|
Result.CanBeFocused := False;
|
|
Result.SetBounds(AOffset, 0, AWidth, AToolBarPanel.Height);
|
|
end;
|
|
|
|
class function TdxPSHFToolBarBuilder.GetAutoTextButtonCaption: string;
|
|
begin
|
|
Result := cxGetResourceString(@sdxMenuInsertAutoTextEntriesSubItem);
|
|
end;
|
|
|
|
class procedure TdxPSHFToolBarBuilder.ShowAutoHFTextEntriesPopup(Sender: TObject);
|
|
var
|
|
AButton: TControl;
|
|
begin
|
|
AButton := TControl(Sender);
|
|
if TTagToObj(AButton.Tag) is TPopupMenu then
|
|
begin
|
|
with GetMouseCursorPos do
|
|
dxPSPopupMenuController.ShowPopup(X, Y, AButton, TTagToObj(AButton.Tag) as TPopupMenu);
|
|
end;
|
|
end;
|
|
|
|
class procedure TdxPSHFToolBarBuilder.RemoveAllButtons(AToolBarPanel: TWinControl);
|
|
begin
|
|
while AToolBarPanel.ControlCount > 0 do
|
|
AToolBarPanel.Controls[0].Free;
|
|
end;
|
|
|
|
initialization
|
|
FDropDownGlyph := CreateArrowBitmap(udgDown, 12);
|
|
|
|
finalization
|
|
FreeAndNil(FDropDownGlyph);
|
|
|
|
end.
|
|
|
|
|
|
|
|
|