cxgriddetailssite.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 2,042 行 · 第 1/5 页

PAS
2,042
字号
    AItemWidth := GetItemWidth(Items[I]);
    if AItemWidth > Result then Result := AItemWidth;
  end;
  if Count > 1 then Inc(Result, ActiveTabOffset);
  Inc(Result, TabsAreaOffset + cxGridTabsRootSize - 1);
{$ENDIF}
end;

procedure TcxCustomGridDetailsSiteTabsViewInfo.CheckSiteViewInfoHeight(var AHeight: Integer);
begin
end;

procedure TcxCustomGridDetailsSiteTabsViewInfo.CheckSiteViewInfoWidth(var AWidth: Integer);
begin
end;

function TcxCustomGridDetailsSiteTabsViewInfo.GetBkColor: TColor;
var
  AParams: TcxViewParams;
begin
  Level.Styles.GetViewParams(lsTabsBackground, nil, nil, AParams);
  Result := AParams.Color;
end;

function TcxCustomGridDetailsSiteTabsViewInfo.GetFirstVisibleTabIndex: Integer;
begin
{$IFDEF USETABCONTROL}
  Result := TabControl.FirstVisibleTab;
{$ELSE}
  Result := 0;
{$ENDIF}
end;

procedure TcxCustomGridDetailsSiteTabsViewInfo.SetFirstVisibleTabIndex(Value: Integer);
begin
{$IFDEF USETABCONTROL}
  TabControl.FirstVisibleTab := Value;
{$ENDIF}
end;

{$IFNDEF USETABCONTROL}

function TcxCustomGridDetailsSiteTabsViewInfo.GetItemHeight(AItem: TcxCustomGridDetailsSiteTabViewInfo): Integer;
begin
  Result := AItem.CalculateHeight;
end;

function TcxCustomGridDetailsSiteTabsViewInfo.GetItemWidth(AItem: TcxCustomGridDetailsSiteTabViewInfo): Integer;
begin
  Result := AItem.CalculateWidth;
end;

{$ENDIF}

function TcxCustomGridDetailsSiteTabsViewInfo.GetPainterClass: TcxGridDetailsSiteTabsPainterClass;
begin
  Result := TcxGridDetailsSiteTabsPainter;
end;

{$IFDEF USETABCONTROL}

function TcxCustomGridDetailsSiteTabsViewInfo.AreTabsRotated: Boolean;
begin
  Result := IsVertical;
end;

function TcxCustomGridDetailsSiteTabsViewInfo.GetTabControlBounds: TRect;
begin
  Result := Bounds;
end;

function TcxCustomGridDetailsSiteTabsViewInfo.GetTabControlClass: TcxGridLevelTabControlClass;
begin
  Result := TcxGridLevelTabControl;
end;

procedure TcxCustomGridDetailsSiteTabsViewInfo.InitTabControl;
begin
  InitTabControlHotKeyParams;
  InitTabControlData;
  InitTabControlLayout;
  InitTabControlStyle;
end;

procedure TcxCustomGridDetailsSiteTabsViewInfo.InitTabControlData;
var
  I: Integer;
  AActiveLevel, ALevel: TcxGridLevel;
begin
  AActiveLevel := ActiveLevel;
  for I := 0 to Level.VisibleCount - 1 do
  begin
    ALevel := Level.VisibleItems[I];
    if (ALevel = AActiveLevel) or SiteViewInfo.IsTabVisible(ALevel) then
      TabControl.AddLevel(ALevel);
  end;
  TabControl.ActiveLevel := AActiveLevel;
end;

procedure TcxCustomGridDetailsSiteTabsViewInfo.InitTabControlHotKeyParams;
begin
  TabControl.UnderlineHotKeys := SiteViewInfo.SupportsTabAccelerators;
end;

procedure TcxCustomGridDetailsSiteTabsViewInfo.InitTabControlLayout;
begin
  TabControl.Rotate := AreTabsRotated;
  TabControl.TabPosition := GetTabPosition;
end;

procedure TcxCustomGridDetailsSiteTabsViewInfo.InitTabControlStyle;
var
  ATabsInfo: TcxGridLevelTabs;
begin
  ATabsInfo := TcxCustomGrid(SiteViewInfo.Control).LevelTabs;
  if BkColor <> clDefault then
    TabControl.Color := BkColor;
  TabControl.ImageBorder := ATabsInfo.ImageBorder;
  TabControl.Images := ATabsInfo.Images;
  TabControl.TabCaptionAlignment := ATabsInfo.CaptionAlignment;
  TabControl.Style := ATabsInfo.Style;
  TabControl.TabSlants := ATabsInfo.Slants;
  TabControl.LookAndFeel.MasterLookAndFeel := SiteViewInfo.LookAndFeel;
  InitTabsStyle;
