//kt -- Modified with SourceScanner on 8/17/2007 unit fLabs; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, fHSplit, StdCtrls, ExtCtrls, ORCtrls, ComCtrls, Grids, Buttons, fLabTest, fLabTests, fLabTestGroups, ORFn, TeeProcs, TeEngine, Chart, Series, Menus, uConst, ORDtTmRng, OleCtrls, SHDocVw, Variants, StrUtils, DKLang; type TfrmLabs = class(TfrmHSplit) lblHeading: TOROffsetLabel; lstReports: TORListBox; lstHeaders: TORListBox; lstDates: TORListBox; pnlHeader: TORAutoPanel; pnlFooter: TORAutoPanel; grdLab: TCaptionStringGrid; pnlChart: TPanel; memLab: TRichEdit; lblSpecimen: TLabel; lblSingleTest: TLabel; lstTests: TORListBox; lblFooter: TOROffsetLabel; lblReports: TOROffsetLabel; lblDates: TOROffsetLabel; lblHeaders: TOROffsetLabel; bvlHeader: TBevel; pnlButtons: TORAutoPanel; cmdNext: TButton; cmdPrev: TButton; cmdRecent: TButton; cmdOld: TButton; lblDateFloat: TLabel; lblOld: TOROffsetLabel; lblPrev: TOROffsetLabel; lblNext: TOROffsetLabel; lblRecent: TOROffsetLabel; pnlOtherTests: TORAutoPanel; cmdOtherTests: TButton; chtChart: TChart; serHigh: TLineSeries; serLow: TLineSeries; serTest: TLineSeries; bvlOtherTests: TBevel; lblMostRecent: TLabel; lblDate: TLabel; lblCollection: TLabel; pnlWorksheet: TORAutoPanel; chkValues: TCheckBox; chk3D: TCheckBox; ragHorV: TRadioGroup; chkAbnormals: TCheckBox; ragCorG: TRadioGroup; lstTestGraph: TORListBox; pnlGraph: TORAutoPanel; chkGraph3D: TCheckBox; chkGraphValues: TCheckBox; lblGraphInfo: TLabel; chkGraphZoom: TCheckBox; PopupMenu1: TPopupMenu; GotoTop1: TMenuItem; GotoBottom1: TMenuItem; FreezeText1: TMenuItem; UnfreezeText1: TMenuItem; Memo1: TMemo; chkZoom: TCheckBox; popChart: TPopupMenu; popValues: TMenuItem; pop3D: TMenuItem; popZoom: TMenuItem; N1: TMenuItem; popCopy: TMenuItem; popZoomBack: TMenuItem; popDetails: TMenuItem; N2: TMenuItem; calLabRange: TORDateRangeDlg; dlgWinPrint: TPrintDialog; N3: TMenuItem; popPrint: TMenuItem; Timer1: TTimer; TabControl1: TTabControl; WebBrowser1: TWebBrowser; lblGraph: TLabel; procedure FormCreate(Sender: TObject); procedure DisplayHeading; procedure lstReportsClick(Sender: TObject); procedure lstHeadersClick(Sender: TObject); procedure lstDatesClick(Sender: TObject); procedure cmdOtherTestsClick(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure cmdNextClick(Sender: TObject); procedure cmdPrevClick(Sender: TObject); procedure cmdRecentClick(Sender: TObject); procedure cmdOldClick(Sender: TObject); procedure FormResize(Sender: TObject); procedure pnlRightResize(Sender: TObject); procedure chkValuesClick(Sender: TObject); procedure chk3DClick(Sender: TObject); procedure ragHorVClick(Sender: TObject); procedure ragCorGClick(Sender: TObject); procedure lstTestGraphClick(Sender: TObject); procedure chkGraphValuesClick(Sender: TObject); procedure chkGraph3DClick(Sender: TObject); procedure chkGraphZoomClick(Sender: TObject); procedure GotoTop1Click(Sender: TObject); procedure GotoBottom1Click(Sender: TObject); procedure FreezeText1Click(Sender: TObject); procedure UnfreezeText1Click(Sender: TObject); procedure PopupMenu1Popup(Sender: TObject); procedure chkZoomClick(Sender: TObject); procedure chtChartUndoZoom(Sender: TObject); procedure popCopyClick(Sender: TObject); procedure popChartPopup(Sender: TObject); procedure popValuesClick(Sender: TObject); procedure pop3DClick(Sender: TObject); procedure popZoomClick(Sender: TObject); procedure popZoomBackClick(Sender: TObject); procedure chtChartMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure chtChartClickSeries(Sender: TCustomChart; Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure chtChartClickLegend(Sender: TCustomChart; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure popDetailsClick(Sender: TObject); procedure popPrintClick(Sender: TObject); procedure BeginEndDates(var ADate1, ADate2: TFMDateTime; var ADaysBack: integer); procedure Timer1Timer(Sender: TObject); procedure TabControl1Change(Sender: TObject); procedure WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); procedure Memo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure UpdateRemoteStatus(aSiteID, aStatus: string); private { Private declarations } procedure AlignList; procedure HGrid(griddata: TStrings); procedure VGrid(griddata: TStrings); procedure FillGrid(agrid: TStringGrid; aitems: TStrings); procedure GridComments(aitems: TStrings); procedure FillComments(amemo: TRichEdit; aitems:TStrings); procedure GetInterimGrid(adatetime: TFMDateTime; direction: integer); procedure WorksheetChart(test: string; aitems: TStrings); procedure GetStartStop(var start, stop: string; aitems: TStrings); procedure GraphChart(test: string; aitems: TStrings); procedure GraphList(griddata: TStrings); procedure ProcessNotifications; procedure PrintLabGraph; procedure GoRemote(Dest: TStringList; AItem, AReportID: Int64; AQualifier, ARpc, AHSType, ADaysBack, ASection: string; ADate1, ADate2: TFMDateTime); procedure ChkBrowser; procedure CommonComponentVisible(A1,A2,A3,A4,A5,A6,A7,A8,A9: Boolean); public procedure ClearPtData; override; function AllowContextChange(var WhyNot: string): Boolean; override; procedure DisplayPage; override; procedure SetFontSize(NewFontSize: Integer); override; function FMToDateTime(FMDateTime: string): TDateTime; procedure RequestPrint; override; procedure ExtlstReportsClick(Sender: TObject; Ext: boolean); end; var frmLabs: TfrmLabs; uPrevReportIndex, uFormat: integer; uDate1, uDate2: Tdatetime; tmpGrid: TStringList; uLabLocalReportData: TStringList; //Storage for Local report data uLabRemoteReportData: TStringList; //Storage for Remote lab query uUpdateStat: boolean; //flag turned on when remote status is being updated implementation uses uCore, rLabs, rCore, rCover, rOrders, fLabPrint, fFrame, fRptBox, Printers, clipbrd, rReports, rGraphs, activex, mshtml, uAccessibleStringGrid; const CT_LABS = 9; // ID for Labs tab used by frmFrame //TX_NOREPORT = 'No report is currently selected.'; <-- original line. //kt 8/17/2007 //TX_NOREPORT_CAP = 'No Report Selected'; <-- original line. //kt 8/17/2007 ZOOM_PERCENT = 99; // padding for inflating margins HTML_PRE = '
';
  HTML_POST = CRLF + '
'; {$R *.DFM} var TX_NOREPORT : string; //kt TX_NOREPORT_CAP : string; //kt procedure SetupVars; //kt Added entire function to replace constant declarations 8/17/2007 begin TX_NOREPORT := DKLangConstW('fLabs_No_report_is_currently_selectedx'); TX_NOREPORT_CAP := DKLangConstW('fLabs_No_Report_Selected'); end; var uFrozen: Boolean; uGraphingActivated: Boolean; uRemoteCount: Integer; uHTMLDoc: string; uReportType: string; uReportRPC: string; uHTMLPatient: ANSIstring; procedure TfrmLabs.RequestPrint; begin SetupVars; //kt added 8/17/2007 to replace constants with vars. with lstReports do begin if ItemIEN = 0 then InfoBox(TX_NOREPORT, TX_NOREPORT_CAP, MB_OK); case ItemIen of 1: begin // InfoBox('Unable to print ''Most Recent'' report.', 'No Print Available', MB_OK); <-- original line. //kt 8/17/2007 InfoBox(DKLangConstW('fLabs_Unable_to_print_xxMost_Recentxx_reportx'), DKLangConstW('fLabs_No_Print_Available'), MB_OK); //kt added 8/17/2007 end; 2: begin PrintLabs(ItemIEN, DisplayText[ItemIndex], lstDates.ItemIEN); end; 3: begin PrintLabs(ItemIEN, DisplayText[ItemIndex], lstDates.ItemIEN); end; 4: begin PrintLabs(ItemIEN, DisplayText[ItemIndex], lstDates.ItemIEN); end; 5: begin // InfoBox('Unable to print ''Worksheet'' report.', 'No Print Available', MB_OK); <-- original line. //kt 8/17/2007 InfoBox(DKLangConstW('fLabs_Unable_to_print_xxWorksheetxx_reportx'), DKLangConstW('fLabs_No_Print_Available'), MB_OK); //kt added 8/17/2007 end; 6: begin if chtChart.Visible then PrintLabGraph; end; 8: begin PrintLabs(ItemIEN, DisplayText[ItemIndex], lstDates.ItemIEN); end; 9: begin PrintLabs(ItemIEN, DisplayText[ItemIndex], lstDates.ItemIEN); end; 10: begin PrintLabs(ItemIEN, DisplayText[ItemIndex], lstDates.ItemIEN); end; 20: begin PrintLabs(ItemIEN, DisplayText[ItemIndex], lstDates.ItemIEN); end; 21: begin PrintLabs(ItemIEN, DisplayText[ItemIndex], lstDates.ItemIEN); end; end; end; end; procedure TfrmLabs.FormCreate(Sender: TObject); var aList: TStrings; begin inherited; PageID := CT_LABS; grdLab.Color := ReadOnlyColor; memLab.Color := ReadOnlyColor; uFrozen := False; aList := TStringList.Create; FastAssign(rpcGetGraphSettings, aList); uGraphingActivated := aList.Count > 0; aList.Free; uRemoteCount := 0; tmpGrid := TStringList.Create; uLabLocalReportData := TStringList.Create; uLabRemoteReportData := TStringList.Create; uPrevReportIndex := 0; lstReports.ItemIndex := uPrevReportIndex; if Patient.Inpatient then lstDates.ItemIndex := 2 else lstDates.ItemIndex := 5; lblSingleTest.Caption := ''; lblSpecimen.Caption := ''; SerTest.GetHorizAxis.ExactDateTime := true; SerTest.GetHorizAxis.Increment := DateTimeStep[dtOneMinute]; TAccessibleStringGrid.WrapControl(grdLab); end; procedure TfrmLabs.UpdateRemoteStatus(aSiteID, aStatus: string); var j: integer; s: string; c: boolean; begin if uUpdateStat = true then exit; //uUpdateStat also looked at in fFrame uUpdateStat := true; for j := 0 to frmFrame.lstCIRNLocations.Items.Count - 1 do begin s := frmFrame.lstCIRNLocations.Items[j]; c := frmFrame.lstCIRNLocations.checked[j]; if piece(s, '^', 1) = aSiteID then begin frmFrame.lstCIRNLocations.Items[j] := pieces(s, '^', 1, 3) + '^' + aStatus; frmFrame.lstCIRNLocations.checked[j] := c; end; end; uUpdateStat := false; end; function TfrmLabs.AllowContextChange(var WhyNot: string): Boolean; var i: integer; begin Result := inherited AllowContextChange(WhyNot); // sets result = true if Timer1.Enabled = true then case BOOLCHAR[frmFrame.CCOWContextChanging] of '1': begin // WhyNot := 'A remote data query in progress will be aborted.'; <-- original line. //kt 8/17/2007 WhyNot := DKLangConstW('fLabs_A_remote_data_query_in_progress_will_be_abortedx'); //kt added 8/17/2007 Result := False; end; '0': if WhyNot = 'COMMIT' then begin with RemoteSites.SiteList do for i := 0 to Count - 1 do if TRemoteSite(Items[i]).Selected then if Length(TRemoteSite(Items[i]).LabRemoteHandle) > 0 then begin TRemoteSite(Items[i]).ReportClear; // TRemoteSite(Items[i]).LabQueryStatus := '-1^Aborted'; <-- original line. //kt 8/17/2007 TRemoteSite(Items[i]).LabQueryStatus := '-1^'+DKLangConstW('fLabs_Aborted'); //kt added 8/17/2007 TabControl1.OnChange(nil); end; Timer1.Enabled := false; Result := True; end; end; end; procedure TfrmLabs.ClearPtData; begin inherited ClearPtData; Timer1.Enabled := False; memLab.Lines.Clear; uLabLocalReportData.Clear; uLabRemoteReportData.Clear; TabControl1.Tabs.Clear; TabControl1.Visible := false; tmpGrid.Clear; with grdLab do begin RowCount := 1; ColCount := 1; Cells[0, 0] := ''; end; end; procedure TfrmLabs.DisplayPage; begin inherited DisplayPage; frmFrame.mnuFilePrint.Tag := CT_LABS; frmFrame.mnuFilePrint.Enabled := True; frmFrame.mnuFilePrintSetup.Enabled := True; memLab.SelStart := 0; uHTMLPatient := '
' + '' + '' + '' + '' + '' + '
Patient: ' + Patient.Name + '' + Patient.SSN + 'Age: ' + IntToStr(Patient.Age) + '

