unit EBars5Main; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, dxBar, dxBarExtItems, ComCtrls, ExtCtrls, StdCtrls, Buttons, ImgList, ActnList, EBarsUtils; type TdxItemsDisabling = (idCyclic, idAll, idNone); TEBars5MainForm = class(TForm) BarManager: TdxBarManager; dxBarSubItemFile: TdxBarSubItem; dxBarSubItemHelp: TdxBarSubItem; dxBarStaticEditor: TdxBarStatic; dxBarStaticStatus: TdxBarStatic; dxBarDockControl1: TdxBarDockControl; dxBarControlContainerItem: TdxBarControlContainerItem; ilComponents: TImageList; dxBarSubItemProducts: TdxBarSubItem; dxBarSubItemPages: TdxBarSubItem; dxBarSubItemView: TdxBarSubItem; Editor: TRichEdit; pcProducts: TPageControl; dxBarButtonExit: TdxBarLargeButton; dxBarButtonNew: TdxBarLargeButton; dxBarButtonOpen: TdxBarLargeButton; dxBarButtonSave: TdxBarLargeButton; dxBarButtonSaveAs: TdxBarLargeButton; dxBarButtonPrint: TdxBarLargeButton; dxBarProgressItem: TdxBarProgressItem; Timer1: TTimer; dxBarEdit: TdxBarEdit; iBars5: TImage; dxBLBDBGridLayoutList: TdxBarLargeButton; dxBLBTreeList: TdxBarLargeButton; dxBLBDBTreeList: TdxBarLargeButton; dxBLBCalculator: TdxBarLargeButton; dxBLBCalcDisplay: TdxBarLargeButton; dxBLBSpinImage: TdxBarLargeButton; dxBLBBarDockControl: TdxBarLargeButton; dxBLBBarConverter: TdxBarLargeButton; dxBLBBarManager: TdxBarLargeButton; dxBLBBarPopupMenu: TdxBarLargeButton; dxBLBBarDBNavigator: TdxBarLargeButton; dxBLBSideBarStore: TdxBarLargeButton; dxBLBSideBar: TdxBarLargeButton; dxBLBSideBarPopupMenu: TdxBarLargeButton; dxBLBImageListBox: TdxBarLargeButton; dxBLBImageComboBox: TdxBarLargeButton; dxBLBInspector: TdxBarLargeButton; dxBLBDBInspect: TdxBarLargeButton; dxBLBMasterView: TdxBarLargeButton; dxBLBEdit: TdxBarLargeButton; dxBLBMaskEdit: TdxBarLargeButton; dxBLBMemo: TdxBarLargeButton; dxBLBDateEdit: TdxBarLargeButton; dxBLBButtonEdit: TdxBarLargeButton; dxBLBCheckEdit: TdxBarLargeButton; dxBLBImageEdit: TdxBarLargeButton; dxBLBSpinEdit: TdxBarLargeButton; dxBLBPickEdit: TdxBarLargeButton; dxBLBCalcEdit: TdxBarLargeButton; dxBLBHyperLinkEdit: TdxBarLargeButton; dxBLBTimeEdit: TdxBarLargeButton; dxBLBCurrencyEdit: TdxBarLargeButton; dxBLBGraphicEdit: TdxBarLargeButton; dxBLBBlobEdit: TdxBarLargeButton; dxBLBMRUEdit: TdxBarLargeButton; dxBLBPopupEdit: TdxBarLargeButton; dxBLBDBEdit: TdxBarLargeButton; dxBLBDBMaskEdit: TdxBarLargeButton; dxBLBDBMemo: TdxBarLargeButton; dxBLBDBDateEdit: TdxBarLargeButton; dxBLBDBButtonEdit: TdxBarLargeButton; dxBLBDBCheckEdit: TdxBarLargeButton; dxBLBDBImageEdit: TdxBarLargeButton; dxBLBDBSpinEdit: TdxBarLargeButton; dxBLBDBPickEdit: TdxBarLargeButton; dxBLBDBCalcEdit: TdxBarLargeButton; dxBLBDBHyperLinkEdit: TdxBarLargeButton; dxBLBDBTimeEdit: TdxBarLargeButton; dxBLBDBCurrencyEdit: TdxBarLargeButton; dxBLBDBGraphicEdit: TdxBarLargeButton; dxBLBDBBlobEdit: TdxBarLargeButton; dxBLBDBMRUEdit: TdxBarLargeButton; dxBLBDBPopupEdit: TdxBarLargeButton; dxBLBDBLookupEdit: TdxBarLargeButton; dxBLBDBExtLookupEdit: TdxBarLargeButton; dxBLBEditStyleController: TdxBarLargeButton; dxBLBCheckEditStyleController: TdxBarLargeButton; dxBLBComponentPrinter: TdxBarLargeButton; dxBLBTreeView: TdxBarLargeButton; dxBLBDBTreeView: TdxBarLargeButton; dxBLBTreeViewEdit: TdxBarLargeButton; dxBLBDBTreeViewEdit: TdxBarLargeButton; dxBLBLookupTreeViewEdit: TdxBarLargeButton; dxBLBDBLookupTreeViewEdit: TdxBarLargeButton; dxBLBDBTreePrintData: TdxBarLargeButton; dxBLBOrgChart: TdxBarLargeButton; dxBLBDBOrgChart: TdxBarLargeButton; dxBLBFlowChart: TdxBarLargeButton; dxBLBStatus: TdxBarLargeButton; dxBLIPages: TdxBarListItem; Timer2: TTimer; dxBarListItem1: TdxBarListItem; dxBarListItem2: TdxBarListItem; dxBarListItem3: TdxBarListItem; dxBarListItem4: TdxBarListItem; dxBarListItem5: TdxBarListItem; dxBarInPlaceSubItem1: TdxBarInPlaceSubItem; dxBarInPlaceSubItem2: TdxBarInPlaceSubItem; dxBarInPlaceSubItem3: TdxBarInPlaceSubItem; dxBarInPlaceSubItem4: TdxBarInPlaceSubItem; dxBarInPlaceSubItem5: TdxBarInPlaceSubItem; dxBarInPlaceSubItem6: TdxBarInPlaceSubItem; dxBarInPlaceSubItem9: TdxBarInPlaceSubItem; dxBarInPlaceSubItem10: TdxBarInPlaceSubItem; dxBarInPlaceSubItem11: TdxBarInPlaceSubItem; dxBarInPlaceSubItem7: TdxBarInPlaceSubItem; dxBarInPlaceSubItem8: TdxBarInPlaceSubItem; OpenDialog: TOpenDialog; SaveDialog: TSaveDialog; PrintDialog: TPrintDialog; dxBLBDBGrid: TdxBarLargeButton; dxBarButton1: TdxBarLargeButton; dxBarButton6: TdxBarLargeButton; dxBarButton2: TdxBarLargeButton; dxBarButton3: TdxBarLargeButton; dxBarButton5: TdxBarLargeButton; dxBarButton7: TdxBarLargeButton; dxBarButton8: TdxBarLargeButton; BarSubItemHelp: TdxBarSubItem; ilHotImages: TImageList; ilDisabledImages: TImageList; Panel1: TPanel; BarManagerStyle: TRadioGroup; gbImages: TGroupBox; cbHotImages: TCheckBox; cbDisabledImages: TCheckBox; CheckBox4: TCheckBox; Timer3: TTimer; rgItemsDisabling: TRadioGroup; cbShowCaptions: TCheckBox; Panel2: TPanel; dxBarStatic1: TdxBarStatic; dxBarStatic2: TdxBarStatic; dxBarStatic3: TdxBarStatic; dxBarLargeButton1: TdxBarLargeButton; dxBarLargeButton2: TdxBarLargeButton; procedure dxBarSubItemFilePaintBar(Sender: TObject; Canvas: TCanvas; const R: TRect); procedure FormCreate(Sender: TObject); procedure pcProductsChange(Sender: TObject); procedure dxBarButtonExitClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure EditorSelectionChange(Sender: TObject); procedure dxBLBDBGridClick(Sender: TObject); procedure Timer2Timer(Sender: TObject); procedure dxBLBStatusClick(Sender: TObject); procedure dxBLIPagesClick(Sender: TObject); procedure dxBarSubItemProductsDetaching(Sender: TObject); procedure dxBarButtonNewClick(Sender: TObject); procedure dxBarButtonPrintClick(Sender: TObject); procedure dxBarButtonOpenClick(Sender: TObject); procedure dxBarButtonSaveClick(Sender: TObject); procedure dxBarButtonSaveAsClick(Sender: TObject); procedure BarManagerStyleClick(Sender: TObject); procedure actRateDemoExecute(Sender: TObject); procedure actAboutExecute(Sender: TObject); procedure FormResize(Sender: TObject); procedure cbHotImagesClick(Sender: TObject); procedure cbDisabledImagesClick(Sender: TObject); procedure CheckBox4Click(Sender: TObject); procedure Timer3Timer(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure rgItemsDisablingClick(Sender: TObject); procedure cbShowCaptionsClick(Sender: TObject); private Delta: Integer; DetachingBar: TdxBar; FFileName: string; FPageIndex, FDisabledItemIndex: Integer; FItemList: TList; FItemsDisabling: TdxItemsDisabling; procedure CMSysColorChange(var Message: TMessage); message CM_SYSCOLORCHANGE; procedure SaveFile(ASaveAs: Boolean); end; TdxBarManagerWrapper = class(TdxBarManager); var EBars5MainForm: TEBars5MainForm; StatusImIndex: Integer; implementation uses ShellAPI, EBars5About, EBarsDemoRating; {$R *.DFM} {$R windowsxp.res} procedure TEBars5MainForm.dxBarSubItemFilePaintBar(Sender: TObject; Canvas: TCanvas; const R: TRect); var SR, BR: TRect; begin DrawVerticalGradient(Canvas, R, 0, 0, 0, 0, 0, 255); SR := R; with iBars5.Picture.Bitmap do begin TransparentColor := clBlack; BR := Rect(0, 0, Width, Height); end; with SR do begin Left := (Left + Right - BR.Right) div 2; Right := Left + BR.Right; Top := Bottom - BR.Bottom; end; if SR.Top > 0 then with Canvas do begin Brush.Style := bsClear; BrushCopy(SR, iBars5.Picture.Bitmap, BR, clBlack); Brush.Style := bsSolid; end; end; procedure TEBars5MainForm.FormCreate(Sender: TObject); procedure FillPageList; var ItemList: TList; I: Integer; begin dxBLIPages.Items.Clear; ItemList := TList.Create; BarManager.GetItemsByCategory(BarManager.Categories.IndexOf('Pages'), ItemList); for I := 0 to ItemList.Count - 1 do with TdxBarListItem(ItemList.Items[I]) do begin dxBLIPages.Items.AddStrings(Items); dxBLIPages.Items.Add('-'); end; ItemList.Free; BarManagerStyleClick(nil); end; procedure FillPageControl; function AddPage(ACaption: string): TTabSheet; begin Result := TTabSheet.Create(pcProducts); with Result do begin Parent := pcProducts; PageControl := pcProducts; Caption := ACaption; Brush.Color := TdxBarmanagerWrapper(BarManager).FlatToolbarsColor; end; end; function CreateDockControl(APage: TTabSheet): TdxBarDockControl; begin Result := TdxBarDockControl.Create(APage); with Result do begin Parent := APage; BarManager := Self.BarManager; Align := dalTop; AllowDocking := False; end; end; function CreateToolBar(ADockControl: TdxBarDockControl): TdxBar; begin Result := BarManager.Bars.Add; with Result do begin Caption := TTabSheet(ADockControl.Parent).Caption + ' Components'; DockControl := ADockControl; Visible := True; Hidden := True; WholeRow := True; NotDocking := [dsNone..dsBottom]; BorderStyle := bbsNone; end; end; var I: Integer; Page: TTabSheet; DockCtrl: TdxBarDockControl; ToolBar: TdxBar; begin BarManager.GetItemsByCategory(BarManager.Categories.IndexOf('Products'), FItemList); for I := 0 to FItemList.Count - 1 do begin Page := AddPage(TdxBarItem(FItemList.Items[I]).Caption); DockCtrl := CreateDockControl(Page); ToolBar := CreateToolBar(DockCtrl); ToolBar.LockUpdate := True; ToolBar.ItemLinks.Assign(TdxBarInPlaceSubItem(FItemList.Items[I]).ItemLinks); ToolBar.LockUpdate := False; end; end; var Path: string; begin FItemsDisabling := idCyclic; FItemList := TList.Create; FillPageList; FillPageControl; pcProducts.Brush.Color := TdxBarManagerWrapper(BarManager).FlatToolbarsColor; Path := ExtractFileDir(Application.ExeName); try FFileName := Path +'\What''s New.rtf'; Editor.Lines.LoadFromFile(FFileName); dxBarStaticStatus.Caption := 'Loaded'; finally end; Timer1.Enabled := True; Timer2.Enabled := True; StatusImIndex := -1; DetachingBar := nil; pcProductsChange(pcProducts); dmCommonData.AboutFormClass := TEBars5AboutForm; end; procedure TEBars5MainForm.FormDestroy(Sender: TObject); begin FItemList.Free; end; procedure TEBars5MainForm.pcProductsChange(Sender: TObject); var I: Integer; CurPage: string; AEnabled: Boolean; begin FPageIndex := TPageControl(Sender).ActivePage.PageIndex; FDisabledItemIndex := 0; CurPage := TPageControl(Sender).ActivePage.Caption; dxBLIPages.ItemIndex := dxBLIPages.Items.IndexOf(CurPage); with BarManager.Bars[3].ItemLinks do for I := 0 to Count - 1 do with TdxBarListItem(Items[I].Item) do ItemIndex := Items.IndexOf(CurPage); if not (FItemsDisabling = idCyclic) then begin AEnabled := FItemsDisabling = idNone; for i:=0 to TdxBarInPlaceSubItem(FItemList.Items[FPageIndex]).ItemLinks.Count - 1 do TdxBarLargeButton(TdxBarInPlaceSubItem(FItemList.Items[FPageIndex]).ItemLinks[i].Item).Enabled := AEnabled; end; end; procedure TEBars5MainForm.Timer3Timer(Sender: TObject); var AItemToEnable: Integer; begin if FDisabledItemindex = 0 then AItemToEnable := TdxBarInPlaceSubItem(FItemList.Items[FPageIndex]).ItemLinks.Count - 1 else AItemToEnable := FDisabledItemindex - 1; TdxBarLargeButton(TdxBarInPlaceSubItem(FItemList.Items[FPageIndex]).ItemLinks[AItemToEnable].Item).Enabled := True; TdxBarLargeButton(TdxBarInPlaceSubItem(FItemList.Items[FPageIndex]).ItemLinks[FDisabledItemindex].Item).Enabled := False; if FDisabledItemindex + 1 > (TdxBarInPlaceSubItem(FItemList.Items[FPageIndex]).ItemLinks.Count - 1) then FDisabledItemindex := 0 else Inc(FDisabledItemindex); end; procedure TEBars5MainForm.dxBarButtonExitClick(Sender: TObject); begin Close; end; procedure TEBars5MainForm.Timer1Timer(Sender: TObject); begin if dxBarProgressItem.Position = 255 then Delta := -1; if dxBarProgressItem.Position = 0 then Delta := 1; dxBarProgressItem.StepBy(Delta); BarManager.Bars[4].AlphaBlendValue := dxBarProgressItem.Position; end; procedure TEBars5MainForm.EditorSelectionChange(Sender: TObject); var EditorRow, EditorCol: Integer; begin EditorRow := SendMessage(Editor.Handle, EM_LINEFROMCHAR, Editor.SelStart, 0); EditorCol := Editor.Selstart - SendMessage(Editor.Handle, EM_LINEINDEX, EditorRow, 0); dxBarStaticEditor.Caption := Format('Line: %3d Col: %3d', [1 + EditorRow, 1 + EditorCol]); end; procedure TEBars5MainForm.CMSysColorChange(var Message: TMessage); var ToolbarsColor: TColor; I: Integer; begin inherited; ToolbarsColor := TdxBarmanagerWrapper(BarManager).FlatToolbarsColor; pcProducts.Brush.Color := ToolbarsColor; if pcProducts.HandleAllocated then SendMessage(pcProducts.Handle, WM_SYSCOLORCHANGE, 0, 0); for I := 0 to pcProducts.PageCount - 1 do pcProducts.Pages[I].Brush.Color := ToolbarsColor; if pcProducts.ActivePage.HandleAllocated then SendMessage(pcProducts.ActivePage.Handle, WM_SYSCOLORCHANGE, 0, 0); end; procedure TEBars5MainForm.dxBLBDBGridClick(Sender: TObject); begin StatusImIndex := TdxBarLargeButton(Sender).LargeImageIndex; dxBLBStatus.LargeImageIndex := StatusImIndex; dxBLBStatus.Caption := TdxBarLargeButton(Sender).Caption; end; procedure TEBars5MainForm.Timer2Timer(Sender: TObject); begin with dxBLBStatus do if LargeImageIndex = -1 then LargeImageIndex := StatusImIndex else LargeImageIndex := -1; end; procedure TEBars5MainForm.dxBLBStatusClick(Sender: TObject); begin if dxBLBStatus.Caption <> 'Not Selected' then MessageBox(Handle,PChar('You have selected the ' + dxBLBStatus.Caption + ' !'), 'Status bar button',MB_OK or MB_ICONINFORMATION); end; procedure TEBars5MainForm.dxBLIPagesClick(Sender: TObject); function FindPageByCaption(ACaption: string): TTabSheet; var I: Integer; begin Result := nil; with pcProducts do for I := 0 to PageCount - 1 do if Pages[I].Caption = ACaption then begin Result := Pages[I]; break; end; end; begin with TdxBarListItem(Sender) do pcProducts.ActivePage := FindPageByCaption(Items[ItemIndex]); pcProductsChange(pcProducts); end; procedure TEBars5MainForm.dxBarSubItemProductsDetaching(Sender: TObject); var I: Integer; begin if DetachingBar = nil then begin DetachingBar := BarManager.Bars.Add; with DetachingBar do begin Caption := 'Products'; AllowCustomizing := False; Hidden := True; MultiLine := True; dxBarSubItemProducts.DetachingBar := Index; for I := 0 to dxBarSubItemProducts.ItemLinks.Count - 1 do if dxBarSubItemProducts.ItemLinks.Items[I].Item.ClassName = 'TdxBarInPlaceSubItem' then ItemLinks.Add.Assign(dxBarSubItemProducts.ItemLinks.Items[I]); end; end; end; procedure TEBars5MainForm.dxBarButtonNewClick(Sender: TObject); begin Editor.Clear; dxBarStaticStatus.Caption := ''; FFileName := ''; end; procedure TEBars5MainForm.dxBarButtonPrintClick(Sender: TObject); begin if PrintDialog.Execute then Editor.Print(FFileName); end; procedure TEBars5MainForm.dxBarButtonOpenClick(Sender: TObject); begin OpenDialog.FileName := ''; if OpenDialog.Execute then begin FFileName := OpenDialog.FileName; Editor.PlainText := (OpenDialog.FilterIndex = 2); Editor.Lines.LoadFromFile(FFileName); dxBarStaticStatus.Caption := 'Loaded'; end; end; procedure TEBars5MainForm.SaveFile(ASaveAs: Boolean); begin if ASaveAs or (FFileName = '') then begin SaveDialog.FileName := FFileName; if not SaveDialog.Execute then Exit; Editor.PlainText := (SaveDialog.FilterIndex = 2); FFileName := SaveDialog.FileName; end; Editor.Lines.SaveToFile(FFileName); end; procedure TEBars5MainForm.dxBarButtonSaveClick(Sender: TObject); begin SaveFile(False); end; procedure TEBars5MainForm.dxBarButtonSaveAsClick(Sender: TObject); begin SaveFile(True); end; procedure TEBars5MainForm.BarManagerStyleClick(Sender: TObject); begin BarManager.Style := TdxBarManagerStyle(BarManagerStyle.ItemIndex); end; procedure TEBars5MainForm.actRateDemoExecute(Sender: TObject); begin with TEBarsDemoRatingForm.Create(Self) do try ShowModal; finally Free; end; end; procedure TEBars5MainForm.actAboutExecute(Sender: TObject); begin with TEBars5AboutForm.Create(nil) do try ShowModal; finally Free; end; end; procedure TEBars5MainForm.FormResize(Sender: TObject); begin Editor.Invalidate; end; procedure TEBars5MainForm.cbHotImagesClick(Sender: TObject); begin if TCheckBox(Sender).Checked then BarManager.HotImages := ilHotImages else BarManager.HotImages := nil; end; procedure TEBars5MainForm.cbDisabledImagesClick(Sender: TObject); begin if TCheckBox(Sender).Checked then BarManager.DisabledImages := ilDisabledImages else BarManager.DisabledImages := nil; end; procedure TEBars5MainForm.CheckBox4Click(Sender: TObject); begin if TCheckBox(Sender).Checked then BarManager.LargeImages := ilComponents else BarManager.LargeImages := nil; end; procedure TEBars5MainForm.rgItemsDisablingClick(Sender: TObject); begin case TRadioGroup(Sender).ItemIndex of 0: begin FItemsDisabling := idCyclic; Timer3.Enabled := True; end; 1: begin FItemsDisabling := idAll; Timer3.Enabled := False; end; 2: begin FItemsDisabling := idNone; Timer3.Enabled := False; end; end; pcProductsChange(pcProducts); end; procedure TEBars5MainForm.cbShowCaptionsClick(Sender: TObject); var i: Integer; AChecked: Boolean; begin BarManager.LockUpdate := True; try AChecked := TCheckBox(Sender).Checked; for i:=0 to ComponentCount - 1 do if Components[i] is TdxBarLargeButton then TdxBarLargeButton(Components[i]).ShowCaption := AChecked; if Achecked then pcProducts.Height := 70 else pcProducts.Height := 58; finally BarManager.LockUpdate := False; end; end; end.