| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998 | 
							- unit TBXToolPals;
 
- // TBX Package
 
- // Copyright 2001-2004 Alex A. Denisov. All Rights Reserved
 
- // See TBX.chm for license and installation instructions
 
- //
 
- // Id: TBXToolPals.pas 7 2004-02-21 06:07:53Z  $
 
- interface
 
- uses
 
-   Windows, Messages, Classes, SysUtils, Controls, Forms, Graphics, TB2Item, TBX,
 
-   TBXThemes;
 
- {$I TB2Ver.inc}
 
- type
 
-   TRowColCount = 1..100;
 
-   TTBXCustomToolPalette = class;
 
-   TTPCalcSize = procedure(Sender: TTBXCustomToolPalette; Canvas: TCanvas;
 
-     var AWidth, AHeight: Integer) of object;
 
-   TTPGetCellVisible = procedure(Sender: TTBXCustomToolPalette;
 
-     ACol, ARow: Integer; var Visible: Boolean) of object;
 
-   TTPGetCellHint = procedure(Sender: TTBXCustomToolPalette;
 
-     ACol, ARow: Integer; var HintText: string) of object;
 
-   TTPDrawCellImage = procedure(Sender: TTBXCustomToolPalette; Canvas: TCanvas;
 
-     ARect: TRect; ACol, ARow: Integer; Selected, Hot, Enabled: Boolean) of object;
 
-   TTPCellClick = procedure(Sender: TTBXCustomToolPalette;
 
-     var ACol, ARow: Integer; var AllowChange: Boolean) of object;
 
-   TTBXToolPaletteOptions = set of (tpoCustomImages, tpoNoAutoSelect);
 
-   TTBXCustomToolPalette = class(TTBXCustomItem)
 
-   private
 
-     FColCount: TRowColCount;
 
-     FPaletteOptions: TTBXToolPaletteOptions;
 
-     FRowCount: TRowColCount;
 
-     FSelectedCell: TPoint;
 
-     FOnCalcImageSize: TTPCalcSize;
 
-     FOnChange: TNotifyEvent;
 
-     FOnCellClick: TTPCellClick;
 
-     FOnDrawCellImage: TTPDrawCellImage;
 
-     FOnGetCellVisible: TTPGetCellVisible;
 
-     FOnGetCellHint: TTPGetCellHint;
 
-     procedure SetColCount(Value: TRowColCount);
 
-     procedure SetPaletteOptions(Value: TTBXToolPaletteOptions);
 
-     procedure SetRowCount(Value: TRowColCount);
 
-     procedure SetSelectedCell(Value: TPoint);
 
-   protected
 
-     procedure DoCalcCellSize(Canvas: TCanvas; var AWidth, AHeight: Integer); virtual;
 
-     procedure DoCalcImageSize(Canvas: TCanvas; var AWidth, AHeight: Integer); virtual;
 
-     function  DoCellClick(var ACol, ARow: Integer): Boolean; virtual;
 
-     procedure DoChange; virtual;
 
-     procedure DoDrawCellImage(Canvas: TCanvas; const ARect: TRect; ACol, ARow: Integer; ItemInfo: TTBXItemInfo); virtual;
 
-     procedure DoGetCellVisible(ACol, ARow: Integer; var Visible: Boolean); virtual;
 
-     procedure DoGetHint(ACell: TPoint; var HintText: string); virtual;
 
-     function  GetItemViewerClass(AView: TTBView): TTBItemViewerClass; override;
 
-     procedure HandleClickCell(ACol, ARow: Integer); virtual;
 
-     property ColCount: TRowColCount read FColCount write SetColCount default 1;
 
-     property PaletteOptions: TTBXToolPaletteOptions read FPaletteOptions write SetPaletteOptions;
 
-     property RowCount: TRowColCount read FRowCount write SetRowCount default 1;
 
-     property SelectedCell: TPoint read FSelectedCell write SetSelectedCell;
 
-     property OnChange: TNotifyEvent read FOnChange write FOnChange;
 
-     property OnCalcImageSize: TTPCalcSize read FOnCalcImageSize write FOnCalcImageSize;
 
-     property OnCellClick: TTPCellClick read FOnCellClick write FOnCellClick;
 
-     property OnDrawCellImage: TTPDrawCellImage read FOnDrawCellImage write FOnDrawCellImage;
 
-     property OnGetCellVisible: TTPGetCellVisible read FOnGetCellVisible write FOnGetCellVisible;
 
-     property OnGetCellHint: TTPGetCellHint read FOnGetCellHint write FOnGetCellHint;
 
-   public
 
-     constructor Create(AOwner: TComponent); override;
 
-   end;
 
-   TTBXToolPalette = class(TTBXCustomToolPalette)
 
-   public
 
-     property SelectedCell;
 
-   published
 
-     property ColCount;
 
-     property HelpContext;
 
-     property Images;
 
-     property Options;
 
-     property PaletteOptions;
 
-     property RowCount;
 
-     property Stretch;
 
-     property Visible;
 
-     property OnChange;
 
-     property OnCalcImageSize;
 
-     property OnCellClick;
 
-     property OnDrawCellImage;
 
-     property OnGetCellHint;
 
-     property OnGetCellVisible;
 
-   end;
 
-   TTBXToolViewer = class(TTBXItemViewer)
 
-   private
 
-     FCellHeight: Integer;
 
-     FCellWidth: Integer;
 
-     FColCount: Integer;
 