'; //the preferred method would be to use headers and footers //so this is just an interim solution. if InitPage then begin ListLabReports(lstReports.Items); end; if InitPatient and not (CallingContext = CC_NOTIFICATION) then begin if Patient.Inpatient then lstDates.ItemIndex := 2 else lstDates.ItemIndex := 5; lstReports.ItemIndex := 0; lstReportsClick(self); end; case CallingContext of CC_INIT_PATIENT: if not InitPatient then begin if Patient.Inpatient then lstDates.ItemIndex := 2 else lstDates.ItemIndex := 5; lstReports.ItemIndex := 0; lstReportsClick(self); end; CC_NOTIFICATION: ProcessNotifications; end; end; procedure TfrmLabs.SetFontSize(NewFontSize: Integer); begin inherited SetFontSize(NewFontSize); FormResize(self); end; procedure TfrmLabs.DisplayHeading; begin with lblHeading do begin // Caption := 'Laboratory Results - ' + lstReports.DisplayText[lstReports.ItemIndex]; <-- original line. //kt 8/17/2007 Caption := DKLangConstW('fLabs_Laboratory_Results_x') + lstReports.DisplayText[lstReports.ItemIndex]; //kt added 8/17/2007 if lstDates.Visible then Caption := Caption + ' - ' + lstDates.DisplayText[lstDates.ItemIndex]; end; end; procedure TfrmLabs.AlignList; begin lblReports.Top := 0; lstReports.Top := lblReports.Height; lstDates.Height := pnlLeft.Height div 3 - (lblDates.Height div 2); lstDates.Top := pnlLeft.Height - lstDates.Height; lblDates.Top := lstDates.Top - lblDates.Height; pnlOtherTests.Top := lblDates.Top - pnlOtherTests.Height; lstHeaders.Height := pnlLeft.Height div 3 - (lblHeaders.Height * 3); lstHeaders.Top := lblDates.Top - lstHeaders.Height; lblHeaders.Top := lstHeaders.Top - lblHeaders.Height; lstReports.Repaint; lstDates.Repaint; lstHeaders.Repaint; end; procedure TfrmLabs.lstReportsClick(Sender: TObject); begin ExtlstReportsClick(Sender, false); end; procedure TfrmLabs.ExtlstReportsClick(Sender: TObject; Ext: boolean); var i,iCat: integer; Rpt: string; begin inherited; uRemoteCount := 0; Timer1.Enabled := False; Rpt := lstReports.Items[lstReports.ItemIndex]; uReportType := Piece(Rpt,'^',4); uReportRPC := UpperCase(Piece(Rpt,'^',6)); if length(Piece(Rpt,'^',5)) > 0 then iCat := StrToInt(Piece(Rpt,'^',5)) else iCat := 0; if uReportType = '' then uReportType := 'R'; StatusText(''); uLabLocalReportData.Clear; uLabRemoteReportData.Clear; lstHeaders.Clear; TabControl1.Visible := false; if Piece(Rpt,'^',3) = '1' then if TabControl1.Tabs.Count > 1 then TabControl1.Visible := true; for i := 0 to RemoteSites.SiteList.Count - 1 do TRemoteSite(RemoteSites.SiteList.Items[i]).LabClear; if uFrozen = True then memo1.visible := False; case lstReports.ItemIEN of 1: begin // Most Recent CommonComponentVisible(false,false,false,false,false,true,true,false,true); pnlButtons.Visible := true; pnlWorksheet.Visible := false; pnlGraph.Visible := false; memLab.Align := alBottom; memLab.Height := pnlLeft.Height div 5; grdLab.Align := alClient; memLab.Clear; if uReportType = 'H' then begin WebBrowser1.Navigate('about:blank'); WebBrowser1.Align := alBottom; WebBrowser1.Height := pnlLeft.Height div 5; WebBrowser1.Visible := true; WebBrowser1.BringToFront; memLab.Visible := false; end else begin WebBrowser1.Visible := false; WebBrowser1.SendToBack; memLab.Visible := true; memLab.BringToFront; end; FormResize(self); cmdRecentClick(self); uPrevReportIndex := lstReports.ItemIndex; end; 4: begin // Interim for Selected Tests if uPrevReportIndex <> lstReports.ItemIndex then begin lstTests.Clear; lblSpecimen.Caption := ''; end; if not Ext then SelectTests(Font.Size); if lstTests.Items.Count > 0 then begin CommonComponentVisible(false,false,true,true,true,false,false,false,true); memLab.Clear; chkBrowser; FormResize(self); RedrawActivate(memLab.Handle); lstDatesClick(self); if not Ext then cmdOtherTests.SetFocus; cmdOtherTests.Default := true; end else lstReports.ItemIndex := uPrevReportIndex; end; 5: begin // Worksheet if uPrevReportIndex <> lstReports.ItemIndex then begin lstTests.Clear; lblSpecimen.Caption := ''; end; if not Ext then SelectTestGroups(Font.Size); if lstTests.Items.Count > 0 then begin CommonComponentVisible(false,false,true,true,true,true,true,false,false); chtChart.Visible := true; memLab.Visible := false; pnlButtons.Visible := false; pnlWorksheet.Visible := true; pnlGraph.Visible := false; lstTestGraph.Width := 97; ragCorG.ItemIndex := 0; FormResize(self); // lblFooter.Caption := ' KEY: "L" = Abnormal Low, "H" = Abnormal High, "*" = Critical Value, "**" = Comments on Specimen'; <-- original line. //kt 8/17/2007 lblFooter.Caption := DKLangConstW('fLabs_KEYx_xLx_x_Abnormal_Lowx_xHx_x_Abnormal_Highx_xxx_x_Critical_Valuex_xxxx_x_Comments_on_Specimen'); //kt added 8/17/2007 //chkZoom.Checked := false; //chkZoomClick(self); lstDatesClick(self); if not Ext then cmdOtherTests.SetFocus; cmdOtherTests.Default := true; end else lstReports.ItemIndex := uPrevReportIndex; end; 6: begin // Graph // do if graphing is activiated if uGraphingActivated then begin memLab.Clear; chkBrowser; FormResize(self); memLab.Align := alClient; CommonComponentVisible(false,false,false,false,false,false,false,false,false); RedrawActivate(memLab.Handle); StatusText(''); memLab.Lines.Insert(0, ' '); // memLab.Lines.Insert(1, 'Graphing activated'); <-- original line. //kt 8/17/2007 memLab.Lines.Insert(1, DKLangConstW('fLabs_Graphing_activated')); //kt added 8/17/2007 memLab.SelStart := 0; frmFrame.mnuToolsGraphingClick(self); // make it just lab tests ?? //lstReports.ItemIndex := uPrevReportIndex; end else // otherwise, do lab graph begin if uPrevReportIndex <> lstReports.ItemIndex then begin lblSingleTest.Caption := ''; lblSpecimen.Caption := ''; end; if not Ext then SelectTest(Font.Size); if (length(lblSingleTest.Caption) > 2) and (length(lblSpecimen.Caption) > 2) then begin CommonComponentVisible(false,false,true,true,true,true,false,false,true); pnlChart.Visible := true; chtChart.Visible := true; pnlButtons.Visible := false; pnlWorksheet.Visible := false; pnlGraph.Visible := true; memLab.Height := pnlRight.Height div 5; memLab.Clear; if uReportType = 'H' then begin WebBrowser1.Visible := true; WebBrowser1.Navigate('about:blank'); WebBrowser1.Height := pnlRight.Height div 5; WebBrowser1.BringToFront; memLab.Visible := false; end else begin WebBrowser1.Visible := false; WebBrowser1.SendToBack; memLab.Visible := true; memLab.BringToFront; end; lstTestGraph.Items.Clear; lstTestGraph.Width := 0; FormResize(self); RedrawActivate(memLab.Handle); lblFooter.Caption := ''; chkGraphZoom.Checked := false; chkGraphZoomClick(self); chkGraph3DClick(self); chkGraphValuesClick(self); lstDatesClick(self); if not Ext then cmdOtherTests.SetFocus; cmdOtherTests.Default := true; end else lstReports.ItemIndex := uPrevReportIndex; end; end else // case begin //added to deal with other reports from file 101.24 memLab.Clear; chkBrowser; FormResize(self); memLab.Align := alClient; case iCat of {Categories of reports: 0:Fixed 1:Fixed w/Dates 2:Fixed w/Headers 3:Fixed w/Dates & Headers 4:Specialized 5:Graphic} 0: begin CommonComponentVisible(false,false,false,false,false,false,false,false,false); // StatusText('Retrieving data...'); <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_dataxxx')); //kt added 8/17/2007 GoRemote(uLabRemoteReportData,lstReports.ItemIEN,1,'',uReportRPC,'0','9999','1',0,0); TabControl1.OnChange(nil); Reports(uLabLocalReportData,Patient.DFN, Piece(Rpt,'^',1), '0', '9999', '1', 0, 0, uReportRPC); if TabControl1.TabIndex < 1 then QuickCopy(uLabLocalReportData,memLab); RedrawActivate(memLab.Handle); StatusText(''); memLab.Lines.Insert(0,' '); memLab.Lines.Delete(0); memLab.SelStart := 0; if uReportType = 'R' then uHTMLDoc := HTML_PRE + uLabLocalReportData.Text + HTML_POST else uHTMLDoc := uHTMLPatient + uLabLocalReportData.Text; if WebBrowser1.Visible = true then WebBrowser1.Navigate('about:blank'); end; 1: begin CommonComponentVisible(false,false,false,true,true,false,false,false,false); memLab.Repaint; lstDatesClick(self); end; 2: begin CommonComponentVisible(true,true,false,false,false,false,false,false,false); lstHeaders.Clear; // StatusText('Retrieving data...'); <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_dataxxx')); //kt added 8/17/2007 GoRemote(uLabRemoteReportData,lstReports.ItemIEN,1,'',uReportRPC,'0','9999','1',0,0); TabControl1.OnChange(nil); Reports(uLabLocalReportData,Patient.DFN, Piece(Rpt,'^',1), '0', '9999', '1', 0, 0, uReportRPC); if uLabLocalReportData.Count > 0 then begin TabControl1.OnChange(nil); if lstHeaders.Items.Count > 0 then lstHeaders.ItemIndex := 0; end; RedrawActivate(memLab.Handle); StatusText(''); memLab.Lines.Insert(0,' '); memLab.Lines.Delete(0); if uReportType = 'R' then uHTMLDoc := HTML_PRE + uLabLocalReportData.Text + HTML_POST else uHTMLDoc := uHTMLPatient + uLabLocalReportData.Text; if WebBrowser1.Visible = true then WebBrowser1.Navigate('about:blank'); end; 3: begin CommonComponentVisible(true,true,false,true,true,false,false,false,true); lstDatesClick(self); memLab.Lines.Insert(0,' '); memLab.Lines.Delete(0); end; end; end; end; uPrevReportIndex := lstReports.ItemIndex; DisplayHeading; end; procedure TfrmLabs.lstHeadersClick(Sender: TObject); var Current, Desired: integer; begin inherited; if uFrozen = True then memo1.visible := False; Current := SendMessage(memLab.Handle, EM_GETFIRSTVISIBLELINE, 0, 0); Desired := lstHeaders.ItemIEN; SendMessage(memLab.Handle, EM_LINESCROLL, 0, Desired - Current - 1); end; procedure TfrmLabs.lstDatesClick(Sender: TObject); var tmpList: TStringList; daysback: integer; date1, date2: TFMDateTime; today: TDateTime; i: integer; Rpt: string; begin inherited; uRemoteCount := 0; if uFrozen = True then memo1.visible := False; Screen.Cursor := crHourGlass; DisplayHeading; uHTMLDoc := ''; Rpt := lstReports.Items[lstReports.ItemIndex]; uReportRPC := UpperCase(Piece(Rpt,'^',6)); chkBrowser; if (lstDates.ItemID = 'S') then begin with calLabRange do begin if Execute then if Length(TextOfStart) > 0 then if Length(TextOfStop) > 0 then begin lstDates.ItemIndex := lstDates.Items.Add(RelativeStart + ';' + RelativeStop + U + TextOfStart + ' to ' + TextOfStop); DisplayHeading; end else lstDates.ItemIndex := -1 else lstDates.ItemIndex := -1 else lstDates.ItemIndex := -1; end; end; today := FMToDateTime(floattostr(FMToday)); if lstDates.ItemIEN > 0 then begin daysback := lstDates.ItemIEN; date1 := FMToday; If daysback = 1 then date2 := DateTimeToFMDateTime(today) Else date2 := DateTimeToFMDateTime(today - daysback); end else BeginEndDates(date1,date2,daysback); date1 := date1 + 0.2359; uHTMLDoc := ''; WebBrowser1.Navigate('about:blank'); case lstReports.ItemIEN of 21: begin // Cumulative lstHeaders.Clear; memLab.Clear; uLabLocalReportData.Clear; uLabRemoteReportData.Clear; // StatusText('Retrieving data for cumulative report...'); <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_data_for_cumulative_reportxxx')); //kt added 8/17/2007 GoRemote(uLabRemoteReportData,0,2,'',uReportRPC,'',IntToStr(daysback),'',date1,date2); TabControl1.OnChange(nil); Cumulative(uLabLocalReportData, Patient.DFN, daysback, date1, date2, uReportRPC); if uLabLocalReportData.Count > 0 then begin TabControl1.OnChange(nil); if lstHeaders.Items.Count > 0 then lstHeaders.ItemIndex := 0; end; memLab.Lines.Insert(0,' '); memLab.Lines.Delete(0); end; 3: begin // Interim memLab.Clear; uLabLocalReportData.Clear; uLabRemoteReportData.Clear; // StatusText('Retrieving data for interim report...'); <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_data_for_interim_reportxxx')); //kt added 8/17/2007 GoRemote(uLabRemoteReportData,0,3,'',uReportRPC,'','','',date1,date2); TabControl1.OnChange(nil); Interim(uLabLocalReportData, Patient.DFN, date1, date2, uReportRPC); if uLabLocalReportData.Count < 1 then // uLabLocalReportData.Add(''); <-- original line. //kt 8/17/2007 uLabLocalReportData.Add(DKLangConstW('fLabs_xNo_results_for_this_date_rangexx')); //kt added 8/17/2007 if TabControl1.TabIndex < 1 then QuickCopy(uLabLocalReportData,memLab); memLab.Lines.Insert(0,' '); memLab.Lines.Delete(0); memLab.SelStart := 0; end; 4: begin // Interim for Selected Tests memLab.Clear; uLabLocalReportData.Clear; uLabRemoteReportData.Clear; try // StatusText('Retrieving data for selected tests...'); <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_data_for_selected_testsxxx')); //kt added 8/17/2007 uLabLocalReportData.Assign(InterimSelect(Patient.DFN, date1, date2, lstTests.Items)); if uLabLocalReportData.Count > 0 then QuickCopy(uLabLocalReportData,memLab) else // memLab.Lines.Add(''); <-- original line. //kt 8/17/2007 memLab.Lines.Add(DKLangConstW('fLabs_xNo_results_for_selected_tests_in_this_date_rangexx')); //kt added 8/17/2007 memLab.SelStart := 0; finally //tmpList.Free; end; end; 5: begin // Worksheet chtChart.BottomAxis.Automatic := true; chkZoom.Checked := false; //chkZoomClick(self); chkAbnormals.Checked := false; memLab.Clear; uLabLocalReportData.Clear; uLabRemoteReportData.Clear; grdLab.Align := alClient; // StatusText('Retrieving data for worksheet...'); <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_data_for_worksheetxxx')); //kt added 8/17/2007 tmpGrid.Assign(Worksheet(Patient.DFN, date1, date2, Piece(lblSpecimen.Caption, '^', 1), lstTests.Items)); if ragHorV.ItemIndex = 0 then HGrid(tmpGrid) else VGrid(tmpGrid); GraphList(tmpGrid); GridComments(tmpGrid); ragCorGClick(self); end; 6: begin // Graph if not uGraphingActivated then begin chtChart.BottomAxis.Automatic := true; chkGraphZoom.Checked := false; chkGraphZoomClick(self); memLab.Clear; uLabLocalReportData.Clear; uLabRemoteReportData.Clear; tmpList := TStringList.Create; try // StatusText('Retrieving data for graph...'); <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_data_for_graphxxx')); //kt added 8/17/2007 tmpList.Assign(GetChart(Patient.DFN, date1, date2, Piece(lblSpecimen.Caption, '^', 1), Piece(lblSingleTest.Caption, '^', 1))); if tmpList.Count > 1 then begin chtChart.Visible := true; GraphChart(lblSingleTest.Caption, tmpList); chtChart.ZoomPercent(ZOOM_PERCENT); for i := strtoint(Piece(tmpList[0], '^', 1)) + 1 to tmpList.Count - 1 do memLab.Lines.Add(tmpList[i]); if memLab.Lines.Count < 2 then // memLab.Lines.Add(''); <-- original line. //kt 8/17/2007 memLab.Lines.Add(DKLangConstW('fLabs_xNo_comments_on_specimensxx')); //kt added 8/17/2007 memLab.SelStart := 0; lblGraph.Visible := false; end else begin lblGraph.Left := chtChart.Left + ((chtChart.Width - lblGraph.Width) div 2); lblGraph.Top := 2; lblGraph.Visible := true; if Piece(lblSpecimen.Caption, '^', 1) = '0' then // pnlChart.Caption := ' ' <-- original line. //kt 8/17/2007 Piece(lblSingleTest.Caption, '^', 2) + DKLangConstW('fLabs_in_this_date_rangexx') //kt added 8/17/2007 // + 'Results may be available, but cannot be graphed. Please try an alternate view.' <-- original line. //kt 8/17/2007 + DKLangConstW('fLabs_Results_may_be_availablex_but_cannot_be_graphedx_Please_try_an_alternate_viewx') //kt added 8/17/2007 else // pnlChart.Caption := ' ' <-- original line. //kt 8/17/2007 DKLangConstW('fLabs_x_in_this_date_rangexx') //kt added 8/17/2007 // + 'Results may be available, but cannot be graphed. Please try an alternate view.'; <-- original line. //kt 8/17/2007 + DKLangConstW('fLabs_Results_may_be_availablex_but_cannot_be_graphedx_Please_try_an_alternate_viewx'); //kt added 8/17/2007 chtChart.Visible := false; end; finally tmpList.Free; end; end; end; 9: begin // Micro memLab.Clear; uLabLocalReportData.Clear; uLabRemoteReportData.Clear; // StatusText('Retrieving microbiology data...'); <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_microbiology_dataxxx')); //kt added 8/17/2007 GoRemote(uLabRemoteReportData,0,4,'',uReportRPC,'','','',date1,date2); TabControl1.OnChange(nil); Micro(uLabLocalReportData, Patient.DFN, date1, date2, uReportRPC); if uLabLocalReportData.Count < 1 then // uLabLocalReportData.Add(''); <-- original line. //kt 8/17/2007 uLabLocalReportData.Add(DKLangConstW('fLabs_xNo_microbiology_results_for_this_date_rangexx')); //kt added 8/17/2007 if TabControl1.TabIndex < 1 then QuickCopy(uLabLocalReportData,memLab); memLab.Lines.Insert(0,' '); memLab.Lines.Delete(0); memLab.SelStart := 0; end; 10: begin // Lab Status memLab.Clear; uLabLocalReportData.Clear; uLabRemoteReportData.Clear; // StatusText('Retrieving lab status data...'); <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_lab_status_dataxxx')); //kt added 8/17/2007 GoRemote(uLabRemoteReportData,9,1,'',uReportRPC,'',IntToStr(daysback),'',date1,date2); TabControl1.OnChange(nil); Reports(uLabLocalReportData,Patient.DFN, '9', '', IntToStr(daysback),'', date1, date2, uReportRPC); if uLabLocalReportData.Count < 1 then // uLabLocalReportData.Add(''); <-- original line. //kt 8/17/2007 uLabLocalReportData.Add(DKLangConstW('fLabs_xNo_laboratory_orders_for_this_date_rangexx')); //kt added 8/17/2007 if TabControl1.TabIndex < 1 then QuickCopy(uLabLocalReportData,memLab); memLab.Lines.Insert(0,' '); memLab.Lines.Delete(0); memLab.SelStart := 0; end; else begin //Anything Else lstHeaders.Clear; memLab.Clear; uLabLocalReportData.Clear; uLabRemoteReportData.Clear; // StatusText('Retrieving lab data...'); <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_lab_dataxxx')); //kt added 8/17/2007 GoRemote(uLabRemoteReportData, StrToInt(Piece(Rpt,'^',1)), 1, '', uReportRPC, '', IntToStr(daysback), '', date1, date2); TabControl1.OnChange(nil); Reports(uLabLocalReportData,Patient.DFN, Piece(Rpt,'^',1), '', IntToStr(daysback), '', date1, date2, uReportRPC); if uLabLocalReportData.Count < 1 then // uLabLocalReportData.Add(''); <-- original line. //kt 8/17/2007 uLabLocalReportData.Add(DKLangConstW('fLabs_xNo_data_for_this_date_rangexx')); //kt added 8/17/2007 if TabControl1.TabIndex < 1 then QuickCopy(uLabLocalReportData,memLab); memLab.Lines.Insert(0,' '); memLab.Lines.Delete(0); memLab.SelStart := 0; end; end; if uReportType = 'R' then uHTMLDoc := HTML_PRE + uLabLocalReportData.Text + HTML_POST else uHTMLDoc := uHTMLPatient + uLabLocalReportData.Text; Screen.Cursor := crDefault; StatusText(''); end; procedure TfrmLabs.cmdOtherTestsClick(Sender: TObject); begin inherited; lstReportsClick(self); end; procedure TfrmLabs.GraphList(griddata: TStrings); var i, j: integer; ok: boolean; testname, testnum, testnum1, line: string; begin lstTestGraph.Clear; for i := 0 to lstTests.Items.Count - 1 do begin testnum := Piece(lstTests.Items[i], '^', 1); testname := Piece(lstTests.Items[i], '^', 2); ok := false; for j := strtoint(Piece(griddata[0], '^', 4)) + 1 to strtointdef(Piece(griddata[0], '^', 5), 0) do begin testnum1 := Piece(griddata[j - 1], '^', 1); if testnum1 = testnum then begin ok := true; line := testnum + '^' + testname + ' (' + MixedCase(Piece(griddata[j - 1], '^', 2)) + ')^'; line := line + Pieces(griddata[j - 1], '^', 3, 6); lstTestGraph.Items.Add(line); end; end; if not ok then lstTestGraph.Items.Add(lstTests.Items[i]); end; end; procedure TfrmLabs.HGrid(griddata: TStrings); var testcnt, datecnt, datacnt, linecnt, offset, x, y, i: integer; begin offset := 0; testcnt := strtoint(Piece(griddata[offset], '^', 1)); datecnt := strtoint(Piece(griddata[offset], '^', 2)); datacnt := strtoint(Piece(griddata[offset], '^', 3)); linecnt := testcnt + datecnt + datacnt; if chkAbnormals.Checked and (linecnt > 0) then begin offset := linecnt + 1; testcnt := strtoint(Piece(griddata[offset], '^', 1)); datecnt := strtoint(Piece(griddata[offset], '^', 2)); datacnt := strtoint(Piece(griddata[offset], '^', 3)); linecnt := testcnt + datecnt + datacnt; end; with grdLab do begin if testcnt = 0 then ColCount := 3 else ColCount := testcnt + 2; if datecnt = 0 then RowCount := 2 else RowCount := datecnt + 1; DefaultColWidth := ResizeWidth( BaseFont, MainFont, 60); ColWidths[0] := ResizeWidth( BaseFont, MainFont, 80); FixedCols := 2; FixedRows := 1; for y := 0 to RowCount - 1 do for x := 0 to ColCount - 1 do Cells[x, y] := ''; // Cells[0, 0] := 'Date/Time'; <-- original line. //kt 8/17/2007 Cells[0, 0] := DKLangConstW('fLabs_DatexTime'); //kt added 8/17/2007 // Cells[1, 0] := 'Specimen'; <-- original line. //kt 8/17/2007 Cells[1, 0] := DKLangConstW('fLabs_Specimen'); //kt added 8/17/2007 for i := 1 to testcnt do begin Cells[i + 1, 0] := Piece(griddata[i + offset], '^', 3); end; if datecnt = 0 then begin // Cells[0, 1] := 'no results'; <-- original line. //kt 8/17/2007 Cells[0, 1] := DKLangConstW('fLabs_no_results'); //kt added 8/17/2007 for x := 1 to ColCount - 1 do Cells[x, 1] := ''; end; for i := testcnt + 1 to testcnt + datecnt do begin // Cells[0, i - testcnt] := FormatFMDateTime('mm/dd/yy hh:nn',MakeFMDateTime(Piece(griddata[i + offset], '^', 2))); <-- original line. //kt 8/17/2007 Cells[0, i - testcnt] := FormatFMDateTime(DKLangConstW('fLabs_mmxddxyy_hhxnn'),MakeFMDateTime(Piece(griddata[i + offset], '^', 2))); //kt added 8/17/2007 Cells[1, i - testcnt] := MixedCase(Piece(griddata[i + offset], '^', 4)) + ' ' + Piece(griddata[i + offset], '^', 5); end; for i := testcnt + datecnt + 1 to linecnt do begin y := strtoint(Piece(griddata[i + offset], '^', 1)); x := strtoint(Piece(griddata[i + offset], '^', 2)) + 1; Cells[x, y] := Piece(griddata[i + offset], '^', 3) + ' ' + Piece(griddata[i + offset], '^', 4); end; end; end; procedure TfrmLabs.VGrid(griddata: TStrings); var testcnt, datecnt, datacnt, linecnt, offset, x, y, i: integer; begin offset := 0; testcnt := strtoint(Piece(griddata[offset], '^', 1)); datecnt := strtoint(Piece(griddata[offset], '^', 2)); datacnt := strtoint(Piece(griddata[offset], '^', 3)); linecnt := testcnt + datecnt + datacnt; if chkAbnormals.Checked and (linecnt > 0) then begin offset := linecnt + 1; testcnt := strtoint(Piece(griddata[offset], '^', 1)); datecnt := strtoint(Piece(griddata[offset], '^', 2)); datacnt := strtoint(Piece(griddata[offset], '^', 3)); linecnt := testcnt + datecnt + datacnt; end; with grdLab do begin if datecnt = 0 then ColCount := 2 else ColCount := datecnt + 1; if testcnt = 0 then RowCount := 3 else RowCount := testcnt + 2; DefaultColWidth := ResizeWidth( BaseFont, MainFont, 80); ColWidths[0] := ResizeWidth( BaseFont, MainFont, 60); FixedCols := 1; FixedRows := 2; for y := 0 to RowCount - 1 do for x := 0 to ColCount - 1 do Cells[x, y] := ''; // Cells[0, 0] := 'Date/Time'; <-- original line. //kt 8/17/2007 Cells[0, 0] := DKLangConstW('fLabs_DatexTime'); //kt added 8/17/2007 // Cells[0, 1] := 'Specimen'; <-- original line. //kt 8/17/2007 Cells[0, 1] := DKLangConstW('fLabs_Specimen'); //kt added 8/17/2007 for i := 1 to testcnt do begin Cells[0, i + 1] := Piece(griddata[i + offset], '^', 3); end; if datecnt = 0 then begin // Cells[1, 0] := 'no results'; <-- original line. //kt 8/17/2007 Cells[1, 0] := DKLangConstW('fLabs_no_results'); //kt added 8/17/2007 for x := 1 to RowCount - 1 do Cells[x, 1] := ''; end; for i := testcnt + 1 to testcnt + datecnt do begin // Cells[i - testcnt, 0] := FormatFMDateTime('mm/dd/yy hh:nn',MakeFMDateTime(Piece(griddata[i + offset], '^', 2))); <-- original line. //kt 8/17/2007 Cells[i - testcnt, 0] := FormatFMDateTime(DKLangConstW('fLabs_mmxddxyy_hhxnn'),MakeFMDateTime(Piece(griddata[i + offset], '^', 2))); //kt added 8/17/2007 Cells[i - testcnt, 1] := MixedCase(Piece(griddata[i + offset], '^', 4)); end; for i := testcnt + datecnt + 1 to linecnt do begin x := strtoint(Piece(griddata[i + offset], '^', 1)); y := strtoint(Piece(griddata[i + offset], '^', 2)) + 1; Cells[x, y] := Piece(griddata[i + offset], '^', 3) + ' ' + Piece(griddata[i + offset], '^', 4); end; end; end; procedure TfrmLabs.GridComments(aitems: TStrings); var i, start: integer; begin start := strtointdef(Piece(aitems[0], '^', 5), 1); memLab.Clear; uLabLocalReportData.Clear; uLabRemoteReportData.Clear; for i := start to aitems.Count - 1 do memLab.Lines.Add(aitems[i]); if (memLab.Lines.Count = 0) and (aitems.Count > 1) then // memLab.Lines.Add(''); <-- original line. //kt 8/17/2007 memLab.Lines.Add(DKLangConstW('fLabs_xNo_comments_on_specimensxx')); //kt added 8/17/2007 memLab.SelStart := 0; end; procedure TfrmLabs.FormDestroy(Sender: TObject); begin inherited; tmpGrid.free; uLabLocalReportData.Free; uLabRemoteReportData.Free; TAccessibleStringGrid.UnwrapControl(grdLab); end; procedure TfrmLabs.FillGrid(agrid: TStringGrid; aitems: TStrings); var testcnt, x, y, i: integer; begin testcnt := strtoint(Piece(aitems[0], '^', 1)); with agrid do begin if testcnt = 0 then RowCount := 3 else RowCount := testcnt + 1; ColCount := 5; DefaultColWidth := agrid.Width div ColCount - 2; ColWidths[0] := agrid.Width div 4; ColWidths[4] := agrid.Width div 4; ColWidths[2] := agrid.Width div 9; ColWidths[3] := agrid.Width div 6; ColWidths[1] := agrid.Width - ColWidths[0] - ColWidths[2] - ColWidths[3] - ColWidths[4] - 8; FixedCols := 0; FixedRows := 1; for y := 0 to RowCount - 1 do for x := 0 to ColCount - 1 do Cells[x, y] := ''; // Cells[0, 0] := 'Test'; <-- original line. //kt 8/17/2007 Cells[0, 0] := DKLangConstW('fLabs_Test'); //kt added 8/17/2007 // Cells[1, 0] := 'Result'; <-- original line. //kt 8/17/2007 Cells[1, 0] := DKLangConstW('fLabs_Result'); //kt added 8/17/2007 // Cells[2, 0] := 'Flag'; <-- original line. //kt 8/17/2007 Cells[2, 0] := DKLangConstW('fLabs_Flag'); //kt added 8/17/2007 // Cells[3, 0] := 'Units'; <-- original line. //kt 8/17/2007 Cells[3, 0] := DKLangConstW('fLabs_Units'); //kt added 8/17/2007 // Cells[4, 0] := 'Ref Range'; <-- original line. //kt 8/17/2007 Cells[4, 0] := DKLangConstW('fLabs_Ref_Range'); //kt added 8/17/2007 for i := 1 to testcnt do begin Cells[0, i] := Piece(aitems[i], '^', 2); Cells[1, i] := Piece(aitems[i], '^', 3); Cells[2, i] := Piece(aitems[i], '^', 4); Cells[3, i] := Piece(aitems[i], '^', 5); Cells[4, i] := Piece(aitems[i], '^', 6); end; end; end; procedure TfrmLabs.FillComments(amemo: TRichEdit; aitems:TStrings); var testcnt, i: integer; specimen, accession, provider: string; begin amemo.Lines.Clear; specimen := Piece(aitems[0], '^', 5); accession := Piece(aitems[0], '^', 6); provider := Piece(aitems[0], '^', 7); //amemo.Lines.Add('Specimen: ' + specimen + '; Accession: ' + accession + '; Provider: ' + provider); <-- original line. //kt 8/17/2007 amemo.Lines.Add(DKLangConstW('fLabs_Specimenx') + specimen + DKLangConstW('fLabs_x____Accessionx') + accession + DKLangConstW('fLabs_x____Providerx') + provider); //kt added 8/17/2007 testcnt := strtoint(Piece(aitems[0], '^', 1)); for i := testcnt + 1 to aitems.Count - 1 do amemo.Lines.Add(aitems[i]); amemo.SelStart := 0; end; procedure TfrmLabs.GetInterimGrid(adatetime: TFMDateTime; direction: integer); var tmpList: TStringList; nexton, prevon: boolean; newest, oldest: string; begin tmpList := TStringList.Create; GetNewestOldest(Patient.DFN, newest, oldest); //****** PATCH nexton := true; prevon := true; try tmpList.Assign(InterimGrid(Patient.DFN, adatetime, direction, uFormat)); if tmpList.Count > 0 then begin lblDateFloat.Caption := Piece(tmpList[0], '^', 3); uFormat := strtointdef(Piece(tmpList[0], '^', 9), 1); if length(lblDateFloat.Caption) > 0 then lblDate.Caption := FormatFMDateTime('MMM DD, YYYY hh:nn', strtofloat(lblDateFloat.Caption)); if length(lblDateFloat.Caption) < 1 then begin lblDateFloat.Caption := FloatToStr(adatetime); nexton := false; end else begin nexton := lblDateFloat.Caption <> newest; prevon := lblDateFloat.Caption <> oldest; end; if (not nexton) and (uFormat = 3) then nexton := true; if (not prevon) and (uFormat = 2) then prevon := true; end else begin lblDateFloat.Caption := ''; lblDate.Caption := ''; end; cmdNext.Enabled := nexton; cmdRecent.Enabled := nexton; lblNext.Enabled := nexton; lblRecent.Enabled := nexton; cmdPrev.Enabled := prevon; cmdOld.Enabled := prevon; lblPrev.Enabled := prevon; lblOld.Enabled := prevon; if cmdOld.Enabled and cmdRecent.Enabled then lblMostRecent.Visible := false else begin lblMostRecent.Visible := true; if (not cmdOld.Enabled) and (not cmdRecent.Enabled) then // lblMostRecent.Caption := 'No Lab Results' <-- original line. //kt 8/17/2007 lblMostRecent.Caption := DKLangConstW('fLabs_No_Lab_Results') //kt added 8/17/2007 else if cmdOld.Enabled then // lblMostRecent.Caption := 'Most Recent Lab Result' <-- original line. //kt 8/17/2007 lblMostRecent.Caption := DKLangConstW('fLabs_Most_Recent_Lab_Result') //kt added 8/17/2007 else // lblMostRecent.Caption := 'Oldest Lab Result'; <-- original line. //kt 8/17/2007 lblMostRecent.Caption := DKLangConstW('fLabs_Oldest_Lab_Result'); //kt added 8/17/2007 end; if tmpList.Count > 0 then begin if Piece(tmpList[0], '^', 2) = 'CH' then begin FillGrid(grdLab, tmpList); FillComments(memLab, tmpList); memLab.Align := alBottom; memLab.Height := pnlLeft.Height div 5; grdLab.Align := alClient; grdLab.Visible := true; memLab.Visible := true; pnlFooter.Height := lblHeading.Height + 5; pnlFooter.Top := pnlLeft.Height - pnlFooter.Height; // lblFooter.Caption := ' KEY: "L" = Abnormal Low, "H" = Abnormal High, "*" = Critical Value'; <-- original line. //kt 8/17/2007 lblFooter.Caption := DKLangConstW('fLabs_KEYx_xLx_x_Abnormal_Lowx_xHx_x_Abnormal_Highx_xxx_x_Critical_Value'); //kt added 8/17/2007 lblFooter.Align := alTop; pnlFooter.Visible := true; if (grdLab.VisibleRowCount + 1) < grdLab.RowCount then grdLab.ColWidths[4] := grdLab.ColWidths[4] - 18; memLab.Repaint; end; if Piece(tmpList[0], '^', 2) = 'MI' then begin tmpList.Delete(0); memLab.Lines.Assign(tmpList); memLab.SelStart := 0; grdLab.Visible := false; pnlFooter.Visible := false; memLab.Align := alClient; end; end else begin grdLab.Visible := false; pnlFooter.Visible := false; memLab.Align := alClient; end; finally tmpList.Free; end; end; procedure TfrmLabs.cmdNextClick(Sender: TObject); var HadFocus: boolean; begin inherited; HadFocus := Screen.ActiveControl = cmdNext; //StatusText('Retrieving next lab data...'); <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_next_lab_dataxxx')); //kt added 8/17/2007 if Length(lblDateFloat.Caption) > 0 then GetInterimGrid(strtofloat(lblDateFloat.Caption), -1); StatusText(''); if HadFocus then begin if cmdNext.Enabled then cmdNext.SetFocus else if cmdPrev.Enabled then cmdPrev.SetFocus else lstReports.SetFocus; end; end; procedure TfrmLabs.cmdPrevClick(Sender: TObject); var HadFocus: boolean; begin inherited; HadFocus := Screen.ActiveControl = cmdPrev; //StatusText('Retrieving previous lab data...'); <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_previous_lab_dataxxx')); //kt added 8/17/2007 if Length(lblDateFloat.Caption) > 0 then GetInterimGrid(strtofloat(lblDateFloat.Caption), 1); StatusText(''); if HadFocus then begin if cmdPrev.Enabled then cmdPrev.SetFocus else if cmdNext.Enabled then cmdNext.SetFocus else lstReports.SetFocus; end; end; procedure TfrmLabs.WorksheetChart(test: string; aitems: TStrings); function OkFloatValue(value: string): boolean; var i, j: integer; first, second: string; begin Result := false; i := strtointdef(value, -99999); if i <> -99999 then Result := true else if pos('.', Copy(Value, Pos('.', Value) + 1, Length(Value))) > 0 then Result := false else begin first := Piece(value, '.', 1); second := Piece(value, '.', 2); if length(second) > 0 then begin i := strtointdef(first, -99999); j := strtointdef(second, -99999); if (i <> -99999) and (j <> -99999) then Result := true; end else begin i :=strtointdef(first, -99999); if i <> -99999 then Result := true; end; end; end; var datevalue, oldstart, oldend: TDateTime; labvalue: double; i, numtest, numcol, numvalues, valuecount: integer; high, low, start, stop, numspec, value, testcheck, units, specimen, testnum, testorder: string; begin if chkZoom.Checked and chtChart.Visible then begin oldstart := chtChart.BottomAxis.Minimum; oldend := chtChart.BottomAxis.Maximum; chtChart.UndoZoom; chtChart.BottomAxis.Automatic := false; chtChart.BottomAxis.Minimum := oldstart; chtChart.BottomAxis.Maximum := oldend; end else begin chtChart.BottomAxis.Automatic := true; end; chtChart.Visible := true; valuecount := 0; testnum := Piece(test, '^', 1); specimen := Piece(test, '^', 3); units := Piece(test, '^', 4); low := Piece(test, '^', 5); high := Piece(test, '^', 6); numtest := strtoint(Piece(aitems[0], '^', 1)); numcol := strtoint(Piece(aitems[0], '^', 2)); numvalues := strtoint(Piece(aitems[0], '^', 3)); serHigh.Clear; serLow.Clear; serTest.Clear; if numtest > 0 then begin for i := 1 to numtest do if testnum = Piece(aitems[i], '^', 2) then begin testorder := inttostr(i); break; end; GetStartStop(start, stop, aitems); if OKFloatValue(high) then begin serHigh.AddXY(FMToDateTime(start), strtofloat(high), '',clTeeColor); serHigh.AddXY(FMToDateTime(stop), strtofloat(high), '',clTeeColor); end; if OKFloatValue(low) then begin serLow.AddXY(FMToDateTime(start), strtofloat(low), '',clTeeColor); serLow.AddXY(FMToDateTime(stop), strtofloat(low), '',clTeeColor); end; numspec := Piece(specimen, '^', 1); chtChart.Legend.Color := grdLab.Color; chtChart.Title.Font.Size := MainFontSize; chtChart.LeftAxis.Title.Caption := units; serTest.Title := Piece(test, '^', 2); //serHigh.Title := 'Ref High ' + high; <-- original line. //kt 8/17/2007 serHigh.Title := DKLangConstW('fLabs_Ref_High') + high; //kt added 8/17/2007 //serLow.Title := 'Ref Low ' + low; <-- original line. //kt 8/17/2007 serLow.Title := DKLangConstW('fLabs_Ref_Low') + low; //kt added 8/17/2007 testcheck := testorder; for i := numtest + numcol + 1 to numtest + numcol + numvalues do if Piece(aitems[i], '^', 2) = testcheck then if Piece(aitems[numtest + strtoint(Piece(aitems[i], '^', 1))], '^', 3) = numspec then begin value := Piece(aitems[i], '^', 3); if OkFloatValue(value) then begin labvalue := strtofloat(value); datevalue := FMToDateTime(Piece(aitems[numtest + strtoint(Piece(aitems[i], '^', 1))], '^', 2)); serTest.AddXY(datevalue, labvalue, '', clTeeColor); inc(valuecount); end; end; end; if valuecount = 0 then begin lblGraph.Left := chtChart.Left + ((chtChart.Width - lblGraph.Width) div 2); lblGraph.Top := 2; lblGraph.Visible := true; if length(Piece(specimen, '^', 2)) > 0 then // pnlChart.Caption := ' ' <-- original line. //kt 8/17/2007 pnlChart.Caption := DKLangConstW('fLabs_xNo_results_can_be_graphed_for') + serTest.Title + DKLangConstW('fLabs_in_this_date_rangexx') //kt added 8/17/2007 else // pnlChart.Caption := ''; <-- original line. //kt 8/17/2007 pnlChart.Caption := DKLangConstW('fLabs_xNo_results_can_be_graphed_for') + Piece(test, '^', 2) + DKLangConstW('fLabs_in_this_date_rangexx'); //kt added 8/17/2007 chtChart.Visible := false; end else lblGraph.Visible := false; if not chkZoom.Checked then begin chtChart.UndoZoom; chtChart.ZoomPercent(ZOOM_PERCENT); end; end; procedure TfrmLabs.GetStartStop(var start, stop: string; aitems: TStrings); var numtest, numcol: integer; begin numtest := strtoint(Piece(aitems[0], '^', 1)); numcol := strtoint(Piece(aitems[0], '^', 2)); start := Piece(aitems[numtest + 1], '^', 2); stop := Piece(aitems[numtest + numcol], '^', 2); end; procedure TfrmLabs.cmdRecentClick(Sender: TObject); var HadFocus: boolean; begin inherited; HadFocus := Screen.ActiveControl = cmdRecent; //StatusText('Retrieving most recent lab data...'); <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_most_recent_lab_dataxxx')); //kt added 8/17/2007 uFormat := 1; GetInterimGrid(FMToday + 0.2359, 1); StatusText(''); if HadFocus and cmdPrev.Enabled then cmdPrev.SetFocus; end; procedure TfrmLabs.cmdOldClick(Sender: TObject); var HadFocus: boolean; begin inherited; HadFocus := Screen.ActiveControl = cmdOld; //StatusText('Retrieving oldest lab data...'); <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_oldest_lab_dataxxx')); //kt added 8/17/2007 uFormat := 1; GetInterimGrid(2700101, -1); if HadFocus and cmdNext.Enabled then cmdNext.SetFocus; StatusText(''); end; procedure TfrmLabs.FormResize(Sender: TObject); begin inherited; AlignList; lblHeaders.Height := lblReports.Height; lblDates.Height := lblReports.Height; lblHeading.Height := lblReports.Height; pnlFooter.Height := lblReports.Height + 5; lblFooter.Height := lblReports.Height; case lstReports.ItemIEN of 1: begin // Most Recent pnlHeader.Align := alTop; memLab.Height := pnlLeft.Height div 5; memLab.Top := pnlLeft.Height - pnlFooter.Height - memLab.Height; memLab.Align := alBottom; grdLab.Align := alClient; if tmpGrid.Count > 0 then HGrid(tmpGrid); if (grdLab.VisibleRowCount + 1) < grdLab.RowCount then grdLab.ColWidths[4] := grdLab.ColWidths[4] - 18; pnlFooter.Top := pnlLeft.Height - pnlFooter.Height; pnlFooter.Align := alBottom; memLab.Repaint; end; 2: begin // Cumulative pnlFooter.Top := pnlLeft.Height - pnlFooter.Height; pnlFooter.Align := alBottom; lblFooter.Align := alTop; memLab.Align := alClient; memLab.Repaint; end; 3: begin // Interim pnlFooter.Top := pnlLeft.Height - pnlFooter.Height; pnlFooter.Align := alBottom; // lblFooter.Caption := ' KEY: "L" = Abnormal Low, "H" = Abnormal High, "*" = Critical Value'; <-- original line. //kt 8/17/2007 lblFooter.Caption := DKLangConstW('fLabs_KEYx_xLx_x_Abnormal_Lowx_xHx_x_Abnormal_Highx_xxx_x_Critical_Value'); //kt added 8/17/2007 lblFooter.Align := alTop; memLab.Align := alClient; memLab.Repaint; end; 4: begin // Interim for Selected Tests pnlFooter.Top := pnlLeft.Height - pnlFooter.Height; pnlFooter.Align := alBottom; // lblFooter.Caption := ' KEY: "L" = Abnormal Low, "H" = Abnormal High, "*" = Critical Value'; <-- original line. //kt 8/17/2007 lblFooter.Caption := DKLangConstW('fLabs_KEYx_xLx_x_Abnormal_Lowx_xHx_x_Abnormal_Highx_xxx_x_Critical_Value'); //kt added 8/17/2007 lblFooter.Align := alTop; memLab.Align := alClient; memLab.Repaint; end; 5: begin // Worksheet pnlHeader.Align := alTop; grdLab.Align := alClient; ragCorGClick(self); pnlFooter.Top := pnlLeft.Height - pnlFooter.Height; pnlFooter.Align := alBottom; end; 6: begin // Graph if not uGraphingActivated then begin memLab.Height := pnlLeft.Height div 4; memLab.Align := alBottom; pnlChart.Top := pnlHeader.Height; pnlChart.Align := alClient; memLab.Height := pnlLeft.Height div 4; memLab.Align := alBottom; memLab.Repaint; end; end; 7: begin // Anatomic Path memLab.Repaint; end; 8: begin // Blood Bank memLab.Repaint; end; 9: begin // Microbiology memLab.Repaint; end; 10: begin // Lab Status memLab.Repaint; end; end; end; procedure TfrmLabs.pnlRightResize(Sender: TObject); begin inherited; pnlRight.Refresh; lblFooter.Height := lblHeading.Height; end; function TfrmLabs.FMToDateTime(FMDateTime: string): TDateTime; var x, Year: string; begin { Note: TDateTime cannot store month only or year only dates } x := FMDateTime + '0000000'; if Length(x) > 12 then x := Copy(x, 1, 12); if StrToInt(Copy(x, 9, 4)) > 2359 then x := Copy(x,1,7) + '.2359'; Year := IntToStr(17 + StrToInt(Copy(x,1,1))) + Copy(x,2,2); x := Copy(x,4,2) + '/' + Copy(x,6,2) + '/' + Year + ' ' + Copy(x,9,2) + ':' + Copy(x,11,2); Result := StrToDateTime(x); end; procedure TfrmLabs.chkValuesClick(Sender: TObject); begin inherited; serTest.Marks.Visible := chkValues.Checked; end; procedure TfrmLabs.chk3DClick(Sender: TObject); begin inherited; chtChart.View3D := chk3D.Checked; end; procedure TfrmLabs.GraphChart(test: string; aitems: TStrings); var datevalue: TDateTime; labvalue: double; i, numvalues: integer; high, low, start, stop, value, units, specimen: string; begin numvalues := strtoint(Piece(aitems[0], '^', 1)); specimen := Piece(aitems[0], '^', 2); high := Piece(aitems[0], '^', 3); low := Piece(aitems[0], '^', 4); units := Piece(aitems[0], '^', 5); if numvalues > 0 then begin start := Piece(aitems[1], '^', 1); stop := Piece(aitems[numvalues], '^', 1); chtChart.Legend.Color := grdLab.Color; serHigh.Clear; serLow.Clear; serTest.Clear; if high <> '' then begin serHigh.AddXY(FMToDateTime(start), strtofloat(high), '',clTeeColor); serHigh.AddXY(FMToDateTime(stop), strtofloat(high), '',clTeeColor); end; if low <> '' then begin serLow.AddXY(FMToDateTime(start), strtofloat(low), '',clTeeColor); serLow.AddXY(FMToDateTime(stop), strtofloat(low), '',clTeeColor); end; //chtChart.Title.Text.Strings[0] := Piece(test, '^', 2) + ' (' + MixedCase(specimen) + ')'; //chtChart.Title.Font.Size := 12; chtChart.LeftAxis.Title.Caption := units; serTest.Title := Piece(test, '^', 2) + ' (' + MixedCase(specimen) + ')'; // serHigh.Title := 'Ref High ' + high; <-- original line. //kt 8/17/2007 serHigh.Title := DKLangConstW('fLabs_Ref_High') + high; //kt added 8/17/2007 // serLow.Title := 'Ref Low ' + low; <-- original line. //kt 8/17/2007 serLow.Title := DKLangConstW('fLabs_Ref_Low') + low; //kt added 8/17/2007 for i := 1 to numvalues do begin value := Piece(aitems[i], '^', 2); labvalue := strtofloat(value); datevalue := FMToDateTime(Piece(aitems[i], '^', 1)); serTest.AddXY(datevalue, labvalue, '', clTeeColor); end; end; end; procedure TfrmLabs.ragHorVClick(Sender: TObject); begin inherited; if ragHorV.ItemIndex = 0 then HGrid(tmpGrid) else VGrid(tmpGrid); end; procedure TfrmLabs.ragCorGClick(Sender: TObject); begin inherited; if ragCorG.ItemIndex = 0 then // comments begin chkZoom.Enabled := false; chk3D.Enabled := false; chkValues.Enabled := false; pnlChart.Visible:= false; grdLab.Align := alNone; memLab.Height := pnlRight.Height div 6; memLab.Top := pnlRight.Height - pnlFooter.Height - memLab.Height; memLab.Align := alBottom; memLab.Visible := true; grdLab.Align := alClient; end else // graph begin chkZoom.Enabled := true; chk3D.Enabled := true; chkValues.Enabled := true; chk3DClick(self); chkValuesClick(self); memLab.Visible := false; grdLab.Align := alNone; //pnlChart.Height := pnlLeft.Height - pnlOtherTests.Top - pnlFooter.Height; //pnlChart.Top := pnlOtherTests.Top; pnlChart.Height := pnlRight.Height div 2; pnlChart.Top := pnlRight.Height - pnlFooter.Height - pnlChart.Height; pnlChart.Align := alBottom; pnlChart.Visible := true; grdLab.Align := alClient; if lstTestGraph.Items.Count > 0 then begin if lstTestGraph.ItemIndex < 0 then lstTestGraph.ItemIndex := 0; lstTestGraphClick(self); end; end; end; procedure TfrmLabs.lstTestGraphClick(Sender: TObject); begin inherited; WorksheetChart(lstTestGraph.Items[lstTestGraph.ItemIndex], tmpGrid); end; procedure TfrmLabs.chkGraphValuesClick(Sender: TObject); begin inherited; serTest.Marks.Visible := chkGraphValues.Checked; end; procedure TfrmLabs.chkGraph3DClick(Sender: TObject); begin inherited; chtChart.View3D := chkGraph3D.Checked; end; procedure TfrmLabs.chkGraphZoomClick(Sender: TObject); begin inherited; chtChart.AllowZoom := chkGraphZoom.Checked; chtChart.AnimatedZoom := chkGraphZoom.Checked; //lblGraphInfo.Caption := 'To Zoom, hold down the mouse button while dragging an area to be enlarged.'; <-- original line. //kt 8/17/2007 lblGraphInfo.Caption := DKLangConstW('fLabs_To_Zoomx_hold_down_the_mouse_button_while_dragging_an_area_to_be_enlargedx'); //kt added 8/17/2007 if chkGraphZoom.Checked then lblGraphInfo.Caption := lblGraphInfo.Caption + #13 // + 'To Zoom Back drag to the upper left. You can also use the actions on the right mouse button.'; <-- original line. //kt 8/17/2007 + DKLangConstW('fLabs_To_Zoom_Back_drag_to_the_upper_leftx_You_can_also_use_the_actions_on_the_right_mouse_buttonx'); //kt added 8/17/2007 lblGraphInfo.Visible := chkGraphZoom.Checked; if not chkGraphZoom.Checked then chtChart.UndoZoom; end; procedure TfrmLabs.GotoTop1Click(Sender: TObject); begin inherited; with memLab do begin SetFocus; SelStart :=0; SelLength :=0; end; end; procedure TfrmLabs.GotoBottom1Click(Sender: TObject); var I,CharCount : Integer; begin Inherited; CharCount :=0; with memLab do begin for I := 0 to lines.count-1 do CharCount := CharCount + Length(Lines[I]) + 2; SetFocus; SelStart := CharCount; SelLength :=0; end; end; procedure TfrmLabs.FreezeText1Click(Sender: TObject); var Current, Desired : Longint; LineCount : Integer; begin Inherited; If memLab.SelLength > 0 then begin Memo1.visible := true; Memo1.Text := memLab.SelText; If Memo1.Lines.Count <6 then LineCount := Memo1.Lines.Count + 1 Else LineCount := 5; Memo1.Height := LineCount * frmLabs.Canvas.TextHeight(memLab.SelText); Current := SendMessage(memLab.handle, EM_GETFIRSTVISIBLELINE, 0, 0); Desired := SendMessage(memLab.handle, EM_LINEFROMCHAR, memLab.SelStart + memLab.SelLength ,0); SendMessage(memLab.Handle,EM_LINESCROLL, 0, Desired - Current); uFrozen := True; end; end; procedure TfrmLabs.UnfreezeText1Click(Sender: TObject); begin Inherited; If uFrozen = True Then begin uFrozen := False; UnFreezeText1.Enabled := False; Memo1.Visible := False; Memo1.Text := ''; end; end; procedure TfrmLabs.PopupMenu1Popup(Sender: TObject); begin inherited; If Screen.ActiveControl.Name <> memLab.Name then begin memLab.SetFocus; memLab.SelStart := 0; end; If memLab.SelLength > 0 Then FreezeText1.Enabled := True Else FreezeText1.Enabled := False; If Memo1.Visible Then UnFreezeText1.Enabled := True; If memLab.SelStart > 0 then GotoTop1.Enabled := True Else GotoTop1.Enabled := False; If SendMessage(memLab.handle, EM_LINEFROMCHAR, memLab.SelStart,0) < memLab.Lines.Count then GotoBottom1.Enabled := True Else GotoBottom1.Enabled := False; case lstReports.ItemIEN of 1: FreezeText1.Enabled := False; 5: FreezeText1.Enabled := False; 6: FreezeText1.Enabled := False; end; end; procedure TfrmLabs.ProcessNotifications; var //AlertDate, CurrentDate: TFMDateTime; OrderIFN: string; begin {uNewest := ''; uOldest := ''; GetNewestOldest(Patient.DFN, uNewest, uOldest); } {AlertDate := Trunc(StrToFMDateTime(Piece(Piece(Notifications.RecordID, U, 2), ';', 3))); CurrentDate := FMToday; lstReports.ItemIndex := 2; if AlertDate = CurrentDate then begin lstDates.ItemIndex := 0; lstReports.ItemIndex := 0; end else if CurrentDate - AlertDate < 7 then lstDates.ItemIndex := 2 else if CurrentDate - AlertDate < 14 then lstDates.ItemIndex := 3 else if CurrentDate - AlertDate < 28 then lstDates.ItemIndex := 4 else lstDates.ItemIndex := 5; lstReportsClick(self); } OrderIFN := Piece(Notifications.AlertData, '@', 1); if StrToIntDef(OrderIFN,0) > 0 then begin lstDates.ItemIndex := -1; lstReports.ItemIndex := -1; Memo1.Visible := false; lblHeaders.Visible := false; lstHeaders.Visible := false; pnlOtherTests.Visible := false; lblDates.Visible := true; lstDates.Visible := true; pnlHeader.Visible := false; grdLab.Visible := false; pnlChart.Visible := false; WebBrowser1.Visible := false; WebBrowser1.SendToBack; memLab.Visible := true; memLab.BringToFront; pnlFooter.Visible := true; memLab.Clear; uLabLocalReportData.Clear; uLabRemoteReportData.Clear; memLab.Align := alClient; FormResize(self); memLab.Lines.Assign(ResultOrder(OrderIFN)); memLab.SelStart := 0; memLab.Repaint; lblHeading.Caption := Notifications.Text; end else begin if Patient.Inpatient then lstDates.ItemIndex := 2 else lstDates.ItemIndex := 5; lstReports.ItemIndex := 0; lstReportsClick(self); end; case Notifications.FollowUp of NF_LAB_RESULTS : Notifications.Delete; NF_ABNORMAL_LAB_RESULTS : Notifications.Delete; NF_SITE_FLAGGED_RESULTS : Notifications.Delete; NF_STAT_RESULTS : Notifications.Delete; NF_CRITICAL_LAB_RESULTS : Notifications.Delete; NF_LAB_THRESHOLD_EXCEEDED : Notifications.Delete; end; end; procedure TfrmLabs.chkZoomClick(Sender: TObject); begin inherited; chtChart.AllowZoom := chkZoom.Checked; chtChart.AnimatedZoom := chkZoom.Checked; if not chkZoom.Checked then begin chtChart.UndoZoom; chtChart.ZoomPercent(ZOOM_PERCENT); end; end; procedure TfrmLabs.chtChartUndoZoom(Sender: TObject); begin inherited; chtChart.BottomAxis.Automatic := true; end; procedure TfrmLabs.popCopyClick(Sender: TObject); begin inherited; chtChart.CopyToClipboardBitmap; end; procedure TfrmLabs.popChartPopup(Sender: TObject); begin inherited; if pnlWorksheet.Visible then begin popValues.Checked := chkValues.Checked; pop3D.Checked := chk3D.Checked; popZoom.Checked := chkZoom.Checked; end else begin popValues.Checked := chkGraphValues.Checked; pop3D.Checked := chkGraph3D.Checked; popZoom.Checked := chkGraphZoom.Checked; end; popZoomBack.Enabled := popZoom.Checked and not chtChart.BottomAxis.Automatic;; if chtChart.Hint <> '' then begin popDetails.Caption := chtChart.Hint; popDetails.Enabled := true; end else begin // popDetails.Caption := 'Details'; <-- original line. //kt 8/17/2007 popDetails.Caption := DKLangConstW('fLabs_Details'); //kt added 8/17/2007 popDetails.Enabled := false; end; end; procedure TfrmLabs.popValuesClick(Sender: TObject); begin inherited; if pnlWorksheet.Visible then begin chkValues.Checked := not chkValues.Checked; chkValuesClick(self); end else begin chkGraphValues.Checked := not chkGraphValues.Checked; chkGraphValuesClick(self); end; end; procedure TfrmLabs.pop3DClick(Sender: TObject); begin inherited; if pnlWorksheet.Visible then begin chk3D.Checked := not chk3D.Checked; chk3DClick(self); end else begin chkGraph3D.Checked := not chkGraph3D.Checked; chkGraph3DClick(self); end; end; procedure TfrmLabs.popZoomClick(Sender: TObject); begin inherited; if pnlWorksheet.Visible then begin chkZoom.Checked := not chkZoom.Checked; chkZoomClick(self); end else begin chkGraphZoom.Checked := not chkGraphZoom.Checked; chkGraphZoomClick(self); end; end; procedure TfrmLabs.popZoomBackClick(Sender: TObject); begin inherited; chtChart.UndoZoom; end; procedure TfrmLabs.chtChartMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited; chtChart.Hint := ''; chtChart.Tag := 0; end; procedure TfrmLabs.chtChartClickSeries(Sender: TCustomChart; Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited; if Series = serHigh then exit; if Series = serLow then exit; uDate1 := Series.XValue[ValueIndex]; uDate2 := uDate1; //chtChart.Hint := 'Details - Lab results for ' + FormatDateTime('dddd, mmmm d, yyyy', Series.XValue[ValueIndex]) + '...'; <-- original line. //kt 8/17/2007 chtChart.Hint := DKLangConstW('fLabs_Details_x_Lab_results_for') + FormatDateTime(DKLangConstW('fLabs_ddddx_mmmm_dx_yyyy'), Series.XValue[ValueIndex]) + DKLangConstW('fLabs_xxx'); //kt added 8/17/2007 chtChart.Tag := ValueIndex + 1; if Button <> mbRight then popDetailsClick(self); end; procedure TfrmLabs.chtChartClickLegend(Sender: TCustomChart; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited; //chtChart.Hint := 'Details - for ' + Piece(serTest.Title, '(', 1) + '...'; <-- original line. //kt 8/17/2007 chtChart.Hint := DKLangConstW('fLabs_Details_x_for') + Piece(serTest.Title, '(', 1) + DKLangConstW('fLabs_xxx'); //kt added 8/17/2007 chtChart.Tag := 0; if Button <> mbRight then popDetailsClick(self); end; procedure TfrmLabs.popDetailsClick(Sender: TObject); var tmpList: TStringList; date1, date2: TFMDateTime; strdate1, strdate2: string; begin inherited; Screen.Cursor := crHourGlass; if chtChart.Tag > 0 then begin tmpList := TStringList.Create; try strdate1 := FormatDateTime('mm/dd/yyyy', uDate1); strdate2 := FormatDateTime('mm/dd/yyyy', uDate2); uDate1 := StrToDateTime(strdate1); uDate2 := StrToDateTime(strdate2); date1 := DateTimeToFMDateTime(uDate1 + 1); date2 := DateTimeToFMDateTime(uDate2); StatusText('Retrieving data for ' + FormatDateTime('dddd, mmmm d, yyyy', uDate2) + '...'); Interim(tmpList, Patient.DFN, date1, date2,'ORWLRR INTERIM'); ReportBox(tmpList, 'Lab results on ' + Patient.Name + ' for ' + FormatDateTime('dddd, mmmm d, yyyy', uDate2), True); finally tmplist.Free; end; end else begin date1 := DateTimeToFMDateTime(chtChart.BottomAxis.Maximum); date2 := DateTimeToFMDateTime(chtChart.BottomAxis.Minimum); tmpList := TStringList.Create; try if lstTestGraph.ItemIndex > -1 then tmpList.Add(lstTestGraph.Items[lstTestGraph.ItemIndex]) else tmpList.Add(Piece(lblSingleTest.Caption, '^', 1)); // StatusText('Retrieving data for ' + serTest.Title + '...'); <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_data_for') + serTest.Title + DKLangConstW('fLabs_xxx')); //kt added 8/17/2007 // ReportBox(InterimSelect(Patient.DFN, date1, date2, tmpList), Piece(serTest.Title, '(', 1) + 'results on ' + Patient.Name, True); <-- original line. //kt 8/17/2007 ReportBox(InterimSelect(Patient.DFN, date1, date2, tmpList), Piece(serTest.Title, '(', 1) + DKLangConstW('fLabs_results_on') + Patient.Name, True); //kt added 8/17/2007 finally tmpList.Free; end; end; Screen.Cursor := crDefault; StatusText(''); end; procedure TfrmLabs.popPrintClick(Sender: TObject); begin inherited; if chtChart.Visible then PrintLabGraph; end; procedure TfrmLabs.PrintLabGraph; var GraphTitle: string; begin inherited; GraphTitle := Piece(lblSingleTest.Caption, '^', 2); if (Length(lblSpecimen.Caption) > 2) then GraphTitle := GraphTitle + ' (' + Piece(lblSpecimen.Caption, '^', 2) + ')'; GraphTitle := GraphTitle + ' - ' + lstDates.DisplayText[lstDates.ItemIndex]; if dlgWinPrint.Execute then PrintGraph(chtChart, GraphTitle); end; procedure TfrmLabs.BeginEndDates(var ADate1, ADate2: TFMDateTime; var ADaysBack: integer); var datetemp: TFMDateTime; today, datetime1, datetime2: TDateTime; relativedate: string; begin today := FMToDateTime(floattostr(FMToday)); relativedate := Piece(lstDates.ItemID, ';', 1); relativedate := Piece(relativedate, '-', 2); ADaysBack := strtointdef(relativedate, 0); ADate1 := DateTimeToFMDateTime(today - ADaysBack); relativedate := Piece(lstDates.ItemID, ';', 2); if StrToIntDef(Piece(relativedate, '+', 2), 0) > 0 then begin relativedate := Piece(relativedate, '+', 2); ADaysBack := strtointdef(relativedate, 0); ADate2 := DateTimeToFMDateTime(today + ADaysBack + 1); end else begin relativedate := Piece(relativedate, '-', 2); ADaysBack := strtointdef(relativedate, 0); ADate2 := DateTimeToFMDateTime(today - ADaysBack); end; datetime1 := FMDateTimeToDateTime(ADate1); datetime2 := FMDateTimeToDateTime(ADate2); if datetime1 < datetime2 then // reorder dates, if needed begin datetemp := ADate1; ADate1 := ADate2; ADate2 := datetemp end; ADate1 := ADate1 + 0.2359; end; procedure TfrmLabs.Timer1Timer(Sender: TObject); var i,j: integer; r0: String; begin inherited; with RemoteSites.SiteList do begin for i := 0 to Count - 1 do if TRemoteSite(Items[i]).Selected then if Length(TRemoteSite(Items[i]).LabRemoteHandle) > 0 then begin r0 := GetRemoteStatus(TRemoteSite(Items[i]).LabRemoteHandle); TRemoteSite(Items[i]).LabQueryStatus := r0; //r0='1^Done' if no errors if piece(r0,'^',1) = '1' then begin RemoteReports.Add(TRemoteSite(Items[i]).CurrentLabQuery, TRemoteSite(Items[i]).LabRemoteHandle); GetRemoteData(TRemoteSite(Items[i]).LabData, TRemoteSite(Items[i]).LabRemoteHandle,Items[i]); TRemoteSite(Items[i]).LabRemoteHandle := ''; TabControl1.OnChange(nil); end else begin uRemoteCount := uRemoteCount + 1; if uRemoteCount > 60 then //5 minute limit begin Timer1.Enabled := False; TRemoteSite(Items[i]).LabQueryStatus := '-1^Timed out'; UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'Timed out'); StatusText(''); TabControl1.OnChange(nil); end else // StatusText('Retrieving Lab data from ' <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_Lab_data_from') //kt added 8/17/2007 + TRemoteSite(Items[i]).SiteName + '...'); end; Timer1.Interval := 5000; end; if Timer1.Enabled = True then begin j := 0; for i := 0 to Count -1 do if Length(TRemoteSite(Items[i]).LabRemoteHandle) > 0 then j := 1; if j = 0 then //Shutdown timer if all sites have been processed begin Timer1.Enabled := False; StatusText(''); end; j := 0; for i := 0 to Count -1 do if TRemoteSite(Items[i]).Selected = true then j := 1; if j = 0 then //Shutdown timer if user has de-selected all sites begin Timer1.Enabled := False; StatusText(''); TabControl1.OnChange(nil); end; end; end; end; procedure TfrmLabs.GoRemote(Dest: TStringList; AItem, AReportID: Int64; AQualifier, ARpc, AHSType, ADaysBack, ASection: string; ADate1, ADate2: TFMDateTime); var i,j: integer; LocalHandle, Report, Query: String; begin { AReportID := 1 Generic report RemoteLabReports 2 Cumulative RemoteLabCumulative 3 Interim RemoteLabInterim 4 Microbioloby RemoteLabMicro } with RemoteSites.SiteList do for i := 0 to Count - 1 do if TRemoteSite(Items[i]).Selected then begin TRemoteSite(Items[i]).LabClear; if (LeftStr(TRemoteSite(Items[i]).SiteID, 5) = '200HD') then begin TRemoteSite(Items[i]).LabQueryStatus := '1^Not Included'; UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'NOT INCLUDED'); TabControl1.OnChange(nil); continue; end; TRemoteSite(Items[i]).CurrentLabQuery := 'Lab' + Patient.DFN + ';' + Patient.ICN + '^' + IntToStr(AItem) + '^' + IntToStr(AReportID) + '^^' + ARpc + '^' + AHSType + '^' + ADaysBack + '^' + ASection + '^' + DateToStr(ADate1) + '^' + DateToStr(ADate2) + '^' + TRemoteSite(Items[i]).SiteID; LocalHandle := ''; for j := 0 to RemoteReports.Count - 1 do begin Query := TRemoteSite(Items[i]).CurrentLabQuery; Report := TRemoteReport(RemoteReports.ReportList.Items[j]).Report; if Report = Query then begin LocalHandle := TRemoteReport(RemoteReports.ReportList.Items[j]).Handle; break; end; end; if Length(LocalHandle) > 1 then with RemoteSites.SiteList do begin GetRemoteData(TRemoteSite(Items[i]).LabData,LocalHandle,Items[i]); TRemoteSite(Items[i]).LabRemoteHandle := ''; TRemoteSite(Items[i]).LabQueryStatus := '1^Done'; UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'Done'); TabControl1.OnChange(nil); end else begin case AReportID of 1: begin RemoteLabReports(Dest, Patient.DFN + ';' + Patient.ICN, IntToStr(AItem), AHSType, ADaysBack, ASection, ADate1, ADate2, TRemoteSite(Items[i]).SiteID, ARpc); end; 2: begin RemoteLabCumulative(Dest, Patient.DFN + ';' + Patient.ICN, StrToInt(Adaysback), Adate1, Adate2, TRemoteSite(Items[i]).SiteID,ARpc); end; 3: begin RemoteLabInterim(Dest, Patient.DFN + ';' + Patient.ICN, Adate1, Adate2, TRemoteSite(Items[i]).SiteID, ARpc); end; 4: begin RemoteLabMicro(Dest, Patient.DFN + ';' + Patient.ICN, Adate1, Adate2, TRemoteSite(Items[i]).SiteID, ARpc); end; else begin RemoteLab(Dest, Patient.DFN + ';' + Patient.ICN, IntToStr(AItem), AHSType, ADaysBack, ASection, ADate1, ADate2, TRemoteSite(Items[i]).SiteID, ARpc); end; end; if Dest[0] = '' then begin TRemoteSite(Items[i]).LabQueryStatus := '-1^Communication error'; UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'Communication error'); end else begin TRemoteSite(Items[i]).LabRemoteHandle := Dest[0]; TRemoteSite(Items[i]).LabQueryStatus := '0^initialization...'; UpdateRemoteStatus(TRemoteSite(Items[i]).SiteID, 'Initialization'); Timer1.Enabled := True; // StatusText('Retrieving reports from ' <-- original line. //kt 8/17/2007 StatusText(DKLangConstW('fLabs_Retrieving_reports_from') //kt added 8/17/2007 + TRemoteSite(Items[i]).SiteName + '...'); end; end; end; end; procedure TfrmLabs.TabControl1Change(Sender: TObject); var aStatus: string; hook: Boolean; i: integer; begin inherited; memLab.Lines.Clear; lstHeaders.Items.Clear; with TabControl1 do begin memLab.Lines.BeginUpdate; if TabIndex > 0 then begin aStatus := TRemoteSite(Tabs.Objects[TabIndex]).LabQueryStatus; // if aStatus = '1^Done' then <-- original line. //kt 8/17/2007 if aStatus = '1^'+DKLangConstW('fLabs_Done') then //kt added 8/17/2007 begin if Piece(TRemoteSite(Tabs.Objects[TabIndex]).LabData[0],'^',1) = '[HIDDEN TEXT]' then begin lstHeaders.Clear; hook := false; for i := 1 to TRemoteSite(Tabs.Objects[TabIndex]).LabData.Count - 1 do if hook = true then memLab.Lines.Add(TRemoteSite(Tabs.Objects[TabIndex]).LabData[i]) else begin lstHeaders.Items.Add(MixedCase(TRemoteSite(Tabs.Objects[TabIndex]).LabData[i])); if Piece(TRemoteSite(Tabs.Objects[TabIndex]).LabData[i],'^',1) = '[REPORT TEXT]' then hook := true; end; end else QuickCopy(TRemoteSite(Tabs.Objects[TabIndex]).LabData,memLab); memLab.Lines.Insert(0,' '); memLab.Lines.Delete(0); end; if Piece(aStatus,'^',1) = '-1' then // memLab.Lines.Add('Remote data transmission error: ' + Piece(aStatus,'^',2)); <-- original line. //kt 8/17/2007 memLab.Lines.Add(DKLangConstW('fLabs_Remote_data_transmission_errorx') + Piece(aStatus,'^',2)); //kt added 8/17/2007 if Piece(aStatus,'^',1) = '0' then // memLab.Lines.Add('Transmission in progress: ' + Piece(aStatus,'^',2)); <-- original line. //kt 8/17/2007 memLab.Lines.Add(DKLangConstW('fLabs_Transmission_in_progressx') + Piece(aStatus,'^',2)); //kt added 8/17/2007 if Piece(aStatus,'^',1) = '' then // memLab.Lines.Add('Select a report...'); <-- original line. //kt 8/17/2007 memLab.Lines.Add(DKLangConstW('fLabs_Select_a_reportxxx')); //kt added 8/17/2007 end else if uLabLocalReportData.Count > 0 then begin if Piece(uLabLocalReportData[0],'^',1) = '[HIDDEN TEXT]' then begin lstHeaders.Clear; hook := false; for i := 1 to uLabLocalReportData.Count - 1 do if hook = true then memLab.Lines.Add(uLabLocalReportData[i]) else begin lstHeaders.Items.Add(MixedCase(uLabLocalReportData[i])); if Piece(uLabLocalReportData[i],'^',1) = '[REPORT TEXT]' then hook := true; end; end else QuickCopy(uLabLocalReportData,memLab); memLab.Lines.Insert(0,' '); memLab.Lines.Delete(0); end; memLab.SelStart := 0; memLab.Lines.EndUpdate; end; end; procedure TfrmLabs.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); var WebDoc: IHtmlDocument2; v: variant; begin inherited; if uHTMLDoc = '' then Exit; if not(uReportType = 'H') then Exit; //this can be removed if & when browser replaces memtext control if not Assigned(WebBrowser1.Document) then Exit; WebDoc := WebBrowser1.Document as IHtmlDocument2; v := VarArrayCreate([0, 0], varVariant); v[0] := uHTMLDoc; WebDoc.write(PSafeArray(TVarData(v).VArray)); WebDoc.close; //uHTMLDoc := ''; end; procedure TfrmLabs.ChkBrowser; begin if uReportType = 'H' then begin WebBrowser1.Visible := true; WebBrowser1.Navigate('about:blank'); WebBrowser1.BringToFront; memLab.Visible := false; end else begin WebBrowser1.Visible := false; WebBrowser1.SendToBack; memLab.Visible := true; memLab.BringToFront; end; end; procedure TfrmLabs.CommonComponentVisible(A1,A2,A3,A4,A5,A6,A7,A8,A9: Boolean); begin lstDates.Visible := false; // turned off to realign correctly lblDates.Visible := false; pnlOtherTests.Visible := false; lstHeaders.Visible := false; lblHeaders.Visible := false; lstDates.Visible := A5; // reordered to realign lblDates.Visible := A4; pnlOtherTests.Visible := A3; lstHeaders.Visible := A2; lblHeaders.Visible := A1; pnlHeader.Visible := A6; grdLab.Visible := A7; pnlChart.Visible := A8; pnlFooter.Visible := A9; if A4 and A1 and (lblDates.Top < lblHeaders.Top) then begin // lblDates.Caption := 'Headings'; // swithes captions if not aligned <-- original line. //kt 8/17/2007 lblDates.Caption := DKLangConstW('fLabs_Headings'); // swithes captions if not aligned //kt added 8/17/2007 // lblHeaders.Caption := 'Date Range'; <-- original line. //kt 8/17/2007 lblHeaders.Caption := DKLangConstW('fLabs_Date_Range'); //kt added 8/17/2007 end else begin // lblDates.Caption := 'Date Range'; <-- original line. //kt 8/17/2007 lblDates.Caption := DKLangConstW('fLabs_Date_Range'); //kt added 8/17/2007 // lblHeaders.Caption := 'Headings'; <-- original line. //kt 8/17/2007 lblHeaders.Caption := DKLangConstW('fLabs_Headings'); //kt added 8/17/2007 end; lstDates.Caption := lblDates.Caption; lstHeaders.Caption := lblHeaders.Caption; end; procedure TfrmLabs.Memo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin inherited; if (Key = VK_TAB) then begin if ssShift in Shift then begin FindNextControl(Sender as TWinControl, False, True, False).SetFocus; //previous control Key := 0; end else if ssCtrl in Shift then begin FindNextControl(Sender as TWinControl, True, True, False).SetFocus; //next control Key := 0; end; end; if (key = VK_ESCAPE) then begin FindNextControl(Sender as TWinControl, False, True, False).SetFocus; //previous control key := 0; end; end; end.