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 + -
显示快捷键?