-     FRowCount: Integer;
 
-     FHotCell: TPoint;
 
-   protected
 
-     Indent: Integer;
 
-     MouseIsDown: Boolean;
 
-     procedure CalcCellSize(Canvas: TCanvas; var AWidth, AHeight: Integer); virtual;
 
-     procedure CalcImageSize(Canvas: TCanvas; var AWidth, AHeight: Integer); virtual;
 
-     procedure CalcSize(const Canvas: TCanvas; var AWidth, AHeight: Integer); override;
 
-     function  GetImageIndex(Col, Row: Integer): Integer;
 
-     function  GetCellAt(X, Y: Integer; out Col, Row: Integer): Boolean;
 
-     function  GetCellRect(ClientAreaRect: TRect; Col, Row: Integer): TRect; virtual;
 
-     function  GetHint(Col, Row: Integer): string;
 
-     procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW;
 
-     procedure DrawCell(Canvas: TCanvas; const CellRect: TRect; Col, Row: Integer; var ItemInfo: TTBXItemInfo);
 
-     procedure DrawCellImage(Canvas: TCanvas; const ARect: TRect; Col, Row: Integer; ItemInfo: TTBXItemInfo); virtual;
 
-     procedure Entering(OldSelected: TTBItemViewer); override;
 
-     procedure InvalidateCell(ACol, ARow: Integer);
 
-     function  IsCellVisible(Cell: TPoint): Boolean; virtual;
 
-     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
 
-     procedure MouseDown(Shift: TShiftState; X, Y: Integer;var MouseDownOnMenu: Boolean); override;
 
-     procedure MouseMove(X, Y: Integer); override;
 
-     procedure MouseUp(X, Y: Integer; MouseWasDownOnMenu: Boolean); override;
 
-     procedure Paint(const Canvas: TCanvas; const ClientAreaRect: TRect; IsHoverItem, IsPushed, UseDisabledShadow: Boolean); override;
 
-     property CellHeight: Integer read FCellHeight;
 
-     property CellWidth: Integer read FCellWidth;
 
-     property ColCount: Integer read FColCount;
 
-     property HotCell: TPoint read FHotCell;
 
-     property RowCount: Integer read FRowCount;
 
-   public
 
-     constructor Create(AView: TTBView; AItem: TTBCustomItem; AGroupLevel: Integer); override;
 
-   end;
 
-   { TTBXCustomColorSet }
 
-   TTBXCustomColorSet = class;
 
-   TCSGetColorInfo = procedure(Sender: TTBXCustomColorSet; Col, Row: Integer;
 
-     var Color: TColor; var Name: string) of object;
 
-   TTBXCustomColorSet = class(TComponent)
 
-   private
 
-     FPalettes: TList;
 
-     FColCount: Integer;
 
-     FRowCount: Integer;
 
-     FOnGetColorInfo: TCSGetColorInfo;
 
-     procedure SetColCount(Value: Integer);
 
-     procedure SetRowCount(Value: Integer);
 
-   protected
 
-     procedure UpdateSize(NewColCount, NewRowCount: Integer); virtual;
 
-     function  ColorToString(Color: TColor): string; virtual;
 
-     procedure GetColorInfo(Col, Row: Integer; out Color: TColor; out ColorName: string); virtual;
 
-   public
 
-     constructor Create(AOwner: TComponent); override;
 
-     destructor Destroy; override;
 
-     function GetColor(Col, Row: Integer): TColor;
 
-     function GetName(Col, Row: Integer): string;
 
-     property ColCount: Integer read FColCount write SetColCount;
 
-     property RowCount: Integer read FRowCount write SetRowCount;
 
-     property OnGetColorInfo: TCSGetColorInfo read FOnGetColorInfo write FOnGetColorInfo;
 
-   end;
 
-   TTBXColorSet = class(TTBXCustomColorSet)
 
-   published
 
-     property ColCount;
 
-     property RowCount;
 
-     property OnGetColorInfo;
 
-   end;
 
-   TTBXColorPalette = class(TTBXCustomToolPalette)
 
-   private
 
-     FColor: TColor;
 
-     FColorSet: TTBXCustomColorSet;
 
-     FImageSize: Integer;
 
-     procedure SetColorSet(Value: TTBXCustomColorSet);
 
-     procedure SetColor(Value: TColor);
 
-   protected
 
-     procedure DoCalcImageSize(Canvas: TCanvas; var AWidth, AHeight: Integer); override;
 
-     procedure DoChange; override;
 
-     procedure DoGetCellVisible(ACol, ARow: Integer; var Visible: Boolean); override;
 
-     procedure DoGetHint(ACell: TPoint; var HintText: string); override;
 
-     procedure DoDrawCellImage(Canvas: TCanvas; const ARect: TRect; ACol, ARow: Integer; ItemInfo: TTBXItemInfo); override;
 
-     function  GetColorSet: TTBXCustomColorSet;
 
-     function  GetCellColor(ACol, ARow: Integer): TColor; virtual;
 
-     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
 
-   public
 
-     constructor Create(AOwner: TComponent); override;
 
-     function  FindCell(AColor: TColor): TPoint;
 
-     function  ColorToString(AColor: TColor): string;
 
-   published
 
-     property Color: TColor read FColor write SetColor default clNone;
 
-     property ColorSet: TTBXCustomColorSet read FColorSet write SetColorSet;
 
-     property HelpContext;
 
-     property InheritOptions;
 
