rm_designer.pas

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

PAS
2,241
字号
  end;
end;

function TRMToolbarAlign.GetTopObject: Integer;
var
  i: Integer;
  t: TRMView;
  y: Integer;
begin
  Result := FDesignerForm.TopSelected;
  t := FDesignerForm.Objects[Result];
  y := t.spTop_Designer;
  for i := 0 to FDesignerForm.Objects.Count - 1 do
  begin
    t := FDesignerForm.Objects[i];
    if t.Selected then
    begin
      if t.spTop_Designer < y then
      begin
        y := t.spTop_Designer;
        Result := i;
      end;
    end;
  end;
end;

function TRMToolbarAlign.GetRightObject: Integer;
var
  i: Integer;
  t: TRMView;
  x: Integer;
begin
  Result := FDesignerForm.TopSelected;
  t := FDesignerForm.Objects[Result];
  x := t.spRight_Designer;
  for i := 0 to FDesignerForm.Objects.Count - 1 do
  begin
    t := FDesignerForm.Objects[i];
    if t.Selected then
    begin
      if t.spRight_Designer > x then
      begin
        x := t.spRight_Designer;
        Result := i;
      end;
    end;
  end;
end;

function TRMToolbarAlign.GetBottomObject: Integer;
var
  i: Integer;
  t: TRMView;
  y: Integer;
begin
  t := FDesignerForm.Objects[FDesignerForm.TopSelected];
  y := t.spBottom_Designer;
  Result := FDesignerForm.TopSelected;
  for i := 0 to FDesignerForm.Objects.Count - 1 do
  begin
    t := FDesignerForm.Objects[i];
    if t.Selected then
    begin
      if t.spBottom_Designer > y then
      begin
        y := t.spBottom_Designer;
        Result := i;
      end;
    end;
  end;
end;

procedure TRMToolbarAlign.btnAlignLeftClick(Sender: TObject); //左对齐
var
  i: Integer;
  t: TRMView;
  x: Integer;
  liBand: TRMView;
  s: TList;
  y: Integer;
begin
  FDesignerForm.IsBandsSelect(liBand);
  if (liBand <> nil) and (not liBand.IsCrossBand) then
  begin
    FDesignerForm.BeforeChange;
    s := TList.Create;
    try
      t := FDesignerForm.Objects[GetLeftObject];
      x := 0;
      y := t.spTop_Designer;
      for i := 0 to FDesignerForm.Objects.Count - 1 do
      begin
        t := FDesignerForm.Objects[i];
        if (not t.IsBand) and (t.spTop_Designer >= liBand.spTop_Designer) and (t.spRight_Designer <= liBand.spRight_Designer) then
          s.Add(t);
      end;
      for i := 0 to s.Count - 1 do
      begin
        t := s[i];
        t.spLeft_Designer := x;
        t.spTop_Designer := y;
        x := x + t.spWidth_Designer;
      end;
    finally
      s.Free;
    end;
  end
  else
  begin
    if FDesignerForm.SelNum < 2 then Exit;
    FDesignerForm.BeforeChange;
    t := FDesignerForm.GetFirstSelected;
    x := t.spLeft_Designer;
    for i := 0 to FDesignerForm.Objects.Count - 1 do
    begin
      t := FDesignerForm.Objects[i];
      if t.Selected then
        t.spLeft_Designer := x;
    end;
  end;

  FDesignerForm.AfterChange;
end;

procedure TRMToolbarAlign.btnAlignHCenterClick(Sender: TObject); //水平居中
var
  i: Integer;
  t: TRMView;
  x: Integer;
begin
  FDesignerForm.BeforeChange;
  t := FDesignerForm.GetFirstSelected;
  x := t.spLeft_Designer + t.spWidth_Designer div 2;
  for i := 0 to FDesignerForm.Objects.Count - 1 do
  begin
    t := FDesignerForm.Objects[i];
    if (not t.IsBand) and t.Selected then
      t.spLeft_Designer := x - t.spWidth_Designer div 2;
  end;
  FDesignerForm.AfterChange;
end;

procedure TRMToolbarAlign.btnAlignRightClick(Sender: TObject); //右对齐
var
  i: Integer;
  t: TRMView;
  x: Integer;
  liBand: TRMView;
  s: TList;
  y: Integer;
