| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390 | 
							- unit TBXReg;
 
- // TBX Package
 
- // Copyright 2001-2004 Alex A. Denisov. All Rights Reserved
 
- // See TBX.chm for license and installation instructions
 
- //
 
- // Id: TBXReg.pas 16 2004-05-26 02:02:55Z Alex@ZEISS
 
- interface
 
- {$I TB2Ver.inc}
 
- uses
 
-   Windows, Classes, Controls, SysUtils, Graphics, ImgList, Dialogs,
 
-   DesignIntf, DesignEditors, VCLEditors,
 
-   TB2Reg, TB2Toolbar, TB2Item, TBX, TB2DsgnItemEditor,
 
-   TBXExtItems, TBXLists, TBXToolPals, TBXStatusBars;
 
- procedure Register;
 
- type
 
-   TThemeProperty = class(TStringProperty)
 
-     function GetAttributes: TPropertyAttributes; override;
 
-     procedure GetValues(Proc: TGetStrProc); override;
 
-   end;
 
-   TMLStringProperty = class(TCaptionProperty)
 
-     function GetAttributes: TPropertyAttributes; override;
 
-     procedure Edit; override;
 
-   end;
 
-   TTBXColorProperty = class(TColorProperty)
 
-   public
 
-     function GetValue: string; override;
 
-     procedure GetValues(Proc: TGetStrProc); override;
 
-     procedure SetValue(const Value: string); override;
 
-     procedure ListDrawValue(const Value: string; ACanvas: TCanvas;
 
-       const ARect: TRect; ASelected: Boolean);
 
-   end;
 
-   TTBXStatusBarEditor = class(TDefaultEditor)
 
-   protected
 
-     procedure GetPanelsProp(const Prop: IProperty);
 
-   public
 
-     procedure Edit; override;
 
-     procedure ExecuteVerb(Index: Integer); override;
 
-     function GetVerb(Index: Integer): string; override;
 
-     function GetVerbCount: Integer; override;
 
-   end;
 
-   TTBXItemsEditor = class(TTBItemsEditor)
 
-   public
 
-     procedure ExecuteVerb(Index: Integer); override;
 
-   end;
 
- implementation
 
- uses
 
-   Forms, TBXThemes, TBXStrEdit, TBXUtils, TypInfo, TB2Version;
 
- { TThemeProperty }
 
- function TThemeProperty.GetAttributes: TPropertyAttributes;
 
- begin
 
-   Result := [paMultiSelect, paValueList, paSortList, paRevertable];
 
- end;
 
- procedure TThemeProperty.GetValues(Proc: TGetStrProc);
 
- var
 
-   SL: TStringList;
 
-   I: Integer;
 
- begin
 
-   SL := TStringList.Create;
 
-   GetAvailableTBXThemes(SL);
 
-   for I := 0 to SL.Count - 1 do Proc(SL[I]);
 
-   SL.Free;
 
- end;
 
- { TMLStringProperty }
 
- function WordCount(const S: string; const Delims: TSysCharSet): Integer;
 
- var
 
-   L, I: Cardinal;
 
- begin
 
-   Result := 0;
 
-   I := 1;
 
-   L := Length(S);
 
-   while I <= L do
 
-   begin
 
-     while (I <= L) and {MP}CharInSet(S[I], Delims) do Inc(I);
 
-     if I <= L then Inc(Result);
 
-     while (I <= L) and not {MP}CharInSet(S[I], Delims) do Inc(I);
 
-   end;
 
- end;
 
- function WordPosition(const N: Integer; const S: string;
 
-   const WordDelims: TSysCharSet): Integer;
 
- var
 
-   Count, I: Integer;
 
- begin
 
-   Count := 0;
 
-   I := 1;
 
-   Result := 0;
 
-   while (I <= Length(S)) and (Count <> N) do begin
 
-     { skip over delimiters }
 
-     while (I <= Length(S)) and {MP}CharInSet(S[I], WordDelims) do Inc(I);
 