-     property MaskOptions;
 
-     property Options default [tboShowHint];
 
-     property PaletteOptions;
 
-     property Stretch;
 
-     property Visible;
 
-     property OnChange;
 
-     property OnCellClick;
 
-     property OnGetCellHint;
 
-   end;
 
- implementation
 
- uses ImgList, UxTheme, Types, TBXUtils;
 
- var
 
-   DefaultColorSet: TTBXCustomColorSet;
 
- type
 
-   TTBViewAccess = class(TTBView);
 
- { TTBXCustomToolPalette }
 
- constructor TTBXCustomToolPalette.Create(AOwner: TComponent);
 
- begin
 
-   inherited;
 
-   FColCount := 1;
 
-   FRowCount := 1;
 
-   FSelectedCell.X := -1;
 
- //  Options := Options + [tboToolbarStyle];
 
- end;
 
- procedure TTBXCustomToolPalette.DoCalcCellSize(Canvas: TCanvas; var AWidth, AHeight: Integer);
 
- begin
 
- end;
 
- procedure TTBXCustomToolPalette.DoCalcImageSize(Canvas: TCanvas; var AWidth, AHeight: Integer);
 
- begin
 
-   if Assigned(FOnCalcImageSize) then FOnCalcImageSize(Self, Canvas, AWidth, AHeight);
 
- end;
 
- function TTBXCustomToolPalette.DoCellClick(var ACol, ARow: Integer): Boolean;
 
- begin
 
-   Result := True;
 
-   if Assigned(FOnCellClick) then FOnCellClick(Self, ACol, ARow, Result);
 
- end;
 
- procedure TTBXCustomToolPalette.DoChange;
 
- begin
 
-   if Assigned(FOnChange) then FOnChange(Self);
 
- end;
 
- procedure TTBXCustomToolPalette.DoDrawCellImage(Canvas: TCanvas;
 
-   const ARect: TRect; ACol, ARow: Integer; ItemInfo: TTBXItemInfo);
 
- begin
 
-   if Assigned(FOnDrawCellImage) then
 
-   begin
 
-     FOnDrawCellImage(Self, Canvas, ARect, ACol, ARow, ItemInfo.Selected,
 
-       ItemInfo.HoverKind <> hkNone, ItemInfo.Enabled);
 
-   end;
 
- end;
 
- procedure TTBXCustomToolPalette.DoGetCellVisible(ACol, ARow: Integer; var Visible: Boolean);
 
- begin
 
-   if Assigned(FOnGetCellVisible) then FOnGetCellVisible(Self, ACol, ARow, Visible);
 
- end;
 
- procedure TTBXCustomToolPalette.DoGetHint(ACell: TPoint; var HintText: string);
 
- begin
 
-   if Assigned(FOnGetCellHint) then FOnGetCellHint(Self, ACell.X, ACell.Y, HintText);
 
- end;
 
- function TTBXCustomToolPalette.GetItemViewerClass(AView: TTBView): TTBItemViewerClass;
 
- begin
 
-   Result := TTBXToolViewer;
 
- end;
 
- procedure TTBXCustomToolPalette.HandleClickCell(ACol, ARow: Integer);
 
- begin
 
-   if DoCellClick(ACol, ARow) and not (tpoNoAutoSelect in PaletteOptions) then
 
-     SelectedCell := Point(ACol, ARow);
 
- end;
 
- procedure TTBXCustomToolPalette.SetColCount(Value: TRowColCount);
 
- begin
 
-   if FColCount <> Value then
 
-   begin
 
-     FColCount := Value;
 
-     Change(True);
 
-   end;
 
- end;
 
- procedure TTBXCustomToolPalette.SetPaletteOptions(Value: TTBXToolPaletteOptions);
 
- begin
 
-   if FPaletteOptions <> Value then
 
-   begin
 
-     FPaletteOptions := Value;
 
-     Change(True);
 
-   end;
 
- end;
 
- procedure TTBXCustomToolPalette.SetRowCount(Value: TRowColCount);
 
- begin
 
-   if FRowCount <> Value then
 
-   begin
 
-     FRowCount := Value;
 
-     Change(True);
 
-   end;
 
- end;
 
- procedure TTBXCustomToolPalette.SetSelectedCell(Value: TPoint);
 
- begin
 
-   FSelectedCell := Value;
 
-   Change(True);
 
-   DoChange;
 
- end;
 
- { TTBXToolViewer }
 
- procedure TTBXToolViewer.CalcCellSize(Canvas: TCanvas; var AWidth, AHeight: Integer);
 
- begin
 
-   CalcImageSize(Canvas, AWidth, AHeight);
 
-   TTBXCustomToolPalette(Item).DoCalcCellSize(Canvas, AWidth, AHeight);
 
-   Inc(AWidth, 6);
 
-   Inc(AHeight, 6);
 
- end;
 
- procedure TTBXToolViewer.CalcImageSize(Canvas: TCanvas; var AWidth, AHeight: Integer);
 
- var
 
-   ImgList: TCustomImageList;
 
- begin
 
-   ImgList := GetImageList;
 
-   if ImgList <> nil then
 
-   begin
 
-     AWidth := ImgList.Width;
 
-     AHeight := ImgList.Height;
 
-   end
 
-   else
 
-   begin
 
-     AWidth := 16;
 
-     AHeight := 16;
 
-   end;
 
-   TTBXCustomToolPalette(Item).DoCalcImageSize(Canvas, AWidth, AHeight);
 
