📄 dxribbonstatusbar.pas
字号:
Result := ADockControl.ColorScheme;
end;
{ TdxDefaultRibbonStatusBarBarControlPainter }
function TdxDefaultRibbonStatusBarBarControlPainter.GetButtonBorderHeight: Integer;
begin
Result := 4;
if IsCompositionEnabled then
Dec(Result, 2);
end;
function TdxDefaultRibbonStatusBarBarControlPainter.GetToolbarContentOffsets(
ABar: TdxBar; ADockingStyle: TdxBarDockingStyle;
AHasSizeGrip: Boolean): TRect;
begin
Result := cxRect(1, 1, 1, 3);
end;
function TdxDefaultRibbonStatusBarBarControlPainter.MarkButtonOffset: Integer;
begin
Result := 0;
end;
function TdxDefaultRibbonStatusBarBarControlPainter.MarkSizeX(ABarControl: TdxBarControl): Integer;
begin
Result := 0;
end;
{ TdxRibbonStatusBarBarControlViewInfo }
function TdxRibbonStatusBarBarControlViewInfo.CanShowButtonGroups: Boolean;
begin
Result := True;
end;
function TdxRibbonStatusBarBarControlViewInfo.CanShowSeparators: Boolean;
begin
Result := True;
end;
{ TdxRibbonStatusBarBarControl }
function TdxRibbonStatusBarBarControl.CanShowPopupMenuOnMouseClick(
AMousePressed: Boolean): Boolean;
begin
Result := (Ribbon <> nil) and inherited CanShowPopupMenuOnMouseClick(AMousePressed) and
((csDesigning in ComponentState) or Bar.AllowQuickCustomizing);
end;
procedure TdxRibbonStatusBarBarControl.DoPaintItem(AControl: TdxBarItemControl;
ACanvas: TcxCanvas; const AItemRect: TRect);
begin
if Ribbon = nil then
begin
AControl.Paint(ACanvas, AItemRect, GetPaintType);
DrawSelectedItem(ACanvas.Handle, AControl, AItemRect);
end
else
inherited DoPaintItem(AControl, ACanvas, AItemRect);
end;
function TdxRibbonStatusBarBarControl.GetDefaultItemGlyph: TBitmap;
begin
Result := nil;
end;
function TdxRibbonStatusBarBarControl.GetItemControlDefaultViewLevel(
AItemControl: TdxBarItemControl): TdxBarItemViewLevel;
begin
Result := IdxBarItemControlViewInfo(AItemControl.ViewInfo).GetViewLevelForButtonGroup;
end;
function TdxRibbonStatusBarBarControl.GetMinHeight(
AStyle: TdxBarDockingStyle): Integer;
begin
if (Ribbon <> nil) and IsValid then
Result := Painter.GetButtonHeight(BarManager.ImageOptions.GlyphSize, TextSize)
else
Result := 18;
end;
function TdxRibbonStatusBarBarControl.GetRibbon: TdxCustomRibbon;
var
ADockControl: TdxRibbonStatusBarDockControl;
begin
ADockControl := TdxRibbonStatusBarDockControl(DockControl);
if (ADockControl = nil) or (ADockControl.StatusBar = nil) then
Result := nil
else
Result := ADockControl.StatusBar.Ribbon;
end;
function TdxRibbonStatusBarBarControl.GetViewInfoClass: TCustomdxBarControlViewInfoClass;
begin
Result := TdxRibbonStatusBarBarControlViewInfo;
end;
procedure TdxRibbonStatusBarBarControl.InitCustomizationPopup(AItemLinks: TdxBarItemLinks);
var
I: Integer;
AItemLink: TdxBarItemLink;
ASubItemButton: TdxRibbonQuickAccessPopupSubItemButton;
begin
while AItemLinks.Count > 0 do
AItemLinks.Items[0].Item.Free;
for I := 0 to ItemLinks.AvailableItemCount - 1 do
begin
AItemLink := ItemLinks.AvailableItems[I];
ASubItemButton := TdxRibbonQuickAccessPopupSubItemButton(AItemLinks.AddItem(TdxRibbonQuickAccessPopupSubItemButton).Item);
ASubItemButton.Tag := Integer(AItemLink);
ASubItemButton.ButtonStyle := bsChecked;
ASubItemButton.Down := AItemLink.Visible;
ASubItemButton.Caption := AItemLink.Caption;
BarDesignController.AddInternalItem(ASubItemButton);
end;
end;
function TdxRibbonStatusBarBarControl.IsValid: Boolean;
begin
Result := HandleAllocated and (BarManager <> nil) and
(BarManager.ComponentState * [csDestroying, csLoading] = []);
end;
function TdxRibbonStatusBarBarControl.MarkExists: Boolean;
begin
Result := False;
end;
procedure TdxRibbonStatusBarBarControl.UpdateDoubleBuffered;
begin
DoubleBuffered := True;
end;
procedure TdxRibbonStatusBarBarControl.CMFontChanged(var Message: TMessage);
begin
inherited;
if (StatusBar <> nil) and StatusBar.IsRibbonValid then
StatusBar.Invalidate;
end;
function TdxRibbonStatusBarBarControl.GetStatusBar: TdxRibbonStatusBar;
var
ADockControl: TdxRibbonStatusBarDockControl;
begin
ADockControl := TdxRibbonStatusBarDockControl(DockControl);
if ADockControl = nil then
Result := nil
else
Result := ADockControl.StatusBar;
end;
{ TdxRibbonStatusBarBarControlDesignHelper }
class function TdxRibbonStatusBarBarControlDesignHelper.GetForbiddenActions: TdxBarCustomizationActions;
begin
Result := inherited GetForbiddenActions - [caChangeViewLevels, caChangeButtonGroup];
end;
{ TdxRibbonStatusBarDockControl }
constructor TdxRibbonStatusBarDockControl.Create(AOwner: TdxStatusBarToolbarPanelStyle);
begin
inherited Create(AOwner.StatusBarControl);
FStatusBar := TdxRibbonStatusBar(AOwner.StatusBarControl);
FPanel := AOwner.Owner;
Parent := FStatusBar;
AllowDocking := False;
Align := dalNone;
ControlStyle := ControlStyle + [csNoDesignVisible];
end;
destructor TdxRibbonStatusBarDockControl.Destroy;
begin
FPainter.Free;
inherited Destroy;
end;
procedure TdxRibbonStatusBarDockControl.CalcLayout;
begin
inherited CalcLayout;
StatusBar.Recalculate;
StatusBar.Invalidate;
end;
procedure TdxRibbonStatusBarDockControl.UpdateDoubleBuffered;
begin
DoubleBuffered := True;
end;
procedure TdxRibbonStatusBarDockControl.FillBackground(DC: HDC; const ADestR,
ASourceR: TRect; ABrush: HBRUSH; AColor: TColor);
var
R: TRect;
begin
R := ClientRect;
R.Bottom := StatusBar.Height;
if ColorScheme = nil then
FillRectByColor(DC, ClientRect, clBtnFace)
else
ColorScheme.DrawStatusBarPanel(DC, cxRectOffset(R, Left, Top), R,
Panel.Bevel <> dxpbRaised);
end;
function TdxRibbonStatusBarDockControl.GetDockedBarControlClass: TdxBarControlClass;
begin
Result := TdxRibbonStatusBarBarControl;
end;
function TdxRibbonStatusBarDockControl.GetOwner: TPersistent;
begin
Result := nil;
end;
function TdxRibbonStatusBarDockControl.GetPainter: TdxBarPainter;
begin
if Ribbon <> nil then
begin
if FPainter = nil then
FPainter := TdxRibbonStatusBarBarControlPainter.Create(Integer(Ribbon));
end
else
FreeAndNil(FPainter);
if FPainter = nil then
Result := StatusBar.DefaultBarPainter
else
Result := FPainter;
end;
procedure TdxRibbonStatusBarDockControl.ShowCustomizePopup;
var
ABarControl: TdxRibbonStatusBarBarControl;
begin
ABarControl := BarControl;
if (ABarControl <> nil) and ABarControl.CanShowPopupMenuOnMouseClick(False) then
ABarControl.ShowPopup(nil);
end;
procedure TdxRibbonStatusBarDockControl.VisibleChanged;
begin
Changed;
end;
function TdxRibbonStatusBarDockControl.GetBarControl: TdxRibbonStatusBarBarControl;
begin
if (RowCount > 0) and (Rows[0].ColCount > 0) then
Result := TdxRibbonStatusBarBarControl(Rows[0].Cols[0].BarControl)
else
Result := nil;
end;
function TdxRibbonStatusBarDockControl.GetColorScheme: TdxCustomRibbonSkin;
begin
if Ribbon <> nil then
Result := Ribbon.ColorScheme
else
Result := nil;
end;
function TdxRibbonStatusBarDockControl.GetRibbon: TdxCustomRibbon;
begin
if StatusBar.IsRibbonValid then
Result := StatusBar.Ribbon
else
Result := nil;
end;
{ TdxStatusBarToolbarPanelStyle }
constructor TdxStatusBarToolbarPanelStyle.Create(AOwner: TdxStatusBarPanel);
begin
inherited Create(AOwner);
FDockControl := TdxRibbonStatusBarDockControl.Create(Self);
end;
destructor TdxStatusBarToolbarPanelStyle.Destroy;
begin
Toolbar := nil;
FreeAndNil(FDockControl);
inherited Destroy;
end;
procedure TdxStatusBarToolbarPanelStyle.Assign(Source: TPersistent);
function IsInheritanceUpdating: Boolean;
begin
Result := (Owner.Collection <> nil) and (csUpdating in StatusBarControl.ComponentState);
end;
begin
BeginUpdate;
try
inherited Assign(Source);
if Source is TdxStatusBarToolbarPanelStyle then
begin
if (TdxStatusBarToolbarPanelStyle(Source).Toolbar <> nil) and IsInheritanceUpdating then
ToolBar := FindBarManager.BarByComponentName(TdxStatusBarToolbarPanelStyle(Source).Toolbar.Name)
else
Toolbar := TdxStatusBarToolbarPanelStyle(Source).Toolbar;
end;
finally
EndUpdate;
end;
end;
function TdxStatusBarToolbarPanelStyle.CanDelete: Boolean;
begin
Result := (Toolbar = nil) or not (csAncestor in Toolbar.ComponentState);
end;
function TdxStatusBarToolbarPanelStyle.CanSizing: Boolean;
begin
Result := not GetPanelFixed;
end;
procedure TdxStatusBarToolbarPanelStyle.DefineProperties(Filer: TFiler);
function NeedWriteToolbarName: Boolean;
var
AAncestorToolbar: TdxBar;
begin
if Filer.Ancestor <> nil then
begin
AAncestorToolbar := TdxStatusBarToolbarPanelStyle(Filer.Ancestor).ToolBar;
Result := (AAncestorToolbar = nil) and (Toolbar <> nil) or
(AAncestorToolbar <> nil) and (ToolBar = nil) or
(AAncestorToolbar <> nil) and (AAncestorToolbar.Name <> Toolbar.Name);
end
else
Result := ToolBar <> nil;
end;
begin
inherited DefineProperties(Filer);
Filer.DefineProperty('ToolbarName', ReadToolbarName, WriteToolbarName, NeedWriteToolbarName);
end;
procedure TdxStatusBarToolbarPanelStyle.DrawContent(ACanvas: TcxCanvas;
R: TRect; APainter: TdxStatusBarPainterClass);
begin
end;
function TdxStatusBarToolbarPanelStyle.GetMinWidth: Integer;
begin
if Owner.Fixed and (Toolbar <> nil) and (Toolbar.Control is TdxRibbonStatusBarBarControl) then
Result := TdxRibbonStatusBarBarControl(Toolbar.Control).GetSize(MaxInt).cx + 2
else
Result := 50;
end;
class function TdxStatusBarToolbarPanelStyle.GetVersion: Integer;
begin
Result := 1;
end;
procedure TdxStatusBarToolbarPanelStyle.Loaded;
begin
inherited Loaded;
UpdateToolbarValue;
end;
procedure TdxStatusBarToolbarPanelStyle.PanelVisibleChanged;
begin
DockControl.Visible := Owner.Visible;
end;
function TdxStatusBarToolbarPanelStyle.FindBarManager: TdxBarManager;
begin
Result := nil;
if (Owner.Collection <> nil) and (StatusBarControl.Owner is TCustomForm) then
Result := GetBarManagerByForm(TCustomForm(StatusBarControl.Owner));
if Result = nil then
raise Exception.Create(cxGetResourceString(@dxSBAR_CANTFINDBARMANAGERFORSTATUSBAR));
end;
procedure TdxStatusBarToolbarPanelStyle.UpdateByRibbon(ARibbon: TdxCustomRibbon);
begin
DockControl.UpdateDock;
DockControl.RepaintBarControls;
end;
function TdxStatusBarToolbarPanelStyle.GetToolbar: TdxBar;
begin
if (FLoadedToolbarName <> '') and (Owner.Collection <> nil) and
IsAncestorComponentDifferencesDetection(StatusBarControl) then
Result := FindBarManager.BarByComponentName(FLoadedToolbarName)
else
Result := FToolbar;
end;
procedure TdxStatusBarToolbarPanelStyle.ReadToolbarName(AReader: TReader);
begin
FLoadedToolbarName := AReader.ReadString;
end;
procedure TdxStatusBarToolbarPanelStyle.SetToolbar(Value: TdxBar);
begin
if FToolBar <> Value then
begin
if (FToolbar <> nil) and not (csDestroying in FToolbar.ComponentState) then
begin
FToolbar.RemoveFreeNotification(StatusBarControl);
RibbonUndockToolBar(FToolbar);
end;
FToolbar := Value;
if FToolbar <> nil then
begin
FToolbar.FreeNotification(StatusBarControl);
DockControl.BarManager := FToolbar.BarManager;
RibbonDockToolBar(FToolbar, DockControl);
end
else
DockControl.BarManager := nil;
if not (csDestroying in StatusBarControl.ComponentState) then
begin
TCustomForm(StatusBarControl.Owner).Realign;
TdxRibbonStatusBar(StatusBarControl).PaintStyleChanged;
StatusBarControl.Invalidate;
end;
end;
end;
procedure TdxStatusBarToolbarPanelStyle.UpdateToolbarValue;
begin
if FLoadedToolbarName <> '' then
begin
ToolBar := FindBarManager.BarByComponentName(FLoadedToolbarName);
FLoadedToolbarName := '';
end;
end;
procedure TdxStatusBarToolbarPanelStyle.WriteToolbarName(AWriter: TWriter);
begin
if ToolBar <> nil then
AWriter.WriteString(ToolBar.Name)
else
AWriter.WriteString('');
end;
{ TdxRibbonStatusBarPainter }
class function TdxRibbonStatusBarPainter.BorderSizes(AStatusBar: TdxCustomStatusBar): TRect;
begin
Result := Rect(1, 1, 1, 0); //!!!todo: check bottom
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -