84 lines
2.5 KiB
Plaintext
84 lines
2.5 KiB
Plaintext
type TSPdfLineRange = class(TSPdfBasicRange)
|
|
public
|
|
function Create(pg: TSPage);
|
|
function Do();override;
|
|
function AddRange(range: TSPdfBasicRange);
|
|
function SetAllRangeProp(pg: TSPage; sx: real; sy: real; ex: real; ey: real; w: real; fh: real; dh: real);
|
|
function Align(jc: string);
|
|
function AdjustRangeOffset(page: TSPage; x_offset: real; y_offset: real);
|
|
function AlignRightBound(right_bound: real);
|
|
|
|
private
|
|
range_array_: array of TSPdfBasicRange;
|
|
end;
|
|
|
|
function TSPdfLineRange.Create(pg: TSPage);
|
|
begin
|
|
{self.}TSPage := pg;
|
|
range_array_ := array();
|
|
end;
|
|
|
|
function TSPdfLineRange.AddRange(range: TSPdfBasicRange);
|
|
begin
|
|
range_array_[length(range_array_)] := range;
|
|
end;
|
|
|
|
function TSPdfLineRange.Do();override;
|
|
begin
|
|
for _,range in range_array_ do
|
|
range.Do();
|
|
end;
|
|
|
|
function TSPdfLineRange.SetAllRangeProp(pg: TSPage; sx: real; sy: real; ex: real; ey: real; w: real; fh: real; dh: real);
|
|
begin
|
|
for _,range in range_array_ do
|
|
begin
|
|
if not ifnil(pg) then range.TSPage := pg;
|
|
if not ifnil(sx) then range.StartX := sx;
|
|
if not ifnil(sy) then range.StartY := sy;
|
|
if not ifnil(ex) then range.EndX := ex;
|
|
if not ifnil(ey) then range.EndY := ey;
|
|
if not ifnil(w) then range.Width := w;
|
|
if not ifnil(fh) then range.FixedHeight := fh;
|
|
if not ifnil(dh) then range.DynamicHeight := dh;
|
|
end
|
|
end;
|
|
|
|
function TSPdfLineRange.Align(jc: string);
|
|
begin
|
|
offset := 0;
|
|
first := range_array_[0];
|
|
last := range_array_[length(range_array_)-1];
|
|
case jc of
|
|
"center":
|
|
offset := ({self.}Width - last.EndX + first.EndX - last.Width) / 2;
|
|
"right":
|
|
offset := {self.}Width - last.EndX + first.EndX - last.Width;
|
|
end;
|
|
if offset <= 0 then return;
|
|
for _,range in range_array_ do
|
|
range.EndX += offset;
|
|
end;
|
|
|
|
function TSPdfLineRange.AdjustRangeOffset(page: TSPage; x_offset: real; y_offset: real);
|
|
begin
|
|
if page <> {self.}TSPage then return;
|
|
for _,range in range_array_ do
|
|
begin
|
|
if not ifnil(x_offset) then range.EndX += x_offset;
|
|
if not ifnil(y_offset) then range.EndY += y_offset;
|
|
end;
|
|
end;
|
|
|
|
function TSPdfLineRange.AlignRightBound(right_bound: real);
|
|
begin
|
|
last := range_array_[length(range_array_)-1];
|
|
diff := right_bound - (last.EndX + last.Width);
|
|
if diff > 1e-6 then
|
|
begin
|
|
avg := diff / (length(range_array_) - 1);
|
|
for i:=1 to length(range_array_)-1 do
|
|
range_array_[i].EndX += avg * i;
|
|
end
|
|
end;
|