- end;
 
- procedure TTBXToolViewer.CalcSize(const Canvas: TCanvas; var AWidth, AHeight: Integer);
 
- var
 
-   CellWidth, CellHeight: Integer;
 
- begin
 
-   if not IsToolbarStyle then with CurrentTheme do
 
-   begin
 
-     Indent :=
 
-       GetPopupMargin(Self) + GetIntegerMetrics(Self, TMI_MENU_IMGTEXTSPACE) +
 
-       GetIntegerMetrics(Self, TMI_MENU_LCAPTIONMARGIN) - 3;
 
-   end
 
-     else
 
-   begin
 
-     Indent := 0;
 
-   end;
 
-   FColCount := TTBXCustomToolPalette(Item).ColCount;
 
-   FRowCount := TTBXCustomToolPalette(Item).RowCount;
 
-   CalcCellSize(Canvas, CellWidth, CellHeight);
 
-   AWidth := Indent + CellWidth * ColCount;
 
-   if not IsToolbarStyle then Inc(AWidth, CurrentTheme.GetIntegerMetrics(Self, TMI_MENU_RCAPTIONMARGIN));
 
-   AHeight := CellHeight * RowCount;
 
-   if AWidth < 8 then AWidth := 8;
 
-   if AHeight < 8 then AHeight := 8;
 
- end;
 
- procedure TTBXToolViewer.CMHintShow(var Message: TCMHintShow);
 
- var
 
-   Col, Row: Integer;
 
- begin
 
-   with Message.HintInfo^ do
 
-   begin
 
-     if GetCellAt(CursorPos.X - BoundsRect.Left, CursorPos.Y - BoundsRect.Top, Col, Row) then
 
-     begin
 
-       CursorRect := GetCellRect(CursorRect, Col, Row);
 
-       HintStr := GetHint(Col, Row);
 
-     end
 
-     else HintStr := '';
 
-   end;
 
- end;
 
- constructor TTBXToolViewer.Create(AView: TTBView; AItem: TTBCustomItem; AGroupLevel: Integer);
 
- begin
 
-   inherited;
 
-   FColCount := TTBXCustomToolPalette(AItem).ColCount;
 
-   FRowCount := TTBXCustomToolPalette(AItem).RowCount;
 
- end;
 
- procedure TTBXToolViewer.DrawCell(Canvas: TCanvas; const CellRect: TRect;
 
-   Col, Row: Integer; var ItemInfo: TTBXItemInfo);
 
- var
 
-   ImageWidth, ImageHeight: Integer;
 
-   R: TRect;
 
- begin
 
-   CurrentTheme.PaintButton(Canvas, CellRect, ItemInfo);
 
-   CalcImageSize(Canvas, ImageWidth, ImageHeight);
 
-   R := Bounds((CellRect.Right + CellRect.Left - ImageWidth) div 2,
 
-     (CellRect.Top + CellRect.Bottom - ImageHeight) div 2, ImageWidth, ImageHeight);
 
-   DrawCellImage(Canvas, R, Col, Row,  ItemInfo);
 
- end;
 
- procedure TTBXToolViewer.DrawCellImage(Canvas: TCanvas; const ARect: TRect;
 
-   Col, Row: Integer; ItemInfo: TTBXItemInfo);
 
- var
 
-   ImgIndex: Integer;
 
-   ImgList: TCustomImageList;
 
- begin
 
-   if not (tpoCustomImages in  TTBXCustomToolPalette(Item).PaletteOptions) then
 
-   begin
 
-     ImgIndex := GetImageIndex(Col, Row);
 
-     ImgList := GetImageList;
 
-     if (ImgList <> nil) and (ImgIndex >= 0) and (ImgIndex < ImgList.Count) then
 
-       CurrentTheme.PaintImage(Canvas, ARect, ItemInfo, ImgList, ImgIndex);
 
-   end;
 
-   TTBXCustomToolPalette(Item).DoDrawCellImage(Canvas, ARect, Col, Row, ItemInfo);
 
- end;
 
- procedure TTBXToolViewer.Entering(OldSelected: TTBItemViewer);
 
- begin
 
-   FHotCell := Point(-1, 0);
 
-   if (View is TTBXPopupView) and (OldSelected <> nil) then
 
-   begin
 
-     if OldSelected.Index > Index then
 
-     begin
 
-       FHotCell := Point(ColCount - 1, RowCount - 1);
 
-       while (FHotCell.X > 0) and not IsCellVisible(FHotCell) do Dec(FHotCell.X);
 
-     end
 
-     else if OldSelected.Index < Index then
 
-       FHotCell := Point(0, 0);
 
-   end;
 
-   inherited Entering(OldSelected);
 
- end;
 
- function TTBXToolViewer.GetCellAt(X, Y: Integer; out Col, Row: Integer): Boolean;
 
- begin
 
-   { Returns true if there is a cell at (X,Y) point }
 
-   if (CellWidth = 0) or (CellHeight = 0) then
 
-   begin
 
-     Col := 0;
 
-     Row := 0;
 
-   end
 
-   else if not TTBXCustomToolPalette(Item).Stretch then
 
-   begin
 
-     Col := (X - Indent) div CellWidth;
 
-     Row := Y div CellHeight;
 
-   end
 
-   else
 
-   begin
 
-     Col := (X - Indent) * ColCount div (BoundsRect.Right - BoundsRect.Left);
 
