| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 | unit TB2Reg;{  Toolbar2000  Copyright (C) 1998-2005 by Jordan Russell  All rights reserved.  The contents of this file are subject to the "Toolbar2000 License"; you may  not use or distribute this file except in compliance with the  "Toolbar2000 License". A copy of the "Toolbar2000 License" may be found in  TB2k-LICENSE.txt or at:    http://www.jrsoftware.org/files/tb2k/TB2k-LICENSE.txt  Alternatively, the contents of this file may be used under the terms of the  GNU General Public License (the "GPL"), in which case the provisions of the  GPL are applicable instead of those in the "Toolbar2000 License". A copy of  the GPL may be found in GPL-LICENSE.txt or at:    http://www.jrsoftware.org/files/tb2k/GPL-LICENSE.txt  If you wish to allow use of your version of this file only under the terms of  the GPL and not to allow others to use your version of this file under the  "Toolbar2000 License", indicate your decision by deleting the provisions  above and replace them with the notice and other provisions required by the  GPL. If you do not delete the provisions above, a recipient may use your  version of this file under either the "Toolbar2000 License" or the GPL.  $jrsoftware: tb2k/Source/TB2Reg.pas,v 1.28 2005/01/06 03:56:50 jr Exp $}interface{$I TB2Ver.inc}uses  Windows, SysUtils, Classes, Graphics, Controls, Dialogs, ActnList, ImgList,  DesignIntf, DesignEditors, VCLEditors,  TB2Toolbar, TB2Dock, TB2Item, TB2ExtItems,  TB2DsgnItemEditor;{ TTBImageIndexPropertyEditor }{ Unfortunately TComponentImageIndexPropertyEditor seems to be gone in  Delphi 6, so we have to use our own image index property editor class }type  TTBImageIndexPropertyEditor = class(TIntegerProperty, ICustomPropertyListDrawing)  public    function GetAttributes: TPropertyAttributes; override;    procedure GetValues(Proc: TGetStrProc); override;    function GetImageListAt(Index: Integer): TCustomImageList; virtual;    // ICustomPropertyListDrawing    procedure ListMeasureHeight(const Value: string; ACanvas: TCanvas;      var AHeight: Integer);    procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas;      var AWidth: Integer);    procedure ListDrawValue(const Value: string; ACanvas: TCanvas;      const ARect: TRect; ASelected: Boolean);  end;{ TTBItemImageIndexPropertyEditor }type  TTBItemImageIndexPropertyEditor = class(TTBImageIndexPropertyEditor)  public    function GetImageListAt (Index: Integer): TCustomImageList; override;  end;procedure Register;implementationuses  ImgEdit, Actions, UITypes;function TTBImageIndexPropertyEditor.GetAttributes: TPropertyAttributes;begin  Result := [paMultiSelect, paValueList, paRevertable];end;function TTBImageIndexPropertyEditor.GetImageListAt(Index: Integer): TCustomImageList;begin  Result := nil;end;procedure TTBImageIndexPropertyEditor.GetValues(Proc: TGetStrProc);var  ImgList: TCustomImageList;  I: Integer;begin  ImgList := GetImageListAt(0);  if Assigned(ImgList) then    for I := 0 to ImgList.Count-1 do      Proc(IntToStr(I));end;procedure TTBImageIndexPropertyEditor.ListDrawValue(const Value: string;  ACanvas: TCanvas; const ARect: TRect; ASelected: Boolean);var  ImgList: TCustomImageList;  X: Integer;begin  ImgList := GetImageListAt(0);  ACanvas.FillRect(ARect);  X := ARect.Left + 2;  if Assigned(ImgList) then begin    ImgList.Draw(ACanvas, X, ARect.Top + 2, StrToInt(Value));    Inc(X, ImgList.Width);  end;  ACanvas.TextOut(X + 3, ARect.Top + 1, Value);end;procedure TTBImageIndexPropertyEditor.ListMeasureHeight(const Value: string;  ACanvas: TCanvas; var AHeight: Integer);var  ImgList: TCustomImageList;begin  ImgList := GetImageListAt(0);  AHeight := ACanvas.TextHeight(Value) + 2;  if Assigned(ImgList) and (ImgList.Height + 4 > AHeight) then    AHeight := ImgList.Height + 4;end;procedure TTBImageIndexPropertyEditor.ListMeasureWidth(const Value: string;  ACanvas: TCanvas; var AWidth: Integer);var  ImgList: TCustomImageList;begin  ImgList := GetImageListAt(0);  AWidth := ACanvas.TextWidth(Value) + 4;  if Assigned(ImgList) then    Inc(AWidth, ImgList.Width);end;{ TTBItemImageIndexPropertyEditor }function TTBItemImageIndexPropertyEditor.GetImageListAt(Index: Integer): TCustomImageList;var  C: TPersistent;  Item: TTBCustomItem;begin  Result := nil;  { ? I'm guessing that the Index parameter is a component index (one that    would be passed to the GetComponent function). }  C := GetComponent(Index);  if C is TTBCustomItem then begin    Item := TTBCustomItem(C);    repeat      Result := Item.Images;      if Assigned(Result) then        Break;      Item := Item.Parent;      if Item = nil then        Break;      Result := Item.SubMenuImages;    until Assigned(Result);  end;end;{ TTBCustomImageListEditor }type  TTBCustomImageListEditor = class(TComponentEditor)  public    procedure Edit; override;    procedure ExecuteVerb(Index: Integer); override;    function GetVerb(Index: Integer): String; override;    function GetVerbCount: Integer; override;  end;  TTBCustomImageListAccess = class(TTBCustomImageList);procedure TTBCustomImageListEditor.Edit;var  ImgList: TTBCustomImageList;begin  ImgList := Component as TTBCustomImageList;  if not TTBCustomImageListAccess(ImgList).ImagesBitmap.Empty then begin    if MessageDlg('The image list''s ImagesBitmap property has ' +       'a bitmap assigned. Because of this, any changes you make in the ' +       'Image List Editor will not be preserved when the form is saved.'#13#10#13#10 +       'Do you want to open the editor anyway?', mtWarning,       [mbYes, mbNo], 0) <> mrYes then      Exit;  end;  EditImageList(ImgList);end;procedure TTBCustomImageListEditor.ExecuteVerb(Index: Integer);begin  if Index = 0 then    Edit;end;function TTBCustomImageListEditor.GetVerbCount: Integer;begin  Result := 1;end;function TTBCustomImageListEditor.GetVerb(Index: Integer): String;begin  if Index = 0 then    Result := 'ImageList Editor...'  else    Result := '';end;procedure Register;begin  RegisterComponents('Toolbar2000', [TTBDock, TTBToolbar,    TTBPopupMenu, TTBImageList, TTBItemContainer]);  RegisterActions('', [TTBEditAction], nil);  RegisterNoIcon([TTBItem, TTBGroupItem, TTBSubmenuItem, TTBSeparatorItem,    TTBEditItem, TTBControlItem]);  RegisterClasses([TTBItem, TTBGroupItem, TTBSubmenuItem, TTBSeparatorItem,    TTBEditItem, TTBControlItem]);  RegisterComponentEditor(TTBCustomToolbar, TTBItemsEditor);  RegisterComponentEditor(TTBItemContainer, TTBItemsEditor);  RegisterComponentEditor(TTBPopupMenu, TTBItemsEditor);  RegisterComponentEditor(TTBCustomImageList, TTBCustomImageListEditor);  RegisterPropertyEditor(TypeInfo(TTBRootItem), nil, '', TTBItemsPropertyEditor);  RegisterPropertyEditor(TypeInfo(TImageIndex), TTBCustomItem, 'ImageIndex',    TTBItemImageIndexPropertyEditor);  { TShortCut properties show up like Integer properties in Delphi 6    without this... }  RegisterPropertyEditor(TypeInfo(TShortCut), TTBCustomItem, '',    TShortCutProperty);  { Link in images for the toolbar buttons }  {$R TB2DsgnItemEditor.res}  TBRegisterItemClass(TTBEditItem, 'New &Edit', HInstance);  TBRegisterItemClass(TTBGroupItem, 'New &Group Item', HInstance);end;end.
 |