type TSPdfLineRange = class(TSPdfBasicRange) public function Create(pg: PdfPage); function Do();override; function AddRange(range: TSPdfBasicRange); function SetAllRangeProp(pg: PdfPage; sx: real; sy: real; ex: real; ey: real; w: real; fh: real; dh: real); function Align(jc: string); private range_array_: array of TSPdfBasicRange; end; function TSPdfLineRange.Create(pg: PdfPage); begin self.Page := 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: PdfPage; 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.Page := 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;