-     Row := Y * RowCount div (BoundsRect.Bottom - BoundsRect.Top);
 
-   end;
 
-   Result := IsCellVisible(Point(Col, Row));
 
- end;
 
- function TTBXToolViewer.GetCellRect(ClientAreaRect: TRect; Col, Row: Integer): TRect;
 
- var
 
-   W, H: Integer;
 
- begin
 
-   with ClientAreaRect do
 
-     if not TTBXCustomToolPalette(Item).Stretch then
 
-     begin
 
-       Result := Bounds(Left + Indent + Col * CellWidth, Top + Row * CellHeight, CellWidth, CellHeight)
 
-     end
 
-     else
 
-     begin
 
-       W := Right - Left;
 
-       H := Bottom - Top;
 
-       Result.Left := Left + Indent + W * Col div ColCount;
 
-       Result.Top := Top + H * Row div RowCount;
 
-       Result.Right := Left + W * (Col + 1) div ColCount;
 
-       Result.Bottom := Top + H * (Row + 1) div RowCount;
 
-     end;
 
- end;
 
- function TTBXToolViewer.GetHint(Col, Row: Integer): string;
 
- begin
 
-   Result := '';
 
-   TTBXCustomToolPalette(Item).DoGetHint(Point(Col, Row), Result);
 
- end;
 
- function TTBXToolViewer.GetImageIndex(Col, Row: Integer): Integer;
 
- begin
 
-   Result := Col + Row * ColCount;
 
- end;
 
- procedure TTBXToolViewer.InvalidateCell(ACol, ARow: Integer);
 
- var
 
-   R: TRect;
 
- begin
 
-   R := GetCellRect(BoundsRect, ACol, ARow);
 
-   InvalidateRect(View.Window.Handle, @R, False);
 
- end;
 
- function TTBXToolViewer.IsCellVisible(Cell: TPoint): Boolean;
 
- var
 
-   ImgList: TCustomImageList;
 
- begin
 
-   Result := (Cell.X >= 0) and (Cell.Y >= 0) and (Cell.X < ColCount) and (Cell.Y < RowCount);
 
-   if Result then
 
-   begin
 
-     if not (tpoCustomImages in TTBXCustomToolPalette(Item).PaletteOptions) then
 
-     begin
 
-       ImgList := GetImageList;
 
-       if ImgList <> nil then Result := (Cell.X + Cell.Y * ColCount) < ImgList.Count;
 
-     end;
 
-     TTBXCustomToolPalette(Item).DoGetCellVisible(Cell.X, Cell.Y, Result);
 
-   end;
 
- end;
 
- procedure TTBXToolViewer.KeyDown(var Key: Word; Shift: TShiftState);
 
- var
 
-   OldPos, Pos: TPoint;
 
- begin
 
-   if IsCellVisible(HotCell) then OldPos := HotCell
 
-   else if IsCellVisible(TTBXCustomToolPalette(Item).SelectedCell) then
 
-     OldPos := TTBXCustomToolPalette(Item).SelectedCell
 
-   else OldPos.X := -1;
 
-   if OldPos.X >= 0 then
 
-   begin
 
-     Pos := OldPos;
 
-     case Key of
 
-       VK_LEFT:
 
-         begin
 
-           Dec(Pos.X);
 
-           if Pos.X < 0 then
 
-           begin
 
-             Pos.X := ColCount - 1;
 
-             Dec(Pos.Y);
 
-           end;
 
-         end;
 
-       VK_UP: Dec(Pos.Y);
 
-       VK_RIGHT:
 
-         begin
 
-           Inc(Pos.X);
 
-           if Pos.X >= ColCount then
 
-           begin
 
-             Pos.X := 0;
 
-             Inc(Pos.Y);
 
-           end;
 
-         end;
 
-       VK_DOWN: Inc(Pos.Y);
 
-       VK_PRIOR: Pos.Y := 0;
 
-       VK_NEXT: Pos.Y := RowCount - 1;
 
-       VK_HOME: Pos.X := 0;
 
-       VK_END: Pos.Y := ColCount - 1;
 
-       VK_RETURN:
 
-         if IsCellVisible(HotCell) then
 
-         begin
 
-           TTBXCustomToolPalette(Item).HandleClickCell(HotCell.X, HotCell.Y);
 
-           Exit;
 
-         end;
 
-     else
 
-       inherited;
 
-       Exit;
 
-     end;
 
-   end
 
-   else
 
-   begin
 
-     OldPos := Point(-1, 0);
 
-     Pos := Point(0, 0);
 
-   end;
 
-   if ((OldPos.X <> Pos.X) or (OldPos.Y <> Pos.Y)) and IsCellVisible(Pos) then
 
-   begin
 
-     Key := 0;
 
-     FHotCell := Pos;
 
-     TTBXCustomToolPalette(Item).Change(False);
 
-   end;
 
- end;
 
- procedure TTBXToolViewer.MouseDown(Shift: TShiftState; X, Y: Integer; var MouseDownOnMenu: Boolean);
 
- begin
 
-   MouseIsDown := True;
 
-   MouseMove(X, Y);
 
-   inherited;
 
-   View.SetCapture;
 
- end;
 
- procedure TTBXToolViewer.MouseMove(X, Y: Integer);
 
- var
 
-   OldHotCell: TPoint;
 
- begin
 
-   OldHotCell := HotCell;
 
-   if not GetCellAt(X, Y, FHotCell.X, FHotCell.Y) then FHotCell := Point(-1, 0);
 
