Редактор шаблонов

отредактировано 01:55 Раздел: FastReport 4.0
Предгагаю несколько доп ф-ций. Хорошо бы их вставить в стандарный дизайнер
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;

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.