Question
“How can I format each line with something like ‘Value…..’ such that ‘.’ characters are used to fill the remaining space?”
Solution
This example shows how to Use a Variable and its OnCalc event to append the appropriate number of ‘.’to each line.
Download: FillLineWithDots.zip
Sample Delphi code:
uses
ppTypes,
ppUtils;
procedure TForm1.ppVariable1Calc(Sender: TObject; var Value: Variant);
var
ldMaxWidth: Double;
liDotCount: Integer;
lCanvas: TCanvas;
lsValue: String;
begin
// space available (report.Units are utInches here)
ldMaxWidth := 2;
lsValue := ppDBPipeline1['ShipVia'];
// use printer canvase to perform calculations
lCanvas := ppReport1.Printer.Canvas;
lCanvas.Font := ppVariable1.Font;
// calc number of dots that fit to the right of the text
liDotCount := CaclulateDots(lsValue, ldMaxWidth, lCanvas, ppReport1.Printer);
// append dots to the string value
Value := lsValue + StringOfChar('.', liDotCount);
end;
function TForm1.CaclulateDots(aLeftText: String; aMaxWidth: Double; aCanvas: TCanvas; aPrinter: TppPrinter): Integer;
var
ldValueWidthInInches: Double;
ldMaxAvailableDotWidth: Double;
ldDotWidthInInches: Double;
begin
// calc text width in inches
ldValueWidthInInches := aCanvas.TextWidth(aLeftText) / aPrinter.PixelsPerInch.X;
// calc dot width in inches
ldDotWidthInInches := aCanvas.TextWidth('.') / aPrinter.PixelsPerInch.X;
// calc available width
ldMaxAvailableDotWidth := aMaxWidth - ldValueWidthInInches;
// calc number of dots
Result := Trunc(ldMaxAvailableDotWidth / ldDotWidthInInches);
end;