Редактор шаблонов
Предгагаю несколько доп ф-ций. Хорошо бы их вставить в стандарный дизайнер
1. Расположить выделенные объекты рядом (пользуюсь постоянно)
3. Сделать ШИРИНУ ПОСЛЕДНЕГО из выделенных объектов равным сумме длин остальных выделенных (удобно для многоэтажных заголовков, пользуюсь постоянно)
-Width[n]=Width[1]+Width[2]+....Width[n-1]
-Left[n]=Left[самый левый]
1. Расположить выделенные объекты рядом (пользуюсь постоянно)
// Ищем самый левый объект
function TfrxDesignerForm.FindMinLeft(var aMv:array of TfrxView;tNo:TfrxComponent):TfrxView;
var i:integer;
lf:double;
t: TfrxView;
function FindInaMv(aMv:array of TfrxView;n:TfrxView):boolean;
var i:integer;
begin
Result:=false;
for i:=0 to High(aMv) do
if aMv[i]=n then
begin
Result:=true;
EXIT;
end;
end;
begin
Result:=NIL;
lf:=9999999;
for i := 0 to FSelectedObjects.Count - 1 do
begin
t := FSelectedObjects[i];
if not (rfDontMove in t.Restrictions)and (t<>tNo) and
(lf>TMfrxView(t).left) and not FindInaMv(aMv,t) then
begin
Result:=t;
lf:=TMfrxView(t).left;
end;
end;
end;
procedure TfrxDesignerForm.acSidebySideExecute(Sender: TObject); // рядом друг с другом
var w:double;
aMv:array of TfrxView;
t: TfrxView;
begin
if (FSelectedObjects.Count < 2) then Exit;
// BeforeChange;
w:=0;
SetLength(aMv,0);
t:=TfrxView(55);
while (t<>NIL) do
begin
t:=FindMinLeft(aMv,nil);
if (t<>NIL) then
with TMfrxView(t) do
begin
left:=w;
w:=w+TMfrxView(t).width;
SetLength(aMv,High(aMv)+2);
aMv[High(aMv)]:=t;
end;
end;
Modified := True;
end;
2. Расположить выделенные объекты один под другим(пользуюсь редко)// самый верхний из выделенных
function TfrxDesignerForm.FindMinTop(var aMv: array of TfrxView;
tNo: TfrxComponent): TfrxView;
var i:integer;
lf:double;
t: TfrxView;
function FindInaMv(aMv:array of TfrxView;n:TfrxView):boolean;
var i:integer;
begin
Result:=false;
for i:=0 to High(aMv) do
if aMv[i]=n then
begin
Result:=true;
EXIT;
end;
end;
begin
Result:=NIL;
lf:=9999999;
for i := 0 to FSelectedObjects.Count - 1 do
begin
t := FSelectedObjects[i];
if not (rfDontMove in t.Restrictions)and (t<>tNo) and
(lf>TMfrxView(t).Top) and not FindInaMv(aMv,t) then
begin
Result:=t;
lf:=TMfrxView(t).Top;
end;
end;
end;
procedure TfrxDesignerForm.acTopToTopExecute(Sender: TObject);
var h:double;
aMv:array of TfrxView;
t: TfrxView;
begin
if (FSelectedObjects.Count < 2) then Exit;
// BeforeChange;
h:=0;
SetLength(aMv,0);
t:=TfrxView(55);
while (t<>NIL) do
begin
t:=FindMinTop(aMv,nil);
if (t<>NIL) then
with TMfrxView(t) do
begin
Top:=h;
h:=h+TMfrxView(t).Height;
SetLength(aMv,High(aMv)+2);
aMv[High(aMv)]:=t;
end;
end;
Modified := True;
end;
3. Сделать ШИРИНУ ПОСЛЕДНЕГО из выделенных объектов равным сумме длин остальных выделенных (удобно для многоэтажных заголовков, пользуюсь постоянно)
-Width[n]=Width[1]+Width[2]+....Width[n-1]
-Left[n]=Left[самый левый]
procedure TfrxDesignerForm.acW_WWExecute(Sender: TObject); // ширина последнего выделенного= сумма других выделенных
var
i: Integer;
c0: TfrxComponent;
x:Double;
aMv:array of TfrxView;
begin
if FSelectedObjects.Count < 2 then Exit;
c0 := FSelectedObjects[FSelectedObjects.Count-1];
if (rfDontSize in c0.Restrictions) then exit;
x:=0;
for i := 0 to FSelectedObjects.Count - 2 do
x:=x+TfrxComponent(FSelectedObjects[i]).width;
c0.width:=x;
c0.left:=TfrxComponent(FindMinLeft(amv,c0)).left ;
Modified := True;
end;
4. См. п3 но с ВЫСОТОЙ. (пользуюсь редко)
procedure TfrxDesignerForm.acH_HHExecute(Sender: TObject);
var
i: Integer;
c0: TfrxComponent;
y:Double;
aMv:array of TfrxView;
begin
if FSelectedObjects.Count < 2 then Exit;
c0 := FSelectedObjects[FSelectedObjects.Count-1];
if (rfDontSize in c0.Restrictions) then exit;
y:=0;
for i := 0 to FSelectedObjects.Count - 2 do
y:=y+TfrxComponent(FSelectedObjects[i]).height;
c0.height:=y;
c0.Top:=TfrxComponent(FindMinTop(amv,c0)).Top ;
Modified := True;
end;