-   if (HotCell.X <> OldHotCell.X) or (HotCell.Y <> OldHotCell.Y) then
 
-   begin
 
-     with TTBXCustomToolPalette(Item) do
 
-     begin
 
-       if Show and not IsRectEmpty(BoundsRect) and
 
-          not (Item is TTBControlItem) then
 
-       begin
 
-         Include(State, tbisInvalidated);
 
-         InvalidateCell(OldHotCell.X, OldHotCell.Y);
 
-         InvalidateCell(HotCell.X, HotCell.Y);
 
-       end;
 
-     end;
 
-   end;
 
- end;
 
- procedure TTBXToolViewer.MouseUp(X, Y: Integer; MouseWasDownOnMenu: Boolean);
 
- var
 
-   Col, Row: Integer;
 
-   DAD: TTBDoneActionData;
 
- begin
 
-   MouseIsDown := False;
 
-   if GetCellAt(X, Y, Col, Row) then
 
-     TTBXCustomToolPalette(Item).HandleClickCell(Col, Row);
 
-   DAD := TTBViewAccess(TTBViewAccess(View).GetRootView).DoneActionData;
 
-   DAD.ClickItem := Item;
 
-   DAD.DoneAction := tbdaClickItem;
 
-   DAD.Sound := True;
 
-   TTBViewAccess(TTBViewAccess(View).GetRootView).DoneActionData := DAD;
 
-   inherited;
 
- end;
 
- procedure TTBXToolViewer.Paint(const Canvas: TCanvas; const ClientAreaRect: TRect;
 
-   IsHoverItem, IsPushed, UseDisabledShadow: Boolean);
 
- const
 
-   CDesigning: array [Boolean] of Integer = (0, IO_DESIGNING);
 
- var
 
-   I, J: Integer;
 
-   ItemInfo: TTBXItemInfo;
 
-   Hover: TTBXHoverKind;
 
-   R, CellRect: TRect;
 
- begin
 
-   FillChar(ItemInfo, SizeOf(TTBXItemInfo), 0);
 
-   ItemInfo.ViewType := GetViewType(View);
 
-   ItemInfo.ItemOptions := CDesigning[csDesigning in Item.ComponentState];
 
-   ItemInfo.Enabled := Item.Enabled or View.Customizing;
 
-   ItemInfo.Pushed := False;
 
-   ItemInfo.Selected := False;
 
-   ItemInfo.ImageShown := True;
 
-   with ItemInfo do CalcImageSize(Canvas, ImageWidth, ImageHeight);
 
-   ItemInfo.HoverKind := hkNone;
 
-   if not IsToolbarStyle then ItemInfo.PopupMargin := GetPopupMargin(Self);
 
-   if not IsToolbarStyle then with CurrentTheme do
 
-   begin
 
-     R := ClientAreaRect;
 
-     CurrentTheme.PaintMenuItemFrame(Canvas, R, ItemInfo);
 
-   end;
 
-   CalcCellSize(Canvas, FCellWidth, FCellHeight);
 
-   if IsHoverItem then
 
-   begin
 
-     if not ItemInfo.Enabled and not View.MouseOverSelected then Hover := hkKeyboardHover
 
-     else if ItemInfo.Enabled then Hover := hkMouseHover
 
-     else Hover := hkNone;
 
-   end
 
-   else
 
-     Hover := hkNone;
 
-   for J := 0 to RowCount - 1 do
 
-     for I := 0 to ColCount - 1 do
 
-     begin
 
-       if IsCellVisible(Point(I, J)) then
 
-       begin
 
-         if (Hover <> hkNone) and (HotCell.X = I) and (HotCell.Y = J) then
 
-         begin
 
-           ItemInfo.HoverKind := Hover;
 
-           if IsPushed then ItemInfo.Pushed := True
 
-         end
 
-         else
 
-         begin
 
-           ItemInfo.HoverKind := hkNone;
 
-           ItemInfo.Pushed := False;
 
-         end;
 
-         with TTBXCustomToolPalette(Item) do
 
-           if (SelectedCell.X = I) and (SelectedCell.Y = J) then
 
-             ItemInfo.Selected := True
 
-           else
 
-             ItemInfo.Selected := False;
 
-         CellRect := GetCellRect(ClientAreaRect, I, J);
 
-         DrawCell(Canvas, CellRect, I, J, ItemInfo);
 
-       end;
 
-     end;
 
- end;
 
- //----------------------------------------------------------------------------//
 
- { TTBXCustomColorSet }
 
- constructor TTBXCustomColorSet.Create(AOwner: TComponent);
 
- begin
 
-   inherited;
 
-   FPalettes := TList.Create;
 
- end;
 
- destructor TTBXCustomColorSet.Destroy;
 
- begin
 
-   FPalettes.Free;
 
-   inherited;
 
- end;
 
- function TTBXCustomColorSet.GetColor(Col, Row: Integer): TColor;
 
- var
 
-   Dummy: string;
 
- begin
 
-   GetColorInfo(Col, Row, Result, Dummy);
 
- end;
 
- procedure TTBXCustomColorSet.GetColorInfo(Col, Row: Integer; out Color: TColor; out ColorName: string);
 
- begin
 
-   Color := clNone;
 
-   SetLength(ColorName, 0);
 
-   if Assigned(FOnGetColorInfo) then FOnGetColorInfo(Self, Col, Row, Color, ColorName);
 
