Page 1 of 1

Setting proportional print margins with TTeePreviewPanel

Posted: Fri Sep 09, 2016 5:23 am
by 17576646
First a little background. I didn't find the TChartPreviewer component suitable for my program. It has a number of unnecessary controls for my purposes. Also, I don't like that it is a modal form -- I would have preferred a panel embedded in my own form. Therefore, I am trying to make use of the TTeePreviewPanel, which I can embed nicely into my form.

The TTeePreviewPanel has no controls other than the chart preview itself and some draggable margins. Therefore, I have to add the controls I need.

I have added four spin edit controls for setting the print margins. I have set TeePreviewPanel1.PrintProportional = True. The question is, how to adjust the print margins when one of my fours spin edits is changed? It appears that it is not as simple as transferring the spin edit values to the TeePreviewPanel1.PrintMargins rectangle because of the PrintProportional constraint. It appears that the function CalcProportionalMargins comes into it somewhere, but I cannot figure out how to do it! Help please!

Re: Setting proportional print margins with TTeePreviewPanel

Posted: Fri Sep 09, 2016 5:04 pm
by Marc
Hello,

I think you'll need to code this yourself taking the Chart proportions and re-applying them.

I tried this with an updown button and it seems to work ok (just controlling and on-applying the left margin here). This example would have a Chart and a TeePreviewPanel on a form.

Declared some variables outside the working procedure at form level:

Code: Select all

var
  Form1: TForm1;
  startBottomMargin, startTopMargin, startLeftMargin, startRightMargin: Integer;
Set Updown value on form open plus one-entry flag for some init code.

Code: Select all

UpDown2.Position := Chart1.PrintMargins.Left;
startBottomMargin := -1;
and put code in updown click:

Code: Select all

procedure TForm1.UpDown2Click(Sender: TObject; Button: TUDBtnType);
Var Delta : Integer;
    horizDiff, currentHeightProportion, newHeightProportion : Double;

  procedure ResetProportion;
  Begin
    Chart1.PrintMargins.Right := startRightMargin + Delta;

    horizDiff :=  (Chart1.PrintMargins.Right+Chart1.PrintMargins.Left) / (startRightMargin+startLeftMargin);

    //apply % to height
    currentHeightProportion := 100 - (startTopMargin+startBottomMargin);
    newHeightProportion := currentHeightProportion / horizDiff;

    //set Heightmargins
    Chart1.PrintMargins.Top := Round( (100-newHeightProportion) / 2);
    Chart1.PrintMargins.Bottom := Round( (100 - newHeightProportion) / 2);
  end;

begin
  if startBottomMargin = -1 then
  Begin
    startBottomMargin :=Chart1.PrintMargins.Bottom;
    startTopMargin :=Chart1.PrintMargins.Top;

    startLeftMargin :=Chart1.PrintMargins.Left;
    startRightMargin :=Chart1.PrintMargins.Right;
  end;

  Chart1.PrintProportional := False;
  Chart1.PrintMargins.Left:= UpDown2.Position;
  Delta := Chart1.PrintMargins.Left - startLeftMargin;

  ResetProportion;

  TeePreviewPanel1.Repaint;
end;
Regards,
Marc Meumann

Re: Setting proportional print margins with TTeePreviewPanel

Posted: Fri Sep 09, 2016 7:00 pm
by 17576646
Thank you! That was so helpful.