end;

procedure TcxCustomGridDetailsSiteTabsViewInfo.InitTabsStyle;
var
  ATabDefaultParams, ATabParams: TcxViewParams;
  I: Integer;
begin
  SiteViewInfo.GetLevelTabDefaultParams(ATabDefaultParams);
  for I := 0 to TabControl.Tabs.Count - 1 do
  begin
    SiteViewInfo.GetLevelTabParams(TabControl.Levels[I], ATabParams);
    if ATabParams.Color <> ATabDefaultParams.Color then
      TabControl.Tabs[I].Color := ATabParams.Color;
  end;
end;

{$ENDIF}

procedure TcxCustomGridDetailsSiteTabsViewInfo.BeforeRecalculation;
begin
{$IFDEF USETABCONTROL}
  InitTabControlHotKeyParams;
{$ENDIF}
end;

procedure TcxCustomGridDetailsSiteTabsViewInfo.Calculate(const ABounds: TRect);
{$IFNDEF USETABCONTROL}
var
  ATabLeft, ATabTop, ATabSize, I: Integer;

  procedure CalculateFirstTabPos;
  begin
    ATabLeft := Bounds.Left + TabsAreaOffset;
    ATabTop := Bounds.Top + TabsAreaOffset;
    if (Count <> 0) and Items[0].Active then
      if IsVertical then
        Dec(ATabTop, Items[0].BorderWidth[bTop])
      else
        Dec(ATabLeft, Items[0].BorderWidth[bLeft]);
  end;

  function GetTabWidth: Integer;
  begin
    if IsVertical then
      Result := ATabSize
    else
      Result := -1;
  end;

  function GetTabHeight: Integer;
  begin
    if IsVertical then
      Result := -1
    else
      Result := ATabSize;
  end;

  procedure CalculateNextTabPos;
  begin
    if IsVertical then
      Inc(ATabTop, Items[I].Height)
    else
      Inc(ATabLeft, Items[I].Width);
  end;
{$ENDIF}
begin
  Bounds := ABounds;
  AdjustBounds;
{$IFDEF USETABCONTROL}
  TabControl.BoundsRect := GetTabControlBounds;
  TabControl.Parent := SiteViewInfo.Container;
{$ELSE}
  CalculateFirstTabPos;
  ATabSize := TabSize;
  for I := 0 to Count - 1 do
  begin
    Items[I].Calculate(ATabLeft, ATabTop, GetTabWidth, GetTabHeight);
    CalculateNextTabPos;
  end;
{$ENDIF}
end;

function TcxCustomGridDetailsSiteTabsViewInfo.GetHitTest(const P: TPoint): TcxCustomGridHitTest;
{$IFNDEF USETABCONTROL}
var
  I: Integer;
{$ENDIF}
begin
{$IFDEF USETABCONTROL}
  Result := TabControl.GetHitTest(TabControl.ScreenToClient(SiteViewInfo.Container.ClientToScreen(P)));
{$ELSE}
  Result := nil;
  for I := 0 to Count - 1 do
  begin
    Result := Items[I].GetHitTest(P);
    if Result <> nil then Break;
  end;
{$ENDIF}
end;

function TcxCustomGridDetailsSiteTabsViewInfo.ProcessDialogChar(ACharCode: Word): Boolean;
{$IFNDEF USETABCONTROL}
var
  I: Integer;
{$ENDIF}
begin
{$IFDEF USETABCONTROL}
  Result := TabControl.HandleDialogChar(ACharCode);
{$ELSE}
  for I := 0 to Count - 1 do
  begin
    Result := Items[I].Visible and Items[I].ProcessDialogChar(ACharCode);
    if Result then Exit;
  end;
  Result := False;
{$ENDIF}
end;

{$IFNDEF USETABCONTROL}

{ TcxGridDetailsSiteLeftTabViewInfo }

function TcxGridDetailsSiteLeftTabViewInfo.CalculateHeight: Integer;
begin
  Result := inherited CalculateHeight;
  if Active then Inc(Result, BorderWidth[bTop] + BorderWidth[bBottom]);
  Inc(Result, BorderSize[bTop] + BorderSize[bBottom]);
end;

function TcxGridDetailsSiteLeftTabViewInfo.CalculateWidth: Integer;
begin
  Result := inherited CalculateWidth;
  Inc(Result, BorderWidth[bLeft] + BorderWidth[bRight]);
end;

function TcxGridDetailsSiteLeftTabViewInfo.GetAlignmentVert: TcxAlignmentVert;
begin
  Result := vaCenter;
end;