- end;
 
- function TTBXCustomColorSet.ColorToString(Color: TColor): string;
 
- var
 
-   I, J: Integer;
 
-   C: TColor;
 
-   N: string;
 
-   function GetRGB(C: TColor): TColor;
 
-   begin
 
-     Result := (C and $FF00) + C shr 16 + (C and $FF shl 16);
 
-   end;
 
- begin
 
-   if Color = clNone then Result := 'None'
 
-   else
 
-   begin
 
-     if Color < 0 then Color := GetSysColor(Color and $000000FF);
 
-     Color := Color and $00FFFFFF;
 
-     for J := 0 to RowCount - 1 do
 
-       for I := 0 to ColCount - 1 do
 
-       begin
 
-         GetColorInfo(I, J, C, N);
 
-         if C <> clNone then
 
-         begin
 
-           if C < 0 then C := GetSysColor(C and $000000FF);
 
-           C := C and $00FFFFFF;
 
-           if C = Color then
 
-           begin
 
-             Result := N;
 
-             if Length(N) = 0 then Result := '#' + IntToHex(GetRGB(Color), 6);
 
-             Exit;
 
-           end
 
-         end;
 
-       end;
 
-     Result := '#' + IntToHex(GetRGB(Color), 6);
 
-   end;
 
- end;
 
- function TTBXCustomColorSet.GetName(Col, Row: Integer): string;
 
- var
 
-   Dummy: TColor;
 
- begin
 
-   GetColorInfo(Col, Row, Dummy, Result);
 
- end;
 
- procedure TTBXCustomColorSet.SetColCount(Value: Integer);
 
- begin
 
-   UpdateSize(Value, RowCount);
 
- end;
 
- procedure TTBXCustomColorSet.SetRowCount(Value: Integer);
 
- begin
 
-   UpdateSize(ColCount, Value);
 
- end;
 
- procedure TTBXCustomColorSet.UpdateSize(NewColCount, NewRowCount: Integer);
 
- var
 
-   I: Integer;
 
- begin
 
-   FColCount := NewColCount;
 
-   FRowCount := NewRowCount;
 
-   for I := 0 to FPalettes.Count - 1 do
 
-     with TTBXColorPalette(FPalettes[I]) do
 
-     begin
 
-       ColCount := Self.ColCount;
 
-       RowCount := Self.RowCount;
 
-     end;
 
- end;
 
- //----------------------------------------------------------------------------//
 
- { TTBXColorPalette }
 
- function TTBXColorPalette.ColorToString(AColor: TColor): string;
 
- begin
 
-   Result := GetColorSet.ColorToString(AColor);
 
- end;
 
- constructor TTBXColorPalette.Create(AOwner: TComponent);
 
- begin
 
-   inherited;
 
-   ColCount := DefaultColorSet.ColCount;
 
-   RowCount := DefaultColorSet.RowCount;
 
-   Options := Options + [tboShowHint];
 
-   FColor := clNone;
 
-   PaletteOptions := PaletteOptions + [tpoCustomImages];
 
-   FImageSize := -1;
 
- end;
 
- procedure TTBXColorPalette.DoCalcImageSize(Canvas: TCanvas; var AWidth, AHeight: Integer);
 
- begin
 
-   if FImageSize < 0 then
 
-   begin
 
-     FImageSize := TBXScaleByTextHeightRunTime(Canvas, 12);
 
-   end;
 
-   AWidth := FImageSize;
 
-   AHeight := FImageSize;
 
- end;
 
- procedure TTBXColorPalette.DoChange;
 
- begin
 
-   if SelectedCell.X >= 0 then
 
-     FColor := GetCellColor(SelectedCell.X, SelectedCell.Y);
 
-   inherited;
 
- end;
 
- procedure TTBXColorPalette.DoDrawCellImage(Canvas: TCanvas;
 
-   const ARect: TRect; ACol, ARow: Integer; ItemInfo: TTBXItemInfo);
 
- var
 
-   R: TRect;
 
- begin
 
-   R := ARect;
 
-   Canvas.Brush.Color := clBtnShadow;
 
-   Canvas.FrameRect(R);
 
-   InflateRect(R, -1, -1);
 
-   if ItemInfo.Enabled then
 
-   begin
 
-     Canvas.Brush.Color := GetCellColor(ACol, ARow);
 
-     Canvas.FillRect(R);
 
-   end;
 
- end;
 
- procedure TTBXColorPalette.DoGetCellVisible(ACol, ARow: Integer; var Visible: Boolean);
 
- begin
 
-   Visible := GetCellColor(ACol, ARow) <> clNone;
 
- end;
 
- procedure TTBXColorPalette.DoGetHint(ACell: TPoint; var HintText: string);
 
- begin
 
-   HintText := GetColorSet.GetName(ACell.X, ACell.Y);
 
- end;
 
- function TTBXColorPalette.FindCell(AColor: TColor): TPoint;
 
- var
 
-   I, J: Integer;
 
-   C: TColor;
 
- begin
 
-   if AColor <> clNone then AColor := ColorToRGB(AColor);
 
-   for J := 0 to RowCount - 1 do
 
-     for I := 0 to ColCount - 1 do
 
-     begin
 
-       C := GetCellColor(I, J);
 
-       if C <> clNone then C := ColorToRGB(C);
 
-       if C = AColor then
 
-       begin
 
-         Result.X := I;
 
-         Result.Y := J;
 