begin
  FDesignerForm.IsBandsSelect(liBand);
  if (liBand <> nil) and (not liBand.IsCrossBand) then
  begin
    FDesignerForm.BeforeChange;
    s := TList.Create;
    try
      t := FDesignerForm.Objects[GetRightObject];
      x := FDesignerForm.FWorkSpace.Width;
      y := t.spTop_Designer;
      for i := 0 to FDesignerForm.Objects.Count - 1 do
      begin
        t := FDesignerForm.Objects[i];
        if (not t.IsBand) and (t.spTop_Designer >= liBand.spTop_Designer) and (t.spBottom_Designer <= liBand.spBottom_Designer) then
          s.Add(t);
      end;
      for i := s.Count - 1 downto 0 do
      begin
        t := s[i];
        t.spLeft_Designer := x - t.spWidth_Designer;
        t.spTop_Designer := y;
        x := x - t.spWidth_Designer;
      end;
    finally
      s.Free;
    end;
  end
  else
  begin
    if FDesignerForm.SelNum < 2 then
      Exit;
    FDesignerForm.BeforeChange;
    t := FDesignerForm.GetFirstSelected;
    x := t.spRight_Designer;
    for i := 0 to FDesignerForm.Objects.Count - 1 do
    begin
      t := FDesignerForm.Objects[i];
      if t.Selected then
        t.spLeft_Designer := x - t.spWidth_Designer;
    end;
  end;

  FDesignerForm.AfterChange;
end;

procedure TRMToolbarAlign.btnAlignTopClick(Sender: TObject); //顶对齐
var
  i: Integer;
  t: TRMView;
  y: Integer;
  lHaveBand: Boolean;
begin
  if FDesignerForm.SelNum < 2 then Exit;
  FDesignerForm.BeforeChange;
  t := FDesignerForm.GetFirstSelected;
  y := t.spTop_Designer;
  lHaveBand := False;
  for i := 0 to FDesignerForm.Objects.Count - 1 do
  begin
    t := FDesignerForm.Objects[i];
    if t.Selected then
    begin
      t.spTop_Designer := y;
      lHaveBand := lHaveBand or t.IsBand;
    end;
  end;

  if FDesignerForm.AutoChangeBandPos and lHaveBand then
    FDesignerForm.Page.UpdateBandsPageRect;
  FDesignerForm.AfterChange;
end;

procedure TRMToolbarAlign.btnAlignVCenterClick(Sender: TObject); //垂直居中
var
  i: Integer;
  t: TRMView;
  y: Integer;
begin
  if FDesignerForm.SelNum < 2 then Exit;
  FDesignerForm.BeforeChange;
  t := FDesignerForm.GetFirstSelected;
  y := t.spTop_Designer + t.spHeight_Designer div 2;
  for i := 0 to FDesignerForm.Objects.Count - 1 do
  begin
    t := FDesignerForm.Objects[i];
    if (not t.IsBand) and t.Selected then
      t.spTop_Designer := y - t.spHeight_Designer div 2;
  end;
  FDesignerForm.AfterChange;
end;

procedure TRMToolbarAlign.btnAlignBottomClick(Sender: TObject); //底对齐
var
  i: Integer;
  t: TRMView;
  y: Integer;
  lHaveBand: Boolean;
begin
  if FDesignerForm.SelNum < 2 then Exit;
  FDesignerForm.BeforeChange;
  t := FDesignerForm.GetFirstSelected;
  y := t.spBottom_Designer;
  lHaveBand := False;
  for i := 0 to FDesignerForm.Objects.Count - 1 do
  begin
    t := FDesignerForm.Objects[i];
    if t.Selected then
    begin
      t.spTop_Designer := y - t.spHeight_Designer;
      lHaveBand := lHaveBand or t.IsBand;
    end;
  end;

  if FDesignerForm.AutoChangeBandPos and lHaveBand then
    FDesignerForm.Page.UpdateBandsPageRect;
  FDesignerForm.AfterChange;
end;

procedure TRMToolbarAlign.btnAlignHSEClick(Sender: TObject); //水平平均分布各列
var
  s: TList;
  i, dx: Integer;
  t: TRMView;
begin
  if FDesignerForm.SelNum < 3 then Exit;
  FDesignerForm.BeforeChange;
  s := TList.Create;
  try
    for i := 0 to FDesignerForm.Objects.Count - 1 do
    begin
      t := FDesignerForm.Objects[i];
      if (not t.IsBand) and t.Selected then
        s.Add(t);
    end;
    dx := (TRMView(s[s.Count - 1]).spLeft_Designer - TRMView(s[0]).spLeft_Designer) div (s.Count - 1);
    for i := 1 to s.Count - 2 do
    begin
      t := s[i];
      if (not t.IsBand) and t.Selected then
        t.spLeft_Designer := TRMView(s[i - 1]).spLeft_Designer + dx;
    end;
  finally
    s.Free;
    FDesignerForm.AfterChange;
  end;
end;

procedure TRMToolbarAlign.btnAlignVSEClick(Sender: TObject); //垂直平均分布各列
var
  s: TList;
  i, dy: Integer;
  t: TRMView;
