247 lines
8.0 KiB
Plaintext
247 lines
8.0 KiB
Plaintext
unit fRptBox;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
StdCtrls, ORFn, ComCtrls, ExtCtrls, fFrame, fBase508Form,
|
|
VA508AccessibilityManager, uReports;
|
|
|
|
type
|
|
TfrmReportBox = class(TfrmBase508Form)
|
|
lblFontTest: TLabel;
|
|
memReport: TRichEdit;
|
|
pnlButton: TPanel;
|
|
cmdPrint: TButton;
|
|
dlgPrintReport: TPrintDialog;
|
|
cmdClose: TButton;
|
|
procedure memReportClick(Sender: TObject);
|
|
procedure cmdPrintClick(Sender: TObject);
|
|
procedure cmdCloseClick(Sender: TObject);
|
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
|
procedure FormResize(Sender: TObject);
|
|
end;
|
|
|
|
procedure ReportBox(ReportText: TStrings; ReportTitle: string; AllowPrint: boolean);
|
|
function ModelessReportBox(ReportText: TStrings; ReportTitle: string; AllowPrint: boolean): TfrmReportBox;
|
|
procedure PrintStrings(Form: TForm; StringText: TStrings; const Title, Trailer: string);
|
|
|
|
implementation
|
|
|
|
uses
|
|
uCore, rCore, rReports, Printers, rMisc;
|
|
|
|
{$R *.DFM}
|
|
|
|
function CreateReportBox(ReportText: TStrings; ReportTitle: string; AllowPrint: boolean): TfrmReportBox;
|
|
var
|
|
i, AWidth, MinWidth, MaxWidth, AHeight: Integer;
|
|
Rect: TRect;
|
|
BtnArray: array of TButton;
|
|
BtnRight: array of integer;
|
|
BtnLeft: array of integer;
|
|
//cmdCloseRightMargin: integer;
|
|
//cmdPrintRightMargin: integer;
|
|
j, k: integer;
|
|
begin
|
|
Result := TfrmReportBox.Create(Application);
|
|
try
|
|
with Result do
|
|
begin
|
|
k := 0;
|
|
MinWidth := 0;
|
|
with pnlButton do for j := 0 to ControlCount - 1 do
|
|
if Controls[j] is TButton then
|
|
begin
|
|
SetLength(BtnArray, k+1);
|
|
SetLength(BtnRight, k+1);
|
|
BtnArray[j] := TButton(Controls[j]);
|
|
BtnRight[j] := ResizeWidth(Font, MainFont, BtnArray[j].Width - BtnArray[j].Width - BtnArray[j].Left);
|
|
k := k + 1;
|
|
end;
|
|
//cmdCloseRightMargin := ResizeWidth(Font, MainFont, pnlButton.Width - cmdClose.Width - cmdClose.Left);
|
|
//cmdPrintRightMargin := ResizeWidth(Font, MainFont, pnlButton.Width - cmdPrint.Width - cmdPrint.Left);
|
|
MaxWidth := 350;
|
|
for i := 0 to ReportText.Count - 1 do
|
|
begin
|
|
AWidth := lblFontTest.Canvas.TextWidth(ReportText[i]);
|
|
if AWidth > MaxWidth then MaxWidth := AWidth;
|
|
end;
|
|
cmdPrint.Visible := AllowPrint;
|
|
MaxWidth := MaxWidth + GetSystemMetrics(SM_CXVSCROLL);
|
|
AHeight := (ReportText.Count * (lblFontTest.Height + 2)) + pnlbutton.Height;
|
|
AHeight := HigherOf(AHeight, 250);
|
|
if AHeight > (Screen.Height - 80) then AHeight := Screen.Height - 80;
|
|
if MaxWidth > Screen.Width then MaxWidth := Screen.Width;
|
|
ClientWidth := MaxWidth;
|
|
ClientHeight := AHeight;
|
|
ResizeAnchoredFormToFont(Result);
|
|
memReport.Align := alClient; //CQ6661
|
|
//CQ6889 - force Print & Close buttons to bottom right of form regardless of selected font size
|
|
cmdClose.Left := (pnlButton.Left+pnlButton.Width)-cmdClose.Width;
|
|
cmdPrint.Left := (cmdClose.Left-cmdPrint.Width)-1;
|
|
//end CQ6889
|
|
SetLength(BtnLeft, k);
|
|
for j := 0 to k - 1 do
|
|
begin
|
|
BtnLeft[j] := pnlButton.Width - BtnArray[j].Width - BtnRight[j];
|
|
MinWidth := MinWidth + BtnArray[j].Width;
|
|
end;
|
|
Width := width + (GetSystemMetrics(SM_CXVSCROLL) *2);
|
|
Constraints.MinWidth := MinWidth + (MinWidth div 2) + (GetSystemMetrics(SM_CXVSCROLL) *2);
|
|
if (mainFontSize = 8) then Constraints.MinHeight := 285
|
|
else if (mainFontSize = 10) then Constraints.MinHeight := 325
|
|
else if (mainFontSize = 12) then Constraints.MinHeight := 390
|
|
else if mainFontSize = 14 then Constraints.MinHeight := 460
|
|
else Constraints.MinHeight := 575;
|
|
QuickCopy(ReportText, memReport);
|
|
for i := 1 to Length(ReportTitle) do if ReportTitle[i] = #9 then ReportTitle[i] := ' ';
|
|
Caption := ReportTitle;
|
|
memReport.SelStart := 0;
|
|
Rect := BoundsRect;
|
|
ForceInsideWorkArea(Rect);
|
|
BoundsRect := Rect;
|
|
end;
|
|
except
|
|
KillObj(@Result);
|
|
raise;
|
|
end;
|
|
end;
|
|
|
|
procedure ReportBox(ReportText: TStrings; ReportTitle: string; AllowPrint: boolean);
|
|
var
|
|
frmReportBox: TfrmReportBox;
|
|
|
|
begin
|
|
Screen.Cursor := crHourglass; //wat cq 18425 added hourglass and disabled mnuFileOpen
|
|
fFrame.frmFrame.mnuFileOpen.Enabled := False;
|
|
frmReportBox := CreateReportBox(ReportText, ReportTitle, AllowPrint);
|
|
try
|
|
frmReportBox.ShowModal;
|
|
finally
|
|
frmReportBox.Release;
|
|
Screen.Cursor := crDefault;
|
|
fFrame.frmFrame.mnuFileOpen.Enabled := True;
|
|
end;
|
|
end;
|
|
|
|
function ModelessReportBox(ReportText: TStrings; ReportTitle: string; AllowPrint: boolean): TfrmReportBox;
|
|
begin
|
|
Result := CreateReportBox(ReportText, ReportTitle, AllowPrint);
|
|
Result.FormStyle := fsStayOnTop;
|
|
Result.Show;
|
|
end;
|
|
|
|
procedure PrintStrings(Form: TForm; StringText: TStrings; const Title, Trailer: string);
|
|
var
|
|
AHeader: TStringList;
|
|
memPrintReport: TRichEdit;
|
|
MaxLines, LastLine, ThisPage, i: integer;
|
|
ErrMsg: string;
|
|
// RemoteSiteID: string; //for Remote site printing
|
|
// RemoteQuery: string; //for Remote site printing
|
|
dlgPrintReport: TPrintDialog;
|
|
BM: TBitmap;
|
|
const
|
|
PAGE_BREAK = '**PAGE BREAK**';
|
|
|
|
begin
|
|
// RemoteSiteID := '';
|
|
// RemoteQuery := '';
|
|
BM := TBitmap.Create;
|
|
try
|
|
dlgPrintReport := TPrintDialog.Create(Form);
|
|
try
|
|
frmFrame.CCOWBusy := True;
|
|
if dlgPrintReport.Execute then
|
|
begin
|
|
AHeader := TStringList.Create;
|
|
CreatePatientHeader(AHeader, Title);
|
|
memPrintReport := CreateReportTextComponent(Form);
|
|
try
|
|
MaxLines := 60 - AHeader.Count;
|
|
LastLine := 0;
|
|
ThisPage := 0;
|
|
BM.Canvas.Font := memPrintReport.Font;
|
|
with memPrintReport do
|
|
begin
|
|
repeat
|
|
with Lines do
|
|
begin
|
|
for i := 0 to MaxLines do begin
|
|
if BM.Canvas.TextWidth(StringText[LastLine + i]) > Width then begin
|
|
MaxLines := Maxlines - (BM.Canvas.TextWidth(StringText[LastLine + i]) div Width);
|
|
end;
|
|
if i >= MaxLines then begin
|
|
break;
|
|
end;
|
|
|
|
if i < StringText.Count then
|
|
// Add(IntToStr(i) + ') ' + StringText[LastLine + i])
|
|
Add(StringText[LastLine + i])
|
|
else
|
|
Break;
|
|
end;
|
|
|
|
LastLine := LastLine + i;
|
|
Add(' ');
|
|
Add(' ');
|
|
Add(StringOfChar('-', 74));
|
|
if LastLine >= StringText.Count - 1 then
|
|
Add(Trailer)
|
|
else
|
|
begin
|
|
ThisPage := ThisPage + 1;
|
|
Add('Page ' + IntToStr(ThisPage));
|
|
Add(PAGE_BREAK);
|
|
MaxLines := 60 - AHeader.Count;
|
|
end;
|
|
end;
|
|
until LastLine >= StringText.Count - 1;
|
|
PrintWindowsReport(memPrintReport, PAGE_BREAK, Title, ErrMsg, True);
|
|
end;
|
|
finally
|
|
memPrintReport.Free;
|
|
AHeader.Free;
|
|
end;
|
|
end;
|
|
finally
|
|
frmFrame.CCOWBusy := False;
|
|
dlgPrintReport.Free;
|
|
end;
|
|
finally
|
|
BM.free;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmReportBox.memReportClick(Sender: TObject);
|
|
begin
|
|
//Close;
|
|
end;
|
|
|
|
procedure TfrmReportBox.cmdPrintClick(Sender: TObject);
|
|
begin
|
|
PrintStrings(Self, memReport.Lines, Self.Caption, 'End of report');
|
|
memReport.Invalidate;
|
|
end;
|
|
|
|
procedure TfrmReportBox.cmdCloseClick(Sender: TObject);
|
|
begin
|
|
Close;
|
|
end;
|
|
|
|
procedure TfrmReportBox.FormClose(Sender: TObject; var Action: TCloseAction);
|
|
begin
|
|
if(not (fsModal in FormState)) then
|
|
Action := caFree;
|
|
end;
|
|
|
|
|
|
procedure TfrmReportBox.FormResize(Sender: TObject);
|
|
begin
|
|
inherited;
|
|
self.memReport.Refresh;
|
|
end;
|
|
|
|
end.
|