-         Exit;
 
-       end;
 
-     end;
 
-   Result.X := -1;
 
-   Result.Y := 0;
 
- end;
 
- function TTBXColorPalette.GetCellColor(ACol, ARow: Integer): TColor;
 
- begin
 
-   Result := GetColorSet.GetColor(ACol, ARow);
 
- end;
 
- function TTBXColorPalette.GetColorSet: TTBXCustomColorSet;
 
- begin
 
-   if FColorSet = nil then Result := DefaultColorSet
 
-   else Result := FColorSet;
 
- end;
 
- procedure TTBXColorPalette.Notification(AComponent: TComponent; Operation: TOperation);
 
- begin
 
-   inherited;
 
-   if (AComponent = FColorSet) and (Operation = opRemove) then ColorSet := nil;
 
- end;
 
- procedure TTBXColorPalette.SetColor(Value: TColor);
 
- begin
 
-   FColor := Value;
 
-   SelectedCell := FindCell(Value);
 
- end;
 
- procedure TTBXColorPalette.SetColorSet(Value: TTBXCustomColorSet);
 
- begin
 
-   if FColorSet <> Value then
 
-   begin
 
-     if Assigned(FColorSet) then FColorSet.FPalettes.Remove(Self);
 
-     FColorSet := Value;
 
-     if Assigned(Value) then
 
-     begin
 
-       Value.FreeNotification(Self);
 
-       Value.FPalettes.Add(Self);
 
-       ColCount := Value.ColCount;
 
-       RowCount := Value.RowCount;
 
-     end
 
-     else
 
-     begin
 
-       ColCount := DefaultColorSet.ColCount;
 
-       RowCount := DefaultColorSet.RowCount;
 
-     end;
 
-     Change(True);
 
-   end;
 
- end;
 
- { TTBXDefaultColorSet }
 
- type
 
-   TTBXDefaultColorSet = class (TTBXCustomColorSet)
 
-   protected
 
-     procedure GetColorInfo(Col, Row: Integer; out Color: TColor; out ColorName: string); override;
 
-   public
 
-     constructor Create(AOwner: TComponent); override;
 
-   end;
 
- procedure TTBXDefaultColorSet.GetColorInfo(Col, Row: Integer; out Color: TColor; out ColorName: string);
 
-   procedure Clr(const AName: string; AColor: TColor);
 
-   begin
 
-     Color := AColor;
 
-     ColorName := AName;
 
-   end;
 
- begin
 
-   Color := clNone;
 
-   Name := '';
 
-   case Row of
 
-     0:
 
-       case Col of
 
-         0: Clr('Black', $000000);
 
-         1: Clr('Brown', $003399);
 
-         2: Clr('Olive Green', $003333);
 
-         3: Clr('Dark Green', $003300);
 
-         4: Clr('Dark Teal', $663300);
 
-         5: Clr('Dark blue', $800000);
 
-         6: Clr('Indigo', $993333);
 
-         7: Clr('Gray-80%', $333333);
 
-       end;
 
-     1:
 
-       case Col of
 
-         0: Clr('Dark Red', $000080);
 
-         1: Clr('Orange', $0066FF);
 
-         2: Clr('Dark Yellow', $008080);
 
-         3: Clr('Green', $008000);
 
-         4: Clr('Teal', $808000);
 
-         5: Clr('Blue', $FF0000);
 
-         6: Clr('Blue-Gray', $996666);
 
-         7: Clr('Gray-50%', $808080);
 
-       end;
 
-     2:
 
-       case Col of
 
-         0: Clr('Red', $0000FF);
 
-         1: Clr('Light Orange', $0099FF);
 
-         2: Clr('Lime', $00CC99);
 
-         3: Clr('Sea Green', $669933);
 
-         4: Clr('Aqua', $CCCC33);
 
-         5: Clr('Light Blue', $FF6633);
 
-         6: Clr('Violet', $800080);
 
-         7: Clr('Gray-40%', $969696);
 
-       end;
 
-     3:
 
-       case Col of
 
-         0: Clr('Pink', $FF00FF);
 
-         1: Clr('Gold', $00CCFF);
 
-         2: Clr('Yellow', $00FFFF);
 
-         3: Clr('Bright Green', $00FF00);
 
-         4: Clr('Turquoise', $FFFF00);
 
-         5: Clr('Sky Blue', $FFCC00);
 
-         6: Clr('Plum', $663399);
 
-         7: Clr('Gray-25%', $C0C0C0);
 
-       end;
 
-     4:
 
-       case Col of
 
-         0: Clr('Rose', $CC99FF);
 
-         1: Clr('Tan', $99CCFF);
 
-         2: Clr('Light Yellow', $99FFFF);
 
-         3: Clr('Light Green', $CCFFCC);
 
-         4: Clr('Light Turquoise', $FFFFCC);
 
-         5: Clr('Pale Blue', $FFCC99);
 
-         6: Clr('Lavender', $FF99CC);
 
-         7: Clr('White', $FFFFFF);
 
-       end;
 
-   end;
 
- end;
 
- constructor TTBXDefaultColorSet.Create(AOwner: TComponent);
 
- begin
 
-   inherited;
 
-   FColCount := 8;
 
-   FRowCount := 5;
 
- end;
 
- initialization
 
-   DefaultColorSet := TTBXDefaultColorSet.Create(nil);
 
- finalization
 
-   DefaultColorSet.Free;
 
- end.
 
 
  |