unit fPreReq; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ORFn, ComCtrls, ExtCtrls, fBase508Form, VA508AccessibilityManager, uReports; type TfrmPrerequisites = class(TfrmBase508Form) lblFontTest: TLabel; memReport: TRichEdit; pnlButton: TPanel; cmdContinue: TButton; cmdCancel: TButton; cmdPrint: TButton; dlgPrintReport: TPrintDialog; procedure memReportClick(Sender: TObject); procedure cmdContinueClick(Sender: TObject); procedure cmdCancelClick(Sender: TObject); procedure cmdPrintClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure OnActivate(Sender: TObject); procedure FormCreate(Sender: TObject); private procedure AlignButtons(); end; function DisplayPrerequisites(ReportText: TStrings; ReportTitle: string): Boolean; var ContinueWithOrder: Boolean; implementation uses uCore, rCore, rReports, Printers, rMisc; {$R *.DFM} function CreateReportBox(ReportText: TStrings; ReportTitle: string): TfrmPrerequisites; var i, AWidth, MaxWidth, AHeight: Integer; Rect: TRect; begin Result := TfrmPrerequisites.Create(Application); try with Result do begin MaxWidth := PnlButton.Width; for i := 0 to ReportText.Count - 1 do begin AWidth := lblFontTest.Canvas.TextWidth(ReportText[i]); if AWidth > MaxWidth then MaxWidth := AWidth; end; MaxWidth := MaxWidth + (GetSystemMetrics(SM_CXFRAME) * 2) + GetSystemMetrics(SM_CXVSCROLL); AHeight := (ReportText.Count * lblFontTest.Height) + ReportText.Count + (GetSystemMetrics(SM_CYFRAME) * 3) + GetSystemMetrics(SM_CYCAPTION); AHeight := AHeight + pnlbutton.Height; AHeight := HigherOf(AHeight, 250); if AHeight > (Screen.Height - 60) then AHeight := Screen.Height - 60; if MaxWidth > Screen.Width then MaxWidth := Screen.Width; Width := MaxWidth; Height := AHeight; Rect := BoundsRect; ForceInsideWorkArea(Rect); BoundsRect := Rect; QuickCopy(ReportText, memReport); //Quick fix to work around glich in resize algorithim AlignButtons(); for i := 1 to Length(ReportTitle) do if ReportTitle[i] = #9 then ReportTitle[i] := ' '; Caption := ReportTitle; memReport.SelStart := 0; end; except KillObj(@Result); raise; end; end; function DisplayPrerequisites(ReportText: TStrings; ReportTitle: string): Boolean; var frmPrerequisites: TfrmPrerequisites; begin frmPrerequisites := CreateReportBox(ReportText, ReportTitle); try frmPrerequisites.ShowModal; Result := ContinueWithOrder; finally frmPrerequisites.Release; end; end; procedure TfrmPrerequisites.memReportClick(Sender: TObject); begin //Close; end; procedure TfrmPrerequisites.cmdContinueClick(Sender: TObject); begin ContinueWithOrder := True; Close; end; procedure TfrmPrerequisites.cmdCancelClick(Sender: TObject); begin ContinueWithOrder := False; Close; end; procedure TfrmPrerequisites.cmdPrintClick(Sender: TObject); var AHeader: TStringList; memPrintReport: TRichEdit; MaxLines, LastLine, ThisPage, i: integer; ErrMsg: string; RemoteSiteID: string; //for Remote site printing RemoteQuery: string; //for Remote site printing const PAGE_BREAK = '**PAGE BREAK**'; begin RemoteSiteID := ''; RemoteQuery := ''; if dlgPrintReport.Execute then begin AHeader := TStringList.Create; CreatePatientHeader(AHeader, Self.Caption); memPrintReport := CreateReportTextComponent(Self); try MaxLines := 60 - AHeader.Count; LastLine := 0; ThisPage := 0; with memPrintReport do begin repeat with Lines do begin AddStrings(AHeader); for i := 0 to MaxLines do if i < memReport.Lines.Count then Add(memReport.Lines[LastLine + i]) else Break; LastLine := LastLine + i; Add(' '); Add(' '); Add(StringOfChar('-', 74)); if LastLine >= memReport.Lines.Count - 1 then Add('End of report') else begin ThisPage := ThisPage + 1; Add('Page ' + IntToStr(ThisPage)); Add(PAGE_BREAK); end; end; until LastLine >= memReport.Lines.Count - 1; PrintWindowsReport(memPrintReport, PAGE_BREAK, Self.Caption, ErrMsg); end; finally memPrintReport.Free; AHeader.Free; end; end; memReport.SelStart := 0; memReport.Invalidate; end; procedure TfrmPrerequisites.AlignButtons; Const BtnSpace = 8; begin cmdCancel.Left := self.Width - cmdCancel.Width - (BtnSpace * 3) - 3; cmdContinue.Left := cmdCancel.Left - BtnSpace - cmdContinue.Width; end; procedure TfrmPrerequisites.FormClose(Sender: TObject; var Action: TCloseAction); begin SaveUserBounds(Self); //Save Position & Size of Form end; procedure TfrmPrerequisites.FormCreate(Sender: TObject); begin inherited; ResizeAnchoredFormToFont(Self); SetFormPosition(Self); //Get Saved Position & Size of Form end; procedure TfrmPrerequisites.OnActivate(Sender: TObject); begin if Self.VertScrollBar.IsScrollBarVisible then Self.VertScrollBar.Position := 0; end; end.