begin
  if FDesignerForm.SelNum < 3 then Exit;
  FDesignerForm.BeforeChange;
  s := TList.Create;
  try
    for i := 0 to FDesignerForm.Objects.Count - 1 do
    begin
      t := FDesignerForm.Objects[i];
      if (not t.IsBand) and t.Selected then
        s.Add(t);
    end;
    dy := (TRMView(s[s.Count - 1]).spTop_Designer - TRMView(s[0]).spTop_Designer) div (s.Count - 1);
    for i := 1 to s.Count - 2 do
    begin
      t := s[i];
      if (not t.IsBand) and t.Selected then
        t.spTop_Designer := TRMView(s[i - 1]).spTop_Designer + dy;
    end;
  finally
    s.Free;
    FDesignerForm.AfterChange;
  end;
end;

procedure TRMToolbarAlign.btnAlignHWCenterClick(Sender: TObject); //窗口水平居中
var
  i: Integer;
  t: TRMView;
  x: Integer;
begin
  if FDesignerForm.SelNum = 0 then Exit;
  FDesignerForm.BeforeChange;
  t := FDesignerForm.Objects[GetLeftObject];
  x := t.spLeft_Designer;
  t := FDesignerForm.Objects[GetRightObject];
  x := x + (t.spRight_Designer - x - FDesignerForm.FWorkSpace.Width) div 2;
  for i := 0 to FDesignerForm.Objects.Count - 1 do
  begin
    t := FDesignerForm.Objects[i];
    if (not t.IsBand) and t.Selected then
      t.spLeft_Designer := t.spLeft_Designer - x;
  end;
  FDesignerForm.AfterChange;
end;

procedure TRMToolbarAlign.btnAlignVWCenterClick(Sender: TObject); //窗口垂直居中
var
  i: Integer;
  t: TRMView;
  y: Integer;
begin
  if FDesignerForm.SelNum = 0 then Exit;
  FDesignerForm.BeforeChange;
  t := FDesignerForm.Objects[GetTopObject];
  y := t.spTop_Designer;
  t := FDesignerForm.Objects[GetBottomObject];
  y := y + (t.spBottom_Designer - y - FDesignerForm.FWorkSpace.Height) div 2;
  for i := 0 to FDesignerForm.Objects.Count - 1 do
  begin
    t := FDesignerForm.Objects[i];
    if (not t.IsBand) and t.Selected then
      t.spTop_Designer := t.spTop_Designer - y;
  end;
  FDesignerForm.AfterChange;
end;

procedure TRMToolbarAlign.btnAlignLeftRightClick(Sender: TObject);
var
  i, j: Integer;
  t: TRMView;
  tmpLeft: Integer;
  s: TList;
begin
  if FDesignerForm.SelNum = 0 then Exit;

  FDesignerForm.BeforeChange;
  s := TList.Create;
  try
    for i := 0 to FDesignerForm.Objects.Count - 1 do
    begin
      t := FDesignerForm.Objects[i];
      if (not t.IsBand) and t.Selected then
        s.Add(t);
    end;
    for i := 0 to s.Count - 1 do
    begin
      for j := i + 1 to s.Count - 1 do
      begin
        if TRMView(s[i]).spLeft_Designer > TRMView(s[j]).spLeft_Designer then
          s.Exchange(i, j);
      end;
    end;

    tmpLeft := TRMView(s[0]).spRight_Designer;
    for i := 1 to s.Count - 1 do
    begin
      t := TRMView(s[i]);
      t.spLeft_Designer := tmpLeft;
      tmpLeft := tmpLeft + t.spWidth_Designer;
    end;
  finally
    s.Free;
    FDesignerForm.AfterChange;
  end;
end;

procedure TRMToolbarAlign.btnAlignTopBottomClick(Sender: TObject);
var
  i, j: Integer;
  t: TRMView;
  tmpTop: Integer;
  s: TList;
begin
  if (FDesignerForm.SelNum = 0) or FDesignerForm.IsBandsSelect(t) then Exit;
  FDesignerForm.BeforeChange;
  s := TList.Create;
  try
    for i := 0 to FDesignerForm.Objects.Count - 1 do
    begin
      t := FDesignerForm.Objects[i];
      if (not t.IsBand) and t.Selected then
        s.Add(t);
    end;
    for i := 0 to s.Count - 1 do
    begin
      for j := i + 1 to s.Count - 1 do
      begin
        if TRMView(s[i]).spTop_Designer > TRMView(s[j]).spTop_Designer then
          s.Exchange(i, j);
      end;
    end;

    tmpTop := TRMView(s[0]).spBottom_Designer;
    for i := 1 to s.Count - 1 do
    begin
      t := TRMView(s[i]);
      t.spTop_Designer := tmpTop;
      tmpTop := tmpTop + t.spHeight_Designer;
    end;
  finally
    s.Free;
    FDesignerForm.AfterChange;
  end;
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}

⌨️ 快捷键说明

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