⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxstatusbar.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  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 + -