-     { if we're not beyond end of S, we're at the start of a word }
 
-     if I <= Length(S) then Inc(Count);
 
-     { if not finished, find the end of the current word }
 
-     if Count <> N then
 
-       while (I <= Length(S)) and not CharInSet(S[I], WordDelims) do Inc(I)
 
-     else Result := I;
 
-   end;
 
- end;
 
- function ExtractWord(N: Integer; const S: string;
 
-   const WordDelims: TSysCharSet): string;
 
- var
 
-   I: Integer;
 
-   Len: Integer;
 
- begin
 
-   Len := 0;
 
-   I := WordPosition(N, S, WordDelims);
 
-   if I <> 0 then
 
-     { find the end of the current word }
 
-     while (I <= Length(S)) and not CharInSet(S[I], WordDelims) do begin
 
-       { add the I'th character to result }
 
-       Inc(Len);
 
-       SetLength(Result, Len);
 
-       Result[Len] := S[I];
 
-       Inc(I);
 
-     end;
 
-   SetLength(Result, Len);
 
- end;
 
- procedure TMLStringProperty.Edit;
 
- var
 
-   Temp: string;
 
-   Component: TPersistent;
 
-   I, N: Integer;
 
- begin
 
-   with TStrEditDlg.Create(Application) do
 
-   try
 
-     Component := GetComponent(0);
 
-     if Component is TComponent then Caption := TComponent(Component).Name + '.' + GetName
 
-     else Caption := GetName;
 
-     Temp := GetStrValue;
 
-     N := WordCount(Temp, [#13, #10]);
 
-     for I := 1 to N do Memo.Lines.Add(ExtractWord(I, Temp, [#13, #10]));
 
-     Memo.MaxLength := GetEditLimit;
 
-     if ShowModal = mrOk then
 
-     begin
 
-       Temp := Memo.Text;
 
-       while (Length(Temp) > 0) and (Temp[Length(Temp)] < ' ') do
 
-         System.Delete(Temp, Length(Temp), 1);
 
-       SetStrValue(Temp);
 
-     end;
 
-   finally
 
-     Free;
 
-   end;
 
- end;
 
- function TMLStringProperty.GetAttributes: TPropertyAttributes;
 
- begin
 
-   Result := inherited GetAttributes + [paDialog];
 
- end;
 
- { TTBXColorProperty }
 
- function TTBXColorProperty.GetValue: string;
 
- begin
 
-   Result := TBXColorToString(TColor(GetOrdValue));
 
- end;
 
- procedure TTBXColorProperty.GetValues(Proc: TGetStrProc);
 
- begin
 
-   TBXGetColorValues(Proc);
 
- end;
 
- procedure TTBXColorProperty.SetValue(const Value: string);
 
- begin
 
-   SetOrdValue(TBXStringToColor(Value));
 
- end;
 
- procedure TTBXColorProperty.ListDrawValue(const Value: string; ACanvas: TCanvas;
 
-   const ARect: TRect; ASelected: Boolean);
 
-   function ColorToBorderColor(AColor: TColor): TColor;
 
-   begin
 
-     if IsDarkColor(AColor) then
 
-     begin
 
-       Result := AColor;
 
-       SetContrast(Result, AColor, 40);
 
-     end
 
-     else Result := clBlack;
 
-   end;
 
- var
 
-   R: TRect;
 
-   C: TColor;
 
-   OldPenColor, OldBrushColor: TColor;
 
- begin
 
-   R := ARect;
 
-   with ACanvas do
 
-   try
 
-     OldPenColor := Pen.Color;
 
-     OldBrushColor := Brush.Color;
 
-     Pen.Color := Brush.Color;
 
-     Rectangle(R);
 
-     R.Right := (ARect.Bottom - ARect.Top) + ARect.Left;
 
-     InflateRect(R, -1, -1);
 
-     C := TBXStringToColor(Value);
 
-     if C <> clNone then
 
-     begin
 
-       Brush.Color := C;
 
-       Pen.Color := ColorToBorderColor(ColorToRGB(C));
 
-       Rectangle(R);
 
-     end
 
-     else
 
-     begin
 
-       Brush.Color := clWindow;
 
-       Pen.Color := clBtnShadow;
 
-       Rectangle(R);
 
-       MoveTo(R.Left, R.Bottom - 1);
 
-       LineTo(R.Right - 1, R.Top);
 
-       MoveTo(R.Left, R.Top);
 
-       LineTo(R.Right, R.Bottom);
 
-     end;
 
-     Brush.Color := OldBrushColor;
 
-     Pen.Color := OldPenColor;
 
-   finally
 
-     R.Left := R.Right;
 
-     R.Right := ARect.Right;
 
-     ACanvas.TextRect(R, R.Left + 1, R.Top + 1, Value);
 
-   end;
 
- end;
 
- { TTBXStatusBarEditor }
 
- procedure TTBXStatusBarEditor.Edit;
 
- var
 
-   Components: IDesignerSelections;
 
- begin
 
-   Components := CreateSelectionList;
 
-   Components.Add(Component);
 
-   GetComponentProperties(Components, [tkClass], Designer, GetPanelsProp);
 
- end;
 
- procedure TTBXStatusBarEditor.ExecuteVerb(Index: Integer);
 
- begin
 
-   if Index = 0 then Edit;
 
- end;
 
- function TTBXStatusBarEditor.GetVerb(Index: Integer): string;
 
- begin
 
-   if Index = 0 then Result := '&Panels Editor...';
 
- end;
 
- function TTBXStatusBarEditor.GetVerbCount: Integer;
 
- begin
 
-   Result := 1;
 
- end;
 
- procedure TTBXStatusBarEditor.GetPanelsProp(const Prop: IProperty);
 
- begin
 
-   if SameText(Prop.GetName, 'Panels') then Prop.Edit;
 
- end;
 
- { TTBXItemsEditor }
 
- procedure TTBXItemsEditor.ExecuteVerb(Index: Integer);
 
- const
 
-   AboutText =
 
-     '%s'#13#10 +
 
-     '©2001–2004 Alex A. Denisov'#13#10 +
 
-     'For conditions of distribution and use, see TBX documentation.'#13#10 +
 
-     #13#10 +
 
-     'Running on'#13#10 +
 
-     '%s'#13#10 +
 
-     '©1998-2004 by Jordan Russell'#13#10 +
 
-     'For conditions of distribution and use, see Toolbar2000 documentation.'#13#10 +
 
-     #13#10 +
 
-     'Visit https://jrsoftware.org/ for the latest versions of Toolbar2000'#13#10 +
 
-     '';
 
- begin
 
-   case Index of
 
-     0: Edit;
 
-     1:
 
-       begin
 
-         MessageDlg(
 
-           Format(AboutText,
 
-           [TBXVersionText, Toolbar2000VersionPropText]),
 
-           mtInformation, [mbOK], 0);
 
-       end;
 
-   end;
 
- end;
 
- { THookObj }
 
- type
 
-   THookObj = class
 
-     procedure HookProc(Sender: TTBItemEditForm);
 
-   end;
 
- var O: THookObj;
 
- procedure THookObj.HookProc(Sender: TTBItemEditForm);
 
- var
 
-   TB: TTBToolbar;
 
-   Item: TTBCustomItem;
 
-   NewItem: TTBItem;
 
-   S: string;
 
-   I: Integer;
 
- begin
 
-   TB := TTBToolbar.Create(Sender);
 
-   TB.Top := Sender.Height;
 
-   TB.Parent := Sender;
 
-   TB.Align := alTop;
 
-   TB.Images := Sender.ToolbarItems.SubMenuImages;
 
-   TB.ShowHint := True;
 
-   for I := 0 to Sender.MoreMenu.Count - 1 do
 
-   begin
 
-     Item := Sender.MoreMenu.Items[I];
 
-     if Item is TTBCustomItem then
 
-     begin
 
-       S := TTBCustomItemClass(Item.Tag).ClassName;
 
-       if StrLComp(PChar(S), 'TTBX', 4) = 0 then
 
-       begin
 
-         NewItem := TTBItem.Create(TB);
 
-         TB.Items.Add(NewItem);
 
-         NewItem.Caption := Item.Caption;
 
-         NewItem.ImageIndex := Item.ImageIndex;
 
-         NewItem.Tag := Item.Tag;
 
-         NewItem.Hint := S;
 
-         NewItem.OnClick := Item.OnClick;
 
-       end;
 
-     end;
 
-   end;
 
- end;
 
- procedure Register;
 
- begin
 
-   RegisterComponents('Toolbar2000', [TTBXDock, TTBXToolbar,
 
-     TTBXPopupMenu, TTBXColorSet, TTBXStatusBar]);
 
-   RegisterNoIcon([TTBXItem, TTBXSubMenuItem, TTBXSeparatorItem,
 
-     TTBXLabelItem, TTBXColorItem,
 
-     TTBXDropDownItem,
 
-     TTBXComboBoxItem, TTBXStringList, TTBXColorPalette]);
 
-   RegisterClasses([TTBXItem, TTBXSubMenuItem, TTBXSeparatorItem,
 
-     TTBXLabelItem, TTBXColorItem,
 
-     TTBXDropDownItem,
 
-     TTBXComboBoxItem, TTBXStringList, TTBXColorPalette]);
 
-   RegisterComponentEditor(TTBXToolbar, TTBXItemsEditor);
 
-   RegisterComponentEditor(TTBXPopupMenu, TTBXItemsEditor);
 
-   RegisterPropertyEditor(TypeInfo(string), TTBXCustomItem, 'Caption', TMLStringProperty);
 
-   RegisterPropertyEditor(TypeInfo(string), TTBXCustomItem, 'Hint', TMLStringProperty);
 
-   RegisterPropertyEditor(TypeInfo(string), TTBXLabelItem, 'Caption', TCaptionProperty);
 
-   RegisterPropertyEditor(TypeInfo(string), TTBToolbar, 'ChevronHint', TMLStringProperty);
 
-   RegisterPropertyEditor(TypeInfo(string), TTBXToolbar, 'ChevronHint', TMLStringProperty);
 
-   RegisterPropertyEditor(TypeInfo(TColor), TPersistent, '', TTBXColorProperty);
 
-   RegisterComponentEditor(TTBXStatusBar, TTBXStatusBarEditor);
 
-   TBRegisterItemClass(TTBXItem, 'New &TBX Item', HInstance);
 
-   TBRegisterItemClass(TTBXSubMenuItem, 'New TBX Submenu Item', HInstance);
 
-   TBRegisterItemClass(TTBXSeparatorItem, 'New TBX Separator Item', HInstance);
 
-   TBRegisterItemClass(TTBXLabelItem, 'New TBX Label Item', HInstance);
 
-   TBRegisterItemClass(TTBXColorItem, 'New TBX Color Item', HInstance);
 
-   TBRegisterItemClass(TTBXDropDownItem, 'New TBX Drop Down Item', HInstance);
 
-   TBRegisterItemClass(TTBXComboBoxItem, 'New TBX Combo Box Item', HInstance);
 
-   TBRegisterItemClass(TTBXStringList, 'New TBX String List', HInstance);
 
-   TBRegisterItemClass(TTBXColorPalette, 'New TBX Color Palette', HInstance);
 
- end;
 
- initialization
 
-   O := THookObj.Create;
 
-   TBUnregisterDsgnEditorHook(O.HookProc);
 
-   TBRegisterDsgnEditorHook(O.HookProc);
 
- finalization
 
-   TBUnregisterDsgnEditorHook(O.HookProc);
 
-   O.Free;
 
- end.
 
 
  |