📄 dxstatusbar.pas
字号:
else
Result := 50;
end;
function TdxStatusBarKeyboardStatePanelStyle.InternalBevel: Boolean;
begin
Result := not FullRect;
end;
function TdxStatusBarKeyboardStatePanelStyle.GetCapsLockAppearance: TdxStatusBarKeyStateAppearance;
begin
Result := FKeyInfos[0];
end;
function TdxStatusBarKeyboardStatePanelStyle.GetInsertAppearance: TdxStatusBarKeyStateAppearance;
begin
Result := FKeyInfos[3];
end;
function TdxStatusBarKeyboardStatePanelStyle.GetNumLockAppearance: TdxStatusBarKeyStateAppearance;
begin
Result := FKeyInfos[1];
end;
function TdxStatusBarKeyboardStatePanelStyle.GetScrollLockAppearance: TdxStatusBarKeyStateAppearance;
begin
Result := FKeyInfos[2];
end;
procedure TdxStatusBarKeyboardStatePanelStyle.NamesChangeHandler(Sender: TObject);
begin
Owner.Changed(False);
end;
procedure TdxStatusBarKeyboardStatePanelStyle.SetCapsLockAppearance(Value: TdxStatusBarKeyStateAppearance);
begin
FKeyInfos[0].Assign(Value);
end;
procedure TdxStatusBarKeyboardStatePanelStyle.SetFullRect(Value: Boolean);
begin
if FFullRect <> Value then
begin
FFullRect := Value;
Owner.Changed(True);
end;
end;
procedure TdxStatusBarKeyboardStatePanelStyle.SetInsertAppearance(Value: TdxStatusBarKeyStateAppearance);
begin
FKeyInfos[3].Assign(Value);
end;
procedure TdxStatusBarKeyboardStatePanelStyle.SetKeyboardStates(Value: TdxStatusBarKeyboardStates);
begin
if FKeyboardStates <> Value then
begin
FKeyboardStates := Value;
Owner.Changed(False);
end;
end;
procedure TdxStatusBarKeyboardStatePanelStyle.SetNumLockAppearance(Value: TdxStatusBarKeyStateAppearance);
begin
FKeyInfos[1].Assign(Value);
end;
procedure TdxStatusBarKeyboardStatePanelStyle.SetScrollLockAppearance(Value: TdxStatusBarKeyStateAppearance);
begin
FKeyInfos[2].Assign(Value);
end;
{ TdxStatusBarContainerControl }
constructor TdxStatusBarContainerControl.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := ControlStyle + [csAcceptsControls, csNoDesignVisible];
end;
destructor TdxStatusBarContainerControl.Destroy;
var
APanel: TdxStatusBarPanel;
begin
if FPanelStyle <> nil then
begin
APanel := FPanelStyle.Owner;
FPanelStyle.FContainer := nil;
FPanelStyle := nil;
APanel.PanelStyleClass := nil;
end;
inherited Destroy;
end;
procedure TdxStatusBarContainerControl.Paint;
var
R, AParentRect: TRect;
begin
inherited;
R := ClientRect;
if FPanelStyle <> nil then
begin
AParentRect := FPanelStyle.StatusBarControl.ClientBounds;
OffsetRect(AParentRect, -Left, -Top);
FPanelStyle.StatusBarControl.Painter.DrawBorder(FPanelStyle.StatusBarControl,
Canvas, AParentRect);
FPanelStyle.StatusBarControl.Painter.FillBackground(FPanelStyle.StatusBarControl,
FPanelStyle.Owner, Canvas, R);
end
else
begin
Canvas.Brush.Color := clBtnFace;
Canvas.FillRect(R);
end;
if csDesigning in ComponentState then
begin
Canvas.Pen.Color := clBtnShadow;
Canvas.Brush.Color := clBtnShadow;
Canvas.Brush.Style := bsBDiagonal;
{$IFDEF DELPHI5}
Canvas.Canvas.Rectangle(R);
{$ELSE}
Canvas.Canvas.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
{$ENDIF}
Canvas.Brush.Style := bsSolid;
end;
end;
function TdxStatusBarContainerControl.MayFocus: Boolean;
begin
Result := False;
end;
function TdxStatusBarContainerControl.NeedsScrollBars: Boolean;
begin
Result := False;
end;
{ TdxStatusBarContainerPanelStyle }
constructor TdxStatusBarContainerPanelStyle.Create(AOwner: TdxStatusBarPanel);
begin
inherited Create(AOwner);
FAlignControl := True;
if StatusBarControl.ComponentState * [csUpdating, csLoading, csReading] = [] then
begin
FContainer := TdxStatusBarContainerControl.Create(StatusBarControl.Owner);
FContainer.FPanelStyle := Self;
FContainer.Parent := StatusBarControl;
if csDesigning in StatusBarControl.ComponentState then
GenContainerName(AOwner, FContainer);
end;
end;
destructor TdxStatusBarContainerPanelStyle.Destroy;
begin
Container := nil;
inherited;
end;
procedure TdxStatusBarContainerPanelStyle.RestoreDefaults;
begin
FAlignControl := True;
inherited RestoreDefaults;
end;
function TdxStatusBarContainerPanelStyle.CanDelete: Boolean;
begin
Result := (Container = nil) or not (csAncestor in Container.ComponentState);
end;
procedure TdxStatusBarContainerPanelStyle.DoAssign(ASource: TPersistent);
var
AStyle: TdxStatusBarContainerPanelStyle;
begin
inherited;
if ASource is TdxStatusBarContainerPanelStyle then
begin
AStyle := TdxStatusBarContainerPanelStyle(ASource);
AlignControl := AStyle.AlignControl;
if AStyle.Container <> nil then
Container := StatusBarControl.ContainerByName(AStyle.Container.Name);
end;
end;
procedure TdxStatusBarContainerPanelStyle.DrawContent(ACanvas: TcxCanvas; R: TRect;
APainter: TdxStatusBarPainterClass);
var
I: Integer;
begin
inherited;
if Container <> nil then
begin
CheckSizeGripRect(R);
Container.BoundsRect := R;
if AlignControl and not (csDesigning in StatusBarControl.ComponentState) then
begin
for I := 0 to Container.ControlCount - 1 do
Container.Controls[I].SetBounds(0, 0, Container.Width, Container.Height);
end;
end;
end;
procedure TdxStatusBarContainerPanelStyle.PanelVisibleChanged;
begin
if Container <> nil then
Container.Visible := Owner.Visible;
end;
procedure TdxStatusBarContainerPanelStyle.SetContainer(Value: TdxStatusBarContainerControl);
begin
if FContainer <> Value then
begin
if Value = nil then
begin
FContainer.FPanelStyle := nil;
if StatusBarControl.ComponentState * [csDestroying, csUpdating, csLoading, csReading] <> [] then
FContainer := nil
else
FreeAndNil(FContainer);
end
else
begin
FContainer := Value;
FContainer.FPanelStyle := Self;
end;
PanelVisibleChanged;
end;
end;
{ TdxStatusBarPanel }
constructor TdxStatusBarPanel.Create(Collection: TCollection);
begin
inherited Create(Collection);
FVisible := True;
FMinWidth := 20;
FWidth := 50;
FFixed := True;
FParentBiDiMode := True;
FBevel := dxpbLowered;
ParentBiDiModeChanged;
// auto create
if StatusBarControl.ComponentState * [csLoading, csReading] = [] then
PanelStyleClass := StatusBarControl.GetDeafultPanelStyleClass;
end;
destructor TdxStatusBarPanel.Destroy;
begin
DestroyPanelStyle;
inherited Destroy;
end;
procedure TdxStatusBarPanel.Assign(Source: TPersistent);
begin
if Source is TdxStatusBarPanel then
begin
if Assigned(Collection) then Collection.BeginUpdate;
try
RestoreDefaults;
PanelStyleClassName := TdxStatusBarPanel(Source).PanelStyleClassName;
PanelStyle := TdxStatusBarPanel(Source).PanelStyle;
Visible := TdxStatusBarPanel(Source).Visible;
Bevel := TdxStatusBarPanel(Source).Bevel;
BiDiMode := TdxStatusBarPanel(Source).BiDiMode;
Fixed := TdxStatusBarPanel(Source).Fixed;
if TdxStatusBarPanel(Source).IsMinWidthStored then
MinWidth := TdxStatusBarPanel(Source).MinWidth;
ParentBiDiMode := TdxStatusBarPanel(Source).ParentBiDiMode;
Text := TdxStatusBarPanel(Source).Text;
if TdxStatusBarPanel(Source).IsWidthStored then
Width := TdxStatusBarPanel(Source).Width;
OnClick := TdxStatusBarPanel(Source).OnClick;
OnDblClick := TdxStatusBarPanel(Source).OnDblClick;
OnDrawPanel := TdxStatusBarPanel(Source).OnDrawPanel;
finally
if Assigned(Collection) then Collection.EndUpdate;
end;
end
else
inherited Assign(Source);
end;
procedure TdxStatusBarPanel.RestoreDefaults;
begin
FVisible := True;
FMinWidth := 20;
FWidth := 50;
FFixed := True;
FParentBiDiMode := True;
FBevel := dxpbLowered;
FIsMinWidthAssigned := False;
FIsWidthAssigned := False;
Changed(True);
end;
procedure TdxStatusBarPanel.ParentBiDiModeChanged;
begin
if FParentBiDiMode then
begin
if GetOwner <> nil then
begin
BiDiMode := TdxStatusBarPanels(GetOwner).FStatusBarControl.BiDiMode;
FParentBiDiMode := True;
end;
end;
end;
function TdxStatusBarPanel.UseRightToLeftReading: Boolean;
begin
Result := SysLocale.MiddleEast and (BiDiMode <> bdLeftToRight);
end;
function TdxStatusBarPanel.UseRightToLeftAlignment: Boolean;
begin
Result := SysLocale.MiddleEast and (BiDiMode = bdRightToLeft);
end;
procedure TdxStatusBarPanel.Click;
begin
if Assigned(FOnClick) then FOnClick(Self);
end;
procedure TdxStatusBarPanel.CreatePanelStyle;
begin
if FPanelStyleClass <> nil then
FPanelStyle := FPanelStyleClass.Create(Self);
StatusBarControl.Invalidate;
end;
procedure TdxStatusBarPanel.DblClick;
begin
if Assigned(FOnDblClick) then FOnDblClick(Self);
end;
function TdxStatusBarPanel.DefaultMinWidth: Integer;
begin
if PanelStyle <> nil then
Result := PanelStyle.GetMinWidth
else
Result := 20;
end;
function TdxStatusBarPanel.DefaultWidth: Integer;
begin
if (PanelStyle <> nil) and not PanelStyle.CanSizing then
Result := DefaultMinWidth
else
Result := 50;
end;
procedure TdxStatusBarPanel.DestroyPanelStyle;
begin
if (StatusBarControl.ComponentState * [csDestroying, csUpdating, csLoading, csReading] = []) and
(PanelStyle <> nil) and not PanelStyle.CanDelete then
raise Exception.Create(cxSCantDeleteAncestor);
FreeAndNil(FPanelStyle);
end;
function TdxStatusBarPanel.GetDisplayName: string;
begin
Result := Text;
if Result = '' then
Result := inherited GetDisplayName;
end;
procedure TdxStatusBarPanel.Loaded;
begin
if PanelStyle <> nil then
PanelStyle.Loaded;
end;
function TdxStatusBarPanel.PaintMinWidth: Integer;
begin
Result := MinWidth;
PreparePaintWidth(Result);
end;
function TdxStatusBarPanel.PaintWidth: Integer;
begin
Result := Width;
PreparePaintWidth(Result);
end;
procedure TdxStatusBarPanel.PreparePaintWidth(var AWidth: Integer);
begin
if PanelStyle <> nil then
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -