unit RibbonNotepadDemoMain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ComCtrls, dxBar, StdCtrls, dxBarExtItems, cxControls, ImgList, ActnList, cxLookAndFeels, dxStatusBar, cxGraphics, EBarsUtils, dxRibbonForm, dxRibbon, cxClasses, Menus, dxRibbonStatusBar, cxStyles; type TRibbonDemoMainForm = class(TdxRibbonForm) BarManager: TdxBarManager; dxBarButtonNew: TdxBarLargeButton; dxBarButtonOpen: TdxBarLargeButton; dxBarButtonSave: TdxBarLargeButton; dxBarSubItemSaveAs: TdxBarSubItem; dxBarButtonSaveAsRTF: TdxBarButton; dxBarButtonSaveAsText: TdxBarButton; dxBarButtonPrint: TdxBarLargeButton; dxBarButtonExit: TdxBarLargeButton; dxBarButtonUndo: TdxBarLargeButton; dxBarButtonCut: TdxBarLargeButton; dxBarButtonCopy: TdxBarLargeButton; dxBarButtonPaste: TdxBarLargeButton; dxBarButtonClear: TdxBarLargeButton; dxBarButtonSelectAll: TdxBarLargeButton; dxBarButtonFind: TdxBarLargeButton; dxBarButtonReplace: TdxBarLargeButton; dxBarComboFontSize: TdxBarCombo; dxBarButtonBold: TdxBarLargeButton; dxBarButtonItalic: TdxBarLargeButton; dxBarButtonUnderline: TdxBarLargeButton; dxBarButtonBullets: TdxBarLargeButton; dxBarButtonProtected: TdxBarLargeButton; dxBarButtonAlignLeft: TdxBarLargeButton; dxBarButtonCenter: TdxBarLargeButton; dxBarButtonAlignRight: TdxBarLargeButton; dxBarButtonFont: TdxBarLargeButton; dxBarSeparator: TdxBarSeparator; OpenDialog: TOpenDialog; SaveDialog: TSaveDialog; PrintDialog: TPrintDialog; FontDialog: TFontDialog; dxBarPopupMenu: TdxRibbonPopupMenu; dxBarComboFontColor: TdxBarColorCombo; dxBarGroup1: TdxBarGroup; dxBarButton1: TdxBarLargeButton; dxBarButton2: TdxBarLargeButton; dxBarButton3: TdxBarLargeButton; dxBarButton4: TdxBarLargeButton; dxBarButton5: TdxBarLargeButton; dxBarButton6: TdxBarLargeButton; dxBarButton7: TdxBarLargeButton; dxBarComboFontName: TdxBarFontNameCombo; dxBarLargeButton1: TdxBarLargeButton; dxBarLargeButton2: TdxBarLargeButton; ilStatusBarImages: TImageList; dxStatusBar: TdxRibbonStatusBar; FindDialog: TFindDialog; ReplaceDialog: TReplaceDialog; tabHome: TdxRibbonTab; Ribbon: TdxRibbon; tabAppearance: TdxRibbonTab; BarManagerBar5: TdxBar; BarManagerBar7: TdxBar; ApplicationMenu: TdxBarApplicationMenu; BarManagerBar8: TdxBar; BarManagerBar1: TdxBar; dxBarLargeButtonBlueScheme: TdxBarLargeButton; dxBarLargeButtonBlackScheme: TdxBarLargeButton; dxBarLargeButtonSilverScheme: TdxBarLargeButton; BarManagerBar9: TdxBar; dxBarLargeButton6: TdxBarLargeButton; dxBarLargeButton7: TdxBarLargeButton; BarManagerBar10: TdxBar; dxBarLargeButton8: TdxBarLargeButton; dxBarLargeButton9: TdxBarLargeButton; dxBarLargeButton10: TdxBarLargeButton; BarManagerBar11: TdxBar; BarManagerBar12: TdxBar; Editor: TRichEdit; dxBarScreenTipRepository1: TdxBarScreenTipRepository; cxLargeImages: TcxImageList; cxSmallImages: TcxImageList; BarManagerBar6: TdxBar; BarManagerBar13: TdxBar; btnLineNumber: TdxBarButton; btnColumnNumber: TdxBarButton; btnLocked: TdxBarButton; cxStyleRepository1: TcxStyleRepository; cxStyle1: TcxStyle; stModified: TdxBarStatic; stFontDialog: TdxBarScreenTip; stHelpButton: TdxBarScreenTip; dxBarButtonOptions: TdxBarButton; procedure FormCreate(Sender: TObject); procedure dxBarButtonNewClick(Sender: TObject); procedure dxBarButtonOpenClick(Sender: TObject); procedure dxBarButtonCloseClick(Sender: TObject); procedure dxBarButtonSaveClick(Sender: TObject); procedure dxBarButtonSaveAsRTFClick(Sender: TObject); procedure dxBarButtonSaveAsTextClick(Sender: TObject); procedure dxBarButtonPrintClick(Sender: TObject); procedure dxBarButtonExitClick(Sender: TObject); procedure dxBarButtonUndoClick(Sender: TObject); procedure dxBarButtonCutClick(Sender: TObject); procedure dxBarButtonCopyClick(Sender: TObject); procedure dxBarButtonPasteClick(Sender: TObject); procedure dxBarButtonClearClick(Sender: TObject); procedure dxBarButtonSelectAllClick(Sender: TObject); procedure dxBarButtonFindClick(Sender: TObject); procedure dxBarButtonReplaceClick(Sender: TObject); procedure dxBarComboFontNameChange(Sender: TObject); procedure dxBarComboFontSizeChange(Sender: TObject); procedure dxBarButtonBoldClick(Sender: TObject); procedure dxBarButtonItalicClick(Sender: TObject); procedure dxBarButtonUnderlineClick(Sender: TObject); procedure dxBarComboFontColorChange(Sender: TObject); procedure dxBarButtonBulletsClick(Sender: TObject); procedure dxBarButtonAlignClick(Sender: TObject); procedure dxBarButtonProtectedClick(Sender: TObject); procedure FontClick(Sender: TObject); procedure FindOne(Sender: TObject); procedure ReplaceOne(Sender: TObject); procedure dxBarLargeButtonBlueSchemeClick(Sender: TObject); procedure dxBarLargeButtonBlackSchemeClick(Sender: TObject); procedure dxBarLargeButtonSilverSchemeClick(Sender: TObject); procedure dxBarLargeButton10Click(Sender: TObject); procedure dxBarLargeButton8Click(Sender: TObject); procedure dxBarLargeButton9Click(Sender: TObject); procedure dxBarLargeButton6Click(Sender: TObject); procedure dxBarLargeButton7Click(Sender: TObject); procedure EditorChange(Sender: TObject); procedure EditorSelectionChange(Sender: TObject); procedure EditorMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure RibbonResize(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormActivate(Sender: TObject); procedure ApplicationMenuRecentDocumentsClick(Sender: TObject; AIndex: Integer); procedure btnLockedClick(Sender: TObject); procedure RibbonHelpButtonClick(Sender: TdxCustomRibbon); procedure RibbonHideMinimizedByClick(Sender: TdxCustomRibbon; AWnd: Cardinal; AShift: TShiftState; const APos: TPoint; var AAllowProcessing: Boolean); procedure dxBarButtonOptionsClick(Sender: TObject); private FFileName: string; FUpdating: Boolean; function GetEditorCol: Integer; function GetEditorRow: Integer; procedure MakeNewDocument; procedure SetFileName(Value: string); procedure UpdateActionsImages; public procedure OpenFile(const AFileName: string); function QuerySaveFile: Integer; function SaveFile(ASaveAs: Boolean; APlainText: Boolean = False): Boolean; procedure SetColorScheme(const AName: string); procedure SetModified(Value: Boolean); procedure ShowItems(AShow: Boolean); property EditorCol: Integer read GetEditorCol; property EditorRow: Integer read GetEditorRow; property FileName: string read FFileName write SetFileName; end; var RibbonDemoMainForm: TRibbonDemoMainForm; implementation {$R *.DFM} {$R windowsxp.res} uses RichEdit, RibbonNotepadDemoOptions, RibbonDemoAbout; const sRichEditFoundResultCaption = 'Information'; sRichEditTextNotFound = 'The search text is not found.'; sRichEditReplaceAllResult = 'Replaced %d occurances.'; sDefaultDocName = 'Document1.rtf'; RTFFilter = 'Rich Text Files (*.RTF)|*.RTF'; TXTFilter = 'Plain text (*.TXT)|*.TXT'; function EnumFontsProc(var LogFont: TLogFont; var TextMetric: TTextMetric; FontType: Integer; Data: Pointer): Integer; stdcall; begin TStrings(Data).Add(LogFont.lfFaceName); Result := 1; end; function TRibbonDemoMainForm.GetEditorCol: Integer; begin with Editor do Result := SelStart - SendMessage(Handle, EM_LINEINDEX, EditorRow, 0); end; function TRibbonDemoMainForm.GetEditorRow: Integer; begin with Editor do Result := SendMessage(Handle, EM_LINEFROMCHAR, SelStart, 0); end; procedure TRibbonDemoMainForm.MakeNewDocument; begin Editor.Clear; SetModified(False); FileName := sDefaultDocName; end; procedure TRibbonDemoMainForm.SetFileName(Value: string); var AIndex: Integer; begin Ribbon.DocumentName := ExtractFileName(Value); FFileName := Value; if FileExists(FFileName) then begin AIndex := ApplicationMenu.ExtraPaneItems.IndexOf(FFileName); if AIndex > -1 then ApplicationMenu.ExtraPaneItems.Delete(AIndex); ApplicationMenu.ExtraPaneItems.Insert(0).Text := FFileName; end; end; procedure TRibbonDemoMainForm.FindOne(Sender: TObject); var StartPos, FindLength, FoundAt: Integer; Flags: TSearchTypes; P: TPoint; CaretR, R, IntersectR: TRect; begin with Editor, TFindDialog(Sender) do begin if frDown in Options then begin if SelLength = 0 then StartPos := SelStart else StartPos := SelStart + SelLength; FindLength := Length(Text) - StartPos; end else begin StartPos := SelStart; FindLength := -StartPos; end; Flags := []; if frMatchCase in Options then Include(Flags, stMatchCase); if frWholeWord in Options then Include(Flags, stWholeWord); Screen.Cursor := crHourglass; FoundAt := Editor.FindText(FindText, StartPos, FindLength, Flags); if not (frReplaceAll in Options) then Screen.Cursor := crDefault; if FoundAt > -1 then if frReplaceAll in Options then begin SelStart := FoundAt; SelLength := Length(FindText); end else begin SetFocus; SelStart := FoundAt; SelLength := Length(FindText); GetCaretPos(P); P := ClientToScreen(P); CaretR := Rect(P.X, P.Y, P.X + 2, P.Y + 20); GetWindowRect(Handle, R); if IntersectRect(IntersectR, CaretR, R) then if P.Y < Screen.Height div 2 then Top := P.Y + 40 else Top := P.Y - (R.Bottom - R.Top + 20); end else if not (frReplaceAll in Options) then Application.MessageBox(sRichEditTextNotFound, sRichEditFoundResultCaption, MB_ICONINFORMATION); end; end; procedure TRibbonDemoMainForm.ReplaceOne(Sender: TObject); var ReplacedCount, OldSelStart, PrevSelStart: Integer; S: string; begin with Editor, TReplaceDialog(Sender) do begin ReplacedCount := 0; OldSelStart := SelStart; if frReplaceAll in Options then Screen.Cursor := crHourglass; repeat if (SelLength > 0) and ((SelText = FindText) or (not (frMatchCase in Options) and (AnsiUpperCase(SelText) = AnsiUpperCase(FindText)))) then begin SelText := ReplaceText; Inc(ReplacedCount); end; PrevSelStart := SelStart; FindOne(Sender); until not (frReplaceAll in Options) or (SelStart = PrevSelStart); if frReplaceAll in Options then begin Screen.Cursor := crDefault; if ReplacedCount = 0 then S := sRichEditTextNotFound else begin SelStart := OldSelStart; S := Format(sRichEditReplaceAllResult, [ReplacedCount]); end; Application.MessageBox(PChar(S), sRichEditFoundResultCaption, MB_ICONINFORMATION); end; end; end; procedure TRibbonDemoMainForm.RibbonResize(Sender: TObject); const Space = 8; begin Editor.SetBounds(Space, Ribbon.Height + Space, ClientWidth - Space * 2, ClientHeight - (Ribbon.Height + dxStatusBar.Height + Space * 2)); if Ribbon.QuickAccessToolbar.Position = qtpAboveRibbon then dxBarLargeButton8.Down := True else dxBarLargeButton9.Down := True; end; procedure TRibbonDemoMainForm.EditorChange(Sender: TObject); begin if Editor = nil then Exit; Editor.OnSelectionChange(Editor); SetModified(Editor.Modified); dxBarButtonUndo.Enabled := SendMessage(Editor.Handle, EM_CANUNDO, 0, 0) <> 0; end; procedure TRibbonDemoMainForm.EditorMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbRight then dxBarPopupMenu.PopupFromCursorPos; end; procedure TRibbonDemoMainForm.EditorSelectionChange(Sender: TObject); begin with Editor, SelAttributes do begin FUpdating := True; dxBarComboFontSize.OnChange := nil; dxBarComboFontName.OnChange := nil; dxBarComboFontColor.OnChange := nil; try btnLineNumber.Caption := Format(' Line: %3d ', [1 + EditorRow]); btnColumnNumber.Caption := Format(' Row: %3d ', [1 + EditorCol]); dxBarButtonCopy.Enabled := SelLength > 0; dxBarButtonCut.Enabled := dxBarButtonCopy.Enabled; dxBarButtonPaste.Enabled := SendMessage(Editor.Handle, EM_CANPASTE, 0, 0) <> 0; dxBarButtonClear.Enabled := dxBarButtonCopy.Enabled; dxBarComboFontSize.Text := IntToStr(Size); dxBarComboFontName.Text := Name; dxBarComboFontColor.Color := Color; dxBarButtonBold.Down := fsBold in Style; dxBarButtonItalic.Down := fsItalic in Style; dxBarButtonUnderline.Down := fsUnderline in Style; dxBarButtonBullets.Down := Boolean(Paragraph.Numbering); case Ord(Paragraph.Alignment) of 0: dxBarButtonAlignLeft.Down := True; 1: dxBarButtonAlignRight.Down := True; 2: dxBarButtonCenter.Down := True; end; dxBarButtonProtected.Down := Protected; finally FUpdating := False; dxBarComboFontSize.OnChange := dxBarComboFontSizeChange; dxBarComboFontName.OnChange := dxBarComboFontNameChange; dxBarComboFontColor.OnChange := dxBarComboFontColorChange; end; end; end; procedure TRibbonDemoMainForm.OpenFile(const AFileName: string); begin if Editor.Modified then case QuerySaveFile of ID_YES: if not SaveFile(False) then Exit; ID_CANCEL: Exit; end; OpenDialog.FileName := AFileName; if (AFileName <> '') or OpenDialog.Execute then begin FileName := OpenDialog.FileName; Editor.Lines.LoadFromFile(FileName); SetModified(False); end; end; function TRibbonDemoMainForm.QuerySaveFile: Integer; begin Result := Application.MessageBox( PChar(Format('Do you want to save the changes you made to "%s"?', [Ribbon.DocumentName])), PChar(Application.Title), MB_ICONQUESTION or MB_YESNOCANCEL); end; function TRibbonDemoMainForm.SaveFile(ASaveAs: Boolean; APlainText: Boolean = False): Boolean; begin SaveDialog.FileName := ChangeFileExt(ExtractFileName(FileName), ''); if APlainText then SaveDialog.Filter := TXTFilter else SaveDialog.Filter := RTFFilter; ASaveAs := ASaveAs or (FileName = '') or (FileName = sDefaultDocName); Result := not ASaveAs or SaveDialog.Execute; if Result then begin Editor.PlainText := APlainText; Editor.Lines.SaveToFile(SaveDialog.FileName); if not APlainText then begin SetModified(False); if ASaveAs then FileName := SaveDialog.FileName; end; end; end; procedure TRibbonDemoMainForm.SetColorScheme(const AName: string); begin Ribbon.ColorSchemeName := AName; dxStatusBar.Invalidate; end; procedure TRibbonDemoMainForm.SetModified(Value: Boolean); begin Editor.Modified := Value; if Value then begin stModified.ImageIndex := 2; stModified.Caption := 'Modified'; end else begin stModified.ImageIndex := -1; stModified.Caption := ''; end; dxBarButtonSave.Enabled := Value; end; procedure TRibbonDemoMainForm.ShowItems(AShow: Boolean); begin BarManager.LockUpdate := True; try if not AShow then begin btnLineNumber.Caption := ''; btnColumnNumber.Caption := ''; stModified.Caption := ''; end; BarManager.Groups[0].Enabled := AShow; finally BarManager.LockUpdate := False; end; end; procedure TRibbonDemoMainForm.UpdateActionsImages; begin dxBarButton7.LargeImageIndex := 18; dxBarButton7.ImageIndex := 18; dxBarLargeButton1.LargeImageIndex := 18; dxBarLargeButton1.ImageIndex := 18; dxBarButton1.LargeImageIndex := 19; dxBarButton1.ImageIndex := 19; dxBarButton3.LargeImageIndex := 20; dxBarButton3.ImageIndex := 20; dxBarButton4.LargeImageIndex := 21; dxBarButton4.ImageIndex := 21; dxBarButton5.LargeImageIndex := 22; dxBarButton5.ImageIndex := 22; end; procedure TRibbonDemoMainForm.FormActivate(Sender: TObject); begin Editor.OnChange(Editor); end; procedure TRibbonDemoMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if Editor.Modified then case QuerySaveFile of ID_YES: CanClose := SaveFile(False); ID_NO: CanClose := True; ID_CANCEL: CanClose := False; end; end; procedure TRibbonDemoMainForm.FormCreate(Sender: TObject); begin dmCommonData.AboutFormClass := TRibbonDemoAboutForm; if FileExists(sDefaultDocName) then OpenFile(ExpandFileName(sDefaultDocName)) else FileName := sDefaultDocName; OpenDialog.Filter := RTFFilter; OpenDialog.InitialDir := ExtractFilePath(ParamStr(0)); SaveDialog.InitialDir := OpenDialog.InitialDir; ShowItems(True); UpdateActionsImages; end; procedure TRibbonDemoMainForm.dxBarButtonNewClick(Sender: TObject); begin if Editor.Modified then case QuerySaveFile of ID_YES: if SaveFile(False) then MakeNewDocument; ID_NO: MakeNewDocument; end else MakeNewDocument; end; procedure TRibbonDemoMainForm.dxBarButtonOpenClick(Sender: TObject); begin OpenFile(''); end; procedure TRibbonDemoMainForm.dxBarButtonCloseClick(Sender: TObject); begin Close; end; procedure TRibbonDemoMainForm.dxBarButtonSaveClick(Sender: TObject); begin SaveFile(False); end; procedure TRibbonDemoMainForm.dxBarButtonSaveAsRTFClick(Sender: TObject); begin SaveFile(True); end; procedure TRibbonDemoMainForm.dxBarButtonSaveAsTextClick(Sender: TObject); begin SaveFile(True, True); end; procedure TRibbonDemoMainForm.dxBarButtonPrintClick(Sender: TObject); begin if PrintDialog.Execute then Editor.Print(FileName); end; procedure TRibbonDemoMainForm.dxBarButtonExitClick(Sender: TObject); begin Close; end; procedure TRibbonDemoMainForm.dxBarButtonUndoClick(Sender: TObject); begin SendMessage(Editor.Handle, EM_UNDO, 0, 0); end; procedure TRibbonDemoMainForm.dxBarButtonCutClick(Sender: TObject); begin Editor.CutToClipboard; end; procedure TRibbonDemoMainForm.dxBarButtonCopyClick(Sender: TObject); begin Editor.CopyToClipboard; end; procedure TRibbonDemoMainForm.dxBarButtonPasteClick(Sender: TObject); begin Editor.PasteFromClipboard; end; procedure TRibbonDemoMainForm.dxBarButtonClearClick(Sender: TObject); begin Editor.ClearSelection; end; procedure TRibbonDemoMainForm.dxBarButtonSelectAllClick(Sender: TObject); begin Editor.SelectAll; end; procedure TRibbonDemoMainForm.dxBarButtonFindClick(Sender: TObject); begin Editor.SelLength := 0; FindDialog.Execute; end; procedure TRibbonDemoMainForm.dxBarButtonReplaceClick(Sender: TObject); begin Editor.SelLength := 0; ReplaceDialog.Execute; end; procedure TRibbonDemoMainForm.dxBarComboFontNameChange(Sender: TObject); begin if not FUpdating then Editor.SelAttributes.Name := dxBarComboFontName.Text; end; procedure TRibbonDemoMainForm.dxBarComboFontSizeChange(Sender: TObject); begin if not FUpdating then Editor.SelAttributes.Size := StrToInt(dxBarComboFontSize.Text); end; procedure TRibbonDemoMainForm.dxBarButtonBoldClick(Sender: TObject); begin with Editor.SelAttributes do if dxBarButtonBold.Down then Style := Style + [fsBold] else Style := Style - [fsBold]; end; procedure TRibbonDemoMainForm.dxBarButtonItalicClick(Sender: TObject); begin with Editor.SelAttributes do if dxBarButtonItalic.Down then Style := Style + [fsItalic] else Style := Style - [fsItalic]; end; procedure TRibbonDemoMainForm.dxBarButtonUnderlineClick(Sender: TObject); begin with Editor.SelAttributes do if dxBarButtonUnderline.Down then Style := Style + [fsUnderline] else Style := Style - [fsUnderline]; end; procedure TRibbonDemoMainForm.dxBarComboFontColorChange(Sender: TObject); begin Editor.SelAttributes.Color := dxBarComboFontColor.Color; end; procedure TRibbonDemoMainForm.dxBarButtonBulletsClick(Sender: TObject); begin Editor.Paragraph.Numbering := TNumberingStyle(dxBarButtonBullets.Down); end; procedure TRibbonDemoMainForm.btnLockedClick(Sender: TObject); var AHint: string; begin Editor.ReadOnly := TdxBarButton(Sender).Down; if Editor.ReadOnly then begin AHint := 'Editing protection: Read only. Click for editing.'; cxStyle1.TextColor := clMaroon; end else begin AHint := 'Editing protection: Writable. Click for read-only mode.'; cxStyle1.TextColor := clGray; end; TdxBarButton(Sender).Hint := AHint; EditorSelectionChange(nil); end; procedure TRibbonDemoMainForm.dxBarButtonAlignClick(Sender: TObject); begin if TdxBarLargeButton(Sender).Down then Editor.Paragraph.Alignment := TAlignment(TdxBarLargeButton(Sender).Tag) else Editor.Paragraph.Alignment := taLeftJustify; end; procedure TRibbonDemoMainForm.dxBarButtonProtectedClick(Sender: TObject); begin with Editor.SelAttributes do Protected := not Protected; end; procedure TRibbonDemoMainForm.FontClick(Sender: TObject); begin FontDialog.Font.Assign(Editor.SelAttributes); if FontDialog.Execute then Editor.SelAttributes.Assign(FontDialog.Font); end; procedure TRibbonDemoMainForm.dxBarLargeButton10Click(Sender: TObject); begin with Ribbon.QuickAccessToolbar do begin Visible := not Visible; dxBarLargeButton8.Enabled := Visible; dxBarLargeButton9.Enabled := Visible; end; end; procedure TRibbonDemoMainForm.dxBarLargeButtonBlueSchemeClick(Sender: TObject); begin SetColorScheme('Blue'); end; procedure TRibbonDemoMainForm.dxBarLargeButtonBlackSchemeClick(Sender: TObject); begin SetColorScheme('Black'); end; procedure TRibbonDemoMainForm.dxBarLargeButtonSilverSchemeClick(Sender: TObject); begin SetColorScheme('Silver'); end; procedure TRibbonDemoMainForm.dxBarLargeButton6Click(Sender: TObject); begin with Ribbon do begin SupportNonClientDrawing := not SupportNonClientDrawing; dxBarLargeButton7.Enabled := SupportNonClientDrawing; end; end; procedure TRibbonDemoMainForm.dxBarLargeButton7Click(Sender: TObject); begin Ribbon.ApplicationButton.Visible := not Ribbon.ApplicationButton.Visible; end; procedure TRibbonDemoMainForm.dxBarLargeButton8Click(Sender: TObject); begin Ribbon.QuickAccessToolbar.Position := qtpAboveRibbon; end; procedure TRibbonDemoMainForm.dxBarLargeButton9Click(Sender: TObject); begin Ribbon.QuickAccessToolbar.Position := qtpBelowRibbon; end; procedure TRibbonDemoMainForm.ApplicationMenuRecentDocumentsClick( Sender: TObject; AIndex: Integer); begin OpenFile(ApplicationMenu.ExtraPaneItems[AIndex].Text); end; procedure TRibbonDemoMainForm.RibbonHelpButtonClick( Sender: TdxCustomRibbon); begin ShowMessage('Clicked!'); end; procedure TRibbonDemoMainForm.RibbonHideMinimizedByClick( Sender: TdxCustomRibbon; AWnd: Cardinal; AShift: TShiftState; const APos: TPoint; var AAllowProcessing: Boolean); begin AAllowProcessing := AWnd <> Editor.Handle; end; procedure TRibbonDemoMainForm.dxBarButtonOptionsClick(Sender: TObject); procedure UpdateColorScheme(AColorSchemeName: string); begin dxBarLargeButtonBlueScheme.Down := AColorSchemeName = 'Blue'; dxBarLargeButtonBlackScheme.Down := AColorSchemeName = 'Black'; dxBarLargeButtonSilverScheme.Down := AColorSchemeName = 'Silver'; SetColorScheme(AColorSchemeName); end; var AColorSchemeName: string; AScreenTipOptions: TScreenTipOptions; begin AColorSchemeName := Ribbon.ColorSchemeName; AScreenTipOptions.ShowScreenTips := BarManager.ShowHint; AScreenTipOptions.ShowDescripitons := dxBarScreenTipRepository1.ShowDescription; if RibbonDemoOptionsForm.GetOptions(AColorSchemeName, AScreenTipOptions) then begin UpdateColorScheme(AColorSchemeName); BarManager.ShowHint := AScreenTipOptions.ShowScreenTips; dxBarScreenTipRepository1.ShowDescription := AScreenTipOptions.ShowDescripitons; end; end; end.