function TcxGridDetailsSiteLeftTabViewInfo.GetBorders: TcxBorders;
begin
  Result := [bLeft];
  if Active then
    Result := Result + [bTop, bBottom]
  else
  begin
    Include(Result, bRight);
    if HasFirstBorder then Include(Result, bTop);
    if HasLastBorder then Include(Result, bBottom);
  end;
end;

procedure TcxGridDetailsSiteLeftTabViewInfo.Calculate(ALeftBound, ATopBound: Integer;
  AWidth: Integer = -1; AHeight: Integer = -1);
begin
  if not Active then
  begin
    Inc(ALeftBound, TabsViewInfo.ActiveTabOffset);
    if AWidth <> -1 then Dec(AWidth, TabsViewInfo.ActiveTabOffset);
  end;
  inherited;
end;

{$ENDIF}

{ TcxGridDetailsSiteLeftTabsViewInfo }

procedure TcxGridDetailsSiteLeftTabsViewInfo.AdjustBounds;
begin
  Bounds.Right := Min(Bounds.Left + Width, Bounds.Right);
end;

procedure TcxGridDetailsSiteLeftTabsViewInfo.CheckSiteViewInfoHeight(var AHeight: Integer);
begin
  inherited;
  if AHeight < Height then AHeight := Height;
end;

function TcxGridDetailsSiteLeftTabsViewInfo.GetIsVertical: Boolean;
begin
  Result := True;
end;

{$IFDEF USETABCONTROL}

function TcxGridDetailsSiteLeftTabsViewInfo.GetTabPosition: TcxTabPosition;
begin
  Result := tpLeft;
end;

{$ELSE}

function TcxGridDetailsSiteLeftTabsViewInfo.GetActiveTabOffset: Integer;
begin
  Result := ActiveLeftTabOffset;
end;

function TcxGridDetailsSiteLeftTabsViewInfo.GetItemClass: TcxCustomGridDetailsSiteTabViewInfoClass;
begin
  Result := TcxGridDetailsSiteLeftTabViewInfo;
end;

function TcxGridDetailsSiteLeftTabsViewInfo.GetRootBorders: TcxBorders;
begin
  Result := [bLeft, bTop, bBottom];
end;

function TcxGridDetailsSiteLeftTabsViewInfo.GetRootBounds: TRect;
begin
  Result := Bounds;
  Result.Left := Result.Right - cxGridTabsRootSize;
end;

{$ENDIF}

procedure TcxGridDetailsSiteLeftTabsViewInfo.GetClientBounds(var AClientBounds: TRect);
begin
  Inc(AClientBounds.Left, Width);
end;

{$IFNDEF USETABCONTROL}

{ TcxGridDetailsSiteTopTabViewInfo }

function TcxGridDetailsSiteTopTabViewInfo.CalculateHeight: Integer;
begin
  Result := inherited CalculateHeight;
  Inc(Result, BorderWidth[bTop] + BorderWidth[bBottom]);
end;

function TcxGridDetailsSiteTopTabViewInfo.CalculateWidth: Integer;
begin
  Result := inherited CalculateWidth;
  if Active then Inc(Result, BorderWidth[bLeft] + BorderWidth[bRight]);
  Inc(Result, BorderSize[bLeft] + BorderSize[bRight]);
end;

function TcxGridDetailsSiteTopTabViewInfo.GetBorders: TcxBorders;
begin
  Result := [bTop];
  if Active then
    Result := Result + [bLeft, bRight]
  else
  begin
    Include(Result, bBottom);
    if HasFirstBorder then Include(Result, bLeft);
    if HasLastBorder then Include(Result, bRight);
  end;
end;

procedure TcxGridDetailsSiteTopTabViewInfo.Calculate(ALeftBound, ATopBound: Integer;
  AWidth: Integer = -1; AHeight: Integer = -1);
begin
  if not Active then
  begin
    Inc(ATopBound, TabsViewInfo.ActiveTabOffset);
    if AHeight <> -1 then Dec(AHeight, TabsViewInfo.ActiveTabOffset);
  end;
  inherited;
end;

{$ENDIF}

{ TcxGridDetailsSiteTopTabsViewInfo }

procedure TcxGridDetailsSiteTopTabsViewInfo.AdjustBounds;
begin
  Bounds.Bottom := Min(Bounds.Top + Height, Bounds.Bottom);
end;

procedure TcxGridDetailsSiteTopTabsViewInfo.CheckSiteViewInfoWidth(var AWidth: Integer);
begin
  inherited;
  if AWidth < Width then AWidth := Width;
end;

function TcxGridDetailsSiteTopTabsViewInfo.GetIsVertical: Boolean;
begin
  Result := False;
end;

{$IFDEF USETABCONTROL}

function TcxGridDetailsSiteTopTabsViewInfo.GetTabPosition: TcxTabPosition;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?