| [460] | 1 | unit fGraphs; | 
|---|
|  | 2 |  | 
|---|
|  | 3 | interface | 
|---|
|  | 4 |  | 
|---|
|  | 5 | uses | 
|---|
|  | 6 | Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, | 
|---|
|  | 7 | ExtCtrls, StdCtrls, ORCtrls, Menus, TeeProcs, TeEngine, Series, Chart, Math, | 
|---|
|  | 8 | ComCtrls, GanttCh, ClipBrd, StrUtils, ORFn, ORDtTmRng, DateUtils, Printers, | 
|---|
|  | 9 | OleServer, Variants, Word97, Word2000, ArrowCha, ORDtTm, uGraphs; | 
|---|
|  | 10 |  | 
|---|
|  | 11 | type | 
|---|
|  | 12 | TfrmGraphs = class(TForm) | 
|---|
|  | 13 | btnChangeSettings: TButton; | 
|---|
|  | 14 | btnClose: TButton; | 
|---|
|  | 15 | btnGraphSelections: TButton; | 
|---|
|  | 16 | bvlBottomLeft: TBevel; | 
|---|
|  | 17 | bvlBottomRight: TBevel; | 
|---|
|  | 18 | bvlTopLeft: TBevel; | 
|---|
|  | 19 | bvlTopRight: TBevel; | 
|---|
|  | 20 | calDateRange: TORDateRangeDlg; | 
|---|
|  | 21 | cboDateRange: TORComboBox; | 
|---|
|  | 22 | chartBase: TChart; | 
|---|
|  | 23 | chartDatelineBottom: TChart; | 
|---|
|  | 24 | chartDatelineTop: TChart; | 
|---|
|  | 25 | chkDualViews: TCheckBox; | 
|---|
|  | 26 | chkItemsBottom: TCheckBox; | 
|---|
|  | 27 | chkItemsTop: TCheckBox; | 
|---|
|  | 28 | dlgDate: TORDateTimeDlg; | 
|---|
|  | 29 | lblDateRange: TLabel; | 
|---|
|  | 30 | lblViewsBottom: TOROffsetLabel; | 
|---|
|  | 31 | lblViewsTop: TOROffsetLabel; | 
|---|
|  | 32 | lstAllTypes: TListBox; | 
|---|
|  | 33 | lstCheck: TListBox; | 
|---|
|  | 34 | lstData: TListBox; | 
|---|
|  | 35 | lstDrugClass: TListBox; | 
|---|
|  | 36 | lstItems: TListBox; | 
|---|
|  | 37 | lstItemsTemp: TListBox; | 
|---|
|  | 38 | lstMultiSpec: TListBox; | 
|---|
|  | 39 | lstNonNumeric: TListBox; | 
|---|
|  | 40 | lstScratchLab: TListBox; | 
|---|
|  | 41 | lstScratchSwap: TListBox; | 
|---|
|  | 42 | lstScratchTemp: TListBox; | 
|---|
|  | 43 | lstSelCopyBottom: TListBox; | 
|---|
|  | 44 | lstSelCopyTop: TListBox; | 
|---|
|  | 45 | lstSpec1: TListBox; | 
|---|
|  | 46 | lstSpec2: TListBox; | 
|---|
|  | 47 | lstSpec3: TListBox; | 
|---|
|  | 48 | lstSpec4: TListBox; | 
|---|
|  | 49 | lstTemp: TListBox; | 
|---|
|  | 50 | lstTempCheck: TListBox; | 
|---|
|  | 51 | lstTestSpec: TListBox; | 
|---|
|  | 52 | lstTypes: TListBox; | 
|---|
|  | 53 | lstViews: TListBox; | 
|---|
|  | 54 | lstZoomHistory: TListBox; | 
|---|
|  | 55 | lvwItemsBottom: TListView; | 
|---|
|  | 56 | lvwItemsTop: TListView; | 
|---|
|  | 57 | mnumedsasgantt: TMenuItem; | 
|---|
|  | 58 | mnumedsasganttvertheight: TMenuItem; | 
|---|
|  | 59 | mnuPopGraph3D: TMenuItem; | 
|---|
|  | 60 | mnuPopGraphClear: TMenuItem; | 
|---|
|  | 61 | mnuPopGraphCopy: TMenuItem; | 
|---|
|  | 62 | mnuPopGraphDates: TMenuItem; | 
|---|
|  | 63 | mnuPopGraphDefineViews: TMenuItem; | 
|---|
|  | 64 | mnuPopGraphDetails: TMenuItem; | 
|---|
|  | 65 | mnuPopGraphDualViews: TMenuItem; | 
|---|
|  | 66 | mnuPopGraphGradient: TMenuItem; | 
|---|
|  | 67 | mnuPopGraphFixed: TMenuItem; | 
|---|
|  | 68 | mnuPopGraphHints: TMenuItem; | 
|---|
|  | 69 | mnuPopGraphHorizontal: TMenuItem; | 
|---|
|  | 70 | mnuPopGraphIsolate: TMenuItem; | 
|---|
|  | 71 | mnuPopGraphLegend: TMenuItem; | 
|---|
|  | 72 | mnuPopGraphLines: TMenuItem; | 
|---|
|  | 73 | mnuPopGraphPrint: TMenuItem; | 
|---|
|  | 74 | mnuPopGraphRemove: TMenuItem; | 
|---|
|  | 75 | mnuPopGraphReset: TMenuItem; | 
|---|
|  | 76 | mnuPopGraphSeparate1: TMenuItem; | 
|---|
|  | 77 | mnuPopGraphSort: TMenuItem; | 
|---|
|  | 78 | mnuPopGraphSplit: TMenuItem; | 
|---|
|  | 79 | mnuPopGraphStayOnTop: TMenuItem; | 
|---|
|  | 80 | mnuPopGraphStuff: TPopupMenu; | 
|---|
|  | 81 | mnuPopGraphSwap: TMenuItem; | 
|---|
|  | 82 | mnuPopGraphToday: TMenuItem; | 
|---|
|  | 83 | mnuPopGraphValues: TMenuItem; | 
|---|
|  | 84 | mnuPopGraphVertical: TMenuItem; | 
|---|
|  | 85 | mnuPopGraphZoomBack: TMenuItem; | 
|---|
|  | 86 | N1: TMenuItem; | 
|---|
|  | 87 | N2: TMenuItem; | 
|---|
|  | 88 | N3: TMenuItem; | 
|---|
|  | 89 | N4: TMenuItem; | 
|---|
|  | 90 | pnlBlankBottom: TPanel; | 
|---|
|  | 91 | pnlBlankTop: TPanel; | 
|---|
|  | 92 | pnlBottom: TPanel; | 
|---|
|  | 93 | pnlBottomRightPad: TPanel; | 
|---|
|  | 94 | pnlData: TPanel; | 
|---|
|  | 95 | pnlDatelineBottom: TPanel; | 
|---|
|  | 96 | pnlDatelineBottomSpacer: TORAutoPanel; | 
|---|
|  | 97 | pnlDatelineTop: TPanel; | 
|---|
|  | 98 | pnlDatelineTopSpacer: TORAutoPanel; | 
|---|
|  | 99 | pnlFooter: TPanel; | 
|---|
|  | 100 | pnlHeader: TPanel; | 
|---|
|  | 101 | pnlInfo: TORAutoPanel; | 
|---|
|  | 102 | pnlItemsBottom: TPanel; | 
|---|
|  | 103 | pnlItemsBottomInfo: TPanel; | 
|---|
|  | 104 | pnlItemsTop: TPanel; | 
|---|
|  | 105 | pnlItemsTopInfo: TPanel; | 
|---|
|  | 106 | pnlMain: TPanel; | 
|---|
|  | 107 | pnlScrollBottomBase: TPanel; | 
|---|
|  | 108 | pnlScrollTopBase: TPanel; | 
|---|
|  | 109 | pnlTemp: TPanel; | 
|---|
|  | 110 | pnlTop: TPanel; | 
|---|
|  | 111 | pnlTopRightPad: TPanel; | 
|---|
|  | 112 | scrlBottom: TScrollBox; | 
|---|
|  | 113 | scrlTop: TScrollBox; | 
|---|
|  | 114 | serDatelineBottom: TGanttSeries; | 
|---|
|  | 115 | serDatelineTop: TGanttSeries; | 
|---|
|  | 116 | splGraphs: TSplitter; | 
|---|
|  | 117 | splItemsBottom: TSplitter; | 
|---|
|  | 118 | splItemsTop: TSplitter; | 
|---|
|  | 119 | timHintPause: TTimer; | 
|---|
|  | 120 | lstSelPrevTop: TListBox; | 
|---|
|  | 121 | lstSelPrevBottom: TListBox; | 
|---|
|  | 122 | lstComp: TListBox; | 
|---|
|  | 123 | pnlViewsTopSpacer: TPanel; | 
|---|
|  | 124 | cboViewsTop: TORComboBox; | 
|---|
|  | 125 | pnlViewsTopSpacerRight: TPanel; | 
|---|
|  | 126 | pnlViewsBottomSpacer: TPanel; | 
|---|
|  | 127 | cboViewsBottom: TORComboBox; | 
|---|
|  | 128 | pnlViewsBottomSpacerRight: TPanel; | 
|---|
|  | 129 | testcount1: TMenuItem; | 
|---|
|  | 130 | procedure FormCreate(Sender: TObject); | 
|---|
|  | 131 | procedure FormShow(Sender: TObject); | 
|---|
|  | 132 | procedure FormClose(Sender: TObject; var Action: TCloseAction); | 
|---|
|  | 133 |  | 
|---|
|  | 134 | procedure btnCloseClick(Sender: TObject); | 
|---|
|  | 135 | procedure btnChangeSettingsClick(Sender: TObject); | 
|---|
|  | 136 | procedure btnGraphSelectionsClick(Sender: TObject); | 
|---|
|  | 137 |  | 
|---|
|  | 138 | procedure chkDualViewsClick(Sender: TObject); | 
|---|
|  | 139 | procedure chkItemsTopClick(Sender: TObject); | 
|---|
|  | 140 | procedure chkItemsBottomClick(Sender: TObject); | 
|---|
|  | 141 |  | 
|---|
|  | 142 | procedure mnuMedsasganttClick(Sender: TObject); | 
|---|
|  | 143 | procedure mnuPopGraph3DClick(Sender: TObject); | 
|---|
|  | 144 | procedure mnuPopGraphClearClick(Sender: TObject); | 
|---|
|  | 145 | procedure mnuPopGraphCopyClick(Sender: TObject); | 
|---|
|  | 146 | procedure mnuPopGraphDatesClick(Sender: TObject); | 
|---|
|  | 147 | procedure mnuPopGraphDetailsClick(Sender: TObject); | 
|---|
|  | 148 | procedure mnuPopGraphDualViewsClick(Sender: TObject); | 
|---|
|  | 149 | procedure mnuPopGraphFixedClick(Sender: TObject); | 
|---|
|  | 150 | procedure mnuPopGraphGradientClick(Sender: TObject); | 
|---|
|  | 151 | procedure mnuPopGraphHintsClick(Sender: TObject); | 
|---|
|  | 152 | procedure mnuPopGraphIsolateClick(Sender: TObject); | 
|---|
|  | 153 | procedure mnuPopGraphLegendClick(Sender: TObject); | 
|---|
|  | 154 | procedure mnuPopGraphLinesClick(Sender: TObject); | 
|---|
|  | 155 | procedure mnuPopGraphPrintClick(Sender: TObject); | 
|---|
|  | 156 | procedure mnuPopGraphRemoveClick(Sender: TObject); | 
|---|
|  | 157 | procedure mnuPopGraphResetClick(Sender: TObject); | 
|---|
|  | 158 | procedure mnuPopGraphSeparate1Click(Sender: TObject); | 
|---|
|  | 159 | procedure mnuPopGraphStayOnTopClick(Sender: TObject); | 
|---|
|  | 160 | procedure mnuPopGraphSortClick(Sender: TObject); | 
|---|
|  | 161 | procedure mnuPopGraphSplitClick(Sender: TObject); | 
|---|
|  | 162 | procedure mnuPopGraphStuffPopup(Sender: TObject); | 
|---|
|  | 163 | procedure mnuPopGraphSwapClick(Sender: TObject); | 
|---|
|  | 164 | procedure mnuPopGraphTodayClick(Sender: TObject); | 
|---|
|  | 165 | procedure mnuPopGraphValuesClick(Sender: TObject); | 
|---|
|  | 166 | procedure mnuPopGraphHorizontalClick(Sender: TObject); | 
|---|
|  | 167 | procedure mnuPopGraphVerticalClick(Sender: TObject); | 
|---|
|  | 168 | procedure mnuPopGraphZoomBackClick(Sender: TObject); | 
|---|
|  | 169 |  | 
|---|
|  | 170 | procedure splGraphsMoved(Sender: TObject); | 
|---|
|  | 171 | procedure splItemsBottomMoved(Sender: TObject); | 
|---|
|  | 172 | procedure splItemsTopMoved(Sender: TObject); | 
|---|
|  | 173 |  | 
|---|
|  | 174 | procedure GetSize; | 
|---|
|  | 175 | procedure SetSize; | 
|---|
|  | 176 |  | 
|---|
|  | 177 | procedure lvwItemsBottomClick(Sender: TObject); | 
|---|
|  | 178 | procedure lvwItemsBottomColumnClick(Sender: TObject; Column: TListColumn); | 
|---|
|  | 179 | procedure lvwItemsBottomCompare(Sender: TObject; Item1, | 
|---|
|  | 180 | Item2: TListItem; Data: Integer; var Compare: Integer); | 
|---|
|  | 181 | procedure lvwItemsTopClick(Sender: TObject); | 
|---|
|  | 182 | procedure lvwItemsTopColumnClick(Sender: TObject; Column: TListColumn); | 
|---|
|  | 183 | procedure lvwItemsTopCompare(Sender: TObject; Item1, Item2: TListItem; | 
|---|
|  | 184 | Data: Integer; var Compare: Integer); | 
|---|
|  | 185 |  | 
|---|
|  | 186 | procedure cboDateRangeChange(Sender: TObject); | 
|---|
|  | 187 | procedure cboViewsBottomChange(Sender: TObject); | 
|---|
|  | 188 | procedure cboViewsTopChange(Sender: TObject); | 
|---|
|  | 189 |  | 
|---|
|  | 190 | procedure pnlScrollTopBaseResize(Sender: TObject); | 
|---|
|  | 191 |  | 
|---|
|  | 192 | procedure chartBaseClickLegend(Sender: TCustomChart; | 
|---|
|  | 193 | Button: TMouseButton; Shift: TShiftState; X, Y: Integer); | 
|---|
|  | 194 | procedure chartBaseClickSeries(Sender: TCustomChart; Series: TChartSeries; | 
|---|
|  | 195 | ValueIndex: Integer; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); | 
|---|
|  | 196 | procedure chartBaseMouseDown(Sender: TObject; Button: TMouseButton; | 
|---|
|  | 197 | Shift: TShiftState; X, Y: Integer); | 
|---|
|  | 198 | procedure chartBaseMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); | 
|---|
|  | 199 | procedure serDatelineTopGetMarkText(Sender: TChartSeries; | 
|---|
|  | 200 | ValueIndex: Integer; var MarkText: String); | 
|---|
|  | 201 |  | 
|---|
|  | 202 | procedure ChartOnUndoZoom(Sender: TObject); | 
|---|
|  | 203 | procedure ChartOnZoom(Sender: TObject); | 
|---|
|  | 204 | procedure DisplayData(aSection: string); | 
|---|
|  | 205 | procedure HideDates(aChart: TChart); | 
|---|
|  | 206 | procedure SourcesDefault; | 
|---|
|  | 207 | procedure StayOnTop; | 
|---|
|  | 208 |  | 
|---|
|  | 209 | procedure timHintPauseTimer(Sender: TObject); | 
|---|
|  | 210 | procedure ZoomUpdate; | 
|---|
|  | 211 | procedure ZoomUpdateInfo(SmallTime, BigTime: TDateTime); | 
|---|
|  | 212 | procedure ZoomTo(SmallTime, BigTime: TDateTime); | 
|---|
|  | 213 | procedure lvwItemsTopChange(Sender: TObject; Item: TListItem; | 
|---|
|  | 214 | Change: TItemChange); | 
|---|
|  | 215 | procedure lvwItemsTopKeyDown(Sender: TObject; var Key: Word; | 
|---|
|  | 216 | Shift: TShiftState); | 
|---|
|  | 217 | procedure lvwItemsBottomChange(Sender: TObject; Item: TListItem; | 
|---|
|  | 218 | Change: TItemChange); | 
|---|
|  | 219 | procedure testcount1Click(Sender: TObject); | 
|---|
|  | 220 | procedure cboDateRangeDropDown(Sender: TObject); | 
|---|
|  | 221 | procedure cboViewsTopDropDown(Sender: TObject); | 
|---|
|  | 222 | procedure cboViewsTopDropDownClose(Sender: TObject); | 
|---|
|  | 223 | procedure cboViewsBottomDropDown(Sender: TObject); | 
|---|
|  | 224 | procedure cboViewsBottomDropDownClose(Sender: TObject); | 
|---|
|  | 225 | procedure FormDestroy(Sender: TObject); | 
|---|
|  | 226 | procedure lvwItemsTopEnter(Sender: TObject); | 
|---|
|  | 227 | procedure lvwItemsBottomEnter(Sender: TObject); | 
|---|
|  | 228 | procedure chkItemsBottomEnter(Sender: TObject); | 
|---|
|  | 229 | procedure cboViewsBottomEnter(Sender: TObject); | 
|---|
|  | 230 |  | 
|---|
|  | 231 | private | 
|---|
|  | 232 | { Private declarations } | 
|---|
|  | 233 | FBSortAscending: boolean; | 
|---|
|  | 234 | FBSortCol: integer; | 
|---|
|  | 235 | FDate1: Double; | 
|---|
|  | 236 | FDate2: Double; | 
|---|
|  | 237 | FSortAscending: boolean; | 
|---|
|  | 238 | FSortCol: integer; | 
|---|
|  | 239 |  | 
|---|
|  | 240 | FActiveGraph: TChart; | 
|---|
|  | 241 | FArrowKeys: boolean; | 
|---|
|  | 242 | FBHighTime, FBLowTime: Double; | 
|---|
|  | 243 | FCreate: boolean; | 
|---|
|  | 244 | FFirstClick: boolean; | 
|---|
|  | 245 | FFirstSwitch: boolean; | 
|---|
|  | 246 | FGraphClick: TCustomChart; | 
|---|
|  | 247 | FGraphSeries: TChartSeries; | 
|---|
|  | 248 | FGraphValueIndex: integer; | 
|---|
|  | 249 | FGraphSetting: TGraphSetting; | 
|---|
|  | 250 | FGraphType: char; | 
|---|
|  | 251 | FItemsSortedTop: boolean; | 
|---|
|  | 252 | FItemsSortedBottom: boolean; | 
|---|
|  | 253 | FMouseDown: boolean; | 
|---|
|  | 254 | FMTimestamp: string; | 
|---|
|  | 255 | FMToday: TFMDateTime; | 
|---|
|  | 256 | FMyProfiles, FProfiles: TStringList; | 
|---|
|  | 257 | FNonNumerics: boolean; // used with pnlItemsTop.Tag & pnlItemsBottom.Tag | 
|---|
|  | 258 | FOnLegend:  integer; | 
|---|
|  | 259 | FOnSeries: integer; | 
|---|
|  | 260 | FOnValue: integer; | 
|---|
|  | 261 | FPrevEvent: string; | 
|---|
|  | 262 | FRetainZoom: boolean; | 
|---|
|  | 263 | FSources: TStrings; | 
|---|
|  | 264 | FSourcesDefault: TStrings; | 
|---|
|  | 265 | FTHighTime, FTLowTime: Double; | 
|---|
|  | 266 | FWarning: boolean; | 
|---|
|  | 267 | FX, FY: integer; | 
|---|
|  | 268 | FYMinValue: Double; | 
|---|
|  | 269 | FYMaxValue: Double; | 
|---|
|  | 270 |  | 
|---|
|  | 271 | procedure AdjustTimeframe; | 
|---|
|  | 272 | procedure AllTypeDate(aType, aTypeName, firstline, secondline: string; aDate, aDate2: double); | 
|---|
|  | 273 | procedure AllDetails(aDate1, aDate2: TFMDateTime; aTempList: TStrings); | 
|---|
|  | 274 | procedure AssignProfile(aProfile, aSection: string); | 
|---|
|  | 275 | procedure AutoSelect(aListView: TListView); | 
|---|
|  | 276 | procedure BaseResize(aScrollBox: TScrollBox); | 
|---|
|  | 277 | procedure BottomAxis(aScrollBox: TScrollBox); | 
|---|
|  | 278 | procedure ChangeStyle; | 
|---|
|  | 279 | procedure ChartStyle(aChart: TChart); | 
|---|
|  | 280 | procedure CheckProfile(var aProfile: string; var Updated: boolean); | 
|---|
|  | 281 | procedure CheckToAddData(aListView: TListView; aSection, TypeToCheck: string); | 
|---|
|  | 282 | procedure CreatePatientHeader(var HeaderList: TStringList; PageTitle, Warning, DateRange: string); | 
|---|
|  | 283 | procedure DateRangeItems(oldestdate, newestdate: double; filenum: string); | 
|---|
|  | 284 | procedure UpdateView(filename, filenum, itemnum, aString: string; aListView: TListView); | 
|---|
|  | 285 | procedure DisplayType(itemtype, displayed: string); | 
|---|
|  | 286 | procedure FillViews; | 
|---|
|  | 287 | procedure FilterListView(oldestdate, newestdate: double); | 
|---|
|  | 288 | procedure FixedDates(var adatetime, adatetime1: TDateTime); | 
|---|
|  | 289 | procedure GetData(aString: string); | 
|---|
|  | 290 | procedure HideGraphs(action: boolean); | 
|---|
|  | 291 | procedure HighLow(fmtime, fmtime1: string; aChart: TChart; var adatetime, adatetime1: TDateTime); | 
|---|
|  | 292 | procedure InactivateHint; | 
|---|
|  | 293 | procedure ItemCheck(aListView: TListView; aItemName: string; | 
|---|
|  | 294 | var aNum: integer; var aTypeItem: string); | 
|---|
|  | 295 | procedure ItemsClick(Sender: TObject; aListView, aOtherListView: TListView; | 
|---|
|  | 296 | aCheckBox: TCheckBox; aComboBox: TORComboBox; aList: TListBox; aSection: string); | 
|---|
|  | 297 | procedure ItemDateRange(Sender: TCustomChart); | 
|---|
|  | 298 | procedure LabData(aItemType, aItemName, aSection: string); | 
|---|
|  | 299 | procedure LoadDateRange; | 
|---|
|  | 300 | procedure LoadDisplayCheck(typeofitem: string; var updated: boolean); | 
|---|
|  | 301 | procedure LoadType(itemtype, displayed: string); | 
|---|
|  | 302 | procedure NextPointerStyle(aSeries: TChartSeries; aSerCnt: integer); | 
|---|
|  | 303 | procedure OneDayTypeDetails(aTypeItem: string); | 
|---|
|  | 304 | procedure RefUnits(aItem, aSpec: string; var low, high, units: string); | 
|---|
|  | 305 | procedure ResetSpec(aListBox: TListBox; aItemNum, aNewItemNum, aNewItemName, aNewString: string); | 
|---|
|  | 306 | procedure TempCheck(typeitem: string; var levelseq: double); | 
|---|
|  | 307 | procedure SelCopy(aListView: TListView; aListBox: TListBox); | 
|---|
|  | 308 | procedure SelReset(aListbox: TListBox; aListView: TListView); | 
|---|
|  | 309 | procedure SelectItem(aListView: TListView; typeitem: string); | 
|---|
|  | 310 | procedure SetProfile(aProfile, aName: string; aListView: TListView); | 
|---|
|  | 311 | procedure SizeDates(aChart: TChart; aSmallTime, aBigTime: TDateTime); | 
|---|
|  | 312 | procedure SizeTogether(onlylines, nolines, anylines: Boolean; aScroll: TScrollBox; | 
|---|
|  | 313 | aChart: TChart; aPanel, aPanelBase: TPanel; portion: Double); | 
|---|
|  | 314 | procedure ViewsChange(aListView: TListView; aComboBox: TORComboBox; aSection: string); | 
|---|
|  | 315 |  | 
|---|
|  | 316 | procedure MakeDateline(section, aTitle, aFileType: string; aChart: TChart; graphtype: integer; | 
|---|
|  | 317 | var bcnt, pcnt, gcnt, vcnt, acnt: integer); | 
|---|
|  | 318 | procedure MakeSeparate(aScrollBox: TScrollBox; aListView: TListView; aPadPanel: TPanel; section: string); | 
|---|
|  | 319 | procedure MakeTogether(aScrollBox: TScrollBox; aListView: TListView; aPadPanel: TPanel; section: string); | 
|---|
|  | 320 |  | 
|---|
|  | 321 | procedure MakeAGanttSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 322 | procedure MakeArrowSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 323 | procedure MakeBarSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 324 | procedure MakeGanttSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 325 | procedure MakeLineSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt, aNonCnt: integer; multiline: boolean); | 
|---|
|  | 326 | procedure MakeManyGanttSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer);  // good one | 
|---|
|  | 327 | procedure MakePointSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 328 | procedure MakeVisitGanttSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 329 | procedure MakeWeightedArrowSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 330 | procedure MakeWeightedGanttSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 331 |  | 
|---|
|  | 332 | function BPValue(aDateTime: TDateTime): string; | 
|---|
|  | 333 | function DateRangeMultiItems(aOldDate, aNewDate: double; aMultiItem: string): boolean; | 
|---|
|  | 334 | function DCName(aDCien: string): string; | 
|---|
|  | 335 | function ExpandTax(profile: string): string; | 
|---|
|  | 336 | function FileNameX(filenum: string): string; | 
|---|
|  | 337 | function FMCorrectedDate(fmtime: string): string; | 
|---|
|  | 338 | function GraphTypeNum(aType: string): integer; | 
|---|
|  | 339 | function HSAbbrev(aType: string): boolean; | 
|---|
|  | 340 | function InvVal(value: double): double; | 
|---|
|  | 341 | function ItemName(filenum, itemnum: string): string; | 
|---|
|  | 342 | function NextColor(aCnt: integer): TColor; | 
|---|
|  | 343 | function PortionSize(lcnt, pcnt, gcnt, vcnt, bcnt, acnt: integer): double; | 
|---|
|  | 344 | function SelectRef(aRef: string): string; | 
|---|
|  | 345 | function StdDev(value, high, low: double): double; | 
|---|
|  | 346 | function TypeIsDisplayed(itemtype: string): boolean; | 
|---|
|  | 347 | function TypeIsLoaded(itemtype: string): boolean; | 
|---|
|  | 348 | function Vfactor(aTitle: string): double; | 
|---|
|  | 349 | function ValueText(Sender: TCustomChart; Series: TChartSeries; ValueIndex: Integer): string; | 
|---|
|  | 350 |  | 
|---|
|  | 351 | public | 
|---|
|  | 352 | { Public declarations } | 
|---|
|  | 353 | procedure InitialData; | 
|---|
|  | 354 | procedure Initialize; | 
|---|
|  | 355 | procedure InitialRetain; | 
|---|
|  | 356 | procedure LoadListView(aList: TStrings); | 
|---|
|  | 357 | procedure SourceContext; | 
|---|
|  | 358 | procedure ViewSelections; | 
|---|
|  | 359 | procedure SetFontSize(FontSize: integer); | 
|---|
|  | 360 | function FMToDateTime(FMDateTime: string): TDateTime; | 
|---|
|  | 361 | end; | 
|---|
|  | 362 |  | 
|---|
|  | 363 | var | 
|---|
|  | 364 | frmGraphs: TfrmGraphs; | 
|---|
|  | 365 | FHintWin: THintWindow; | 
|---|
|  | 366 | FHintWinActive: boolean; | 
|---|
|  | 367 | FHintStop: boolean; | 
|---|
|  | 368 |  | 
|---|
|  | 369 | implementation | 
|---|
|  | 370 |  | 
|---|
|  | 371 | uses fGraphSettings, fGraphProfiles, rGraphs, | 
|---|
|  | 372 | ComObj, ActiveX, ShellAPI, fFrame, uCore, rCore, fRptBox, fReports, | 
|---|
|  | 373 | uFormMonitor; | 
|---|
|  | 374 |  | 
|---|
|  | 375 | {$R *.DFM} | 
|---|
|  | 376 |  | 
|---|
|  | 377 | type | 
|---|
|  | 378 | TGraphItem = class | 
|---|
|  | 379 | public | 
|---|
|  | 380 | Values: string; | 
|---|
|  | 381 | end; | 
|---|
|  | 382 |  | 
|---|
|  | 383 | procedure TfrmGraphs.FormCreate(Sender: TObject); | 
|---|
|  | 384 | var | 
|---|
|  | 385 | i: integer; | 
|---|
|  | 386 | dfntype, listline, settings, settings1, t1, t2: string; | 
|---|
|  | 387 | aList: TStrings; | 
|---|
|  | 388 | begin | 
|---|
|  | 389 | FMToday := DateTimeToFMDateTime(Date); | 
|---|
|  | 390 | FHintWinActive := false; | 
|---|
|  | 391 | FHintStop := false; | 
|---|
|  | 392 | FNonNumerics := false; | 
|---|
|  | 393 | FMouseDown := false; | 
|---|
|  | 394 | FItemsSortedTop := false; | 
|---|
|  | 395 | FItemsSortedBottom := false; | 
|---|
|  | 396 | FRetainZoom := false; | 
|---|
|  | 397 | FFirstClick := true; | 
|---|
|  | 398 | FArrowKeys := false; | 
|---|
|  | 399 | FCreate := true; | 
|---|
|  | 400 | FGraphType := Char(32); | 
|---|
|  | 401 | aList := TStringList.Create; | 
|---|
|  | 402 | FastAssign(rpcGetGraphSettings, aList); | 
|---|
|  | 403 | btnClose.Tag := 0; | 
|---|
|  | 404 | if aList.Count < 1 then | 
|---|
|  | 405 | begin | 
|---|
|  | 406 | Screen.Cursor := crDefault; | 
|---|
|  | 407 | showmessage('CPRS is not configured for graphing.'); | 
|---|
|  | 408 | btnClose.Tag := 1; | 
|---|
|  | 409 | FreeAndNil(aList); | 
|---|
|  | 410 | Close; | 
|---|
|  | 411 | Exit; | 
|---|
|  | 412 | end; | 
|---|
|  | 413 | t1 := aList[0]; t2 := aList[1];   // hint are current, t1 are personal, t2 public settings | 
|---|
|  | 414 | if length(frmFrame.mnuToolsGraphing.Hint) > 0 then settings := frmFrame.mnuToolsGraphing.Hint | 
|---|
|  | 415 | else if length(t1) > 0 then settings := t1 | 
|---|
|  | 416 | else settings := t2; | 
|---|
|  | 417 | SetPiece(settings, '|', 8, Piece(t2, '|', 8)); //?????????? | 
|---|
|  | 418 | frmFrame.mnuToolsGraphing.Hint := settings; | 
|---|
|  | 419 | settings1 := Piece(settings, '|', 1); | 
|---|
|  | 420 | FSources := TStringList.Create; | 
|---|
|  | 421 | FSourcesDefault := TStringList.Create; | 
|---|
|  | 422 | FMyProfiles := TStringList.Create; | 
|---|
|  | 423 | FProfiles := TStringList.Create; | 
|---|
|  | 424 | FYMinValue := 0; | 
|---|
|  | 425 | FYMaxValue := 0; | 
|---|
|  | 426 | FTHighTime := 0; | 
|---|
|  | 427 | FTLowTime := BIG_NUMBER; | 
|---|
|  | 428 | FBHighTime := 0; | 
|---|
|  | 429 | FBLowTime := BIG_NUMBER; | 
|---|
|  | 430 | pnlInfo.Caption := TXT_INFO; | 
|---|
|  | 431 | FOnLegend := BIG_NUMBER; | 
|---|
|  | 432 | FOnSeries := BIG_NUMBER; | 
|---|
|  | 433 | FOnValue := BIG_NUMBER; | 
|---|
|  | 434 | FHintWin := THintWindow.Create(self); | 
|---|
|  | 435 | FHintWin.Color := clInfoBk; | 
|---|
|  | 436 | FHintWin.Canvas.Font.Color := clInfoBk; | 
|---|
|  | 437 | FX := 0; FY :=0; | 
|---|
|  | 438 | FastAssign(rpcGetTypes('0', false), lstAllTypes.Items); | 
|---|
|  | 439 | for i := 0 to lstAllTypes.Items.Count - 1 do | 
|---|
|  | 440 | begin | 
|---|
|  | 441 | listline := lstAllTypes.Items[i]; | 
|---|
|  | 442 | dfntype := UpperCase(Piece(listline, '^', 1)); | 
|---|
|  | 443 | SetPiece(listline, '^', 1, dfntype); | 
|---|
|  | 444 | lstAllTypes.Items[i] := listline; | 
|---|
|  | 445 | end; | 
|---|
|  | 446 | FGraphSetting := GraphSettingsInit(settings); | 
|---|
|  | 447 | for i := 0 to BIG_NUMBER do | 
|---|
|  | 448 | begin | 
|---|
|  | 449 | dfntype := Piece(settings1, ';', i); | 
|---|
|  | 450 | if length(dfntype) = 0 then break; | 
|---|
|  | 451 | listline := dfntype + '^' + FileNameX(dfntype) + '^1'; | 
|---|
|  | 452 | FSources.Add(listline); | 
|---|
|  | 453 | FSourcesDefault.Add(listline); | 
|---|
|  | 454 | end; | 
|---|
|  | 455 | serDatelineTop.Active := false; | 
|---|
|  | 456 | serDatelineBottom.Active := false; | 
|---|
|  | 457 | chartDatelineTop.Gradient.EndColor := clGradientActiveCaption; | 
|---|
|  | 458 | chartDatelineTop.Gradient.StartColor := clWindow; | 
|---|
|  | 459 | chartDatelineBottom.Gradient.EndColor := clGradientActiveCaption; | 
|---|
|  | 460 | chartDatelineBottom.Gradient.StartColor := clWindow; | 
|---|
|  | 461 | LoadDateRange; | 
|---|
|  | 462 | chkItemsTop.Checked := true; | 
|---|
|  | 463 | chkItemsBottom.Checked := true; | 
|---|
|  | 464 | FastAssign(rpcGetTestSpec, lstTestSpec.Items); | 
|---|
|  | 465 | FillViews; | 
|---|
|  | 466 | FreeAndNil(aList); | 
|---|
|  | 467 | end; | 
|---|
|  | 468 |  | 
|---|
|  | 469 | procedure TfrmGraphs.SourcesDefault; | 
|---|
|  | 470 | var | 
|---|
|  | 471 | i: integer; | 
|---|
|  | 472 | dfntype, listline, settings, settings1, t1, t2: string; | 
|---|
|  | 473 | aList: TStrings; | 
|---|
|  | 474 | begin | 
|---|
|  | 475 | aList := TStringList.Create; | 
|---|
|  | 476 | FastAssign(rpcGetGraphSettings, aList); | 
|---|
|  | 477 | t1 := aList[0]; t2 := aList[1];   // t1 are personal, t2 public settings | 
|---|
|  | 478 | if length(frmFrame.mnuToolsGraphing.Hint) > 0 then settings := frmFrame.mnuToolsGraphing.Hint | 
|---|
|  | 479 | else if length(t1) > 0 then settings := t1 | 
|---|
|  | 480 | else settings := t2; | 
|---|
|  | 481 | SetPiece(settings, '|', 8, Piece(t2, '|', 8)); | 
|---|
|  | 482 | settings1 := Piece(settings, '|', 1); | 
|---|
|  | 483 | FGraphSetting := GraphSettingsInit(settings); | 
|---|
|  | 484 | for i := 0 to BIG_NUMBER do | 
|---|
|  | 485 | begin | 
|---|
|  | 486 | dfntype := Piece(settings1, ';', i); | 
|---|
|  | 487 | if length(dfntype) = 0 then break; | 
|---|
|  | 488 | listline := dfntype + '^' + FileNameX(dfntype) + '^1'; | 
|---|
|  | 489 | FSourcesDefault.Add(listline); | 
|---|
|  | 490 | end; | 
|---|
|  | 491 | FreeAndNil(aList); | 
|---|
|  | 492 | end; | 
|---|
|  | 493 |  | 
|---|
|  | 494 | procedure TfrmGraphs.Initialize; | 
|---|
|  | 495 | var | 
|---|
|  | 496 | i: integer; | 
|---|
|  | 497 | rptview1, rptview2, rptviews: string; | 
|---|
|  | 498 | begin | 
|---|
|  | 499 | InitialData; | 
|---|
|  | 500 | SourceContext; | 
|---|
|  | 501 | LoadListView(lstItems.Items); | 
|---|
|  | 502 | if pnlMain.Tag > 0 then | 
|---|
|  | 503 | begin | 
|---|
|  | 504 | rptviews := MixedCase(rpcReportParams(pnlMain.Tag)); | 
|---|
|  | 505 | if length(rptviews) > 1 then | 
|---|
|  | 506 | begin | 
|---|
|  | 507 | rptview1 := Piece(rptviews, '^', 1); | 
|---|
|  | 508 | rptview2 := Piece(rptviews, '^', 2); | 
|---|
|  | 509 | if length(rptview1) > 0 then | 
|---|
|  | 510 | begin | 
|---|
|  | 511 | for i := 0 to cboViewsTop.Items.Count - 1 do | 
|---|
|  | 512 | if Piece(cboViewsTop.Items[i], '^', 2) = rptview1 then | 
|---|
|  | 513 | begin | 
|---|
|  | 514 | cboViewsTop.ItemIndex := i; | 
|---|
|  | 515 | break; | 
|---|
|  | 516 | end; | 
|---|
|  | 517 | end; | 
|---|
|  | 518 | if length(rptview2) > 0 then | 
|---|
|  | 519 | begin | 
|---|
|  | 520 | chkDualViews.Checked := true; | 
|---|
|  | 521 | chkDualViewsClick(self); | 
|---|
|  | 522 | for i := 0 to cboViewsBottom.Items.Count - 1 do | 
|---|
|  | 523 | if Piece(cboViewsBottom.Items[i], '^', 2) = rptview2 then | 
|---|
|  | 524 | begin | 
|---|
|  | 525 | cboViewsBottom.ItemIndex := i; | 
|---|
|  | 526 | break; | 
|---|
|  | 527 | end; | 
|---|
|  | 528 | end; | 
|---|
|  | 529 | end; | 
|---|
|  | 530 | end; | 
|---|
|  | 531 | if cboViewsTop.ItemIndex > -1 then | 
|---|
|  | 532 | cboViewsTopChange(self) | 
|---|
|  | 533 | else | 
|---|
|  | 534 | lvwItemsTopClick(self); | 
|---|
|  | 535 | if cboViewsBottom.ItemIndex > -1 then | 
|---|
|  | 536 | cboViewsbottomChange(self) | 
|---|
|  | 537 | else | 
|---|
|  | 538 | lvwItemsBottomClick(self); | 
|---|
|  | 539 | if pnlMain.Tag > 0 then | 
|---|
|  | 540 | begin | 
|---|
|  | 541 | pnlMain.Tag := 0; | 
|---|
|  | 542 | cboDateRangeChange(self); | 
|---|
|  | 543 | if cboViewsTop.ItemIndex > -1 then | 
|---|
|  | 544 | cboViewsTopChange(self) | 
|---|
|  | 545 | else | 
|---|
|  | 546 | lvwItemsTopClick(self); | 
|---|
|  | 547 | if cboViewsBottom.ItemIndex > -1 then | 
|---|
|  | 548 | cboViewsbottomChange(self) | 
|---|
|  | 549 | else | 
|---|
|  | 550 | lvwItemsBottomClick(self); | 
|---|
|  | 551 | end; | 
|---|
|  | 552 | end; | 
|---|
|  | 553 |  | 
|---|
|  | 554 | procedure TfrmGraphs.InitialRetain; | 
|---|
|  | 555 | //var | 
|---|
|  | 556 | //i: integer; | 
|---|
|  | 557 | begin | 
|---|
|  | 558 | {// | 
|---|
|  | 559 | allview=false | 
|---|
|  | 560 | fullview=false | 
|---|
|  | 561 | noview=true | 
|---|
|  | 562 | go thru items | 
|---|
|  | 563 | if selected | 
|---|
|  | 564 | if view | 
|---|
|  | 565 | noview=false | 
|---|
|  | 566 | else | 
|---|
|  | 567 | allview=false | 
|---|
|  | 568 |  | 
|---|
|  | 569 | else | 
|---|
|  | 570 | if view | 
|---|
|  | 571 | allview=false | 
|---|
|  | 572 | fullview=false | 
|---|
|  | 573 | noview=false | 
|---|
|  | 574 | else | 
|---|
|  | 575 | // | 
|---|
|  | 576 | if noview | 
|---|
|  | 577 | // | 
|---|
|  | 578 | if allview | 
|---|
|  | 579 | // | 
|---|
|  | 580 | if fullview | 
|---|
|  | 581 | // | 
|---|
|  | 582 | else //partial view | 
|---|
|  | 583 | // | 
|---|
|  | 584 | //} | 
|---|
|  | 585 | end; | 
|---|
|  | 586 |  | 
|---|
|  | 587 | procedure TfrmGraphs.FillViews; | 
|---|
|  | 588 | var | 
|---|
|  | 589 | i: integer; | 
|---|
|  | 590 | begin | 
|---|
|  | 591 | with cboViewsTop do | 
|---|
|  | 592 | begin | 
|---|
|  | 593 | Items.Clear; | 
|---|
|  | 594 | Sorted := false; | 
|---|
|  | 595 | lstTemp.Sorted := true; | 
|---|
|  | 596 | FastAssign(rpcGetGraphProfiles('1', '0', 0), lstTemp.Items); | 
|---|
|  | 597 | if lstTemp.Items.Count > 0 then | 
|---|
|  | 598 | begin | 
|---|
|  | 599 | for i := 0 to lstTemp.Items.Count - 1 do | 
|---|
|  | 600 | Items.Add('-1^' + lstTemp.Items[i] + '^'); | 
|---|
|  | 601 | end; | 
|---|
|  | 602 | FastAssign(rpcGetGraphProfiles('1', '1', 0), lstTemp.Items); | 
|---|
|  | 603 | if lstTemp.Items.Count > 0 then | 
|---|
|  | 604 | begin | 
|---|
|  | 605 | Items.Add(LLS_LINE); | 
|---|
|  | 606 | for i := 0 to lstTemp.Items.Count - 1 do | 
|---|
|  | 607 | Items.Add('-2^' + lstTemp.Items[i] + '^'); | 
|---|
|  | 608 | end; | 
|---|
|  | 609 | Items.Insert(0, '^<clear all selections>^0'); | 
|---|
|  | 610 | Items.Insert(1, '^<select items>^0'); | 
|---|
|  | 611 | end; | 
|---|
|  | 612 | FastAssign(cboViewsTop.Items, cboViewsBottom.Items); | 
|---|
|  | 613 | end; | 
|---|
|  | 614 |  | 
|---|
|  | 615 | procedure TfrmGraphs.SourceContext; | 
|---|
|  | 616 | begin | 
|---|
|  | 617 | if frmFrame.GraphContext = '' then exit; | 
|---|
|  | 618 | frmFrame.GraphContext := ''; | 
|---|
|  | 619 | end; | 
|---|
|  | 620 |  | 
|---|
|  | 621 | procedure TfrmGraphs.FormShow(Sender: TObject); | 
|---|
|  | 622 | begin | 
|---|
|  | 623 | Font := MainFont; | 
|---|
|  | 624 | ChangeStyle; | 
|---|
|  | 625 | StayOnTop; | 
|---|
|  | 626 | mnuPopGraphResetClick(self); | 
|---|
|  | 627 | if pnlFooter.Tag = 1 then  // do not show footer controls on reports tab | 
|---|
|  | 628 | begin | 
|---|
|  | 629 | pnlFooter.Visible := false; | 
|---|
|  | 630 | if FCreate then | 
|---|
|  | 631 | begin | 
|---|
|  | 632 | FGraphType := GRAPH_REPORT; | 
|---|
|  | 633 | FCreate := false; | 
|---|
|  | 634 | GetSize; | 
|---|
|  | 635 | end; | 
|---|
|  | 636 | end | 
|---|
|  | 637 | else | 
|---|
|  | 638 | begin | 
|---|
|  | 639 | chkDualViews.Checked := false; | 
|---|
|  | 640 | chkDualViewsClick(self); | 
|---|
|  | 641 | if FCreate then | 
|---|
|  | 642 | begin | 
|---|
|  | 643 | FGraphType := GRAPH_FLOAT; | 
|---|
|  | 644 | FCreate := false; | 
|---|
|  | 645 | GetSize; | 
|---|
|  | 646 | end; | 
|---|
|  | 647 | end; | 
|---|
|  | 648 | if cboDateRange.ItemIndex < 0 then | 
|---|
|  | 649 | cboDateRange.ItemIndex := cboDateRange.Items.Count - 1; | 
|---|
|  | 650 | cboDateRangeChange(self); | 
|---|
|  | 651 | lvwItemsTopClick(self); | 
|---|
|  | 652 | if lvwItemsTop.Items.Count = 0 then | 
|---|
|  | 653 | begin | 
|---|
|  | 654 | cboViewsTop.ItemIndex := 0; | 
|---|
|  | 655 | cboViewsTop.Text := ''; | 
|---|
|  | 656 | end; | 
|---|
|  | 657 | //else | 
|---|
|  | 658 | //  lvwItemsTop.SetFocus; | 
|---|
|  | 659 | //chkItemsTop.SetFocus; | 
|---|
|  | 660 | cboViewsTop.SetFocus; | 
|---|
|  | 661 | //Perform(WM_NextDlgCtl, 0, 0); | 
|---|
|  | 662 | end; | 
|---|
|  | 663 |  | 
|---|
|  | 664 | procedure TfrmGraphs.FormClose(Sender: TObject; var Action: TCloseAction); | 
|---|
|  | 665 | begin | 
|---|
|  | 666 | SetSize; | 
|---|
|  | 667 | timHintPause.Enabled := false; | 
|---|
|  | 668 | InactivateHint; | 
|---|
|  | 669 | frmFrame.GraphFloatActive := false; | 
|---|
|  | 670 | end; | 
|---|
|  | 671 |  | 
|---|
|  | 672 | procedure TfrmGraphs.GetSize; | 
|---|
|  | 673 | var | 
|---|
|  | 674 | i, v1, v2, v3, v4: integer; | 
|---|
|  | 675 | name, settings, value: string; | 
|---|
|  | 676 | aList: TStrings; | 
|---|
|  | 677 | begin | 
|---|
|  | 678 | aList := TStringList.Create; | 
|---|
|  | 679 | FastAssign(rpcGetGraphSizing, aList); | 
|---|
|  | 680 | for i := 0 to aList.Count - 1 do | 
|---|
|  | 681 | begin | 
|---|
|  | 682 | settings := aList[i]; | 
|---|
|  | 683 | name := Piece(settings, '^', 1); | 
|---|
|  | 684 | value := Piece(settings, '^', 2); | 
|---|
|  | 685 | if length(value) > 1 then | 
|---|
|  | 686 | begin | 
|---|
|  | 687 | v1 := strtointdef(Piece(value, ',', 1), 0); | 
|---|
|  | 688 | v2 := strtointdef(Piece(value, ',', 2), 0); | 
|---|
|  | 689 | v3 := strtointdef(Piece(value, ',', 3), 0); | 
|---|
|  | 690 | v4 := strtointdef(Piece(value, ',', 4), 0); | 
|---|
|  | 691 | if FGraphType = GRAPH_FLOAT then | 
|---|
|  | 692 | begin | 
|---|
|  | 693 | if name = 'FBOUNDS' then | 
|---|
|  | 694 | begin | 
|---|
|  | 695 | if value = '0,0,0,0' then | 
|---|
|  | 696 | WindowState := wsMaximized | 
|---|
|  | 697 | else | 
|---|
|  | 698 | begin | 
|---|
|  | 699 | if v1 > 0 then Left := v1; | 
|---|
|  | 700 | if v2 > 0 then Top := v2; | 
|---|
|  | 701 | if v3 > 0 then Width := v3; | 
|---|
|  | 702 | if v4 > 0 then Height := v4; | 
|---|
|  | 703 | end; | 
|---|
|  | 704 | end | 
|---|
|  | 705 | else if name = 'FWIDTH' then | 
|---|
|  | 706 | begin | 
|---|
|  | 707 | if v1 > 0 then | 
|---|
|  | 708 | begin | 
|---|
|  | 709 | pnlItemsTop.Width := v1; | 
|---|
|  | 710 | splItemsTopMoved(self); | 
|---|
|  | 711 | end; | 
|---|
|  | 712 | end | 
|---|
|  | 713 | else if name = 'FBOTTOM' then | 
|---|
|  | 714 | begin | 
|---|
|  | 715 | if v1 > 0 then | 
|---|
|  | 716 | begin | 
|---|
|  | 717 | chkDualViews.Checked := true; | 
|---|
|  | 718 | chkDualViewsClick(self); | 
|---|
|  | 719 | pnlBottom.Height := v1; | 
|---|
|  | 720 | end; | 
|---|
|  | 721 | end | 
|---|
|  | 722 | else if name = 'FCOLUMN' then | 
|---|
|  | 723 | begin | 
|---|
|  | 724 | if v1 > 0 then lvwItemsTop.Column[0].Width := v1; | 
|---|
|  | 725 | if v2 > 0 then lvwItemsTop.Column[1].Width := v2; | 
|---|
|  | 726 | if v3 > 0 then lvwItemsTop.Column[2].Width := v3; | 
|---|
|  | 727 | if v4 > 0 then lvwItemsTop.Column[3].Width := v4; | 
|---|
|  | 728 | end | 
|---|
|  | 729 | else if name = 'FBCOLUMN' then | 
|---|
|  | 730 | begin | 
|---|
|  | 731 | if v1 > 0 then lvwItemsBottom.Column[0].Width := v1; | 
|---|
|  | 732 | if v2 > 0 then lvwItemsBottom.Column[1].Width := v2; | 
|---|
|  | 733 | if v3 > 0 then lvwItemsBottom.Column[2].Width := v3; | 
|---|
|  | 734 | if v4 > 0 then lvwItemsBottom.Column[3].Width := v4; | 
|---|
|  | 735 | end; | 
|---|
|  | 736 | end | 
|---|
|  | 737 | else | 
|---|
|  | 738 | begin | 
|---|
|  | 739 | if name = 'RWIDTH' then | 
|---|
|  | 740 | begin | 
|---|
|  | 741 | if v1 > 0 then | 
|---|
|  | 742 | begin | 
|---|
|  | 743 | pnlItemsTop.Width := v1; | 
|---|
|  | 744 | splItemsTopMoved(self); | 
|---|
|  | 745 | end; | 
|---|
|  | 746 | end | 
|---|
|  | 747 | else if name = 'RBOTTOM' then | 
|---|
|  | 748 | begin | 
|---|
|  | 749 | if v1 > 0 then | 
|---|
|  | 750 | begin | 
|---|
|  | 751 | pnlBottom.Height := v1; | 
|---|
|  | 752 | splGraphsMoved(splGraphs); | 
|---|
|  | 753 | end; | 
|---|
|  | 754 | end | 
|---|
|  | 755 | else if name = 'RCOLUMN' then | 
|---|
|  | 756 | begin | 
|---|
|  | 757 | if v1 > 0 then lvwItemsTop.Column[0].Width := v1; | 
|---|
|  | 758 | if v2 > 0 then lvwItemsTop.Column[1].Width := v2; | 
|---|
|  | 759 | if v3 > 0 then lvwItemsTop.Column[2].Width := v3; | 
|---|
|  | 760 | if v4 > 0 then lvwItemsTop.Column[3].Width := v4; | 
|---|
|  | 761 | end | 
|---|
|  | 762 | else if name = 'RBCOLUMN' then | 
|---|
|  | 763 | begin | 
|---|
|  | 764 | if v1 > 0 then lvwItemsBottom.Column[0].Width := v1; | 
|---|
|  | 765 | if v2 > 0 then lvwItemsBottom.Column[1].Width := v2; | 
|---|
|  | 766 | if v3 > 0 then lvwItemsBottom.Column[2].Width := v3; | 
|---|
|  | 767 | if v4 > 0 then lvwItemsBottom.Column[3].Width := v4; | 
|---|
|  | 768 | end; | 
|---|
|  | 769 | end; | 
|---|
|  | 770 | end; | 
|---|
|  | 771 | end; | 
|---|
|  | 772 | FreeAndNil(aList); | 
|---|
|  | 773 | end; | 
|---|
|  | 774 |  | 
|---|
|  | 775 | procedure TfrmGraphs.SetSize; | 
|---|
|  | 776 | var | 
|---|
|  | 777 | name, v1, v2, v3, v4: string; | 
|---|
|  | 778 | aList: TStrings; | 
|---|
|  | 779 | begin | 
|---|
|  | 780 | aList := TStringList.Create; | 
|---|
|  | 781 | if FGraphType = GRAPH_FLOAT then | 
|---|
|  | 782 | begin | 
|---|
|  | 783 | name := 'FBOUNDS'; | 
|---|
|  | 784 | v1 := inttostr(Left); | 
|---|
|  | 785 | v2 := inttostr(Top); | 
|---|
|  | 786 | v3 := inttostr(Width); | 
|---|
|  | 787 | v4 := inttostr(Height); | 
|---|
|  | 788 | if WindowState = wsMaximized then | 
|---|
|  | 789 | aList.Add(name + '^0,0,0,0') | 
|---|
|  | 790 | else | 
|---|
|  | 791 | aList.Add(name + '^' + v1 +',' + v2 +',' + v3 +',' + v4); | 
|---|
|  | 792 | name := 'FWIDTH'; | 
|---|
|  | 793 | v1 := inttostr(splItemsTop.Left); | 
|---|
|  | 794 | aList.Add(name + '^' + v1); | 
|---|
|  | 795 | name := 'FBOTTOM'; | 
|---|
|  | 796 | if chkDualViews.Checked then | 
|---|
|  | 797 | v1 := inttostr(pnlBottom.Height) | 
|---|
|  | 798 | else | 
|---|
|  | 799 | v1 := '0'; | 
|---|
|  | 800 | aList.Add(name + '^' + v1); | 
|---|
|  | 801 | name := 'FCOLUMN'; | 
|---|
|  | 802 | v1 := inttostr(lvwItemsTop.Column[0].Width); | 
|---|
|  | 803 | v2 := inttostr(lvwItemsTop.Column[1].Width); | 
|---|
|  | 804 | v3 := inttostr(lvwItemsTop.Column[2].Width); | 
|---|
|  | 805 | v4 := inttostr(lvwItemsTop.Column[3].Width); | 
|---|
|  | 806 | aList.Add(name + '^' + v1 +',' + v2 +',' + v3 +',' + v4); | 
|---|
|  | 807 | name := 'FBCOLUMN'; | 
|---|
|  | 808 | v1 := inttostr(lvwItemsBottom.Column[0].Width); | 
|---|
|  | 809 | v2 := inttostr(lvwItemsBottom.Column[1].Width); | 
|---|
|  | 810 | v3 := inttostr(lvwItemsBottom.Column[2].Width); | 
|---|
|  | 811 | v4 := inttostr(lvwItemsBottom.Column[3].Width); | 
|---|
|  | 812 | aList.Add(name + '^' + v1 +',' + v2 +',' + v3 +',' + v4); | 
|---|
|  | 813 | end | 
|---|
|  | 814 | else | 
|---|
|  | 815 | begin | 
|---|
|  | 816 | name := 'RWIDTH'; | 
|---|
|  | 817 | v1 := inttostr(splItemsTop.Left); | 
|---|
|  | 818 | aList.Add(name + '^' + v1); | 
|---|
|  | 819 | name := 'RBOTTOM'; | 
|---|
|  | 820 | if chkDualViews.Checked then | 
|---|
|  | 821 | v1 := inttostr(pnlBottom.Height) | 
|---|
|  | 822 | else | 
|---|
|  | 823 | v1 := '0'; | 
|---|
|  | 824 | aList.Add(name + '^' + v1); | 
|---|
|  | 825 | name := 'RCOLUMN'; | 
|---|
|  | 826 | v1 := inttostr(lvwItemsTop.Column[0].Width); | 
|---|
|  | 827 | v2 := inttostr(lvwItemsTop.Column[1].Width); | 
|---|
|  | 828 | v3 := inttostr(lvwItemsTop.Column[2].Width); | 
|---|
|  | 829 | v4 := inttostr(lvwItemsTop.Column[3].Width); | 
|---|
|  | 830 | aList.Add(name + '^' + v1 +',' + v2 +',' + v3 +',' + v4); | 
|---|
|  | 831 | name := 'RBCOLUMN'; | 
|---|
|  | 832 | v1 := inttostr(lvwItemsBottom.Column[0].Width); | 
|---|
|  | 833 | v2 := inttostr(lvwItemsBottom.Column[1].Width); | 
|---|
|  | 834 | v3 := inttostr(lvwItemsBottom.Column[2].Width); | 
|---|
|  | 835 | v4 := inttostr(lvwItemsBottom.Column[3].Width); | 
|---|
|  | 836 | aList.Add(name + '^' + v1 +',' + v2 +',' + v3 +',' + v4); | 
|---|
|  | 837 | end; | 
|---|
|  | 838 | rpcSetGraphSizing(aList); | 
|---|
|  | 839 | FreeAndNil(aList); | 
|---|
|  | 840 | end; | 
|---|
|  | 841 |  | 
|---|
|  | 842 | procedure TfrmGraphs.btnCloseClick(Sender: TObject); | 
|---|
|  | 843 | begin | 
|---|
|  | 844 | Close; | 
|---|
|  | 845 | end; | 
|---|
|  | 846 |  | 
|---|
|  | 847 | procedure TfrmGraphs.btnChangeSettingsClick(Sender: TObject); | 
|---|
|  | 848 | var | 
|---|
|  | 849 | needtoupdate, okbutton: boolean; | 
|---|
|  | 850 | conv, i, preconv: integer; | 
|---|
|  | 851 | PreMaxGraphs: integer; | 
|---|
|  | 852 | PreMaxSelect: integer; | 
|---|
|  | 853 | PreMinGraphHeight: integer; | 
|---|
|  | 854 | PreSortColumn: integer; | 
|---|
|  | 855 | PreFixedDateRange: boolean; | 
|---|
|  | 856 | aSettings, filetype, sourcetype: string; | 
|---|
|  | 857 | PreSources: TStrings; | 
|---|
|  | 858 | begin | 
|---|
|  | 859 | okbutton := false; | 
|---|
|  | 860 | conv := btnChangeSettings.Tag; | 
|---|
|  | 861 | preconv := conv; | 
|---|
|  | 862 | with FGraphSetting do | 
|---|
|  | 863 | begin | 
|---|
|  | 864 | PreMaxGraphs := MaxGraphs; | 
|---|
|  | 865 | PreMaxSelect := MaxSelect; | 
|---|
|  | 866 | PreMinGraphHeight := MinGraphHeight; | 
|---|
|  | 867 | PreSortColumn := SortColumn; | 
|---|
|  | 868 | PreFixedDateRange := FixedDateRange; | 
|---|
|  | 869 | MaxSelectMin := Max(Max(lvwItemsTop.SelCount, lvwItemsBottom.SelCount), 1); | 
|---|
|  | 870 | end; | 
|---|
|  | 871 | PreSources := TStringList.Create; | 
|---|
|  | 872 | PreSources.Assign(FSources); | 
|---|
|  | 873 | DialogGraphSettings(Font.Size, okbutton, FGraphSetting, FSources, conv, aSettings); | 
|---|
|  | 874 | if not okbutton then exit; | 
|---|
|  | 875 | if length(aSettings) > 0 then frmFrame.mnuToolsGraphing.Hint := aSettings; | 
|---|
|  | 876 | btnChangeSettings.Tag := conv; | 
|---|
|  | 877 | pnlInfo.Font.Size := lblViewsTop.Font.Size; | 
|---|
|  | 878 | SetFontSize(lblViewsTop.Font.Size); | 
|---|
|  | 879 | pnlInfo.Visible := conv > 0; | 
|---|
|  | 880 | if conv > 0 then | 
|---|
|  | 881 | begin | 
|---|
|  | 882 | pnlInfo.Caption := TXT_WARNING; | 
|---|
|  | 883 | pnlInfo.Color := COLOR_WARNING; | 
|---|
|  | 884 | end; | 
|---|
|  | 885 | pnlHeader.Visible := pnlInfo.Visible; | 
|---|
|  | 886 | StayOnTop; | 
|---|
|  | 887 | needtoupdate := (conv <> preconv); | 
|---|
|  | 888 | for i := 0 to FSources.Count - 1 do | 
|---|
|  | 889 | begin | 
|---|
|  | 890 | sourcetype := FSources[i]; | 
|---|
|  | 891 | if Copy(sourcetype, 1, 1) = '*' then | 
|---|
|  | 892 | begin | 
|---|
|  | 893 | FSources[i] := Pieces(sourcetype, '^', 2, 4); | 
|---|
|  | 894 | filetype := Piece(FSources[i], '^', 1); | 
|---|
|  | 895 | lstItems.Items.AddStrings(rpcGetItems(filetype, Patient.DFN)); | 
|---|
|  | 896 | needtoupdate := true; | 
|---|
|  | 897 | end; | 
|---|
|  | 898 | if not needtoupdate then | 
|---|
|  | 899 | if Piece(PreSources[i], '^', 3) = '0' then | 
|---|
|  | 900 | needtoupdate := TypeIsDisplayed(Piece(sourcetype, '^', 1)) | 
|---|
|  | 901 | else | 
|---|
|  | 902 | needtoupdate := not TypeIsDisplayed(Piece(sourcetype, '^', 1)); | 
|---|
|  | 903 | end; | 
|---|
|  | 904 | if not needtoupdate then | 
|---|
|  | 905 | with FGraphSetting do | 
|---|
|  | 906 | if MaxGraphs <> PreMaxGraphs then | 
|---|
|  | 907 | needtoupdate := true | 
|---|
|  | 908 | else if MaxSelect <> PreMaxSelect then | 
|---|
|  | 909 | needtoupdate := true | 
|---|
|  | 910 | else if MinGraphHeight <> PreMinGraphHeight then | 
|---|
|  | 911 | needtoupdate := true | 
|---|
|  | 912 | else if SortColumn <> PreSortColumn then | 
|---|
|  | 913 | needtoupdate := true | 
|---|
|  | 914 | else if FixedDateRange <> PreFixedDateRange then | 
|---|
|  | 915 | needtoupdate := true; | 
|---|
|  | 916 | if needtoupdate then | 
|---|
|  | 917 | begin | 
|---|
|  | 918 | cboDateRangeChange(self); | 
|---|
|  | 919 | end; | 
|---|
|  | 920 | ChangeStyle; | 
|---|
|  | 921 | if lvwItemsTop.SelCount = 0 then | 
|---|
|  | 922 | begin | 
|---|
|  | 923 | cboViewsTop.ItemIndex := -1; | 
|---|
|  | 924 | cboViewsTop.Text := ''; | 
|---|
|  | 925 | end; | 
|---|
|  | 926 | if lvwItemsBottom.SelCount = 0 then | 
|---|
|  | 927 | begin | 
|---|
|  | 928 | cboViewsBottom.ItemIndex := -1; | 
|---|
|  | 929 | cboViewsBottom.Text := ''; | 
|---|
|  | 930 | end; | 
|---|
|  | 931 | end; | 
|---|
|  | 932 |  | 
|---|
|  | 933 | procedure TfrmGraphs.chkDualViewsClick(Sender: TObject); | 
|---|
|  | 934 | begin | 
|---|
|  | 935 | if chkDualViews.Checked then | 
|---|
|  | 936 | begin | 
|---|
|  | 937 | pnlBottom.Height := pnlMain.Height div 2; | 
|---|
|  | 938 | lvwItemsTopClick(self); | 
|---|
|  | 939 | end | 
|---|
|  | 940 | else | 
|---|
|  | 941 | begin | 
|---|
|  | 942 | lvwItemsBottom.ClearSelection; | 
|---|
|  | 943 | lvwItemsBottomClick(self); | 
|---|
|  | 944 | pnlBottom.Height := 1; | 
|---|
|  | 945 | end; | 
|---|
|  | 946 | mnuPopGraphDualViews.Checked := chkDualViews.Checked; | 
|---|
|  | 947 | with pnlMain.Parent do | 
|---|
|  | 948 | if BorderWidth <> 1 then            // only do on Graph in Reports tab | 
|---|
|  | 949 | frmReports.chkDualViews.Checked := chkDualViews.Checked; | 
|---|
|  | 950 | end; | 
|---|
|  | 951 |  | 
|---|
|  | 952 | procedure TfrmGraphs.LoadListView(aList: TStrings); | 
|---|
|  | 953 | var | 
|---|
|  | 954 | i: integer; | 
|---|
|  | 955 | filename, filenum, itemnum: string; | 
|---|
|  | 956 | begin | 
|---|
|  | 957 | lvwItemsTop.Items.Clear; | 
|---|
|  | 958 | lvwItemsBottom.Items.Clear; | 
|---|
|  | 959 | lvwItemsTop.SortType := stNone; // if Sorting during load then potential error | 
|---|
|  | 960 | lvwItemsBottom.SortType := stNone; // if Sorting during load then potential error | 
|---|
|  | 961 | with lvwItemsTop do | 
|---|
|  | 962 | for i := 0 to aList.Count - 1 do | 
|---|
|  | 963 | begin | 
|---|
|  | 964 | filenum := Piece(aList[i], '^', 1); | 
|---|
|  | 965 | filename := FileNameX(filenum);    // change rpc ********** | 
|---|
|  | 966 | itemnum := Piece(aList[i], '^', 2); | 
|---|
|  | 967 | UpdateView(filename, filenum, itemnum, aList[i], lvwItemsTop); | 
|---|
|  | 968 | end; | 
|---|
|  | 969 | lvwItemsBottom.Items.Assign(lvwItemsTop.Items); | 
|---|
|  | 970 | lvwItemsTop.SortType := stBoth; | 
|---|
|  | 971 | lvwItemsBottom.SortType := stBoth; | 
|---|
|  | 972 | if not FItemsSortedTop then | 
|---|
|  | 973 | begin | 
|---|
|  | 974 | lvwItemsTopColumnClick(lvwItemsTop, lvwItemsTop.Column[0]); | 
|---|
|  | 975 | FItemsSortedTop := true; | 
|---|
|  | 976 | end; | 
|---|
|  | 977 | if not FItemsSortedBottom then | 
|---|
|  | 978 | begin | 
|---|
|  | 979 | lvwItemsBottomColumnClick(lvwItemsBottom, lvwItemsBottom.Column[0]); | 
|---|
|  | 980 | FItemsSortedBottom := true; | 
|---|
|  | 981 | end; | 
|---|
|  | 982 | with FGraphSetting do | 
|---|
|  | 983 | if SortColumn > 0 then | 
|---|
|  | 984 | begin | 
|---|
|  | 985 | lvwItemsTopColumnClick(lvwItemsTop, lvwItemsTop.Column[SortColumn]); | 
|---|
|  | 986 | lvwItemsBottomColumnClick(lvwItemsBottom, lvwItemsBottom.Column[SortColumn]); | 
|---|
|  | 987 | FItemsSortedTop := false; | 
|---|
|  | 988 | FItemsSortedBottom := false; | 
|---|
|  | 989 | end; | 
|---|
|  | 990 | end; | 
|---|
|  | 991 |  | 
|---|
|  | 992 | procedure TfrmGraphs.FilterListView(oldestdate, newestdate: double); | 
|---|
|  | 993 | var | 
|---|
|  | 994 | colnum, i: integer; | 
|---|
|  | 995 | lastdate: double; | 
|---|
|  | 996 | aProfile, filename, filenum, itemnum: string; | 
|---|
|  | 997 | begin | 
|---|
|  | 998 | lvwItemsTop.Scroll(-BIG_NUMBER, -BIG_NUMBER);      //faster to set scroll at top | 
|---|
|  | 999 | lvwItemsBottom.Scroll(-BIG_NUMBER, -BIG_NUMBER); | 
|---|
|  | 1000 | lvwItemsTop.Items.Clear; | 
|---|
|  | 1001 | lvwItemsBottom.Items.Clear; | 
|---|
|  | 1002 | lvwItemsTop.SortType := stNone; // if Sorting during load then potential error | 
|---|
|  | 1003 | lvwItemsBottom.SortType := stNone; // if Sorting during load then potential error | 
|---|
|  | 1004 | if (cboDateRange.ItemIndex > 0) and (cboDateRange.ItemIndex < 9) then | 
|---|
|  | 1005 | begin | 
|---|
|  | 1006 | with lvwItemsTop do | 
|---|
|  | 1007 | if TypeIsDisplayed('405') then | 
|---|
|  | 1008 | DateRangeItems(oldestdate, newestdate, '405');  // does not matter for all results ****************** | 
|---|
|  | 1009 | if TypeIsDisplayed('52') then | 
|---|
|  | 1010 | DateRangeItems(oldestdate, newestdate, '52');  // does not matter for all results ****************** | 
|---|
|  | 1011 | if TypeIsDisplayed('55') then | 
|---|
|  | 1012 | DateRangeItems(oldestdate, newestdate, '55'); | 
|---|
|  | 1013 | if TypeIsDisplayed('55NVA') then | 
|---|
|  | 1014 | DateRangeItems(oldestdate, newestdate, '55NVA'); | 
|---|
|  | 1015 | if TypeIsDisplayed('9999911') then | 
|---|
|  | 1016 | DateRangeItems(oldestdate, newestdate, '9999911'); | 
|---|
|  | 1017 | for i := 0 to lstItems.Items.Count - 1 do | 
|---|
|  | 1018 | begin | 
|---|
|  | 1019 | filenum := UpperCase(Piece(lstItems.Items[i], '^', 1)); | 
|---|
|  | 1020 | if filenum <> '405' then | 
|---|
|  | 1021 | if filenum <> '52' then | 
|---|
|  | 1022 | if filenum <> '55' then | 
|---|
|  | 1023 | if filenum <> '55NVA' then | 
|---|
|  | 1024 | if filenum <> '9999911' then | 
|---|
|  | 1025 | if TypeIsDisplayed(filenum) then | 
|---|
|  | 1026 | begin | 
|---|
|  | 1027 | lastdate := strtofloatdef(Piece(lstItems.Items[i], '^', 6), -BIG_NUMBER); | 
|---|
|  | 1028 | if (lastdate > oldestdate) and (lastdate < newestdate) then | 
|---|
|  | 1029 | begin | 
|---|
|  | 1030 | filename := FileNameX(filenum); | 
|---|
|  | 1031 | itemnum := Piece(lstItems.Items[i], '^', 2); | 
|---|
|  | 1032 | UpdateView(filename, filenum, itemnum, lstItems.Items[i], lvwItemsTop); | 
|---|
|  | 1033 | end; | 
|---|
|  | 1034 | end; | 
|---|
|  | 1035 | end; | 
|---|
|  | 1036 | end | 
|---|
|  | 1037 | else if (cboDateRange.ItemIndex = 0) or (cboDateRange.ItemIndex > 8) then | 
|---|
|  | 1038 | begin     // manual date range selection | 
|---|
|  | 1039 | for i := 0 to lstAllTypes.Items.Count - 1 do | 
|---|
|  | 1040 | begin | 
|---|
|  | 1041 | filenum := Piece(lstAllTypes.Items[i], '^', 1); | 
|---|
|  | 1042 | if TypeIsDisplayed(filenum) then | 
|---|
|  | 1043 | begin | 
|---|
|  | 1044 | DateRangeItems(oldestdate, newestdate, filenum); | 
|---|
|  | 1045 | end; | 
|---|
|  | 1046 | end; | 
|---|
|  | 1047 | end; | 
|---|
|  | 1048 | lvwItemsBottom.Items.Assign(lvwItemsTop.Items); | 
|---|
|  | 1049 | lvwItemsTop.SortType := stBoth; | 
|---|
|  | 1050 | lvwItemsBottom.SortType := stBoth; | 
|---|
|  | 1051 | colnum := 0; | 
|---|
|  | 1052 | if not FItemsSortedTop then | 
|---|
|  | 1053 | begin | 
|---|
|  | 1054 | lvwItemsTopColumnClick(lvwItemsTop, lvwItemsTop.Column[0]); | 
|---|
|  | 1055 | FItemsSortedTop := true; | 
|---|
|  | 1056 | end; | 
|---|
|  | 1057 | if not FItemsSortedBottom then | 
|---|
|  | 1058 | begin | 
|---|
|  | 1059 | lvwItemsBottomColumnClick(lvwItemsBottom, lvwItemsBottom.Column[0]); | 
|---|
|  | 1060 | FItemsSortedBottom := true; | 
|---|
|  | 1061 | end; | 
|---|
|  | 1062 | with FGraphSetting do | 
|---|
|  | 1063 | if SortColumn > 0 then | 
|---|
|  | 1064 | begin | 
|---|
|  | 1065 | colnum := SortColumn; | 
|---|
|  | 1066 | lvwItemsTopColumnClick(lvwItemsTop, lvwItemsTop.Column[SortColumn]); | 
|---|
|  | 1067 | lvwItemsBottomColumnClick(lvwItemsBottom, lvwItemsBottom.Column[SortColumn]); | 
|---|
|  | 1068 | FItemsSortedTop := false; | 
|---|
|  | 1069 | FItemsSortedBottom := false; | 
|---|
|  | 1070 | end; | 
|---|
|  | 1071 | if cboViewsTop.ItemIndex > 1 then                         // sort by view | 
|---|
|  | 1072 | begin | 
|---|
|  | 1073 | aProfile := cboViewsTop.Items[cboViewsTop.ItemIndex]; | 
|---|
|  | 1074 | AssignProfile(aProfile, 'top'); | 
|---|
|  | 1075 | if not FItemsSortedTop then lvwItemsTopColumnClick(lvwItemsTop, lvwItemsTop.Column[colnum]); | 
|---|
|  | 1076 | lvwItemsTopColumnClick(lvwItemsTop, lvwItemsTop.Column[2]); | 
|---|
|  | 1077 | lvwItemsTopColumnClick(lvwItemsTop, lvwItemsTop.Column[2]); | 
|---|
|  | 1078 | FItemsSortedTop := false; | 
|---|
|  | 1079 | end; | 
|---|
|  | 1080 | if cboViewsBottom.ItemIndex > 1 then                      // sort by view | 
|---|
|  | 1081 | begin | 
|---|
|  | 1082 | aProfile := cboViewsBottom.Items[cboViewsBottom.ItemIndex]; | 
|---|
|  | 1083 | AssignProfile(aProfile, 'bottom'); | 
|---|
|  | 1084 | if not FItemsSortedBottom then lvwItemsBottomColumnClick(lvwItemsBottom, lvwItemsBottom.Column[colnum]); | 
|---|
|  | 1085 | lvwItemsBottomColumnClick(lvwItemsBottom, lvwItemsBottom.Column[2]); | 
|---|
|  | 1086 | lvwItemsBottomColumnClick(lvwItemsBottom, lvwItemsBottom.Column[2]); | 
|---|
|  | 1087 | FItemsSortedBottom := false; | 
|---|
|  | 1088 | end; | 
|---|
|  | 1089 | end; | 
|---|
|  | 1090 |  | 
|---|
|  | 1091 | procedure TfrmGraphs.DateRangeItems(oldestdate, newestdate: double; filenum: string); | 
|---|
|  | 1092 | var | 
|---|
|  | 1093 | i, j: integer; | 
|---|
|  | 1094 | filename, itemnum, itemstuff, mitemnum: string; | 
|---|
|  | 1095 | begin | 
|---|
|  | 1096 | FastAssign(rpcDateItem(oldestdate, newestdate, filenum, Patient.DFN), lstScratchTemp.Items); | 
|---|
|  | 1097 | filename := FileNameX(filenum); | 
|---|
|  | 1098 | with lvwItemsTop do | 
|---|
|  | 1099 | for i := 0 to lstScratchTemp.Items.Count - 1 do | 
|---|
|  | 1100 | begin | 
|---|
|  | 1101 | itemstuff := lstScratchTemp.Items[i]; | 
|---|
|  | 1102 | itemnum := UpperCase(Piece(itemstuff, '^',2)); | 
|---|
|  | 1103 | for j := 0 to lstItems.Items.Count - 1 do | 
|---|
|  | 1104 | if (filenum = UpperCase(Piece(lstItems.Items[j], '^', 1))) and (itemnum = UpperCase(Piece(lstItems.Items[j], '^', 2))) then | 
|---|
|  | 1105 | UpdateView(filename, filenum, itemnum, lstItems.Items[j], lvwItemsTop); | 
|---|
|  | 1106 | if filenum = '63' then | 
|---|
|  | 1107 | for j := 0 to lstMultiSpec.Items.Count - 1 do | 
|---|
|  | 1108 | begin | 
|---|
|  | 1109 | mitemnum := Piece(lstMultiSpec.Items[j], '^', 2); | 
|---|
|  | 1110 | if itemnum = Piece(mitemnum, '.', 1) then | 
|---|
|  | 1111 | if DateRangeMultiItems(oldestdate, newestdate, mitemnum) then     //******** check specific date range | 
|---|
|  | 1112 | UpdateView(filename, filenum, mitemnum, lstMultiSpec.Items[j], lvwItemsTop); | 
|---|
|  | 1113 | end; | 
|---|
|  | 1114 | end; | 
|---|
|  | 1115 | end; | 
|---|
|  | 1116 |  | 
|---|
|  | 1117 | procedure TfrmGraphs.UpdateView(filename, filenum, itemnum, aString: string; aListView: TListView); | 
|---|
|  | 1118 | var | 
|---|
|  | 1119 | drugclass, itemname, itemqualifier: string; | 
|---|
|  | 1120 | aGraphItem: TGraphItem; | 
|---|
|  | 1121 | aListItem: TListItem; | 
|---|
|  | 1122 | begin | 
|---|
|  | 1123 | itemname := Piece(aString, '^', 4); | 
|---|
|  | 1124 | itemqualifier := Pieces(aString, '^', 5, 9); | 
|---|
|  | 1125 | itemqualifier := filenum + '^' + itemnum + '^' + itemqualifier; | 
|---|
|  | 1126 | drugclass := Piece(aString, '^', 8); | 
|---|
|  | 1127 | aListItem := aListView.Items.Add; | 
|---|
|  | 1128 | with aListItem do | 
|---|
|  | 1129 | begin | 
|---|
|  | 1130 | Caption := itemname; | 
|---|
|  | 1131 | SubItems.Add(filename); | 
|---|
|  | 1132 | SubItems.Add(''); | 
|---|
|  | 1133 | SubItems.Add(drugclass); | 
|---|
|  | 1134 | aGraphItem := TGraphItem.Create; | 
|---|
|  | 1135 | aGraphItem.Values := itemqualifier; | 
|---|
|  | 1136 | SubItems.AddObject('info object', aGraphItem); | 
|---|
|  | 1137 | end; | 
|---|
|  | 1138 | end; | 
|---|
|  | 1139 |  | 
|---|
|  | 1140 | function TfrmGraphs.DateRangeMultiItems(aOldDate, aNewDate: double; aMultiItem: string): boolean; | 
|---|
|  | 1141 | var | 
|---|
|  | 1142 | i: integer; | 
|---|
|  | 1143 | checkdate: double; | 
|---|
|  | 1144 | fileitem: string; | 
|---|
|  | 1145 | begin | 
|---|
|  | 1146 | Result := false; | 
|---|
|  | 1147 | fileitem := '63^' + aMultiItem; | 
|---|
|  | 1148 | for i := 0 to lstData.Items.Count - 1 do | 
|---|
|  | 1149 | if Pieces(lstData.Items[i], '^', 1, 2) = fileitem then | 
|---|
|  | 1150 | begin | 
|---|
|  | 1151 | checkdate := strtofloatdef(Piece(lstData.Items[i], '^', 3), BIG_NUMBER); | 
|---|
|  | 1152 | if checkdate <> BIG_NUMBER then | 
|---|
|  | 1153 | if checkdate >= aOldDate then | 
|---|
|  | 1154 | if checkdate <= aNewDate then | 
|---|
|  | 1155 | begin | 
|---|
|  | 1156 | Result := true; | 
|---|
|  | 1157 | break; | 
|---|
|  | 1158 | end; | 
|---|
|  | 1159 | end; | 
|---|
|  | 1160 | end; | 
|---|
|  | 1161 |  | 
|---|
|  | 1162 | function TfrmGraphs.FileNameX(filenum: string): string; | 
|---|
|  | 1163 | var | 
|---|
|  | 1164 | i: integer; | 
|---|
|  | 1165 | typestring: string; | 
|---|
|  | 1166 | begin | 
|---|
|  | 1167 | Result := ''; | 
|---|
|  | 1168 | with lstAllTypes do | 
|---|
|  | 1169 | for i := 0 to Items.Count - 1 do | 
|---|
|  | 1170 | begin | 
|---|
|  | 1171 | typestring := Items[i]; | 
|---|
|  | 1172 | if Piece(typestring, '^', 1) = filenum then | 
|---|
|  | 1173 | begin | 
|---|
|  | 1174 | Result := Piece(Items[i], '^', 2); | 
|---|
|  | 1175 | break; | 
|---|
|  | 1176 | end; | 
|---|
|  | 1177 | end; | 
|---|
|  | 1178 | if Result = '' then | 
|---|
|  | 1179 | begin | 
|---|
|  | 1180 | with lstAllTypes do | 
|---|
|  | 1181 | for i := 0 to Items.Count - 1 do | 
|---|
|  | 1182 | begin | 
|---|
|  | 1183 | typestring := Items[i]; | 
|---|
|  | 1184 | if lowercase(Piece(typestring, '^', 1)) = filenum then | 
|---|
|  | 1185 | begin | 
|---|
|  | 1186 | Result := Piece(Items[i], '^', 2); | 
|---|
|  | 1187 | break; | 
|---|
|  | 1188 | end; | 
|---|
|  | 1189 | end; | 
|---|
|  | 1190 | end; | 
|---|
|  | 1191 | end; | 
|---|
|  | 1192 |  | 
|---|
|  | 1193 | function TfrmGraphs.ItemName(filenum, itemnum: string): string; | 
|---|
|  | 1194 | var | 
|---|
|  | 1195 | i: integer; | 
|---|
|  | 1196 | typestring: string; | 
|---|
|  | 1197 | begin | 
|---|
|  | 1198 | Result := ''; | 
|---|
|  | 1199 | filenum := UpperCase(filenum); | 
|---|
|  | 1200 | itemnum := UpperCase(itemnum); | 
|---|
|  | 1201 | with lstItems do | 
|---|
|  | 1202 | for i := 0 to Items.Count - 1 do | 
|---|
|  | 1203 | begin | 
|---|
|  | 1204 | typestring := UpperCase(Items[i]); | 
|---|
|  | 1205 | if (Piece(typestring, '^', 1) = filenum) and | 
|---|
|  | 1206 | (Piece(typestring, '^', 2) = itemnum) then | 
|---|
|  | 1207 | begin | 
|---|
|  | 1208 | Result := Piece(typestring, '^', 4); | 
|---|
|  | 1209 | break; | 
|---|
|  | 1210 | end; | 
|---|
|  | 1211 | end; | 
|---|
|  | 1212 | end; | 
|---|
|  | 1213 |  | 
|---|
|  | 1214 | procedure TfrmGraphs.InitialData; | 
|---|
|  | 1215 | var | 
|---|
|  | 1216 | i, total: integer; | 
|---|
|  | 1217 | dfntype, listline: string; | 
|---|
|  | 1218 | begin | 
|---|
|  | 1219 | total := pnlData.ControlCount - 1; | 
|---|
|  | 1220 | with pnlData do | 
|---|
|  | 1221 | for i:= 0 to total do | 
|---|
|  | 1222 | if Controls[i] is TListBox then | 
|---|
|  | 1223 | if Controls[i] <> lstAllTypes then | 
|---|
|  | 1224 | if Controls[i] <> lstTestSpec then | 
|---|
|  | 1225 | (Controls[i] as TListBox).Items.Clear; | 
|---|
|  | 1226 | SourcesDefault; | 
|---|
|  | 1227 | FSources.Assign(FSourcesDefault); | 
|---|
|  | 1228 | btnChangeSettings.Tag :=0; | 
|---|
|  | 1229 | btnClose.Tag := 0; | 
|---|
|  | 1230 | cboViewsTop.Tag :=0; | 
|---|
|  | 1231 | chartDatelineTop.Tag :=0; | 
|---|
|  | 1232 | lvwItemsBottom.Tag :=0; | 
|---|
|  | 1233 | lvwItemsTop.Tag :=0; | 
|---|
|  | 1234 | pnlFooter.Parent.Tag :=0; | 
|---|
|  | 1235 | pnlItemsBottom.Tag :=0; | 
|---|
|  | 1236 | pnlItemsTop.Tag :=0; | 
|---|
|  | 1237 | pnlTop.Tag :=0; | 
|---|
|  | 1238 | scrlTop.Tag :=0; | 
|---|
|  | 1239 | splGraphs.Tag :=0; | 
|---|
|  | 1240 | cboViewsTop.ItemIndex := -1; | 
|---|
|  | 1241 | cboViewsBottom.ItemIndex := -1; | 
|---|
|  | 1242 | FastAssign(rpcGetTypes(Patient.DFN, false), lstTypes.Items); | 
|---|
|  | 1243 | for i := 0 to lstTypes.Items.Count - 1 do | 
|---|
|  | 1244 | begin | 
|---|
|  | 1245 | dfntype := UpperCase(Piece(lstTypes.Items[i], '^', 1)); | 
|---|
|  | 1246 | if TypeIsLoaded(dfntype) then | 
|---|
|  | 1247 | lstItems.Items.AddStrings(rpcGetItems(dfntype, Patient.DFN)); | 
|---|
|  | 1248 | listline := lstTypes.Items[i]; | 
|---|
|  | 1249 | dfntype := UpperCase(Piece(listline, '^', 1)); | 
|---|
|  | 1250 | SetPiece(listline, '^', 1, dfntype); | 
|---|
|  | 1251 | lstTypes.Items[i] := listline; | 
|---|
|  | 1252 | end; | 
|---|
|  | 1253 | lstTypes.Hint := Patient.DFN;  // use to check for patient change | 
|---|
|  | 1254 | FMTimestamp := floattostr(FMNow); | 
|---|
|  | 1255 | FPrevEvent := ''; | 
|---|
|  | 1256 | FWarning := false; | 
|---|
|  | 1257 | FFirstSwitch := true; | 
|---|
|  | 1258 | end; | 
|---|
|  | 1259 |  | 
|---|
|  | 1260 | function TfrmGraphs.TypeIsLoaded(itemtype: string): boolean; | 
|---|
|  | 1261 | var | 
|---|
|  | 1262 | i: integer; | 
|---|
|  | 1263 | filetype: string; | 
|---|
|  | 1264 | begin | 
|---|
|  | 1265 | Result := false; | 
|---|
|  | 1266 | for i := 0 to FSources.Count - 1 do | 
|---|
|  | 1267 | begin | 
|---|
|  | 1268 | filetype := Piece(FSources[i], '^', 1); | 
|---|
|  | 1269 | if itemtype = filetype then | 
|---|
|  | 1270 | begin | 
|---|
|  | 1271 | Result := true; | 
|---|
|  | 1272 | break; | 
|---|
|  | 1273 | end; | 
|---|
|  | 1274 | end; | 
|---|
|  | 1275 | end; | 
|---|
|  | 1276 |  | 
|---|
|  | 1277 | function TfrmGraphs.TypeIsDisplayed(itemtype: string): boolean; | 
|---|
|  | 1278 | var | 
|---|
|  | 1279 | i: integer; | 
|---|
|  | 1280 | displayed, filetype: string; | 
|---|
|  | 1281 | begin | 
|---|
|  | 1282 | Result := false; | 
|---|
|  | 1283 | for i := 0 to FSources.Count - 1 do | 
|---|
|  | 1284 | begin | 
|---|
|  | 1285 | filetype := Piece(FSources[i], '^', 1); | 
|---|
|  | 1286 | displayed := Piece(FSources[i], '^', 3); | 
|---|
|  | 1287 | if (itemtype = filetype) then | 
|---|
|  | 1288 | begin | 
|---|
|  | 1289 | if displayed = '1' then Result := true; | 
|---|
|  | 1290 | break; | 
|---|
|  | 1291 | end; | 
|---|
|  | 1292 | end; | 
|---|
|  | 1293 | end; | 
|---|
|  | 1294 |  | 
|---|
|  | 1295 | procedure TfrmGraphs.LoadDateRange; | 
|---|
|  | 1296 | var | 
|---|
|  | 1297 | defaults, defaultrange: string; | 
|---|
|  | 1298 | begin | 
|---|
|  | 1299 | FastAssign(rpcGetGraphDateRange('OR_GRAPHS'), cboDateRange.Items); | 
|---|
|  | 1300 | with cboDateRange do | 
|---|
|  | 1301 | begin | 
|---|
|  | 1302 | defaults := Items[Items.Count - 1]; | 
|---|
|  | 1303 | defaultrange := Piece(defaults, '^', 1); | 
|---|
|  | 1304 | //get report views - param 1 and param 2 | 
|---|
|  | 1305 | lvwItemsTop.Hint := Piece(defaults,'^', 8);     // top view | 
|---|
|  | 1306 | lvwItemsBottom.Hint := Piece(defaults,'^', 9);  // bottom view | 
|---|
|  | 1307 | //check if default range already exists | 
|---|
|  | 1308 | if strtointdef(defaultrange, BIG_NUMBER) = BIG_NUMBER then | 
|---|
|  | 1309 | ItemIndex := Items.Count - 1; | 
|---|
|  | 1310 | end; | 
|---|
|  | 1311 | end; | 
|---|
|  | 1312 |  | 
|---|
|  | 1313 | procedure TfrmGraphs.LoadType(itemtype, displayed: string); | 
|---|
|  | 1314 | var | 
|---|
|  | 1315 | needtoadd: boolean; | 
|---|
|  | 1316 | i: integer; | 
|---|
|  | 1317 | filename, filetype: string; | 
|---|
|  | 1318 | begin | 
|---|
|  | 1319 | if displayed <> '1' then displayed := ''; | 
|---|
|  | 1320 | needtoadd := true; | 
|---|
|  | 1321 | for i := 0 to FSources.Count - 1 do | 
|---|
|  | 1322 | begin | 
|---|
|  | 1323 | filetype := Piece(FSources[i], '^', 1); | 
|---|
|  | 1324 | if itemtype = filetype then | 
|---|
|  | 1325 | begin | 
|---|
|  | 1326 | needtoadd := false; | 
|---|
|  | 1327 | break; | 
|---|
|  | 1328 | end; | 
|---|
|  | 1329 | end; | 
|---|
|  | 1330 | if needtoadd then | 
|---|
|  | 1331 | begin | 
|---|
|  | 1332 | filename := FileNameX(itemtype); | 
|---|
|  | 1333 | FSources.Add(itemtype + '^' + filename + '^' + displayed); | 
|---|
|  | 1334 | lstItems.Items.AddStrings(rpcGetItems(itemtype, Patient.DFN)); | 
|---|
|  | 1335 | end; | 
|---|
|  | 1336 | end; | 
|---|
|  | 1337 |  | 
|---|
|  | 1338 | procedure TfrmGraphs.DisplayType(itemtype, displayed: string); | 
|---|
|  | 1339 | var | 
|---|
|  | 1340 | i: integer; | 
|---|
|  | 1341 | filename, filetype: string; | 
|---|
|  | 1342 | begin | 
|---|
|  | 1343 | if displayed <> '1' then displayed := ''; | 
|---|
|  | 1344 | for i := 0 to FSources.Count - 1 do | 
|---|
|  | 1345 | begin | 
|---|
|  | 1346 | filetype := Piece(FSources[i], '^', 1); | 
|---|
|  | 1347 | if itemtype = filetype then | 
|---|
|  | 1348 | begin | 
|---|
|  | 1349 | filename := FileNameX(itemtype); | 
|---|
|  | 1350 | FSources[i] := itemtype + '^' + filename + '^' + displayed; | 
|---|
|  | 1351 | break; | 
|---|
|  | 1352 | end; | 
|---|
|  | 1353 | end; | 
|---|
|  | 1354 | end; | 
|---|
|  | 1355 |  | 
|---|
|  | 1356 | procedure TfrmGraphs.DisplayData(aSection: string); | 
|---|
|  | 1357 | var | 
|---|
|  | 1358 | aChart: TChart; | 
|---|
|  | 1359 | aCheckBox: TCheckBox; | 
|---|
|  | 1360 | aListView, aOtherListView: TListView; | 
|---|
|  | 1361 | aDateline, aRightPad: TPanel; | 
|---|
|  | 1362 | aScrollBox: TScrollBox; | 
|---|
|  | 1363 | begin | 
|---|
|  | 1364 | FHintStop := true; | 
|---|
|  | 1365 | SetFontSize(lblViewsTop.Font.Size); | 
|---|
|  | 1366 | if aSection = 'top' then | 
|---|
|  | 1367 | begin | 
|---|
|  | 1368 | aListView := lvwItemsTop; | 
|---|
|  | 1369 | aOtherListView := lvwItemsBottom; | 
|---|
|  | 1370 | aDateline := pnlDatelineTop; | 
|---|
|  | 1371 | aRightPad := pnlTopRightPad; | 
|---|
|  | 1372 | aScrollBox := scrlTop; | 
|---|
|  | 1373 | aChart := chartDatelineTop; | 
|---|
|  | 1374 | aCheckBox := chkItemsTop; | 
|---|
|  | 1375 | end | 
|---|
|  | 1376 | else | 
|---|
|  | 1377 | begin | 
|---|
|  | 1378 | aListView := lvwItemsBottom; | 
|---|
|  | 1379 | aOtherListView := lvwItemsTop; | 
|---|
|  | 1380 | aDateline := pnlDatelineBottom; | 
|---|
|  | 1381 | aRightPad := pnlBottomRightPad; | 
|---|
|  | 1382 | aScrollBox := scrlBottom; | 
|---|
|  | 1383 | aChart := chartDatelineBottom; | 
|---|
|  | 1384 | aCheckBox := chkItemsBottom; | 
|---|
|  | 1385 | end; | 
|---|
|  | 1386 | if aListView.SelCount < 1 then | 
|---|
|  | 1387 | begin | 
|---|
|  | 1388 | if not FFirstClick then | 
|---|
|  | 1389 | begin | 
|---|
|  | 1390 | FFirstClick := true; | 
|---|
|  | 1391 | while aScrollBox.ControlCount > 0 do | 
|---|
|  | 1392 | aScrollBox.Controls[0].Free; | 
|---|
|  | 1393 | exit; | 
|---|
|  | 1394 | end; | 
|---|
|  | 1395 | FFirstClick := false; | 
|---|
|  | 1396 | aDateline.Visible := false; | 
|---|
|  | 1397 | while aScrollBox.ControlCount > 0 do | 
|---|
|  | 1398 | aScrollBox.Controls[0].Free; | 
|---|
|  | 1399 | if aOtherListView.SelCount > 0 then | 
|---|
|  | 1400 | if aOtherListView = lvwItemsTop then | 
|---|
|  | 1401 | ItemsClick(self, lvwItemsTop, lvwItemsBottom, chkItemsTop, cboViewsTop, lstSelCopyTop, 'top') | 
|---|
|  | 1402 | else | 
|---|
|  | 1403 | ItemsClick(self, lvwItemsBottom, lvwItemsTop, chkItemsBottom, cboViewsBottom, lstSelCopyBottom, 'bottom'); | 
|---|
|  | 1404 | exit; | 
|---|
|  | 1405 | end; | 
|---|
|  | 1406 | aScrollBox.VertScrollBar.Visible := false; | 
|---|
|  | 1407 | aScrollBox.HorzScrollBar.Visible := false; | 
|---|
|  | 1408 | aChart.RemoveAllSeries;    // this would leave bottom dateline visible on date change | 
|---|
|  | 1409 | //chartDatelineTop.RemoveAllSeries;    // do both | 
|---|
|  | 1410 | //chartDatelineBottom.RemoveAllSeries; // do both | 
|---|
|  | 1411 | lstNonNumeric.Items.Clear; | 
|---|
|  | 1412 | if aCheckBox.Checked then | 
|---|
|  | 1413 | MakeSeparate(aScrollBox, aListView, aRightPad, aSection) | 
|---|
|  | 1414 | else | 
|---|
|  | 1415 | begin | 
|---|
|  | 1416 | MakeTogether(aScrollBox, aListView, aRightPad, aSection); | 
|---|
|  | 1417 | end; | 
|---|
|  | 1418 | ChangeStyle; | 
|---|
|  | 1419 | pnlInfo.Font.Size := lblViewsTop.Font.Size; | 
|---|
|  | 1420 | if ((lvwItemsTop.SelCount > MAX_ITEM_DISCLAIMER) and (not chkItemsTop.Checked)) | 
|---|
|  | 1421 | or ((lvwItemsBottom.SelCount > MAX_ITEM_DISCLAIMER) and (not chkItemsBottom.Checked)) then | 
|---|
|  | 1422 | begin | 
|---|
|  | 1423 | pnlInfo.Caption := TXT_DISCLAIMER; | 
|---|
|  | 1424 | pnlInfo.Color := COLOR_WARNING; | 
|---|
|  | 1425 | pnlInfo.Visible := true; | 
|---|
|  | 1426 | end | 
|---|
|  | 1427 | else | 
|---|
|  | 1428 | pnlInfo.Visible := false; | 
|---|
|  | 1429 | if btnChangeSettings.Tag > 0 then | 
|---|
|  | 1430 | begin | 
|---|
|  | 1431 | pnlInfo.Caption := TXT_WARNING; | 
|---|
|  | 1432 | pnlInfo.Color := COLOR_WARNING; | 
|---|
|  | 1433 | pnlInfo.Visible := true; | 
|---|
|  | 1434 | end; | 
|---|
|  | 1435 | //if copy(pnlInfo.Caption, 1, 7) = 'Warning' then | 
|---|
|  | 1436 | if FWarning then | 
|---|
|  | 1437 | pnlInfo.Visible := true; | 
|---|
|  | 1438 | pnlHeader.Visible := pnlInfo.Visible; | 
|---|
|  | 1439 | aScrollBox.VertScrollBar.Visible := true; | 
|---|
|  | 1440 | aScrollBox.HorzScrollBar.Visible := false; | 
|---|
|  | 1441 | end; | 
|---|
|  | 1442 |  | 
|---|
|  | 1443 | procedure TfrmGraphs.chkItemsTopClick(Sender: TObject); | 
|---|
|  | 1444 | begin | 
|---|
|  | 1445 | Screen.Cursor := crHourGlass; | 
|---|
|  | 1446 | DisplayData('top'); | 
|---|
|  | 1447 | if FFirstSwitch then   // this code makes events appear better (on first click was not displaying bar) | 
|---|
|  | 1448 | begin | 
|---|
|  | 1449 | chartBaseMouseDown(chartDatelineTop, mbLeft, [], 1, 1); | 
|---|
|  | 1450 | DisplayData('top'); | 
|---|
|  | 1451 | FFirstSwitch := false; | 
|---|
|  | 1452 | end; | 
|---|
|  | 1453 | Screen.Cursor := crDefault; | 
|---|
|  | 1454 | end; | 
|---|
|  | 1455 |  | 
|---|
|  | 1456 | procedure TfrmGraphs.chkItemsBottomClick(Sender: TObject); | 
|---|
|  | 1457 | begin | 
|---|
|  | 1458 | Screen.Cursor := crHourGlass; | 
|---|
|  | 1459 | DisplayData('bottom'); | 
|---|
|  | 1460 | if FFirstSwitch then   // this code makes events appear better (on first click was not displaying bar) | 
|---|
|  | 1461 | begin | 
|---|
|  | 1462 | chartBaseMouseDown(chartDatelineBottom, mbLeft, [], 1, 1); | 
|---|
|  | 1463 | DisplayData('bottom'); | 
|---|
|  | 1464 | FFirstSwitch := false; | 
|---|
|  | 1465 | end; | 
|---|
|  | 1466 | Screen.Cursor := crDefault; | 
|---|
|  | 1467 | end; | 
|---|
|  | 1468 |  | 
|---|
|  | 1469 | procedure TfrmGraphs.BottomAxis(aScrollBox: TScrollBox); | 
|---|
|  | 1470 | var | 
|---|
|  | 1471 | i: integer; | 
|---|
|  | 1472 | ChildControl: TControl; | 
|---|
|  | 1473 | begin | 
|---|
|  | 1474 | for i := 0 to aScrollBox.ControlCount - 1 do | 
|---|
|  | 1475 | begin | 
|---|
|  | 1476 | ChildControl := aScrollBox.Controls[i]; | 
|---|
|  | 1477 | with (ChildControl as TChart).BottomAxis do | 
|---|
|  | 1478 | begin | 
|---|
|  | 1479 | Automatic := false; | 
|---|
|  | 1480 | Minimum := 0; | 
|---|
|  | 1481 | Maximum := chartDatelineTop.BottomAxis.Maximum; | 
|---|
|  | 1482 | Minimum := chartDatelineTop.BottomAxis.Minimum; | 
|---|
|  | 1483 | end; | 
|---|
|  | 1484 | end; | 
|---|
|  | 1485 | end; | 
|---|
|  | 1486 |  | 
|---|
|  | 1487 | procedure TfrmGraphs.AdjustTimeframe; | 
|---|
|  | 1488 | begin | 
|---|
|  | 1489 | with FGraphSetting do | 
|---|
|  | 1490 | begin | 
|---|
|  | 1491 | if HighTime = 0 then exit;  // no data to chart clear form ??? | 
|---|
|  | 1492 | chartDatelineTop.BottomAxis.Minimum := 0;  // avoid possible error | 
|---|
|  | 1493 | chartDatelineTop.BottomAxis.Maximum := HighTime; | 
|---|
|  | 1494 | if LowTime < HighTime then | 
|---|
|  | 1495 | chartDatelineTop.BottomAxis.Minimum := LowTime; | 
|---|
|  | 1496 | chartDatelineBottom.BottomAxis.Minimum := 0;  // avoid possible error | 
|---|
|  | 1497 | chartDatelineBottom.BottomAxis.Maximum := HighTime; | 
|---|
|  | 1498 | if HighTime > FMDateTimeToDateTime(FMStopDate) then | 
|---|
|  | 1499 | chartDatelineTop.BottomAxis.Maximum := FMDateTimeToDateTime(FMStopDate); | 
|---|
|  | 1500 | if LowTime < FMDateTimeToDateTime(FMStartDate) then | 
|---|
|  | 1501 | chartDatelineTop.BottomAxis.Minimum := FMDateTimeToDateTime(FMStartDate);  // ***** | 
|---|
|  | 1502 | end; | 
|---|
|  | 1503 | BottomAxis(scrlTop); | 
|---|
|  | 1504 | BottomAxis(scrlBottom); | 
|---|
|  | 1505 | end; | 
|---|
|  | 1506 |  | 
|---|
|  | 1507 | procedure TfrmGraphs.ChartOnZoom(Sender: TObject); | 
|---|
|  | 1508 | var | 
|---|
|  | 1509 | i: integer; | 
|---|
|  | 1510 | padding: double; | 
|---|
|  | 1511 | datehx: string; | 
|---|
|  | 1512 | BigTime, SmallTime: TDateTime; | 
|---|
|  | 1513 | ChildControl: TControl; | 
|---|
|  | 1514 | begin | 
|---|
|  | 1515 | if not (Sender is TChart) then exit; | 
|---|
|  | 1516 | if not FGraphSetting.VerticalZoom then | 
|---|
|  | 1517 | begin | 
|---|
|  | 1518 | padding := 0; //(FYMaxValue - FYMinValue) * ((100 - ZOOM_PERCENT) * 0.01); | 
|---|
|  | 1519 | (Sender as TChart).LeftAxis.Maximum := BIG_NUMBER;    // avoid min>max error | 
|---|
|  | 1520 | (Sender as TChart).LeftAxis.Minimum := -BIG_NUMBER; | 
|---|
|  | 1521 | (Sender as TChart).LeftAxis.Maximum := FYMaxValue + padding;    //padding 0? | 
|---|
|  | 1522 | (Sender as TChart).LeftAxis.Minimum := FYMinValue - padding;    //padding 0? | 
|---|
|  | 1523 | end; | 
|---|
|  | 1524 | SmallTime := (Sender as TChart).BottomAxis.Minimum; | 
|---|
|  | 1525 | BigTime := (Sender as TChart).BottomAxis.Maximum; | 
|---|
|  | 1526 | if BigTime < SmallTime then BigTime := SmallTime;   // avoid min>max error | 
|---|
|  | 1527 | for i := 0 to scrlTop.ControlCount - 1 do | 
|---|
|  | 1528 | begin | 
|---|
|  | 1529 | ChildControl := scrlTop.Controls[i]; | 
|---|
|  | 1530 | SizeDates((ChildControl as TChart), SmallTime, BigTime); | 
|---|
|  | 1531 | end; | 
|---|
|  | 1532 | SizeDates(chartDatelineTop, SmallTime, BigTime); | 
|---|
|  | 1533 | for i := 0 to scrlBottom.ControlCount - 1 do | 
|---|
|  | 1534 | begin | 
|---|
|  | 1535 | ChildControl := scrlBottom.Controls[i]; | 
|---|
|  | 1536 | SizeDates((ChildControl as TChart), SmallTime, BigTime); | 
|---|
|  | 1537 | end; | 
|---|
|  | 1538 | SizeDates(chartDatelineBottom, SmallTime, BigTime); | 
|---|
|  | 1539 | if FMouseDown and (Sender as TChart).Zoomed then | 
|---|
|  | 1540 | begin | 
|---|
|  | 1541 | datehx := FloatToStr(SmallTime) + '^' + FloatToStr(BigTime); | 
|---|
|  | 1542 | lstZoomHistory.Items.Add(datehx); | 
|---|
|  | 1543 | mnuPopGraphZoomBack.Enabled := true; | 
|---|
|  | 1544 | FMouseDown := false; | 
|---|
|  | 1545 | ZoomUpdateinfo(SmallTime, BigTime); | 
|---|
|  | 1546 | end; | 
|---|
|  | 1547 | end; | 
|---|
|  | 1548 |  | 
|---|
|  | 1549 | procedure TfrmGraphs.ChartOnUndoZoom(Sender: TObject); | 
|---|
|  | 1550 | var | 
|---|
|  | 1551 | i: integer; | 
|---|
|  | 1552 | padding: double; | 
|---|
|  | 1553 | BigTime, SmallTime: TDateTime; | 
|---|
|  | 1554 | ChildControl: TControl; | 
|---|
|  | 1555 | begin | 
|---|
|  | 1556 | if not (Sender is TChart) then exit; | 
|---|
|  | 1557 | FRetainZoom := false; | 
|---|
|  | 1558 | mnuPopGraphZoomBack.Enabled := false; | 
|---|
|  | 1559 | lstZoomHistory.Items.Clear; | 
|---|
|  | 1560 | if not FGraphSetting.VerticalZoom then | 
|---|
|  | 1561 | begin | 
|---|
|  | 1562 | padding := 0; //(FYMaxValue - FYMinValue) * ((100 - ZOOM_PERCENT) * 0.01); | 
|---|
|  | 1563 | (Sender as TChart).LeftAxis.Maximum := BIG_NUMBER;    // avoid min>max error | 
|---|
|  | 1564 | (Sender as TChart).LeftAxis.Minimum := -BIG_NUMBER; | 
|---|
|  | 1565 | (Sender as TChart).LeftAxis.Maximum := FYMaxValue + padding;    //padding 0? | 
|---|
|  | 1566 | (Sender as TChart).LeftAxis.Minimum := FYMinValue - padding;    //padding 0? | 
|---|
|  | 1567 | end; | 
|---|
|  | 1568 | SmallTime := (Sender as TChart).BottomAxis.Minimum; | 
|---|
|  | 1569 | BigTime := (Sender as TChart).BottomAxis.Maximum; | 
|---|
|  | 1570 | if BigTime < SmallTime then BigTime := SmallTime;   // avoid min>max error | 
|---|
|  | 1571 | for i := 0 to scrlTop.ControlCount - 1 do | 
|---|
|  | 1572 | begin | 
|---|
|  | 1573 | ChildControl := scrlTop.Controls[i]; | 
|---|
|  | 1574 | SizeDates((ChildControl as TChart), SmallTime, BigTime); | 
|---|
|  | 1575 | end; | 
|---|
|  | 1576 | SizeDates(chartDatelineTop, SmallTime, BigTime); | 
|---|
|  | 1577 | for i := 0 to scrlBottom.ControlCount - 1 do | 
|---|
|  | 1578 | begin | 
|---|
|  | 1579 | ChildControl := scrlBottom.Controls[i]; | 
|---|
|  | 1580 | SizeDates((ChildControl as TChart), SmallTime, BigTime); | 
|---|
|  | 1581 | end; | 
|---|
|  | 1582 | SizeDates(chartDatelineBottom, SmallTime, BigTime); | 
|---|
|  | 1583 | if FMouseDown then | 
|---|
|  | 1584 | begin | 
|---|
|  | 1585 | FMouseDown := false; | 
|---|
|  | 1586 | pnlInfo.Caption := ''; | 
|---|
|  | 1587 | pnlInfo.Color := COLOR_INFO; | 
|---|
|  | 1588 | pnlInfo.Visible := false; | 
|---|
|  | 1589 | pnlHeader.Visible := false; | 
|---|
|  | 1590 | end; | 
|---|
|  | 1591 | end; | 
|---|
|  | 1592 |  | 
|---|
|  | 1593 | procedure TfrmGraphs.SizeDates(aChart: TChart; aSmallTime, aBigTime: TDateTime); | 
|---|
|  | 1594 | var | 
|---|
|  | 1595 | datediff, yeardiff: integer; | 
|---|
|  | 1596 | begin | 
|---|
|  | 1597 | with aChart.BottomAxis do | 
|---|
|  | 1598 | begin | 
|---|
|  | 1599 | Automatic := false; | 
|---|
|  | 1600 | Maximum := BIG_NUMBER;    // avoid min>max error | 
|---|
|  | 1601 | Minimum := -BIG_NUMBER; | 
|---|
|  | 1602 | Minimum := aSmallTime; | 
|---|
|  | 1603 | Maximum := aBigTime; | 
|---|
|  | 1604 | Increment := DateTimeStep[dtOneMinute]; | 
|---|
|  | 1605 | datediff := DaysBetween(aBigTime, aSmallTime); | 
|---|
|  | 1606 | yeardiff := datediff div 365; | 
|---|
|  | 1607 | DateTimeFormat := ''; | 
|---|
|  | 1608 | Labels := true; | 
|---|
|  | 1609 | if yeardiff > 0 then | 
|---|
|  | 1610 | begin | 
|---|
|  | 1611 | if (pnlScrollTopBase.Width div yeardiff) < DWIDTH_MDY then | 
|---|
|  | 1612 | DateTimeFormat := DFORMAT_MYY; | 
|---|
|  | 1613 | if (pnlScrollTopBase.Width div yeardiff) < DWIDTH_MYY then | 
|---|
|  | 1614 | DateTimeFormat := DFORMAT_YY; | 
|---|
|  | 1615 | if (pnlScrollTopBase.Width div yeardiff) < DWIDTH_YY then | 
|---|
|  | 1616 | Labels := false; | 
|---|
|  | 1617 | end; | 
|---|
|  | 1618 | end; | 
|---|
|  | 1619 | if datediff < 1 then | 
|---|
|  | 1620 | begin | 
|---|
|  | 1621 | if not aChart.Foot.Visible then | 
|---|
|  | 1622 | begin | 
|---|
|  | 1623 | aChart.Foot.Text.Clear; | 
|---|
|  | 1624 | aChart.Foot.Text.Insert(0, FormatDateTime('mmm d, yyyy', aSmallTime)); | 
|---|
|  | 1625 | aChart.Foot.Font.Color := clBtnText; | 
|---|
|  | 1626 | aChart.Foot.Visible := true; | 
|---|
|  | 1627 | end; | 
|---|
|  | 1628 | end | 
|---|
|  | 1629 | else | 
|---|
|  | 1630 | aChart.Foot.Visible := false; | 
|---|
|  | 1631 | end; | 
|---|
|  | 1632 |  | 
|---|
|  | 1633 | procedure TfrmGraphs.MakeSeparate(aScrollBox: TScrollBox; aListView: | 
|---|
|  | 1634 | TListView; aPadPanel: TPanel; section: string); | 
|---|
|  | 1635 | var | 
|---|
|  | 1636 | acnt, bcnt, displayheight, displaynum, gcnt, graphtype, i, j, lcnt, ncnt, pcnt, vcnt: integer; | 
|---|
|  | 1637 | aTitle, checkdata, filetype, high, low, specimen, specnum, typeitem, units: string; | 
|---|
|  | 1638 | newchart: TChart; | 
|---|
|  | 1639 | aGraphItem: TGraphItem; | 
|---|
|  | 1640 | begin | 
|---|
|  | 1641 | FNonNumerics := false; | 
|---|
|  | 1642 | if section = 'top' then pnlItemsTop.Tag := 0 else pnlItemsBottom.Tag := 0; | 
|---|
|  | 1643 | while aScrollBox.ControlCount > 0 do | 
|---|
|  | 1644 | aScrollBox.Controls[0].Free; | 
|---|
|  | 1645 | aPadPanel.Visible := false; | 
|---|
|  | 1646 | if FGraphSetting.Hints then         //************** | 
|---|
|  | 1647 | begin | 
|---|
|  | 1648 | chartDatelineTop.OnMouseMove := chartBaseMouseMove; | 
|---|
|  | 1649 | chartDatelineBottom.OnMouseMove := chartBaseMouseMove; | 
|---|
|  | 1650 | end | 
|---|
|  | 1651 | else | 
|---|
|  | 1652 | begin | 
|---|
|  | 1653 | chartDatelineTop.OnMouseMove := nil; | 
|---|
|  | 1654 | chartDatelineBottom.OnMouseMove := nil; | 
|---|
|  | 1655 | end; | 
|---|
|  | 1656 | pcnt := 0; gcnt := 0; vcnt := 0; lcnt := 0; ncnt := 0; bcnt := 0; acnt := 0; | 
|---|
|  | 1657 | for j := 0 to aListView.Items.Count - 1 do | 
|---|
|  | 1658 | if aListView.Items[j].Selected then | 
|---|
|  | 1659 | begin | 
|---|
|  | 1660 | aGraphItem := TGraphItem(aListView.Items.Item[j].SubItems.Objects[3]); | 
|---|
|  | 1661 | filetype := UpperCase(Piece(aGraphItem.Values, '^', 1)); | 
|---|
|  | 1662 | typeitem := UpperCase(Piece(aGraphItem.Values, '^', 2)); | 
|---|
|  | 1663 | graphtype := GraphTypeNum(filetype); //*****strtointdef(Piece(aListBox.Items[j], '^', 2), 1); | 
|---|
|  | 1664 | if (filetype = '63') and (lstData.Items.Count > 0) then | 
|---|
|  | 1665 | begin | 
|---|
|  | 1666 | checkdata := ''; | 
|---|
|  | 1667 | for i := 0 to lstData.Items.Count - 1 do | 
|---|
|  | 1668 | begin | 
|---|
|  | 1669 | checkdata := lstData.Items[i]; | 
|---|
|  | 1670 | if (Piece(checkdata, '^', 1) = '63') and (Piece(checkdata, '^', 2) = typeitem) then | 
|---|
|  | 1671 | break; | 
|---|
|  | 1672 | end; | 
|---|
|  | 1673 | specnum := Piece(checkdata, '^', 7); | 
|---|
|  | 1674 | specimen := Piece(checkdata, '^', 8); | 
|---|
|  | 1675 | RefUnits(typeitem, specnum, low, high, units); | 
|---|
|  | 1676 | units := LowerCase(units); | 
|---|
|  | 1677 | if units = '' then units := '  '; | 
|---|
|  | 1678 | end | 
|---|
|  | 1679 | else | 
|---|
|  | 1680 | begin | 
|---|
|  | 1681 | specimen := ''; low := ''; high := ''; units := ''; | 
|---|
|  | 1682 | end; | 
|---|
|  | 1683 | aTitle := filetype + '^' + typeitem + '^' + aListView.Items[j].Caption + '^' + | 
|---|
|  | 1684 | specimen + '^' + low + '^' + high + '^' + units; | 
|---|
|  | 1685 | newchart := TChart.Create(self); | 
|---|
|  | 1686 | with newchart do | 
|---|
|  | 1687 | begin | 
|---|
|  | 1688 | Parent := aScrollBox; | 
|---|
|  | 1689 | View3D := false; | 
|---|
|  | 1690 | height := 170; | 
|---|
|  | 1691 | Align := alBottom; | 
|---|
|  | 1692 | Align := alTop; | 
|---|
|  | 1693 | AllowPanning := pmNone; | 
|---|
|  | 1694 | Legend.LegendStyle := lsSeries; | 
|---|
|  | 1695 | Legend.ShadowSize := 1; | 
|---|
|  | 1696 | Legend.Color := clCream; | 
|---|
|  | 1697 | Legend.VertMargin := 0; | 
|---|
|  | 1698 | Legend.Alignment := laTop; | 
|---|
|  | 1699 | Legend.Visible := true; | 
|---|
|  | 1700 | Gradient.EndColor := clGradientActiveCaption; | 
|---|
|  | 1701 | //SetPiece(aTitle, '^', 3, 'zzzz: ' + Piece(aTitle, '^', 3)); // test prefix | 
|---|
|  | 1702 | if (graphtype = 1) and (btnChangeSettings.Tag = 1) then | 
|---|
|  | 1703 | LeftAxis.Title.Caption := 'StdDev' | 
|---|
|  | 1704 | else if (graphtype = 1) and (btnChangeSettings.Tag = 2) then | 
|---|
|  | 1705 | begin | 
|---|
|  | 1706 | LeftAxis.Title.Caption := '1/' + units; | 
|---|
|  | 1707 | SetPiece(aTitle, '^', 3, 'Inverse ' + Piece(aTitle, '^', 3)); | 
|---|
|  | 1708 | end | 
|---|
|  | 1709 | else | 
|---|
|  | 1710 | LeftAxis.Title.Caption := units; | 
|---|
|  | 1711 | if graphtype <> 1 then | 
|---|
|  | 1712 | begin | 
|---|
|  | 1713 | LeftAxis.Visible := false; | 
|---|
|  | 1714 | MarginLeft := round((50 / (pnlScrollTopBase.Width + 1)) * 100);       // ************* marginleft is a % | 
|---|
|  | 1715 | end; | 
|---|
|  | 1716 | BottomAxis.ExactDateTime := true; | 
|---|
|  | 1717 | BottomAxis.Increment := DateTimeStep[dtOneMinute]; | 
|---|
|  | 1718 | HideDates(newchart); | 
|---|
|  | 1719 | BevelOuter := bvNone; | 
|---|
|  | 1720 | OnZoom := ChartOnZoom; | 
|---|
|  | 1721 | OnUndoZoom := ChartOnUndoZoom; | 
|---|
|  | 1722 | OnClickSeries := chartBaseClickSeries; | 
|---|
|  | 1723 | OnClickLegend := chartBaseClickLegend; | 
|---|
|  | 1724 | OnDblClick := mnuPopGraphDetailsClick; | 
|---|
|  | 1725 | OnMouseDown := chartBaseMouseDown; | 
|---|
|  | 1726 | if FGraphSetting.Hints then             //***** | 
|---|
|  | 1727 | OnMouseMove := chartBaseMouseMove | 
|---|
|  | 1728 | else | 
|---|
|  | 1729 | OnMouseMove := nil; | 
|---|
|  | 1730 | end; | 
|---|
|  | 1731 | splGraphs.Tag := 1;    // show ref ranges | 
|---|
|  | 1732 | if graphtype = 4 then graphtype := 2;         // change points to be bars | 
|---|
|  | 1733 | case graphtype of | 
|---|
|  | 1734 | 1:  MakeLineSeries(newchart, aTitle, filetype, lcnt, ncnt, false); | 
|---|
|  | 1735 | 2:  MakeBarSeries(newchart, aTitle, filetype, bcnt); | 
|---|
|  | 1736 | 3:  MakeVisitGanttSeries(newchart, aTitle, filetype, vcnt); | 
|---|
|  | 1737 | 4:  MakePointSeries(newchart, aTitle, filetype, pcnt); | 
|---|
|  | 1738 | 5:  MakeArrowSeries(newchart, aTitle, filetype, acnt); | 
|---|
|  | 1739 | 6:  MakeGanttSeries(newchart, aTitle, filetype, gcnt); | 
|---|
|  | 1740 | 7:  MakeAGanttSeries(newchart, aTitle, filetype, gcnt); | 
|---|
|  | 1741 | 8:  MakeManyGanttSeries(newchart, aTitle, filetype, gcnt); | 
|---|
|  | 1742 | 9:  MakeWeightedArrowSeries(newchart, aTitle, filetype, acnt); | 
|---|
|  | 1743 | 10:  MakeWeightedGanttSeries(newchart, aTitle, filetype, gcnt); | 
|---|
|  | 1744 | end; | 
|---|
|  | 1745 | end; | 
|---|
|  | 1746 | if section = 'top' then | 
|---|
|  | 1747 | begin | 
|---|
|  | 1748 | pnlDatelineTop.Align := alBottom; | 
|---|
|  | 1749 | pnlDatelineTop.Height := 30; | 
|---|
|  | 1750 | scrlTop.Align := alClient; | 
|---|
|  | 1751 | pnlDatelineTop.Visible := false; | 
|---|
|  | 1752 | end | 
|---|
|  | 1753 | else | 
|---|
|  | 1754 | begin | 
|---|
|  | 1755 | pnlDatelineBottom.Align := alBottom; | 
|---|
|  | 1756 | pnlDatelineBottom.Height := 30; | 
|---|
|  | 1757 | scrlBottom.Align := alClient; | 
|---|
|  | 1758 | pnlDatelineBottom.Visible := false; | 
|---|
|  | 1759 | end; | 
|---|
|  | 1760 | with aScrollBox do | 
|---|
|  | 1761 | begin | 
|---|
|  | 1762 | if ControlCount < FGraphSetting.MaxGraphs then        //**** formating should be made for top & bottom | 
|---|
|  | 1763 | displaynum := ControlCount | 
|---|
|  | 1764 | else | 
|---|
|  | 1765 | displaynum := FGraphSetting.MaxGraphs; | 
|---|
|  | 1766 | if displaynum = 0 then | 
|---|
|  | 1767 | displaynum := 3; | 
|---|
|  | 1768 | if (Height div displaynum) < FGraphSetting.MinGraphHeight then | 
|---|
|  | 1769 | displayheight := FGraphSetting.MinGraphHeight | 
|---|
|  | 1770 | else | 
|---|
|  | 1771 | displayheight := (Height div displaynum); | 
|---|
|  | 1772 | for i := 0 to aScrollBox.ControlCount - 1 do | 
|---|
|  | 1773 | Controls[i].height := displayheight; | 
|---|
|  | 1774 | end; | 
|---|
|  | 1775 | if (FGraphSetting.HighTime = FGraphSetting.LowTime) | 
|---|
|  | 1776 | or (lcnt = 1) or (pcnt = 1) or (bcnt = 1) or (vcnt = 1) then | 
|---|
|  | 1777 | begin | 
|---|
|  | 1778 | FGraphSetting.HighTime := FGraphSetting.HighTime + 1; | 
|---|
|  | 1779 | FGraphSetting.LowTime := FGraphSetting.LowTime - 1; | 
|---|
|  | 1780 | end; | 
|---|
|  | 1781 | AdjustTimeframe; | 
|---|
|  | 1782 | if chartDatelineTop.Visible then chartDatelineTop.ZoomPercent(ZOOM_PERCENT); | 
|---|
|  | 1783 | if chartDatelineBottom.Visible then chartDatelineBottom.ZoomPercent(ZOOM_PERCENT); | 
|---|
|  | 1784 | if FNonNumerics then | 
|---|
|  | 1785 | if section = 'top' then pnlItemsTop.Tag := 1 | 
|---|
|  | 1786 | else pnlItemsBottom.Tag := 1; | 
|---|
|  | 1787 | end; | 
|---|
|  | 1788 |  | 
|---|
|  | 1789 | procedure TfrmGraphs.MakeTogether(aScrollBox: TScrollBox; aListView: | 
|---|
|  | 1790 | TListView; aPadPanel: TPanel; section: string); | 
|---|
|  | 1791 | var | 
|---|
|  | 1792 | anylines, nolines, onlylines, singlelabtest: boolean; | 
|---|
|  | 1793 | acnt, bcnt, cnt, gcnt, graphtype, i, j, lcnt, ncnt, pcnt, vcnt: integer; | 
|---|
|  | 1794 | portion: double; | 
|---|
|  | 1795 | aTitle, checkdata, filetype, high, low, specimen, specnum, typeitem, units: string; | 
|---|
|  | 1796 | newchart: TChart; | 
|---|
|  | 1797 | aGraphItem: TGraphItem; | 
|---|
|  | 1798 | begin | 
|---|
|  | 1799 | pcnt := 0; gcnt := 0; lcnt := 0; ncnt := 0; bcnt := 0; acnt := 0; | 
|---|
|  | 1800 | onlylines := true; | 
|---|
|  | 1801 | anylines := false; | 
|---|
|  | 1802 | nolines := true; | 
|---|
|  | 1803 | FNonNumerics := false; | 
|---|
|  | 1804 | if section = 'top' then pnlItemsTop.Tag := 0 else pnlItemsBottom.Tag := 0; | 
|---|
|  | 1805 | if FGraphSetting.Hints then       //****** | 
|---|
|  | 1806 | begin | 
|---|
|  | 1807 | chartDatelineTop.OnMouseMove := chartBaseMouseMove; | 
|---|
|  | 1808 | chartDatelineBottom.OnMouseMove := chartBaseMouseMove; | 
|---|
|  | 1809 | end | 
|---|
|  | 1810 | else | 
|---|
|  | 1811 | begin | 
|---|
|  | 1812 | chartDatelineTop.OnMouseMove := nil; | 
|---|
|  | 1813 | chartDatelineBottom.OnMouseMove := nil; | 
|---|
|  | 1814 | end; | 
|---|
|  | 1815 | for j := 0 to aListView.Items.Count - 1 do | 
|---|
|  | 1816 | if aListView.Items[j].Selected then | 
|---|
|  | 1817 | begin | 
|---|
|  | 1818 | aGraphItem := TGraphItem(aListView.Items.Item[j].SubItems.Objects[3]); | 
|---|
|  | 1819 | filetype := UpperCase(Piece(aGraphItem.Values, '^', 1)); | 
|---|
|  | 1820 | typeitem := UpperCase(Piece(aGraphItem.Values, '^', 2)); | 
|---|
|  | 1821 | if aListView.SelCount = 1 then                 // one lab test - make separate | 
|---|
|  | 1822 | begin | 
|---|
|  | 1823 | if filetype = '63' then | 
|---|
|  | 1824 | begin | 
|---|
|  | 1825 | MakeSeparate(aScrollBox, aListView, aPadPanel, section); | 
|---|
|  | 1826 | exit; | 
|---|
|  | 1827 | end; | 
|---|
|  | 1828 | end; | 
|---|
|  | 1829 | graphtype := GraphTypeNum(filetype); | 
|---|
|  | 1830 | case graphtype of | 
|---|
|  | 1831 | 1: lcnt := lcnt + 1; | 
|---|
|  | 1832 | 2: bcnt := bcnt + 1; | 
|---|
|  | 1833 | 3: vcnt := vcnt + 1; | 
|---|
|  | 1834 | 4: pcnt := pcnt + 1; | 
|---|
|  | 1835 | 5: acnt := acnt + 1; | 
|---|
|  | 1836 | 6: gcnt := gcnt + 1; | 
|---|
|  | 1837 | 7: gcnt := gcnt + 1; | 
|---|
|  | 1838 | 8: gcnt := gcnt + 1; | 
|---|
|  | 1839 | 9: acnt := acnt + 1; | 
|---|
|  | 1840 | end; | 
|---|
|  | 1841 | if graphtype = 1 then | 
|---|
|  | 1842 | begin | 
|---|
|  | 1843 | anylines := true; | 
|---|
|  | 1844 | nolines := false; | 
|---|
|  | 1845 | end | 
|---|
|  | 1846 | else | 
|---|
|  | 1847 | onlylines := false; | 
|---|
|  | 1848 | end; | 
|---|
|  | 1849 | if section = 'top' then | 
|---|
|  | 1850 | chkItemsTop.Checked := false | 
|---|
|  | 1851 | else | 
|---|
|  | 1852 | chkItemsBottom.Checked := false; | 
|---|
|  | 1853 | lstTempCheck.Items.Clear; | 
|---|
|  | 1854 | while aScrollBox.ControlCount > 0 do | 
|---|
|  | 1855 | aScrollBox.Controls[0].Free; | 
|---|
|  | 1856 | newchart := TChart.Create(self);  // whynot use base? | 
|---|
|  | 1857 | with newchart do          // if a single line graph do lab stuff (ref range, units) **************************************** | 
|---|
|  | 1858 | begin | 
|---|
|  | 1859 | Parent := aScrollBox; | 
|---|
|  | 1860 | View3D := false; | 
|---|
|  | 1861 | Chart3DPercent := 10; | 
|---|
|  | 1862 | AllowPanning := pmNone; | 
|---|
|  | 1863 | Align := alClient; | 
|---|
|  | 1864 | Gradient.EndColor := clGradientActiveCaption; | 
|---|
|  | 1865 | Legend.LegendStyle := lsSeries; | 
|---|
|  | 1866 | Legend.ShadowSize := 1; | 
|---|
|  | 1867 | Legend.Color := clCream; | 
|---|
|  | 1868 | Legend.VertMargin := 0; | 
|---|
|  | 1869 | Legend.Alignment := laTop; | 
|---|
|  | 1870 | Legend.Visible := true; | 
|---|
|  | 1871 | LeftAxis.Title.Caption := ' '; | 
|---|
|  | 1872 | BottomAxis.ExactDateTime := true; | 
|---|
|  | 1873 | BottomAxis.Increment := DateTimeStep[dtOneMinute]; | 
|---|
|  | 1874 | HideDates(newchart); | 
|---|
|  | 1875 | BevelOuter := bvNone; | 
|---|
|  | 1876 | OnZoom := ChartOnZoom; | 
|---|
|  | 1877 | OnUndoZoom := ChartOnUndoZoom; | 
|---|
|  | 1878 | OnClickSeries := chartBaseClickSeries; | 
|---|
|  | 1879 | OnClickLegend := chartBaseClickLegend; | 
|---|
|  | 1880 | OnDblClick := mnuPopGraphDetailsClick; | 
|---|
|  | 1881 | OnMouseDown := chartBaseMouseDown; | 
|---|
|  | 1882 | if FGraphSetting.Hints then               //****** | 
|---|
|  | 1883 | OnMouseMove := chartBaseMouseMove | 
|---|
|  | 1884 | else | 
|---|
|  | 1885 | OnMouseMove := nil; | 
|---|
|  | 1886 | Visible := false; | 
|---|
|  | 1887 | end; | 
|---|
|  | 1888 | aPadPanel.Visible := true; | 
|---|
|  | 1889 | portion := PortionSize(lcnt, pcnt, gcnt, vcnt, bcnt, acnt); | 
|---|
|  | 1890 | if section = 'top' then | 
|---|
|  | 1891 | SizeTogether(onlylines, nolines, anylines, scrlTop, newchart, | 
|---|
|  | 1892 | pnlDatelineTop, pnlScrollTopBase, portion) | 
|---|
|  | 1893 | else | 
|---|
|  | 1894 | SizeTogether(onlylines, nolines, anylines, scrlBottom, newchart, | 
|---|
|  | 1895 | pnlDatelineBottom, pnlScrollBottomBase, portion); | 
|---|
|  | 1896 | if btnChangeSettings.Tag = 1 then  splGraphs.Tag := 1 // show ref ranges | 
|---|
|  | 1897 | else splGraphs.Tag := 0; | 
|---|
|  | 1898 |  | 
|---|
|  | 1899 | if nolines then | 
|---|
|  | 1900 | begin | 
|---|
|  | 1901 | pcnt := 0; gcnt := 0; vcnt := 0; bcnt := 0; acnt := 0; | 
|---|
|  | 1902 | for j := 0 to aListView.Items.Count - 1 do | 
|---|
|  | 1903 | if aListView.Items[j].Selected then | 
|---|
|  | 1904 | begin | 
|---|
|  | 1905 | aGraphItem := TGraphItem(aListView.Items.Item[j].SubItems.Objects[3]); | 
|---|
|  | 1906 | filetype := Piece(aGraphItem.Values, '^', 1); | 
|---|
|  | 1907 | typeitem := Piece(aGraphItem.Values, '^', 2); | 
|---|
|  | 1908 | aTitle := filetype + '^' + typeitem + '^' + aListView.Items[j].Caption + '^'; | 
|---|
|  | 1909 | graphtype := GraphTypeNum(filetype); | 
|---|
|  | 1910 | if section = 'top' then | 
|---|
|  | 1911 | MakeDateline(section, aTitle, filetype, chartDatelineTop, graphtype, bcnt, pcnt, gcnt, vcnt, acnt) | 
|---|
|  | 1912 | else | 
|---|
|  | 1913 | MakeDateline(section, aTitle, filetype, chartDatelineBottom, graphtype, bcnt, pcnt, gcnt, vcnt, acnt); | 
|---|
|  | 1914 | end; | 
|---|
|  | 1915 | if section = 'top' then | 
|---|
|  | 1916 | begin | 
|---|
|  | 1917 | scrlTop.Align := alTop; | 
|---|
|  | 1918 | scrlTop.Height := 1; //pnlScrollTopBase.Height div 4; | 
|---|
|  | 1919 | pnlDatelineTop.Align := alClient; | 
|---|
|  | 1920 | pnlDatelineTop.Visible := true; | 
|---|
|  | 1921 | end | 
|---|
|  | 1922 | else | 
|---|
|  | 1923 | begin | 
|---|
|  | 1924 | scrlBottom.Align := alTop; | 
|---|
|  | 1925 | scrlBottom.Height := 1; //pnlScrollBottomBase.Height div 4; | 
|---|
|  | 1926 | pnlDatelineBottom.Align := alClient; | 
|---|
|  | 1927 | pnlDatelineBottom.Visible := true; | 
|---|
|  | 1928 | end; | 
|---|
|  | 1929 | end | 
|---|
|  | 1930 | else if onlylines then | 
|---|
|  | 1931 | begin | 
|---|
|  | 1932 | lcnt := 0; | 
|---|
|  | 1933 | for j := 0 to aListView.Items.Count - 1 do | 
|---|
|  | 1934 | if aListView.Items[j].Selected then | 
|---|
|  | 1935 | begin | 
|---|
|  | 1936 | aGraphItem := TGraphItem(aListView.Items.Item[j].SubItems.Objects[3]); | 
|---|
|  | 1937 | filetype := Piece(aGraphItem.Values, '^', 1); | 
|---|
|  | 1938 | typeitem := Piece(aGraphItem.Values, '^', 2); | 
|---|
|  | 1939 | if (filetype = '63') and (lstData.Items.Count > 0) then    //*********** | 
|---|
|  | 1940 | begin | 
|---|
|  | 1941 | checkdata := ''; | 
|---|
|  | 1942 | for i := 0 to lstData.Items.Count - 1 do | 
|---|
|  | 1943 | begin | 
|---|
|  | 1944 | checkdata := lstData.Items[i]; | 
|---|
|  | 1945 | if (Piece(checkdata, '^', 1) = '63') and (Piece(checkdata, '^', 2) = typeitem) then | 
|---|
|  | 1946 | break; | 
|---|
|  | 1947 | end; | 
|---|
|  | 1948 | specnum := Piece(checkdata, '^', 7); | 
|---|
|  | 1949 | specimen := Piece(checkdata, '^', 8); | 
|---|
|  | 1950 | RefUnits(typeitem, specnum, low, high, units); | 
|---|
|  | 1951 | units := LowerCase(units); | 
|---|
|  | 1952 | if units = '' then units := '  '; | 
|---|
|  | 1953 | end | 
|---|
|  | 1954 | else | 
|---|
|  | 1955 | begin | 
|---|
|  | 1956 | specimen := ''; low := ''; high := ''; units := ''; | 
|---|
|  | 1957 | end; | 
|---|
|  | 1958 | aTitle := filetype + '^' + typeitem + '^' + aListView.Items[j].Caption + '^' + | 
|---|
|  | 1959 | specimen + '^' + low + '^' + high + '^' + units; | 
|---|
|  | 1960 | MakeLineSeries(newchart, aTitle, filetype, lcnt, ncnt, true) | 
|---|
|  | 1961 | end; | 
|---|
|  | 1962 | if section = 'top' then | 
|---|
|  | 1963 | begin | 
|---|
|  | 1964 | pnlDatelineTop.Align := alBottom; | 
|---|
|  | 1965 | pnlDatelineTop.Height := 5; | 
|---|
|  | 1966 | scrlTop.Align := alClient; | 
|---|
|  | 1967 | pnlDatelineTop.Visible := false; | 
|---|
|  | 1968 | end | 
|---|
|  | 1969 | else | 
|---|
|  | 1970 | begin | 
|---|
|  | 1971 | pnlDatelineBottom.Align := alBottom; | 
|---|
|  | 1972 | pnlDatelineBottom.Height := 5; | 
|---|
|  | 1973 | scrlBottom.Align := alClient; | 
|---|
|  | 1974 | pnlDatelineBottom.Visible := false; | 
|---|
|  | 1975 | end; | 
|---|
|  | 1976 | with newchart do | 
|---|
|  | 1977 | begin | 
|---|
|  | 1978 | if btnChangeSettings.Tag = 1 then | 
|---|
|  | 1979 | LeftAxis.Title.Caption := 'StdDev'; | 
|---|
|  | 1980 | Visible := true; | 
|---|
|  | 1981 | end; | 
|---|
|  | 1982 | end | 
|---|
|  | 1983 | else if anylines then | 
|---|
|  | 1984 | begin | 
|---|
|  | 1985 | pcnt := 0; gcnt := 0; vcnt := 0; lcnt := 0; ncnt := 0; bcnt := 0; acnt := 0; | 
|---|
|  | 1986 | cnt := 0; | 
|---|
|  | 1987 | for j := 0 to aListView.Items.Count - 1 do | 
|---|
|  | 1988 | if aListView.Items[j].Selected then | 
|---|
|  | 1989 | begin | 
|---|
|  | 1990 | aGraphItem := TGraphItem(aListView.Items.Item[j].SubItems.Objects[3]); | 
|---|
|  | 1991 | filetype := Piece(aGraphItem.Values, '^', 1); | 
|---|
|  | 1992 | if filetype = '120.5' then | 
|---|
|  | 1993 | begin | 
|---|
|  | 1994 | cnt := BIG_NUMBER; | 
|---|
|  | 1995 | break; | 
|---|
|  | 1996 | end; | 
|---|
|  | 1997 | if filetype = '63' then | 
|---|
|  | 1998 | cnt := cnt + 1; | 
|---|
|  | 1999 | if cnt > 1 then | 
|---|
|  | 2000 | break; | 
|---|
|  | 2001 | end; | 
|---|
|  | 2002 | singlelabtest := cnt = 1; | 
|---|
|  | 2003 | for j := 0 to aListView.Items.Count - 1 do | 
|---|
|  | 2004 | if aListView.Items[j].Selected then | 
|---|
|  | 2005 | begin | 
|---|
|  | 2006 | aGraphItem := TGraphItem(aListView.Items.Item[j].SubItems.Objects[3]); | 
|---|
|  | 2007 | filetype := Piece(aGraphItem.Values, '^', 1); | 
|---|
|  | 2008 | typeitem := Piece(aGraphItem.Values, '^', 2); | 
|---|
|  | 2009 | if (filetype = '63') and (lstData.Items.Count > 0) then    //*********** | 
|---|
|  | 2010 | begin | 
|---|
|  | 2011 | checkdata := ''; | 
|---|
|  | 2012 | for i := 0 to lstData.Items.Count - 1 do | 
|---|
|  | 2013 | begin | 
|---|
|  | 2014 | checkdata := lstData.Items[i]; | 
|---|
|  | 2015 | if (Piece(checkdata, '^', 1) = '63') and (Piece(checkdata, '^', 2) = typeitem) then | 
|---|
|  | 2016 | break; | 
|---|
|  | 2017 | end; | 
|---|
|  | 2018 | specnum := Piece(checkdata, '^', 7); | 
|---|
|  | 2019 | specimen := Piece(checkdata, '^', 8); | 
|---|
|  | 2020 | RefUnits(typeitem, specnum, low, high, units); | 
|---|
|  | 2021 | units := LowerCase(units); | 
|---|
|  | 2022 | if units = '' then units := '  '; | 
|---|
|  | 2023 | end | 
|---|
|  | 2024 | else | 
|---|
|  | 2025 | begin | 
|---|
|  | 2026 | specimen := ''; low := ''; high := ''; units := ''; | 
|---|
|  | 2027 | end; | 
|---|
|  | 2028 | aTitle := filetype + '^' + typeitem + '^' + aListView.Items[j].Caption + '^' + | 
|---|
|  | 2029 | specimen + '^' + low + '^' + high + '^' + units; | 
|---|
|  | 2030 | graphtype := GraphTypeNum(filetype); | 
|---|
|  | 2031 | if graphtype = 1 then | 
|---|
|  | 2032 | begin | 
|---|
|  | 2033 | if btnChangeSettings.Tag = 1 then | 
|---|
|  | 2034 | newchart.LeftAxis.Title.Caption := 'StdDev' | 
|---|
|  | 2035 | else | 
|---|
|  | 2036 | newchart.LeftAxis.Title.Caption := units; | 
|---|
|  | 2037 | if singlelabtest then | 
|---|
|  | 2038 | splGraphs.Tag := 1 | 
|---|
|  | 2039 | else | 
|---|
|  | 2040 | splGraphs.Tag := 0; | 
|---|
|  | 2041 | MakeLineSeries(newchart, aTitle, filetype, lcnt, ncnt, true); | 
|---|
|  | 2042 | end | 
|---|
|  | 2043 | else if section = 'top' then | 
|---|
|  | 2044 | MakeDateline(section, aTitle, filetype, chartDatelineTop, graphtype, bcnt, pcnt, gcnt, vcnt, acnt) | 
|---|
|  | 2045 | else | 
|---|
|  | 2046 | MakeDateline(section, aTitle, filetype, chartDatelineBottom, graphtype, bcnt, pcnt, gcnt, vcnt, acnt); | 
|---|
|  | 2047 | end; | 
|---|
|  | 2048 | if section = 'top' then | 
|---|
|  | 2049 | begin | 
|---|
|  | 2050 | scrlTop.Align := alTop; | 
|---|
|  | 2051 | pnlDatelineTop.Align := alBottom; | 
|---|
|  | 2052 | pnlDatelineTop.Height := pnlScrollTopBase.Height div 2; | 
|---|
|  | 2053 | scrlTop.Align := alClient; | 
|---|
|  | 2054 | pnlDatelineTop.Visible := true; | 
|---|
|  | 2055 | end | 
|---|
|  | 2056 | else | 
|---|
|  | 2057 | begin | 
|---|
|  | 2058 | scrlBottom.Align := alTop; | 
|---|
|  | 2059 | pnlDatelineBottom.Align := alBottom; | 
|---|
|  | 2060 | pnlDatelineBottom.Height := pnlScrollBottomBase.Height div 2; | 
|---|
|  | 2061 | scrlBottom.Align := alClient; | 
|---|
|  | 2062 | pnlDatelineBottom.Visible := true; | 
|---|
|  | 2063 | end; | 
|---|
|  | 2064 | with newchart do | 
|---|
|  | 2065 | begin | 
|---|
|  | 2066 | if btnChangeSettings.Tag = 1 then | 
|---|
|  | 2067 | LeftAxis.Title.Caption := 'StdDev'; | 
|---|
|  | 2068 | Visible := true; | 
|---|
|  | 2069 | end; | 
|---|
|  | 2070 | end; | 
|---|
|  | 2071 | if (FGraphSetting.HighTime = FGraphSetting.LowTime) | 
|---|
|  | 2072 | or (lcnt = 1) or (pcnt = 1) or (bcnt = 1) or (acnt = 1) or (vcnt = 1) then | 
|---|
|  | 2073 | begin | 
|---|
|  | 2074 | FGraphSetting.HighTime := FGraphSetting.HighTime + 1; | 
|---|
|  | 2075 | FGraphSetting.LowTime := FGraphSetting.LowTime - 1; | 
|---|
|  | 2076 | chartDatelineTop.LeftAxis.Minimum := chartDatelineTop.LeftAxis.Minimum - 0.5; | 
|---|
|  | 2077 | chartDatelineTop.LeftAxis.Maximum := chartDatelineTop.LeftAxis.Maximum + 0.5; | 
|---|
|  | 2078 | chartDatelineBottom.LeftAxis.Minimum := chartDatelineBottom.LeftAxis.Minimum - 0.5; | 
|---|
|  | 2079 | chartDatelineBottom.LeftAxis.Maximum := chartDatelineBottom.LeftAxis.Maximum + 0.5; | 
|---|
|  | 2080 | end; | 
|---|
|  | 2081 | AdjustTimeframe; | 
|---|
|  | 2082 | if chartDatelineTop.Visible then chartDatelineTop.ZoomPercent(ZOOM_PERCENT); | 
|---|
|  | 2083 | if chartDatelineBottom.Visible then chartDatelineBottom.ZoomPercent(ZOOM_PERCENT); | 
|---|
|  | 2084 | if FNonNumerics then | 
|---|
|  | 2085 | if section = 'top' then pnlItemsTop.Tag := 1 | 
|---|
|  | 2086 | else pnlItemsBottom.Tag := 1; | 
|---|
|  | 2087 | end; | 
|---|
|  | 2088 |  | 
|---|
|  | 2089 | function TfrmGraphs.PortionSize(lcnt, pcnt, gcnt, vcnt, bcnt, acnt: integer): double; | 
|---|
|  | 2090 | var | 
|---|
|  | 2091 | etotal, evalue, dvalue, value: double; | 
|---|
|  | 2092 | begin | 
|---|
|  | 2093 | dvalue := (gcnt + vcnt + acnt); | 
|---|
|  | 2094 | evalue := (pcnt + bcnt) / 2; | 
|---|
|  | 2095 | etotal := dvalue + evalue; | 
|---|
|  | 2096 | if etotal > 0 then | 
|---|
|  | 2097 | begin | 
|---|
|  | 2098 | value := lcnt / etotal; | 
|---|
|  | 2099 | if value > 4 then Result := 0.2 | 
|---|
|  | 2100 | else if etotal < 5 then Result := 0.2 | 
|---|
|  | 2101 | else if value < 0.25 then Result := 0.8 | 
|---|
|  | 2102 | else if value < 0.4 then Result := 0.6 | 
|---|
|  | 2103 | else Result := 0.5; | 
|---|
|  | 2104 | end | 
|---|
|  | 2105 | else | 
|---|
|  | 2106 | Result := 0; | 
|---|
|  | 2107 | end; | 
|---|
|  | 2108 |  | 
|---|
|  | 2109 | procedure TfrmGraphs.MakeDateline(section, aTitle, aFileType: string; aChart: TChart; graphtype: integer; | 
|---|
|  | 2110 | var bcnt, pcnt, gcnt, vcnt, acnt: integer); | 
|---|
|  | 2111 | begin | 
|---|
|  | 2112 | aChart.LeftAxis.Automatic := true; | 
|---|
|  | 2113 | aChart.LeftAxis.Visible := true; | 
|---|
|  | 2114 | //if graphtype = 4 then graphtype := 2;    // makes all points into bars | 
|---|
|  | 2115 | case graphtype of | 
|---|
|  | 2116 | 2:  MakeBarSeries(aChart, aTitle, aFileType, bcnt); | 
|---|
|  | 2117 | 3:  MakeVisitGanttSeries(aChart, aTitle, aFileType, vcnt); | 
|---|
|  | 2118 | 4:  MakePointSeries(aChart, aTitle, aFileType, pcnt); | 
|---|
|  | 2119 | 5:  MakeArrowSeries(aChart, aTitle, aFileType, acnt); | 
|---|
|  | 2120 | 6:  MakeGanttSeries(aChart, aTitle, aFileType, gcnt); | 
|---|
|  | 2121 | 7:  MakeAGanttSeries(aChart, aTitle, aFileType, gcnt); | 
|---|
|  | 2122 | 8:  MakeManyGanttSeries(aChart, aTitle, aFileType, gcnt); | 
|---|
|  | 2123 | 9:  MakeWeightedArrowSeries(aChart, aTitle, aFileType, acnt); | 
|---|
|  | 2124 | 10:  MakeWeightedGanttSeries(aChart, aTitle, aFileType, gcnt); | 
|---|
|  | 2125 | end; | 
|---|
|  | 2126 | end; | 
|---|
|  | 2127 |  | 
|---|
|  | 2128 | procedure TfrmGraphs.SizeTogether(onlylines, nolines, anylines: Boolean; aScroll: TScrollBox; | 
|---|
|  | 2129 | aChart: TChart; aPanel, aPanelBase: TPanel; portion: Double); | 
|---|
|  | 2130 | begin | 
|---|
|  | 2131 | if onlylines then                     //top &bottom | 
|---|
|  | 2132 | begin | 
|---|
|  | 2133 | aScroll.Align := alTop; | 
|---|
|  | 2134 | aScroll.Height := 1; | 
|---|
|  | 2135 | aChart.Visible := false; | 
|---|
|  | 2136 | aPanel.Align := alClient; | 
|---|
|  | 2137 | aPanel.Visible := true; | 
|---|
|  | 2138 | end | 
|---|
|  | 2139 | else if nolines then | 
|---|
|  | 2140 | begin | 
|---|
|  | 2141 | aPanel.Align := alBottom; | 
|---|
|  | 2142 | aPanel.Height := 5; | 
|---|
|  | 2143 | aScroll.Align := alClient; | 
|---|
|  | 2144 | aPanel.Visible := false; | 
|---|
|  | 2145 | if btnChangeSettings.Tag = 1 then | 
|---|
|  | 2146 | aChart.LeftAxis.Title.Caption := 'StdDev'; | 
|---|
|  | 2147 | end | 
|---|
|  | 2148 | else if anylines then | 
|---|
|  | 2149 | begin | 
|---|
|  | 2150 | aScroll.Align := alTop; | 
|---|
|  | 2151 | aPanel.Align := alBottom; | 
|---|
|  | 2152 | aPanel.Height := round(aPanelBase.Height * portion); | 
|---|
|  | 2153 | if aPanel.Height < 60 then | 
|---|
|  | 2154 | if aPanelBase.Height > 100 then aPanel.Height := 60;           //*** | 
|---|
|  | 2155 | aScroll.Align := alClient; | 
|---|
|  | 2156 | aPanel.Visible := true; | 
|---|
|  | 2157 | if btnChangeSettings.Tag = 1 then | 
|---|
|  | 2158 | aChart.LeftAxis.Title.Caption := 'StdDev'; | 
|---|
|  | 2159 | end; | 
|---|
|  | 2160 | end; | 
|---|
|  | 2161 |  | 
|---|
|  | 2162 | function TfrmGraphs.Vfactor(aTitle: string): double;  // returns first numbers in string | 
|---|
|  | 2163 | var | 
|---|
|  | 2164 | firstnum: boolean; | 
|---|
|  | 2165 | i: integer; | 
|---|
|  | 2166 | vfactor: string; | 
|---|
|  | 2167 | begin | 
|---|
|  | 2168 | vfactor := ''; | 
|---|
|  | 2169 | firstnum := false; | 
|---|
|  | 2170 | for i := 0 to length(aTitle) - 1 do | 
|---|
|  | 2171 | if IsDelimiter('1234567890.', aTitle, i) then | 
|---|
|  | 2172 | begin | 
|---|
|  | 2173 | vfactor := vfactor + aTitle[i]; | 
|---|
|  | 2174 | firstnum := true; | 
|---|
|  | 2175 | end | 
|---|
|  | 2176 | else | 
|---|
|  | 2177 | if firstnum = true then break; | 
|---|
|  | 2178 | Result := strtofloatdef(vfactor, 1); | 
|---|
|  | 2179 | end; | 
|---|
|  | 2180 |  | 
|---|
|  | 2181 | function TfrmGraphs.NextColor(aCnt: integer): TColor; | 
|---|
|  | 2182 | begin | 
|---|
|  | 2183 | case (aCnt mod NUM_COLORS) of | 
|---|
|  | 2184 | 1: Result := clRed; | 
|---|
|  | 2185 | 2: Result := clBlue; | 
|---|
|  | 2186 | 3: Result := clYellow; | 
|---|
|  | 2187 | 4: Result := clGreen; | 
|---|
|  | 2188 | 5: Result := clFuchsia; | 
|---|
|  | 2189 | 6: Result := clMoneyGreen; | 
|---|
|  | 2190 | 7: Result := clOlive; | 
|---|
|  | 2191 | 8: Result := clLime; | 
|---|
|  | 2192 | 9: Result := clMedGray; | 
|---|
|  | 2193 | 10: Result := clNavy; | 
|---|
|  | 2194 | 11: Result := clAqua; | 
|---|
|  | 2195 | 12: Result := clGray; | 
|---|
|  | 2196 | 13: Result := clSkyBlue; | 
|---|
|  | 2197 | 14: Result := clTeal; | 
|---|
|  | 2198 | 15: Result := clBlack; | 
|---|
|  | 2199 | 0: Result := clPurple; | 
|---|
|  | 2200 | 16: Result := clMaroon; | 
|---|
|  | 2201 | 17: Result := clCream; | 
|---|
|  | 2202 | 18: Result := clSilver; | 
|---|
|  | 2203 | else | 
|---|
|  | 2204 | Result := clWhite; | 
|---|
|  | 2205 | end; | 
|---|
|  | 2206 | end; | 
|---|
|  | 2207 |  | 
|---|
|  | 2208 |  | 
|---|
|  | 2209 | procedure TfrmGraphs.mnuPopGraphSwapClick(Sender: TObject); | 
|---|
|  | 2210 | var | 
|---|
|  | 2211 | tempcheck: boolean; | 
|---|
|  | 2212 | bottomview, i, j, topview: integer; | 
|---|
|  | 2213 | typeitem: string; | 
|---|
|  | 2214 | aGraphItem: TGraphItem; | 
|---|
|  | 2215 | begin | 
|---|
|  | 2216 | FFirstClick := true; | 
|---|
|  | 2217 | if (lvwItemsTop.SelCount = 0) and (lvwItemsBottom.SelCount = 0) then exit; | 
|---|
|  | 2218 | topview := cboViewsTop.ItemIndex; | 
|---|
|  | 2219 | bottomview := cboViewsBottom.ItemIndex; | 
|---|
|  | 2220 | HideGraphs(true); | 
|---|
|  | 2221 | with chkDualViews do | 
|---|
|  | 2222 | if not Checked then | 
|---|
|  | 2223 | begin | 
|---|
|  | 2224 | Checked := true; | 
|---|
|  | 2225 | Click; | 
|---|
|  | 2226 | end; | 
|---|
|  | 2227 | tempcheck := chkItemsTop.Checked; | 
|---|
|  | 2228 | chkItemsTop.Checked := chkItemsBottom.Checked; | 
|---|
|  | 2229 | chkItemsBottom.Checked := tempcheck; | 
|---|
|  | 2230 | pnlBottom.Height := pnlMain.Height - pnlBottom.Height; | 
|---|
|  | 2231 | lstScratchSwap.Items.Clear; | 
|---|
|  | 2232 | if topview < 1 then | 
|---|
|  | 2233 | with lvwItemsTop do | 
|---|
|  | 2234 | for i := 0 to Items.Count - 1 do | 
|---|
|  | 2235 | if Items[i].Selected then | 
|---|
|  | 2236 | begin | 
|---|
|  | 2237 | aGraphItem := TGraphItem(Items.Item[i].SubItems.Objects[3]); | 
|---|
|  | 2238 | lstScratchSwap.Items.Add(aGraphItem.Values); | 
|---|
|  | 2239 | end; | 
|---|
|  | 2240 | if bottomview > 0 then | 
|---|
|  | 2241 | begin | 
|---|
|  | 2242 | cboViewsTop.ItemIndex := bottomview; | 
|---|
|  | 2243 | cboViewsTopChange(self); | 
|---|
|  | 2244 | end | 
|---|
|  | 2245 | else | 
|---|
|  | 2246 | begin | 
|---|
|  | 2247 | cboViewsTop.ItemIndex := -1; | 
|---|
|  | 2248 | cboViewsTop.Text := ''; | 
|---|
|  | 2249 | lvwItemsTop.ClearSelection; | 
|---|
|  | 2250 | with lvwItemsBottom do | 
|---|
|  | 2251 | for i := 0 to Items.Count - 1 do | 
|---|
|  | 2252 | if Items[i].Selected then | 
|---|
|  | 2253 | begin | 
|---|
|  | 2254 | aGraphItem := TGraphItem(Items.Item[i].SubItems.Objects[3]); | 
|---|
|  | 2255 | typeitem := Pieces(aGraphItem.Values, '^', 1, 2); | 
|---|
|  | 2256 | for j := 0 to lvwItemsTop.Items.Count - 1 do | 
|---|
|  | 2257 | begin | 
|---|
|  | 2258 | aGraphItem := TGraphItem(lvwItemsTop.Items[j].SubItems.Objects[3]); | 
|---|
|  | 2259 | if typeitem = Pieces(aGraphItem.Values, '^', 1, 2) then | 
|---|
|  | 2260 | begin | 
|---|
|  | 2261 | lvwItemsTop.Items[j].Selected := true; | 
|---|
|  | 2262 | break; | 
|---|
|  | 2263 | end; | 
|---|
|  | 2264 | end; | 
|---|
|  | 2265 | end; | 
|---|
|  | 2266 | lvwItemsTopClick(self); | 
|---|
|  | 2267 | end; | 
|---|
|  | 2268 | if topview > 0 then | 
|---|
|  | 2269 | begin | 
|---|
|  | 2270 | cboViewsBottom.ItemIndex := topview; | 
|---|
|  | 2271 | cboViewsBottomChange(self); | 
|---|
|  | 2272 | end | 
|---|
|  | 2273 | else | 
|---|
|  | 2274 | begin | 
|---|
|  | 2275 | cboViewsBottom.ItemIndex := -1; | 
|---|
|  | 2276 | cboViewsBottom.Text := ''; | 
|---|
|  | 2277 | lvwItemsBottom.ClearSelection; | 
|---|
|  | 2278 | with lstScratchSwap do | 
|---|
|  | 2279 | for i := 0 to Items.Count - 1 do | 
|---|
|  | 2280 | for j := 0 to lvwItemsBottom.Items.Count - 1 do | 
|---|
|  | 2281 | begin | 
|---|
|  | 2282 | aGraphItem := TGraphItem(lvwItemsBottom.Items.Item[j].SubItems.Objects[3]); | 
|---|
|  | 2283 | if aGraphItem.Values = Items[i] then | 
|---|
|  | 2284 | begin | 
|---|
|  | 2285 | lvwItemsBottom.Items[j].Selected := true; | 
|---|
|  | 2286 | break; | 
|---|
|  | 2287 | end; | 
|---|
|  | 2288 | end; | 
|---|
|  | 2289 | lvwItemsBottomClick(self); | 
|---|
|  | 2290 | end; | 
|---|
|  | 2291 | lstScratchSwap.Items.Clear; | 
|---|
|  | 2292 | HideGraphs(false); | 
|---|
|  | 2293 | end; | 
|---|
|  | 2294 |  | 
|---|
|  | 2295 | procedure TfrmGraphs.mnuPopGraphSplitClick(Sender: TObject); | 
|---|
|  | 2296 | var | 
|---|
|  | 2297 | i: integer; | 
|---|
|  | 2298 | typeitem, typenum: string; | 
|---|
|  | 2299 | aGraphItem: TGraphItem; | 
|---|
|  | 2300 | begin | 
|---|
|  | 2301 | FFirstClick := true; | 
|---|
|  | 2302 | if (lvwItemsTop.SelCount = 0) and (lvwItemsBottom.SelCount = 0) then exit; | 
|---|
|  | 2303 | HideGraphs(true); | 
|---|
|  | 2304 | with chkDualViews do | 
|---|
|  | 2305 | if not Checked then | 
|---|
|  | 2306 | begin | 
|---|
|  | 2307 | Checked := true; | 
|---|
|  | 2308 | Click; | 
|---|
|  | 2309 | end; | 
|---|
|  | 2310 | with cboViewsTop do | 
|---|
|  | 2311 | if ItemIndex > -1 then | 
|---|
|  | 2312 | begin | 
|---|
|  | 2313 | ItemIndex := -1; | 
|---|
|  | 2314 | Text := ''; | 
|---|
|  | 2315 | end; | 
|---|
|  | 2316 | with cboViewsBottom do | 
|---|
|  | 2317 | if ItemIndex > -1 then | 
|---|
|  | 2318 | begin | 
|---|
|  | 2319 | ItemIndex := -1; | 
|---|
|  | 2320 | Text := ''; | 
|---|
|  | 2321 | end; | 
|---|
|  | 2322 | chkItemsTop.Checked := true; | 
|---|
|  | 2323 | chkItemsBottom.Checked := false; | 
|---|
|  | 2324 | pnlBottom.Height := pnlMain.Height - pnlBottom.Height; | 
|---|
|  | 2325 | lstScratchSwap.Items.Clear; | 
|---|
|  | 2326 | with lvwItemsTop do | 
|---|
|  | 2327 | for i := 0 to Items.Count - 1 do | 
|---|
|  | 2328 | if Items[i].Selected then | 
|---|
|  | 2329 | begin | 
|---|
|  | 2330 | aGraphItem := TGraphItem(Items.Item[i].SubItems.Objects[3]); | 
|---|
|  | 2331 | typeitem := Pieces(aGraphItem.Values, '^', 1, 2); | 
|---|
|  | 2332 | lstScratchSwap.Items.Add(typeitem); | 
|---|
|  | 2333 | end; | 
|---|
|  | 2334 | with lvwItemsBottom do | 
|---|
|  | 2335 | for i := 0 to Items.Count - 1 do | 
|---|
|  | 2336 | if Items[i].Selected then | 
|---|
|  | 2337 | begin | 
|---|
|  | 2338 | aGraphItem := TGraphItem(Items.Item[i].SubItems.Objects[3]); | 
|---|
|  | 2339 | typeitem := Pieces(aGraphItem.Values, '^', 1, 2); | 
|---|
|  | 2340 | lstScratchSwap.Items.Add(typeitem); | 
|---|
|  | 2341 | end; | 
|---|
|  | 2342 | lvwItemsTop.ClearSelection; | 
|---|
|  | 2343 | lvwItemsBottom.ClearSelection; | 
|---|
|  | 2344 | with lstScratchSwap do | 
|---|
|  | 2345 | for i := 0 to Items.Count - 1 do | 
|---|
|  | 2346 | begin | 
|---|
|  | 2347 | typeitem := Items[i]; | 
|---|
|  | 2348 | typenum := Piece(typeitem, '^', 1); | 
|---|
|  | 2349 | if (typenum = '63') or (typenum = '120.5') then | 
|---|
|  | 2350 | SelectItem(lvwItemsTop, typeitem) | 
|---|
|  | 2351 | else | 
|---|
|  | 2352 | SelectItem(lvwItemsBottom, typeitem); | 
|---|
|  | 2353 | end; | 
|---|
|  | 2354 | lvwItemsTopClick(self); | 
|---|
|  | 2355 | lvwItemsBottomClick(self); | 
|---|
|  | 2356 | lstScratchSwap.Items.Clear; | 
|---|
|  | 2357 | HideGraphs(false); | 
|---|
|  | 2358 | end; | 
|---|
|  | 2359 |  | 
|---|
|  | 2360 | procedure TfrmGraphs.SelectItem(aListView: TListView; typeitem: string); | 
|---|
|  | 2361 | var | 
|---|
|  | 2362 | i: integer; | 
|---|
|  | 2363 | aGraphItem: TGraphItem; | 
|---|
|  | 2364 | begin | 
|---|
|  | 2365 | with aListView do | 
|---|
|  | 2366 | for i := 0 to Items.Count - 1 do | 
|---|
|  | 2367 | begin | 
|---|
|  | 2368 | aGraphItem := TGraphItem(Items.Item[i].SubItems.Objects[3]); | 
|---|
|  | 2369 | if typeitem = Pieces(aGraphItem.Values, '^', 1, 2) then | 
|---|
|  | 2370 | Items[i].Selected := true; | 
|---|
|  | 2371 | end; | 
|---|
|  | 2372 | end; | 
|---|
|  | 2373 |  | 
|---|
|  | 2374 | procedure TfrmGraphs.mnuPopGraphLinesClick(Sender: TObject); | 
|---|
|  | 2375 | begin | 
|---|
|  | 2376 | with FGraphSetting do Lines := not Lines; | 
|---|
|  | 2377 | ChangeStyle; | 
|---|
|  | 2378 | end; | 
|---|
|  | 2379 |  | 
|---|
|  | 2380 | procedure TfrmGraphs.mnuPopGraph3DClick(Sender: TObject); | 
|---|
|  | 2381 | begin | 
|---|
|  | 2382 | with FGraphSetting do View3D := not View3D; | 
|---|
|  | 2383 | ChangeStyle; | 
|---|
|  | 2384 | end; | 
|---|
|  | 2385 |  | 
|---|
|  | 2386 | procedure TfrmGraphs.mnuPopGraphValuesClick(Sender: TObject); | 
|---|
|  | 2387 | begin | 
|---|
|  | 2388 | with FGraphSetting do Values := not Values; | 
|---|
|  | 2389 | ChangeStyle; | 
|---|
|  | 2390 | end; | 
|---|
|  | 2391 |  | 
|---|
|  | 2392 | procedure TfrmGraphs.mnuPopGraphSortClick(Sender: TObject); | 
|---|
|  | 2393 | begin | 
|---|
|  | 2394 | with FGraphSetting do | 
|---|
|  | 2395 | begin | 
|---|
|  | 2396 | if SortColumn = 1 then SortColumn := 0 | 
|---|
|  | 2397 | else SortColumn := 1; | 
|---|
|  | 2398 | mnuPopGraphSort.Checked := SortColumn = 1; | 
|---|
|  | 2399 | if not FItemsSortedTop then | 
|---|
|  | 2400 | begin | 
|---|
|  | 2401 | lvwItemsTopColumnClick(lvwItemsTop, lvwItemsTop.Column[0]); | 
|---|
|  | 2402 | FItemsSortedTop := true; | 
|---|
|  | 2403 | end; | 
|---|
|  | 2404 | if not FItemsSortedBottom then | 
|---|
|  | 2405 | begin | 
|---|
|  | 2406 | lvwItemsBottomColumnClick(lvwItemsBottom, lvwItemsBottom.Column[0]); | 
|---|
|  | 2407 | FItemsSortedBottom := true; | 
|---|
|  | 2408 | end; | 
|---|
|  | 2409 | if SortColumn > 0 then | 
|---|
|  | 2410 | begin | 
|---|
|  | 2411 | lvwItemsTopColumnClick(lvwItemsTop, lvwItemsTop.Column[SortColumn]); | 
|---|
|  | 2412 | lvwItemsBottomColumnClick(lvwItemsBottom, lvwItemsBottom.Column[SortColumn]); | 
|---|
|  | 2413 | FItemsSortedTop := false; | 
|---|
|  | 2414 | FItemsSortedBottom := false; | 
|---|
|  | 2415 | end; | 
|---|
|  | 2416 | end; | 
|---|
|  | 2417 | end; | 
|---|
|  | 2418 |  | 
|---|
|  | 2419 | procedure TfrmGraphs.mnuPopGraphClearClick(Sender: TObject); | 
|---|
|  | 2420 | begin | 
|---|
|  | 2421 | with FGraphSetting do | 
|---|
|  | 2422 | begin | 
|---|
|  | 2423 | ClearBackground := not ClearBackground; | 
|---|
|  | 2424 | if ClearBackground then Gradient := false; | 
|---|
|  | 2425 | end; | 
|---|
|  | 2426 | ChangeStyle; | 
|---|
|  | 2427 | // redisplay if nonnumericonly graph exists | 
|---|
|  | 2428 | if pnlItemsTop.Tag = 1 then lvwItemsTopClick(self); | 
|---|
|  | 2429 | if pnlItemsBottom.Tag = 1 then lvwItemsBottomClick(self); | 
|---|
|  | 2430 | end; | 
|---|
|  | 2431 |  | 
|---|
|  | 2432 | procedure TfrmGraphs.mnuPopGraphHorizontalClick(Sender: TObject); | 
|---|
|  | 2433 | begin | 
|---|
|  | 2434 | with FGraphSetting do | 
|---|
|  | 2435 | begin | 
|---|
|  | 2436 | HorizontalZoom := not HorizontalZoom; | 
|---|
|  | 2437 | mnuPopGraphHorizontal.Checked := HorizontalZoom; | 
|---|
|  | 2438 | if not HorizontalZoom then mnuPopGraphResetClick(self); | 
|---|
|  | 2439 | end; | 
|---|
|  | 2440 | end; | 
|---|
|  | 2441 |  | 
|---|
|  | 2442 | procedure TfrmGraphs.mnuPopGraphVerticalClick(Sender: TObject); | 
|---|
|  | 2443 | begin | 
|---|
|  | 2444 | with FGraphSetting do | 
|---|
|  | 2445 | begin | 
|---|
|  | 2446 | VerticalZoom := not VerticalZoom; | 
|---|
|  | 2447 | mnuPopGraphVertical.Checked := VerticalZoom; | 
|---|
|  | 2448 | if not VerticalZoom then mnuPopGraphResetClick(self); | 
|---|
|  | 2449 | end; | 
|---|
|  | 2450 | end; | 
|---|
|  | 2451 |  | 
|---|
|  | 2452 | procedure TfrmGraphs.mnuPopGraphDatesClick(Sender: TObject); | 
|---|
|  | 2453 | begin | 
|---|
|  | 2454 | with FGraphSetting do Dates := not Dates; | 
|---|
|  | 2455 | ChangeStyle; | 
|---|
|  | 2456 | end; | 
|---|
|  | 2457 |  | 
|---|
|  | 2458 | procedure TfrmGraphs.mnuPopGraphDualViewsClick(Sender: TObject); | 
|---|
|  | 2459 | begin | 
|---|
|  | 2460 | chkDualViews.Checked := not chkDualViews.Checked; | 
|---|
|  | 2461 | chkDualViewsClick(self); | 
|---|
|  | 2462 | end; | 
|---|
|  | 2463 |  | 
|---|
|  | 2464 | procedure TfrmGraphs.mnuPopGraphSeparate1Click(Sender: TObject); | 
|---|
|  | 2465 | begin | 
|---|
|  | 2466 | with mnuPopGraphSeparate1 do | 
|---|
|  | 2467 | Checked := not Checked; | 
|---|
|  | 2468 | with chkItemsTop do | 
|---|
|  | 2469 | begin | 
|---|
|  | 2470 | Checked := mnuPopGraphSeparate1.Checked; | 
|---|
|  | 2471 | Click; | 
|---|
|  | 2472 | end; | 
|---|
|  | 2473 | with chkItemsBottom do | 
|---|
|  | 2474 | begin | 
|---|
|  | 2475 | Checked := mnuPopGraphSeparate1.Checked; | 
|---|
|  | 2476 | Click; | 
|---|
|  | 2477 | end; | 
|---|
|  | 2478 | end; | 
|---|
|  | 2479 |  | 
|---|
|  | 2480 | procedure TfrmGraphs.mnuPopGraphGradientClick(Sender: TObject); | 
|---|
|  | 2481 | begin | 
|---|
|  | 2482 | with FGraphSetting do | 
|---|
|  | 2483 | begin | 
|---|
|  | 2484 | Gradient := not Gradient; | 
|---|
|  | 2485 | if Gradient then ClearBackground := false; | 
|---|
|  | 2486 | end; | 
|---|
|  | 2487 | ChangeStyle; | 
|---|
|  | 2488 | end; | 
|---|
|  | 2489 |  | 
|---|
|  | 2490 | procedure TfrmGraphs.mnuPopGraphHintsClick(Sender: TObject); | 
|---|
|  | 2491 | begin | 
|---|
|  | 2492 | with FGraphSetting do | 
|---|
|  | 2493 | Hints := not Hints; | 
|---|
|  | 2494 | ChangeStyle; | 
|---|
|  | 2495 | end; | 
|---|
|  | 2496 |  | 
|---|
|  | 2497 | procedure TfrmGraphs.mnuPopGraphLegendClick(Sender: TObject); | 
|---|
|  | 2498 | begin | 
|---|
|  | 2499 | with FGraphSetting do Legend := not Legend; | 
|---|
|  | 2500 | ChangeStyle; | 
|---|
|  | 2501 | end; | 
|---|
|  | 2502 |  | 
|---|
|  | 2503 | procedure TfrmGraphs.ChartStyle(aChart: TChart); | 
|---|
|  | 2504 | var | 
|---|
|  | 2505 | j: integer; | 
|---|
|  | 2506 | begin | 
|---|
|  | 2507 | with aChart do | 
|---|
|  | 2508 | begin | 
|---|
|  | 2509 | View3D := FGraphSetting.View3D; | 
|---|
|  | 2510 | Chart3DPercent := 10; | 
|---|
|  | 2511 | AllowZoom := FGraphSetting.HorizontalZoom; | 
|---|
|  | 2512 | Gradient.Visible := FGraphSetting.Gradient; | 
|---|
|  | 2513 | Legend.Visible := FGraphSetting.Legend; | 
|---|
|  | 2514 | HideDates(aChart); | 
|---|
|  | 2515 | pnlHeader.Visible := pnlInfo.Visible; | 
|---|
|  | 2516 | if FGraphSetting.ClearBackground then | 
|---|
|  | 2517 | begin | 
|---|
|  | 2518 | Color := clWindow; | 
|---|
|  | 2519 | Legend.Color := clWindow; | 
|---|
|  | 2520 | pnlBlankTop.Color := clWindow; | 
|---|
|  | 2521 | pnlBlankBottom.Color := clWindow; | 
|---|
|  | 2522 | end | 
|---|
|  | 2523 | else | 
|---|
|  | 2524 | begin | 
|---|
|  | 2525 | Color := clBtnFace; | 
|---|
|  | 2526 | Legend.Color := clCream; | 
|---|
|  | 2527 | pnlBlankTop.Color := clBtnFace; | 
|---|
|  | 2528 | pnlBlankBottom.Color := clBtnFace; | 
|---|
|  | 2529 | end; | 
|---|
|  | 2530 | for j := 0 to SeriesCount - 1 do | 
|---|
|  | 2531 | begin | 
|---|
|  | 2532 | if Series[j] is TLineSeries then | 
|---|
|  | 2533 | with (Series[j] as TLineSeries) do | 
|---|
|  | 2534 | begin | 
|---|
|  | 2535 | Marks.Visible := FGraphSetting.Values; | 
|---|
|  | 2536 | LinePen.Visible := FGraphSetting.Lines; | 
|---|
|  | 2537 | end; | 
|---|
|  | 2538 | if Series[j] is TPointSeries then | 
|---|
|  | 2539 | with (Series[j] as TPointSeries) do | 
|---|
|  | 2540 | begin | 
|---|
|  | 2541 | Marks.Visible := FGraphSetting.Values; | 
|---|
|  | 2542 | LinePen.Visible := FGraphSetting.Lines; | 
|---|
|  | 2543 | end; | 
|---|
|  | 2544 | if Series[j] is TBarSeries then | 
|---|
|  | 2545 | with (Series[j] as TBarSeries) do | 
|---|
|  | 2546 | begin | 
|---|
|  | 2547 | Marks.Visible := FGraphSetting.Values; | 
|---|
|  | 2548 | end; | 
|---|
|  | 2549 | if Series[j] is TArrowSeries then | 
|---|
|  | 2550 | with (Series[j] as TArrowSeries) do | 
|---|
|  | 2551 | begin | 
|---|
|  | 2552 | Marks.Visible := FGraphSetting.Values; | 
|---|
|  | 2553 | end; | 
|---|
|  | 2554 | if Series[j] is TGanttSeries then | 
|---|
|  | 2555 | with (Series[j] as TGanttSeries) do | 
|---|
|  | 2556 | begin | 
|---|
|  | 2557 | Marks.Visible := FGraphSetting.Values; | 
|---|
|  | 2558 | LinePen.Visible := FGraphSetting.Lines; | 
|---|
|  | 2559 | end; | 
|---|
|  | 2560 | end; | 
|---|
|  | 2561 | end; | 
|---|
|  | 2562 | end; | 
|---|
|  | 2563 |  | 
|---|
|  | 2564 | procedure TfrmGraphs.ChangeStyle; | 
|---|
|  | 2565 | var | 
|---|
|  | 2566 | i: integer; | 
|---|
|  | 2567 | ChildControl: TControl; | 
|---|
|  | 2568 | OriginalColor, ClearColor: TColor; | 
|---|
|  | 2569 | begin | 
|---|
|  | 2570 | OriginalColor := pnlItemsTopInfo.Color; | 
|---|
|  | 2571 | ClearColor := clWindow; | 
|---|
|  | 2572 | for i := 0 to scrlTop.ControlCount - 1 do | 
|---|
|  | 2573 | begin | 
|---|
|  | 2574 | ChildControl := scrlTop.Controls[i]; | 
|---|
|  | 2575 | ChartStyle(ChildControl as TChart); | 
|---|
|  | 2576 | end; | 
|---|
|  | 2577 | for i := 0 to scrlBottom.ControlCount - 1 do | 
|---|
|  | 2578 | begin | 
|---|
|  | 2579 | ChildControl := scrlBottom.Controls[i]; | 
|---|
|  | 2580 | ChartStyle(ChildControl as TChart); | 
|---|
|  | 2581 | end; | 
|---|
|  | 2582 | if pnlDateLineTop.Visible then   // not visible when separate graphs | 
|---|
|  | 2583 | ChartStyle(chartDateLineTop); | 
|---|
|  | 2584 | if pnlDateLineBottom.Visible then | 
|---|
|  | 2585 | ChartStyle(chartDateLineBottom); | 
|---|
|  | 2586 | if FGraphSetting.ClearBackground then | 
|---|
|  | 2587 | begin | 
|---|
|  | 2588 | chartDatelineTop.Color := ClearColor; | 
|---|
|  | 2589 | chartDatelineTop.Legend.Color := ClearColor; | 
|---|
|  | 2590 | pnlDatelineTopSpacer.Color := ClearColor; | 
|---|
|  | 2591 | scrlTop.Color := ClearColor; | 
|---|
|  | 2592 | pnlTopRightPad.Color := ClearColor; | 
|---|
|  | 2593 | pnlScrollTopBase.Color := ClearColor; | 
|---|
|  | 2594 | pnlBlankTop.Color := ClearColor; | 
|---|
|  | 2595 | chartDatelineBottom.Color := ClearColor; | 
|---|
|  | 2596 | chartDatelineBottom.Legend.Color := ClearColor; | 
|---|
|  | 2597 | pnlDatelineBottomSpacer.Color := ClearColor; | 
|---|
|  | 2598 | scrlBottom.Color := ClearColor; | 
|---|
|  | 2599 | pnlBottomRightPad.Color := ClearColor; | 
|---|
|  | 2600 | pnlScrollBottomBase.Color := ClearColor; | 
|---|
|  | 2601 | pnlBlankBottom.Color := ClearColor; | 
|---|
|  | 2602 | end | 
|---|
|  | 2603 | else | 
|---|
|  | 2604 | begin | 
|---|
|  | 2605 | chartDatelineTop.Color := OriginalColor; | 
|---|
|  | 2606 | chartDatelineTop.Legend.Color := clCream; | 
|---|
|  | 2607 | pnlDatelineTopSpacer.Color := OriginalColor; | 
|---|
|  | 2608 | scrlTop.Color := OriginalColor; | 
|---|
|  | 2609 | pnlTopRightPad.Color := OriginalColor; | 
|---|
|  | 2610 | pnlScrollTopBase.Color := OriginalColor; | 
|---|
|  | 2611 | pnlBlankTop.Color := OriginalColor; | 
|---|
|  | 2612 | chartDatelineBottom.Color := OriginalColor; | 
|---|
|  | 2613 | chartDatelineBottom.Legend.Color := clCream; | 
|---|
|  | 2614 | pnlDatelineBottomSpacer.Color := OriginalColor; | 
|---|
|  | 2615 | scrlBottom.Color := OriginalColor; | 
|---|
|  | 2616 | pnlBottomRightPad.Color := OriginalColor; | 
|---|
|  | 2617 | pnlScrollBottomBase.Color := OriginalColor; | 
|---|
|  | 2618 | pnlBlankBottom.Color := OriginalColor; | 
|---|
|  | 2619 | end; | 
|---|
|  | 2620 | mnuPopGraphLines.Checked := FGraphSetting.Lines; | 
|---|
|  | 2621 | mnuPopGraph3D.Checked := FGraphSetting.View3D; | 
|---|
|  | 2622 | mnuPopGraphValues.Checked := FGraphSetting.Values; | 
|---|
|  | 2623 | mnuPopGraphDates.Checked := FGraphSetting.Dates; | 
|---|
|  | 2624 | mnuPopGraphFixed.Checked := FGraphSetting.FixedDateRange; | 
|---|
|  | 2625 | mnuPopGraphGradient.Checked := FGraphSetting.Gradient; | 
|---|
|  | 2626 | mnuPopGraphHints.Checked := FGraphSetting.Hints; | 
|---|
|  | 2627 | mnuPopGraphStayOnTop.Checked := FGraphSetting.StayOnTop; | 
|---|
|  | 2628 | mnuPopGraphLegend.Checked := FGraphSetting.Legend; | 
|---|
|  | 2629 | mnuPopGraphSort.Checked := FGraphSetting.SortColumn = 1; | 
|---|
|  | 2630 | mnuPopGraphClear.Checked := FGraphSetting.ClearBackground; | 
|---|
|  | 2631 | mnuPopGraphVertical.Checked := FGraphSetting.VerticalZoom; | 
|---|
|  | 2632 | mnuPopGraphHorizontal.Checked := FGraphSetting.HorizontalZoom; | 
|---|
|  | 2633 | end; | 
|---|
|  | 2634 |  | 
|---|
|  | 2635 | procedure TfrmGraphs.chartBaseClickSeries(Sender: TCustomChart; Series: TChartSeries; | 
|---|
|  | 2636 | ValueIndex: Integer; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); | 
|---|
|  | 2637 | var | 
|---|
|  | 2638 | dttm, seriestitle, textvalue, textvalue1, textvalue2, typename, typenum: string; | 
|---|
|  | 2639 | begin | 
|---|
|  | 2640 | timHintPause.Enabled := false; | 
|---|
|  | 2641 | InactivateHint; | 
|---|
|  | 2642 | FGraphClick := Sender; | 
|---|
|  | 2643 | FGraphSeries := Series; | 
|---|
|  | 2644 | FGraphValueIndex := ValueIndex; | 
|---|
|  | 2645 | chartDateLineTop.Tag := 1;       // indicates a series click | 
|---|
|  | 2646 | if (Series is TGanttSeries) then | 
|---|
|  | 2647 | begin | 
|---|
|  | 2648 | FDate1 := (Series as TGanttSeries).StartValues[ValueIndex]; | 
|---|
|  | 2649 | FDate2 := (Series as TGanttSeries).EndValues[ValueIndex]; | 
|---|
|  | 2650 | end | 
|---|
|  | 2651 | else | 
|---|
|  | 2652 | begin | 
|---|
|  | 2653 | FDate1 := Series.XValue[ValueIndex]; | 
|---|
|  | 2654 | FDate2 := FDate1; | 
|---|
|  | 2655 | end; | 
|---|
|  | 2656 | seriestitle := Series.Title; | 
|---|
|  | 2657 | if Button <> mbRight then | 
|---|
|  | 2658 | begin | 
|---|
|  | 2659 | textvalue := ValueText(Sender, Series, ValueIndex); | 
|---|
|  | 2660 | dttm := Piece(textvalue, '^', 3); | 
|---|
|  | 2661 | if copy(textvalue, length(textvalue) - 5, length(textvalue)) = ' 00:00' then | 
|---|
|  | 2662 | dttm := Pieces(dttm, ' ', 1, 3); | 
|---|
|  | 2663 | textvalue1 := Piece(textvalue, '^', 2) + '  ' + dttm; | 
|---|
|  | 2664 | textvalue2 := Piece(textvalue, '^', 4) + '  ' + Piece(textvalue, '^', 5); | 
|---|
|  | 2665 | typenum := trim(Piece(textvalue, '^', 1)); | 
|---|
|  | 2666 | typename := Piece(textvalue, '^', 2); | 
|---|
|  | 2667 | AllTypeDate(typenum, typename, textvalue1, textvalue2, FDate1, FDate2); | 
|---|
|  | 2668 | end | 
|---|
|  | 2669 | else | 
|---|
|  | 2670 | begin | 
|---|
|  | 2671 | mnuPopGraphIsolate.Enabled := true; | 
|---|
|  | 2672 | if pnlTop.Tag = 1 then | 
|---|
|  | 2673 | mnuPopGraphIsolate.Caption := 'Move - ' + seriestitle + ' - from Top to Bottom' | 
|---|
|  | 2674 | else | 
|---|
|  | 2675 | mnuPopGraphIsolate.Caption := 'Move - ' + seriestitle + ' - from Bottom to Top'; | 
|---|
|  | 2676 | scrlTop.Hint := 'Details - for ' + seriestitle + ' for ' + | 
|---|
|  | 2677 | FormatDateTime('mmm d, yyyy  h:nn am/pm', FDate1); | 
|---|
|  | 2678 | scrlTop.Tag := ValueIndex + 1; | 
|---|
|  | 2679 | mnuPopGraphIsolate.Hint := seriestitle; | 
|---|
|  | 2680 | mnuPopGraphRemove.Enabled := true; | 
|---|
|  | 2681 | mnuPopGraphRemove.Caption := 'Remove - ' + seriestitle; | 
|---|
|  | 2682 | mnuPopGraphDetails.Caption := 'Details - ' + seriestitle; | 
|---|
|  | 2683 | end; | 
|---|
|  | 2684 | FMouseDown := false; | 
|---|
|  | 2685 | end; | 
|---|
|  | 2686 |  | 
|---|
|  | 2687 | procedure TfrmGraphs.AllTypeDate(aType, aTypeName, firstline, secondline: string; aDate, aDate2: double); | 
|---|
|  | 2688 | var | 
|---|
|  | 2689 | i: integer; | 
|---|
|  | 2690 | dttm, datax, datex1, datex2, fmdate1, fmdate2, newdata, newline, oldline, spacer, titlemsg: string; | 
|---|
|  | 2691 | dt1, dt2, dtdata, dtdata1, dtdata2: double; | 
|---|
|  | 2692 | tmpOtherList, templist: TStringList; | 
|---|
|  | 2693 | begin | 
|---|
|  | 2694 | Screen.Cursor := crHourGlass; | 
|---|
|  | 2695 | tmpOtherList := TStringList.Create; | 
|---|
|  | 2696 | templist := TStringList.Create; | 
|---|
|  | 2697 | datex1 := floattostr(DateTimeToFMDateTime(aDate)); | 
|---|
|  | 2698 | datex1 := Piece(datex1, '.', 1); | 
|---|
|  | 2699 | if aDate <> aDate2 then | 
|---|
|  | 2700 | datex2 := Piece(floattostr(DateTimeToFMDateTime(aDate2)), '.', 1) + '.23595959' | 
|---|
|  | 2701 | else | 
|---|
|  | 2702 | datex2 := datex1 + '.23595959'; | 
|---|
|  | 2703 | dt1 := strtofloatdef(datex1, BIG_NUMBER); | 
|---|
|  | 2704 | dt2 := strtofloatdef(datex2, BIG_NUMBER); | 
|---|
|  | 2705 | CheckToAddData(lvwItemsTop, 'top', aType);    // if type is not loaded - load data | 
|---|
|  | 2706 | for i := 0 to lstData.Items.Count - 1 do | 
|---|
|  | 2707 | begin | 
|---|
|  | 2708 | datax := lstData.Items[i]; | 
|---|
|  | 2709 | if Piece(datax, '^', 1) = aType then | 
|---|
|  | 2710 | begin | 
|---|
|  | 2711 | if (length(Piece(datax, '^', 4))> 0) then    // date/times of episodes | 
|---|
|  | 2712 | begin | 
|---|
|  | 2713 | dtdata1 := strtofloatdef(Piece(datax, '^', 3), -1); | 
|---|
|  | 2714 | fmdate1 := FormatFMDateTime('mm/dd/yy hh:nn', dtdata1); | 
|---|
|  | 2715 | if copy(fmdate1, length(fmdate1) - 5, length(fmdate1)) = ' 00:00' then | 
|---|
|  | 2716 | fmdate1 := copy(fmdate1, 1, length(fmdate1) - 5) + '     '; | 
|---|
|  | 2717 | dtdata2 := strtofloatdef(Piece(datax, '^', 4), -1); | 
|---|
|  | 2718 | fmdate2 := FormatFMDateTime('mm/dd/yy hh:nn', dtdata2); | 
|---|
|  | 2719 | if copy(fmdate2, length(fmdate2) - 5, length(fmdate2)) = ' 00:00' then | 
|---|
|  | 2720 | fmdate2 := copy(fmdate2, 1, length(fmdate2) - 5) + '     '; | 
|---|
|  | 2721 | if (dtdata2 > dt1) and (dtdata1 < dt2) then | 
|---|
|  | 2722 | begin | 
|---|
|  | 2723 | newdata := Piece(datax, '^', 3) + '^' + | 
|---|
|  | 2724 | Piece(datax, '^', 2) + '^' + | 
|---|
|  | 2725 | fmdate1 + ' - ' + | 
|---|
|  | 2726 | fmdate2 + '^' + | 
|---|
|  | 2727 | ItemName(aType, Piece(datax, '^', 2)) + '^' + | 
|---|
|  | 2728 | Piece(datax, '^', 5); | 
|---|
|  | 2729 | tmpOtherList.Add(MixedCase(newdata)); | 
|---|
|  | 2730 | end; | 
|---|
|  | 2731 | end | 
|---|
|  | 2732 | else | 
|---|
|  | 2733 | begin | 
|---|
|  | 2734 | dtdata := strtofloatdef(Piece(datax, '^', 3), -1); | 
|---|
|  | 2735 | if (dtdata >= dt1) and (dtdata < dt2) then | 
|---|
|  | 2736 | begin | 
|---|
|  | 2737 | if length(Piece(Piece(datax, '^', 3), '.', 2)) > 0 then | 
|---|
|  | 2738 | dttm := FormatFMDateTime('mm/dd/yy hh:nn', dtdata) | 
|---|
|  | 2739 | else | 
|---|
|  | 2740 | dttm := FormatFMDateTime('mm/dd/yy', dtdata); | 
|---|
|  | 2741 | newdata := Piece(datax, '^', 3) + '^' + | 
|---|
|  | 2742 | Piece(datax, '^', 2) + '^' + | 
|---|
|  | 2743 | Piece(datax, '^', 5) + '^' + | 
|---|
|  | 2744 | dttm + '^' + | 
|---|
|  | 2745 | ItemName(aType, Piece(datax, '^', 2)); | 
|---|
|  | 2746 | tmpOtherList.Add(MixedCase(newdata)); | 
|---|
|  | 2747 | end; | 
|---|
|  | 2748 | end; | 
|---|
|  | 2749 | end; | 
|---|
|  | 2750 | end; | 
|---|
|  | 2751 | with tmpOtherList do | 
|---|
|  | 2752 | begin | 
|---|
|  | 2753 | Sort; | 
|---|
|  | 2754 | for i := Count - 1 downto 0 do | 
|---|
|  | 2755 | begin | 
|---|
|  | 2756 | newline := ''; | 
|---|
|  | 2757 | oldline := tmpOtherList[i]; | 
|---|
|  | 2758 | newline := Piece(oldline, '^', 4) + '   ' + | 
|---|
|  | 2759 | Piece(oldline, '^', 5); | 
|---|
|  | 2760 | spacer := Copy(BIG_SPACES, 1, 40 - length(newline)); | 
|---|
|  | 2761 | newline := newline + spacer + ' ' + | 
|---|
|  | 2762 | Piece(oldline, '^', 3); | 
|---|
|  | 2763 | templist.Add(newline); | 
|---|
|  | 2764 | end; | 
|---|
|  | 2765 | Clear; | 
|---|
|  | 2766 | Assign(templist); | 
|---|
|  | 2767 | if aDate <> aDate2 then | 
|---|
|  | 2768 | titlemsg := aTypeName + ' occurences for ' + FormatDateTime('mmm d, yyyy', aDate) + | 
|---|
|  | 2769 | ' - ' + FormatDateTime('mmm d, yyyy', aDate2) | 
|---|
|  | 2770 | else | 
|---|
|  | 2771 | titlemsg := aTypeName + ' occurences for ' + FormatDateTime('mmm d, yyyy', aDate); | 
|---|
|  | 2772 | Insert(0, firstline); | 
|---|
|  | 2773 | Insert(1, secondline); | 
|---|
|  | 2774 | Insert(2, ''); | 
|---|
|  | 2775 | Insert(3, 'All ' + titlemsg + ':'); | 
|---|
|  | 2776 | Insert(4, ''); | 
|---|
|  | 2777 | Insert(0, TXT_REPORT_DISCLAIMER); | 
|---|
|  | 2778 | Insert(1, ''); | 
|---|
|  | 2779 | ReportBox(tmpOtherList, titlemsg, true); | 
|---|
|  | 2780 | end; | 
|---|
|  | 2781 | tmpOtherList.Free; | 
|---|
|  | 2782 | templist.Free; | 
|---|
|  | 2783 | Screen.Cursor := crDefault; | 
|---|
|  | 2784 | end; | 
|---|
|  | 2785 |  | 
|---|
|  | 2786 |  | 
|---|
|  | 2787 | procedure TfrmGraphs.ItemDateRange(Sender: TCustomChart); | 
|---|
|  | 2788 | var | 
|---|
|  | 2789 | bpnotdone, ok: boolean; | 
|---|
|  | 2790 | i, j: integer; | 
|---|
|  | 2791 | prevtype, results, seriestitle, seriestype, spacer, textvalue, typenum: string; | 
|---|
|  | 2792 | tmpOtherList: TStringList; | 
|---|
|  | 2793 | begin | 
|---|
|  | 2794 | Screen.Cursor := crHourGlass; | 
|---|
|  | 2795 | prevtype := ''; | 
|---|
|  | 2796 | tmpOtherList := TStringList.Create; | 
|---|
|  | 2797 | with tmpOtherList do | 
|---|
|  | 2798 | begin | 
|---|
|  | 2799 | Add('Date Range: ' + cboDateRange.Text); | 
|---|
|  | 2800 | Add('Selected Items from ' + | 
|---|
|  | 2801 | FormatDateTime('mm/dd/yy', FGraphSetting.LowTime) + ' to ' + | 
|---|
|  | 2802 | FormatDateTime('mm/dd/yy', FGraphSetting.HighTime)); | 
|---|
|  | 2803 | Add(''); | 
|---|
|  | 2804 | end; | 
|---|
|  | 2805 | bpnotdone := true; | 
|---|
|  | 2806 | for i := 0 to Sender.SeriesCount - 1 do | 
|---|
|  | 2807 | begin | 
|---|
|  | 2808 | if Sender.Series[i].Count > 0 then | 
|---|
|  | 2809 | begin | 
|---|
|  | 2810 | textvalue := ValueText(Sender, Sender.Series[i], 0); | 
|---|
|  | 2811 | seriestype := Piece(textvalue, '^', 2); | 
|---|
|  | 2812 | if (seriestype <> '') and (seriestype <> prevtype) then | 
|---|
|  | 2813 | begin | 
|---|
|  | 2814 | tmpOtherList.Add('     ' + seriestype);    // type | 
|---|
|  | 2815 | prevtype := seriestype; | 
|---|
|  | 2816 | end; | 
|---|
|  | 2817 | end; | 
|---|
|  | 2818 | ok := true; | 
|---|
|  | 2819 | seriestitle := Sender.Series[i].Title; | 
|---|
|  | 2820 | if seriestitle = 'Blood Pressure' then | 
|---|
|  | 2821 | if bpnotdone = false then ok := false; | 
|---|
|  | 2822 | if ok then | 
|---|
|  | 2823 | begin | 
|---|
|  | 2824 | for j := 0 to Sender.Series[i].Count - 1 do | 
|---|
|  | 2825 | begin | 
|---|
|  | 2826 | textvalue := ValueText(Sender, Sender.Series[i], j); | 
|---|
|  | 2827 | seriestitle := Piece(textvalue, '^', 4); | 
|---|
|  | 2828 | typenum := Piece(textvalue, '^', 1); | 
|---|
|  | 2829 | if (typenum = '120.5') and (seriestitle = 'Blood Pressure') then bpnotdone := false; | 
|---|
|  | 2830 | if length(typenum) > 0 then | 
|---|
|  | 2831 | begin | 
|---|
|  | 2832 | spacer := Copy(BIG_SPACES, 1, 30 - length(seriestitle)); | 
|---|
|  | 2833 | results := seriestitle + ':  ' + //spacer + | 
|---|
|  | 2834 | Piece(textvalue, '^', 5); //LowerCase(Piece(textvalue, '^', 5)); | 
|---|
|  | 2835 | spacer := Copy(BIG_SPACES, 1, 40 - length(results)); | 
|---|
|  | 2836 | results := results + ' ' + spacer + Piece(textvalue, '^', 6); | 
|---|
|  | 2837 | if copy(results, length(results) - 5, length(results)) = ' 00:00' then | 
|---|
|  | 2838 | results := copy(results, 1, length(results) - 5); | 
|---|
|  | 2839 | tmpOtherList.Add(results);                 // item occurrence | 
|---|
|  | 2840 | end; | 
|---|
|  | 2841 | end; | 
|---|
|  | 2842 | end; | 
|---|
|  | 2843 | end;                               // same items are not being sorted by date | 
|---|
|  | 2844 | if tmpOtherList.Count > 0 then | 
|---|
|  | 2845 | begin | 
|---|
|  | 2846 | tmpOtherList.Insert(0, TXT_REPORT_DISCLAIMER); | 
|---|
|  | 2847 | tmpOtherList.Insert(1, ''); | 
|---|
|  | 2848 | ReportBox(tmpOtherList, 'Selected Items from Graph', true); | 
|---|
|  | 2849 | end; | 
|---|
|  | 2850 | tmpOtherList.Free; | 
|---|
|  | 2851 | FMouseDown := false; | 
|---|
|  | 2852 | Screen.Cursor := crDefault; | 
|---|
|  | 2853 | end; | 
|---|
|  | 2854 |  | 
|---|
|  | 2855 | procedure TfrmGraphs.mnuPopGraphIsolateClick(Sender: TObject); | 
|---|
|  | 2856 | var | 
|---|
|  | 2857 | i, j, selnum: integer; | 
|---|
|  | 2858 | aSection, aOtherSection, typeitem: string; | 
|---|
|  | 2859 | aGraphItem: TGraphItem; | 
|---|
|  | 2860 | aListView, aOtherListView: TListView; | 
|---|
|  | 2861 | begin | 
|---|
|  | 2862 | FFirstClick := true; | 
|---|
|  | 2863 | cboViewsTop.ItemIndex := -1; | 
|---|
|  | 2864 | cboViewsTop.Text := ''; | 
|---|
|  | 2865 | cboViewsBottom.ItemIndex := -1; | 
|---|
|  | 2866 | cboViewsBottom.Text := ''; | 
|---|
|  | 2867 | if pnlTop.Tag = 1 then | 
|---|
|  | 2868 | begin | 
|---|
|  | 2869 | aListView := lvwItemsTop; | 
|---|
|  | 2870 | aOtherListView := lvwItemsBottom; | 
|---|
|  | 2871 | aSection := 'top'; | 
|---|
|  | 2872 | aOtherSection := 'bottom'; | 
|---|
|  | 2873 | end | 
|---|
|  | 2874 | else | 
|---|
|  | 2875 | begin | 
|---|
|  | 2876 | aListView := lvwItemsBottom; | 
|---|
|  | 2877 | aOtherListView := lvwItemsTop; | 
|---|
|  | 2878 | aSection := 'bottom'; | 
|---|
|  | 2879 | aOtherSection := 'top'; | 
|---|
|  | 2880 | end; | 
|---|
|  | 2881 | if aListView.SelCount = 0 then exit; | 
|---|
|  | 2882 | if StripHotKey(mnuPopGraphIsolate.Caption) = ('Move all selections to ' + aOtherSection) then | 
|---|
|  | 2883 | begin | 
|---|
|  | 2884 | with aListView do | 
|---|
|  | 2885 | for i := 0 to Items.Count - 1 do | 
|---|
|  | 2886 | if Items[i].Selected then | 
|---|
|  | 2887 | begin | 
|---|
|  | 2888 | aGraphItem := TGraphItem(Items.Item[i].SubItems.Objects[3]); | 
|---|
|  | 2889 | typeitem := Pieces(aGraphItem.Values, '^', 1, 2); | 
|---|
|  | 2890 | for j := 0 to aOtherListView.Items.Count - 1 do | 
|---|
|  | 2891 | begin | 
|---|
|  | 2892 | aGraphItem := TGraphItem(aOtherListView.Items.Item[j].SubItems.Objects[3]); | 
|---|
|  | 2893 | if Pieces(aGraphItem.Values, '^', 1, 2) = typeitem then | 
|---|
|  | 2894 | aOtherListView.Items[j].Selected := true; | 
|---|
|  | 2895 | end; | 
|---|
|  | 2896 | Items[i].Selected := false; | 
|---|
|  | 2897 | end; | 
|---|
|  | 2898 | with chkDualViews do | 
|---|
|  | 2899 | if not Checked then | 
|---|
|  | 2900 | begin | 
|---|
|  | 2901 | Checked := true; | 
|---|
|  | 2902 | Click; | 
|---|
|  | 2903 | end; | 
|---|
|  | 2904 | ChangeStyle; | 
|---|
|  | 2905 | DisplayData(aSection); | 
|---|
|  | 2906 | DisplayData(aOtherSection); | 
|---|
|  | 2907 | end | 
|---|
|  | 2908 | else | 
|---|
|  | 2909 | begin | 
|---|
|  | 2910 | ItemCheck(lvwItemsTop, mnuPopGraphIsolate.Hint, selnum, typeitem); | 
|---|
|  | 2911 | if selnum = -1 then exit; | 
|---|
|  | 2912 | for i := 0 to aOtherListView.Items.Count - 1 do | 
|---|
|  | 2913 | begin | 
|---|
|  | 2914 | aGraphItem := TGraphItem(aOtherListView.Items.Item[i].SubItems.Objects[3]); | 
|---|
|  | 2915 | if Pieces(aGraphItem.Values, '^', 1, 2) = typeitem then | 
|---|
|  | 2916 | aOtherListView.Items[i].Selected := true; | 
|---|
|  | 2917 | end; | 
|---|
|  | 2918 | aListView.Items[selnum].Selected := false; | 
|---|
|  | 2919 | with chkDualViews do | 
|---|
|  | 2920 | if not Checked then | 
|---|
|  | 2921 | begin | 
|---|
|  | 2922 | Checked := true; | 
|---|
|  | 2923 | Click; | 
|---|
|  | 2924 | end; | 
|---|
|  | 2925 | ChangeStyle; | 
|---|
|  | 2926 | DisplayData(aSection); | 
|---|
|  | 2927 | DisplayData(aOtherSection); | 
|---|
|  | 2928 | end; | 
|---|
|  | 2929 | mnuPopGraphIsolate.Enabled := false; | 
|---|
|  | 2930 | end; | 
|---|
|  | 2931 |  | 
|---|
|  | 2932 | procedure TFrmGraphs.ItemCheck(aListView: TListView; aItemName: string; | 
|---|
|  | 2933 | var aNum: integer; var aTypeItem: string); | 
|---|
|  | 2934 | var | 
|---|
|  | 2935 | i: integer; | 
|---|
|  | 2936 | aGraphItem: TGraphItem; | 
|---|
|  | 2937 | begin | 
|---|
|  | 2938 | aNum := -1; | 
|---|
|  | 2939 | aTypeItem := ''; | 
|---|
|  | 2940 | with aListView do | 
|---|
|  | 2941 | for i := 0 to Items.Count - 1 do | 
|---|
|  | 2942 | if Items[i].Caption = aItemName then | 
|---|
|  | 2943 | begin | 
|---|
|  | 2944 | aGraphItem := TGraphItem(Items.Item[i].SubItems.Objects[3]);     //get file^ien match | 
|---|
|  | 2945 | aNum := i; | 
|---|
|  | 2946 | aTypeItem := Pieces(aGraphItem.Values, '^', 1, 2); | 
|---|
|  | 2947 | break; | 
|---|
|  | 2948 | end; | 
|---|
|  | 2949 | if aNum = -1 then | 
|---|
|  | 2950 | begin | 
|---|
|  | 2951 | aItemName := ReverseString(aItemName); | 
|---|
|  | 2952 | aItemName := Pieces(aItemName, '(', 2, DelimCount(aItemName, '(') + 1); | 
|---|
|  | 2953 | aItemName := Copy(aItemName, 2, length(aItemName) - 1); | 
|---|
|  | 2954 | aItemName := ReverseString(aItemName); | 
|---|
|  | 2955 | with aListView do | 
|---|
|  | 2956 | for i := 0 to Items.Count - 1 do | 
|---|
|  | 2957 | if Items[i].Caption = aItemName then            // match without (specimen) | 
|---|
|  | 2958 | begin | 
|---|
|  | 2959 | aGraphItem := TGraphItem(Items.Item[i].SubItems.Objects[3]);     //get file^ien match | 
|---|
|  | 2960 | aNum := i; | 
|---|
|  | 2961 | aTypeItem := Pieces(aGraphItem.Values, '^', 1, 2); | 
|---|
|  | 2962 | break; | 
|---|
|  | 2963 | end; | 
|---|
|  | 2964 | end; | 
|---|
|  | 2965 | end; | 
|---|
|  | 2966 |  | 
|---|
|  | 2967 | procedure TfrmGraphs.chartBaseMouseDown(Sender: TObject; Button: TMouseButton; | 
|---|
|  | 2968 | Shift: TShiftState; X, Y: Integer); | 
|---|
|  | 2969 | begin | 
|---|
|  | 2970 | FHintStop := true; | 
|---|
|  | 2971 | timHintPause.Enabled := false; | 
|---|
|  | 2972 | InactivateHint; | 
|---|
|  | 2973 | chartDatelineTop.Tag := 0; // not legend or series click | 
|---|
|  | 2974 | scrlTop.Hint := ''; | 
|---|
|  | 2975 | scrlTop.Tag := 0; | 
|---|
|  | 2976 | FYMinValue := (Sender as TChart).MinYValue((Sender as TChart).LeftAxis); | 
|---|
|  | 2977 | FYMaxValue := (Sender as TChart).MaxYValue((Sender as TChart).LeftAxis); | 
|---|
|  | 2978 | pnlTop.Tag := 1; | 
|---|
|  | 2979 | if (Sender as TControl).Parent = pnlBottom then pnlTop.Tag := 0; | 
|---|
|  | 2980 | if ((Sender as TControl).Parent as TControl) = pnlBottom then pnlTop.Tag := 0; | 
|---|
|  | 2981 | if (((Sender as TControl).Parent as TControl).Parent as TControl).Parent = pnlBottom then pnlTop.Tag := 0; | 
|---|
|  | 2982 | if pnlTop.Tag = 1 then | 
|---|
|  | 2983 | begin | 
|---|
|  | 2984 | mnuPopGraphIsolate.Caption := 'Move all selections to bottom'; | 
|---|
|  | 2985 | mnuPopGraphRemove.Caption := 'Remove all selections from top'; | 
|---|
|  | 2986 | end | 
|---|
|  | 2987 | else | 
|---|
|  | 2988 | begin | 
|---|
|  | 2989 | mnuPopGraphIsolate.Caption := 'Move all selections to top'; | 
|---|
|  | 2990 | mnuPopGraphRemove.Caption := 'Remove all selections from bottom'; | 
|---|
|  | 2991 | end; | 
|---|
|  | 2992 | If Button = mbLeft then | 
|---|
|  | 2993 | FMouseDown := true; | 
|---|
|  | 2994 | end; | 
|---|
|  | 2995 |  | 
|---|
|  | 2996 | procedure TfrmGraphs.mnuPopGraphStuffPopup(Sender: TObject); | 
|---|
|  | 2997 | begin | 
|---|
|  | 2998 | if scrlTop.Tag = 0 then scrlTop.Hint := ''; | 
|---|
|  | 2999 | if (lvwItemsTop.SelCount = 0) and (lvwItemsBottom.SelCount = 0) then scrlTop.Hint := ''; | 
|---|
|  | 3000 | if scrlTop.Hint = '' then | 
|---|
|  | 3001 | begin | 
|---|
|  | 3002 | if Pieces(mnuPopGraphIsolate.Caption, ' ', 1, 3) = 'Move all selections' then | 
|---|
|  | 3003 | mnuPopGraphIsolate.Enabled := true | 
|---|
|  | 3004 | else | 
|---|
|  | 3005 | begin | 
|---|
|  | 3006 | mnuPopGraphIsolate.Caption := 'Move'; | 
|---|
|  | 3007 | mnuPopGraphIsolate.Enabled := false; | 
|---|
|  | 3008 | end; | 
|---|
|  | 3009 | if Pieces(mnuPopGraphRemove.Caption, ' ', 1, 3) = 'Remove all selections' then | 
|---|
|  | 3010 | mnuPopGraphRemove.Enabled := true | 
|---|
|  | 3011 | else | 
|---|
|  | 3012 | begin | 
|---|
|  | 3013 | mnuPopGraphRemove.Caption := 'Remove'; | 
|---|
|  | 3014 | mnuPopGraphRemove.Enabled := false; | 
|---|
|  | 3015 | end; | 
|---|
|  | 3016 | mnuPopGraphDetails.Caption := 'Details...'; | 
|---|
|  | 3017 | mnuPopGraphDetails.Enabled := (lvwItemsTop.SelCount > 0) or (lvwItemsBottom.SelCount > 0); | 
|---|
|  | 3018 | end | 
|---|
|  | 3019 | else | 
|---|
|  | 3020 | begin | 
|---|
|  | 3021 | mnuPopGraphIsolate.Enabled := true; | 
|---|
|  | 3022 | mnuPopGraphRemove.Enabled := true; | 
|---|
|  | 3023 | mnuPopGraphDetails.Enabled := true; | 
|---|
|  | 3024 | end; | 
|---|
|  | 3025 | mnuPopGraphSwap.Enabled := (lvwItemsTop.SelCount > 0) or (lvwItemsBottom.SelCount > 0); | 
|---|
|  | 3026 | mnuPopGraphReset.Enabled := mnuPopGraphSwap.Enabled; | 
|---|
|  | 3027 | mnuPopGraphCopy.Enabled := mnuPopGraphSwap.Enabled; | 
|---|
|  | 3028 | mnuPopGraphPrint.Enabled := mnuPopGraphSwap.Enabled; | 
|---|
|  | 3029 |  | 
|---|
|  | 3030 | with pnlMain.Parent do | 
|---|
|  | 3031 | if BorderWidth <> 1 then            // only do on float Graph | 
|---|
|  | 3032 | mnuPopGraphStayOnTop.Enabled :=false | 
|---|
|  | 3033 | else | 
|---|
|  | 3034 | mnuPopGraphStayOnTop.Enabled :=true; | 
|---|
|  | 3035 | end; | 
|---|
|  | 3036 |  | 
|---|
|  | 3037 | procedure TfrmGraphs.mnuPopGraphDetailsClick(Sender: TObject); | 
|---|
|  | 3038 | var | 
|---|
|  | 3039 | aGraphItem: TGraphItem; | 
|---|
|  | 3040 | tmpList: TStringList; | 
|---|
|  | 3041 | date1, date2: TFMDateTime; | 
|---|
|  | 3042 | teststring, typeitem, textvalue, textvalue1, textvalue2, typenum, typename: string; | 
|---|
|  | 3043 | i, selnum: integer; | 
|---|
|  | 3044 | begin | 
|---|
|  | 3045 | if chartDatelineTop.Tag = 1 then               // series | 
|---|
|  | 3046 | begin | 
|---|
|  | 3047 | ItemCheck(lvwItemsTop, mnuPopGraphIsolate.Hint, selnum, typeitem); | 
|---|
|  | 3048 | if selnum < 0 then exit; | 
|---|
|  | 3049 | if not HSAbbrev(Piece(typeitem, '^', 1)) then | 
|---|
|  | 3050 | begin | 
|---|
|  | 3051 | if (FGraphSeries is TGanttSeries) then | 
|---|
|  | 3052 | begin | 
|---|
|  | 3053 | FDate1 := (FGraphSeries as TGanttSeries).StartValues[FGraphValueIndex]; | 
|---|
|  | 3054 | FDate2 := (FGraphSeries as TGanttSeries).EndValues[FGraphValueIndex]; | 
|---|
|  | 3055 | end | 
|---|
|  | 3056 | else | 
|---|
|  | 3057 | begin | 
|---|
|  | 3058 | FDate1 := FGraphSeries.XValue[FGraphValueIndex]; | 
|---|
|  | 3059 | FDate2 := FDate1; | 
|---|
|  | 3060 | end; | 
|---|
|  | 3061 | textvalue := ValueText(FGraphClick, FGraphSeries, FGraphValueIndex); | 
|---|
|  | 3062 | textvalue1 := Piece(textvalue, '^', 2) + '  ' + Piece(textvalue, '^', 3); | 
|---|
|  | 3063 | textvalue2 := Piece(textvalue, '^', 4) + '  ' + Piece(textvalue, '^', 5); | 
|---|
|  | 3064 | typenum := trim(Piece(textvalue, '^', 1)); | 
|---|
|  | 3065 | typename := Piece(textvalue, '^', 2); | 
|---|
|  | 3066 | AllTypeDate(typenum, typename, textvalue1, textvalue2, FDate1, FDate2); | 
|---|
|  | 3067 | exit; | 
|---|
|  | 3068 | end | 
|---|
|  | 3069 | else | 
|---|
|  | 3070 | OneDayTypeDetails(typeitem); | 
|---|
|  | 3071 | end | 
|---|
|  | 3072 | else            // legend | 
|---|
|  | 3073 | begin | 
|---|
|  | 3074 | date1 := DateTimeToFMDateTime(FGraphSetting.HighTime); | 
|---|
|  | 3075 | date2 := DateTimeToFMDateTime(FGraphSetting.LowTime); | 
|---|
|  | 3076 | tmpList := TStringList.Create; | 
|---|
|  | 3077 | if pnlTop.Tag = 1 then | 
|---|
|  | 3078 | for i := 0  to lvwItemsTop.Items.Count - 1 do | 
|---|
|  | 3079 | begin | 
|---|
|  | 3080 | if lvwItemsTop.Items[i].Selected then | 
|---|
|  | 3081 | begin | 
|---|
|  | 3082 | aGraphItem := TGraphItem(lvwItemsTop.Items.Item[i].SubItems.Objects[3]);      //get file^ien match | 
|---|
|  | 3083 | teststring := aGraphItem.Values; | 
|---|
|  | 3084 | tmpList.Add(teststring); | 
|---|
|  | 3085 | end; | 
|---|
|  | 3086 | end | 
|---|
|  | 3087 | else | 
|---|
|  | 3088 | for i := 0  to lvwItemsBottom.Items.Count - 1 do | 
|---|
|  | 3089 | begin | 
|---|
|  | 3090 | if lvwItemsBottom.Items[i].Selected then | 
|---|
|  | 3091 | begin | 
|---|
|  | 3092 | aGraphItem := TGraphItem(lvwItemsBottom.Items.Item[i].SubItems.Objects[3]);    //get file^ien match | 
|---|
|  | 3093 | teststring := aGraphItem.Values; | 
|---|
|  | 3094 | tmpList.Add(teststring); | 
|---|
|  | 3095 | end; | 
|---|
|  | 3096 | end; | 
|---|
|  | 3097 | if tmpList.Count > 0 then | 
|---|
|  | 3098 | AllDetails(date1, date2, tmplist); | 
|---|
|  | 3099 | tmpList.Free; | 
|---|
|  | 3100 | end; | 
|---|
|  | 3101 | FMouseDown := false; | 
|---|
|  | 3102 | end; | 
|---|
|  | 3103 |  | 
|---|
|  | 3104 | procedure TfrmGraphs.AllDetails(aDate1, aDate2: TFMDateTime; aTempList: TStrings); | 
|---|
|  | 3105 | var | 
|---|
|  | 3106 | TypeList: TStringList; | 
|---|
|  | 3107 | i: integer; | 
|---|
|  | 3108 | detailsok: boolean; | 
|---|
|  | 3109 | testnum, teststring, testtype: string; | 
|---|
|  | 3110 | begin | 
|---|
|  | 3111 | detailsok := true; | 
|---|
|  | 3112 | TypeList := TStringList.Create; | 
|---|
|  | 3113 | for i := 0 to aTempList.Count -1 do | 
|---|
|  | 3114 | begin | 
|---|
|  | 3115 | teststring := aTempList[i]; | 
|---|
|  | 3116 | testtype := Piece(teststring, '^', 1); | 
|---|
|  | 3117 | if not HSAbbrev(testtype) then | 
|---|
|  | 3118 | detailsok := false; | 
|---|
|  | 3119 | if testtype = '63' then | 
|---|
|  | 3120 | begin | 
|---|
|  | 3121 | testnum := Piece(teststring, '^', 2); | 
|---|
|  | 3122 | testnum := Piece(testnum, '.', 1); | 
|---|
|  | 3123 | TypeList.Add('63^' + testnum); | 
|---|
|  | 3124 | end | 
|---|
|  | 3125 | else | 
|---|
|  | 3126 | TypeList.Add(teststring); | 
|---|
|  | 3127 | end; | 
|---|
|  | 3128 | if detailsok then | 
|---|
|  | 3129 | ReportBox(rpcDetailSelected(Patient.DFN, aDate1, aDate2, TypeList, true), 'Graph results on ' + Patient.Name, True) | 
|---|
|  | 3130 | else | 
|---|
|  | 3131 | ItemDateRange(FGraphClick); | 
|---|
|  | 3132 | TypeList.Free; | 
|---|
|  | 3133 | end; | 
|---|
|  | 3134 |  | 
|---|
|  | 3135 | procedure TfrmGraphs.OneDayTypeDetails(aTypeItem: string); | 
|---|
|  | 3136 | var | 
|---|
|  | 3137 | strdate1, strdate2, titleitem, titletype: string; | 
|---|
|  | 3138 | date1, date2: TFMDateTime; | 
|---|
|  | 3139 | tmpList: TStringList; | 
|---|
|  | 3140 | begin | 
|---|
|  | 3141 | tmpList := TStringList.Create; | 
|---|
|  | 3142 | strdate1 := FormatDateTime('mm/dd/yyyy', FDate1); | 
|---|
|  | 3143 | strdate2 := FormatDateTime('mm/dd/yyyy', FDate2); | 
|---|
|  | 3144 | FDate1 := StrToDateTime(strdate1); | 
|---|
|  | 3145 | FDate2 := StrToDateTime(strdate2); | 
|---|
|  | 3146 | date1 := DateTimeToFMDateTime(FDate1 + 1); | 
|---|
|  | 3147 | date2 := DateTimeToFMDateTime(FDate2); | 
|---|
|  | 3148 | titletype := FileNameX(Piece(aTypeItem, '^', 1)); | 
|---|
|  | 3149 | titleitem := ItemName(Piece(aTypeItem, '^', 1), Piece(aTypeItem, '^', 2)); | 
|---|
|  | 3150 | rpcDetailDay(tmpList, Patient.DFN, date1, date2, aTypeItem, true); | 
|---|
|  | 3151 | ReportBox(tmpList, titletype + ': ' + titleitem + ' on ' + Patient.Name + ' for ' + FormatFMDateTime('mmm d, yyyy', date1), True); | 
|---|
|  | 3152 | tmpList.Free; | 
|---|
|  | 3153 | end; | 
|---|
|  | 3154 |  | 
|---|
|  | 3155 | procedure TfrmGraphs.mnuPopGraphCopyClick(Sender: TObject); | 
|---|
|  | 3156 | var | 
|---|
|  | 3157 | i: integer; | 
|---|
|  | 3158 | StrForFooter, StrForHeader, aTitle, aWarning, aDateRange: String; | 
|---|
|  | 3159 | aHeader: TStringList; | 
|---|
|  | 3160 | wrdApp, wrdDoc: Variant; | 
|---|
|  | 3161 | ChildControl: TControl; | 
|---|
|  | 3162 | begin | 
|---|
|  | 3163 | try | 
|---|
|  | 3164 | wrdApp := CreateOleObject('Word.Application'); | 
|---|
|  | 3165 | except | 
|---|
|  | 3166 | raise Exception.Create('Cannot start MS Word!'); | 
|---|
|  | 3167 | end; | 
|---|
|  | 3168 | Screen.Cursor := crHourGlass; | 
|---|
|  | 3169 | aTitle := 'CPRS Graphing'; | 
|---|
|  | 3170 | aWarning := pnlInfo.Caption; | 
|---|
|  | 3171 | aDateRange :=  'Date Range: ' + cboDateRange.Text + '  Selected Items from ' + | 
|---|
|  | 3172 | FormatDateTime('mm/dd/yy', FGraphSetting.LowTime) + ' to ' + | 
|---|
|  | 3173 | FormatDateTime('mm/dd/yy', FGraphSetting.HighTime); | 
|---|
|  | 3174 | aHeader := TStringList.Create; | 
|---|
|  | 3175 | CreatePatientHeader(aHeader, aTitle, aWarning, aDateRange); | 
|---|
|  | 3176 | StrForHeader := ''; | 
|---|
|  | 3177 | for i := 0 to aHeader.Count -1 do | 
|---|
|  | 3178 | StrForHeader := StrForHeader + aHeader[i] + Chr(13); | 
|---|
|  | 3179 | StrForFooter := aTitle + ' - *** WORK COPY ONLY ***' + Chr(13); | 
|---|
|  | 3180 | wrdApp.Visible := False; | 
|---|
|  | 3181 | wrdApp.Documents.Add; | 
|---|
|  | 3182 | wrdDoc := wrdApp.Documents.Item(1); | 
|---|
|  | 3183 | wrdDoc := wrdDoc.Sections.Item(1); | 
|---|
|  | 3184 | wrdDoc := wrdDoc.Headers.Item(1).Range; | 
|---|
|  | 3185 | wrdDoc.Font.Name := 'Courier New'; | 
|---|
|  | 3186 | wrdDoc.Font.Size := 9; | 
|---|
|  | 3187 | wrdDoc.Text := StrForHeader; | 
|---|
|  | 3188 | wrdDoc := wrdApp.Documents.Item(1); | 
|---|
|  | 3189 | wrdDoc := wrdDoc.Sections.Item(1); | 
|---|
|  | 3190 | wrdDoc := wrdDoc.Footers.Item(1); | 
|---|
|  | 3191 | wrdDoc.Range.Font.Name := 'Courier New'; | 
|---|
|  | 3192 | wrdDoc.Range.Font.Size := 9; | 
|---|
|  | 3193 | wrdDoc.Range.Text := StrForFooter; | 
|---|
|  | 3194 | wrdDoc.PageNumbers.Add; | 
|---|
|  | 3195 | wrdDoc := wrdApp.Documents.Item(1); | 
|---|
|  | 3196 | wrdDoc.Range.Font.Name := 'Courier New'; | 
|---|
|  | 3197 | wrdDoc.Range.Font.Size := 9; | 
|---|
|  | 3198 | wrdDoc.Range.Text := StrForHeader; | 
|---|
|  | 3199 | wrdDoc.Range.InsertParagraphAfter; | 
|---|
|  | 3200 | for i := 0 to scrlTop.ControlCount - 1 do           // goes from top to bottom | 
|---|
|  | 3201 | begin | 
|---|
|  | 3202 | ChildControl := scrlTop.Controls[i]; | 
|---|
|  | 3203 | if (ChildControl as TChart).Visible then | 
|---|
|  | 3204 | begin | 
|---|
|  | 3205 | (ChildControl as TChart).CopyToClipboardBitmap; | 
|---|
|  | 3206 | wrdDoc.Range.InsertParagraphAfter; | 
|---|
|  | 3207 | wrdDoc.Paragraphs.Last.Range.Paste; | 
|---|
|  | 3208 | end; | 
|---|
|  | 3209 | end; | 
|---|
|  | 3210 | if (chartDatelineTop.SeriesCount > 0) and (not chkItemsTop.Checked) then | 
|---|
|  | 3211 | begin | 
|---|
|  | 3212 | chartDatelineTop.CopyToClipboardBitmap; | 
|---|
|  | 3213 | wrdDoc.Range.InsertParagraphAfter; | 
|---|
|  | 3214 | wrdDoc.Paragraphs.Last.Range.Paste; | 
|---|
|  | 3215 | end; | 
|---|
|  | 3216 | wrdDoc.Range.InsertParagraphAfter; | 
|---|
|  | 3217 | wrdDoc.Paragraphs.Last.Range.Text := '   '; | 
|---|
|  | 3218 | for i := 0 to scrlBottom.ControlCount - 1 do | 
|---|
|  | 3219 | begin | 
|---|
|  | 3220 | ChildControl := scrlBottom.Controls[i]; | 
|---|
|  | 3221 | if (ChildControl as TChart).Visible then | 
|---|
|  | 3222 | begin | 
|---|
|  | 3223 | (ChildControl as TChart).CopyToClipboardBitmap; | 
|---|
|  | 3224 | wrdDoc.Range.InsertParagraphAfter; | 
|---|
|  | 3225 | wrdDoc.Paragraphs.Last.Range.Paste; | 
|---|
|  | 3226 | end; | 
|---|
|  | 3227 | end; | 
|---|
|  | 3228 | if (chartDatelineBottom.SeriesCount > 0) and (chkDualViews.Checked) | 
|---|
|  | 3229 | and (not chkItemsBottom.Checked) then | 
|---|
|  | 3230 | begin | 
|---|
|  | 3231 | chartDatelineBottom.CopyToClipboardBitmap; | 
|---|
|  | 3232 | wrdDoc.Range.InsertParagraphAfter; | 
|---|
|  | 3233 | wrdDoc.Paragraphs.Last.Range.Paste; | 
|---|
|  | 3234 | end; | 
|---|
|  | 3235 | wrdDoc.Range.WholeStory; | 
|---|
|  | 3236 | wrdDoc.Range.Copy; | 
|---|
|  | 3237 | wrdDoc.Close(false); | 
|---|
|  | 3238 | wrdApp.DisplayAlerts := false; | 
|---|
|  | 3239 | wrdApp.Quit; | 
|---|
|  | 3240 | wrdApp := Unassigned; // releases variant | 
|---|
|  | 3241 | aHeader.Free; | 
|---|
|  | 3242 | Screen.Cursor := crDefault; | 
|---|
|  | 3243 | end; | 
|---|
|  | 3244 |  | 
|---|
|  | 3245 | procedure TfrmGraphs.CreatePatientHeader(var HeaderList: TStringList; PageTitle, Warning, DateRange: string); | 
|---|
|  | 3246 | // this procedure modified from rReports | 
|---|
|  | 3247 | var | 
|---|
|  | 3248 | tmpStr, tmpItem: string; | 
|---|
|  | 3249 | begin | 
|---|
|  | 3250 | if Warning = TXT_INFO then Warning := '  '; | 
|---|
|  | 3251 | with HeaderList do | 
|---|
|  | 3252 | begin | 
|---|
|  | 3253 | Add(' '); | 
|---|
|  | 3254 | Add(StringOfChar(' ', (74 - Length(PageTitle)) div 2) + PageTitle); | 
|---|
|  | 3255 | Add(' '); | 
|---|
|  | 3256 | tmpStr := Patient.Name + '   ' + Patient.SSN; | 
|---|
|  | 3257 | tmpItem := tmpStr + StringOfChar(' ', 39 - Length(tmpStr)) + Encounter.LocationName; | 
|---|
|  | 3258 | tmpStr := FormatFMDateTime('mmm dd, yyyy', Patient.DOB) + ' (' + IntToStr(Patient.Age) + ')'; | 
|---|
|  | 3259 | tmpItem := tmpItem + StringOfChar(' ', 74 - (Length(tmpItem) + Length(tmpStr))) + tmpStr; | 
|---|
|  | 3260 | Add(tmpItem); | 
|---|
|  | 3261 | Add(StringOfChar('=', 74)); | 
|---|
|  | 3262 | Add('*** WORK COPY ONLY ***' + StringOfChar(' ', 24) + 'Printed: ' | 
|---|
|  | 3263 | + FormatFMDateTime('mmm dd, yyyy  hh:nn', FMNow)); | 
|---|
|  | 3264 | Add(TXT_COPY_DISCLAIMER); | 
|---|
|  | 3265 | Add(StringOfChar(' ', (74 - Length(DateRange)) div 2) + DateRange); | 
|---|
|  | 3266 | Add(StringOfChar(' ', (74 - Length(Warning)) div 2) + Warning); | 
|---|
|  | 3267 | Add(' '); | 
|---|
|  | 3268 | end; | 
|---|
|  | 3269 | end; | 
|---|
|  | 3270 |  | 
|---|
|  | 3271 | procedure TfrmGraphs.GetData(aString: string); | 
|---|
|  | 3272 | var | 
|---|
|  | 3273 | i: integer; | 
|---|
|  | 3274 | filenum, itemdata, itemid: string; | 
|---|
|  | 3275 | aDate, aDate1: double; | 
|---|
|  | 3276 | begin | 
|---|
|  | 3277 | lstTemp.Items.Clear; | 
|---|
|  | 3278 | itemid := UpperCase(Pieces(aString, '^', 1, 2)); | 
|---|
|  | 3279 | with lstData do | 
|---|
|  | 3280 | for i := Items.Count - 1 downto 0 do | 
|---|
|  | 3281 | if itemid = UpperCase(Pieces(Items[i], '^', 1, 2)) then | 
|---|
|  | 3282 | begin | 
|---|
|  | 3283 | itemdata := Items[i]; | 
|---|
|  | 3284 | filenum := Piece(itemdata, '^', 1); | 
|---|
|  | 3285 | if (filenum = '52') or (filenum = '55') or (filenum = '55NVA') | 
|---|
|  | 3286 | or (filenum = '9999911') or (filenum = '405') or (filenum = '9000010') then | 
|---|
|  | 3287 | begin | 
|---|
|  | 3288 | aDate := strtofloat(FMCorrectedDate(Piece(itemdata, '^', 3))); | 
|---|
|  | 3289 | aDate1 := strtofloat(FMCorrectedDate(Piece(itemdata, '^', 4))); | 
|---|
|  | 3290 | if (aDate < FGraphSetting.FMStopDate) and (aDate > FGraphSetting.FMStartDate) then | 
|---|
|  | 3291 | lstTemp.Items.Add(Items[i]) | 
|---|
|  | 3292 | else if (aDate < FGraphSetting.FMStopDate) and (aDate1 > FGraphSetting.FMStartDate) then | 
|---|
|  | 3293 | lstTemp.Items.Add(Items[i]) | 
|---|
|  | 3294 | else if (aDate < FGraphSetting.FMStartDate) and (aDate1 > FGraphSetting.FMStopDate) then | 
|---|
|  | 3295 | lstTemp.Items.Add(Items[i]); | 
|---|
|  | 3296 | end | 
|---|
|  | 3297 | else if Piece(itemdata, '^', 3) <> '' then | 
|---|
|  | 3298 | begin | 
|---|
|  | 3299 | aDate := strtofloat(FMCorrectedDate(Piece(itemdata, '^', 3))); | 
|---|
|  | 3300 | if (aDate < FGraphSetting.FMStopDate) and (aDate > FGraphSetting.FMStartDate) then | 
|---|
|  | 3301 | if Copy(itemdata, 1, 4) = '63MI' then | 
|---|
|  | 3302 | lstTemp.Items.Add(Pieces(Items[i], '^', 1, 4)) | 
|---|
|  | 3303 | else if Copy(itemdata, 1, 4) = '63AP' then | 
|---|
|  | 3304 | lstTemp.Items.Add(Pieces(Items[i], '^', 1, 4)) | 
|---|
|  | 3305 | //else lstTemp.Items.Add(Pieces(Items[i], '^', 1, 5));         // add in non micro, ap | 
|---|
|  | 3306 | else lstTemp.Items.Add(Items[i]);         // add in non micro, ap | 
|---|
|  | 3307 | end; | 
|---|
|  | 3308 | end; | 
|---|
|  | 3309 | end; | 
|---|
|  | 3310 |  | 
|---|
|  | 3311 | function TfrmGraphs.FMToDateTime(FMDateTime: string): TDateTime; | 
|---|
|  | 3312 | var | 
|---|
|  | 3313 | x, Year: string; | 
|---|
|  | 3314 | begin | 
|---|
|  | 3315 | { Note: TDateTime cannot store month only or year only dates } | 
|---|
|  | 3316 | x := FMDateTime + '0000000'; | 
|---|
|  | 3317 | if Length(x) > 12 then x := Copy(x, 1, 12); | 
|---|
|  | 3318 | if StrToInt(Copy(x, 9, 4)) > 2359 then x := Copy(x, 1, 7) + '.2359'; | 
|---|
|  | 3319 | Year := IntToStr(17 + StrToInt(Copy(x, 1, 1))) + Copy(x, 2, 2); | 
|---|
|  | 3320 | x := Copy(x, 4, 2) + '/' + Copy(x, 6, 2) + '/' + Year + ' ' + Copy(x, 9, 2) + ':' + Copy(x, 11, 2); | 
|---|
|  | 3321 | Result := StrToDateTime(x); | 
|---|
|  | 3322 | end; | 
|---|
|  | 3323 |  | 
|---|
|  | 3324 | function TfrmGraphs.GraphTypeNum(aType: string): integer; | 
|---|
|  | 3325 | var | 
|---|
|  | 3326 | i: integer; | 
|---|
|  | 3327 | begin | 
|---|
|  | 3328 | Result := 4; | 
|---|
|  | 3329 | if (aType = '52') or (aType = '55') or (aType = '55NVA') or (aType = '9999911') then | 
|---|
|  | 3330 | if mnuMedsasgantt.Checked then Result := 8 | 
|---|
|  | 3331 | else if mnuMedsasganttvertheight.Checked then Result := 3 | 
|---|
|  | 3332 | else Result := 8 | 
|---|
|  | 3333 | else | 
|---|
|  | 3334 | for i := 0 to lstAllTypes.Items.Count - 1 do | 
|---|
|  | 3335 | if aType = Piece(lstAllTypes.Items[i], '^', 1) then | 
|---|
|  | 3336 | begin | 
|---|
|  | 3337 | Result := strtointdef(Piece(lstAllTypes.Items[i], '^', 3), 4); | 
|---|
|  | 3338 | break; | 
|---|
|  | 3339 | end; | 
|---|
|  | 3340 | end; | 
|---|
|  | 3341 |  | 
|---|
|  | 3342 | function TfrmGraphs.HSAbbrev(aType: string): boolean; | 
|---|
|  | 3343 | var | 
|---|
|  | 3344 | i: integer; | 
|---|
|  | 3345 | begin | 
|---|
|  | 3346 | Result := false; | 
|---|
|  | 3347 | for i := 0 to lstTypes.Items.Count - 1 do | 
|---|
|  | 3348 | if Piece(lstTypes.Items[i], '^', 1) = aType then | 
|---|
|  | 3349 | begin | 
|---|
|  | 3350 | Result := length(Piece(lstTypes.Items[i], '^', 8)) > 0; | 
|---|
|  | 3351 | break; | 
|---|
|  | 3352 | end; | 
|---|
|  | 3353 | end; | 
|---|
|  | 3354 |  | 
|---|
|  | 3355 | procedure TfrmGraphs.TempCheck(typeitem: string; var levelseq: double); | 
|---|
|  | 3356 | var | 
|---|
|  | 3357 | done, previous: boolean; | 
|---|
|  | 3358 | j: integer; | 
|---|
|  | 3359 | begin | 
|---|
|  | 3360 | previous := false; | 
|---|
|  | 3361 | done := false; | 
|---|
|  | 3362 | j := 0; | 
|---|
|  | 3363 | with lstTempCheck do | 
|---|
|  | 3364 | while not done do | 
|---|
|  | 3365 | begin | 
|---|
|  | 3366 | if Items.Count = j then done := true | 
|---|
|  | 3367 | else if Items[j] = typeitem then | 
|---|
|  | 3368 | begin | 
|---|
|  | 3369 | previous := true; | 
|---|
|  | 3370 | levelseq := j + 1; | 
|---|
|  | 3371 | done := true; | 
|---|
|  | 3372 | end | 
|---|
|  | 3373 | else j := j + 1; | 
|---|
|  | 3374 | end; | 
|---|
|  | 3375 | if not previous then | 
|---|
|  | 3376 | begin | 
|---|
|  | 3377 | lstTempCheck.Items.Add(UpperCase(typeitem)); | 
|---|
|  | 3378 | levelseq := lstTempCheck.Items.Count; | 
|---|
|  | 3379 | end; | 
|---|
|  | 3380 | end; | 
|---|
|  | 3381 |  | 
|---|
|  | 3382 | function TfrmGraphs.DCName(aDCien: string): string; | 
|---|
|  | 3383 | var | 
|---|
|  | 3384 | i: integer; | 
|---|
|  | 3385 | begin | 
|---|
|  | 3386 | if lstDrugClass.Items.Count < 1 then | 
|---|
|  | 3387 | FastAssign(rpcClass('50.605'), lstDrugClass.Items); | 
|---|
|  | 3388 | Result := ''; | 
|---|
|  | 3389 | for i := 0 to lstDrugClass.Items.Count - 1 do | 
|---|
|  | 3390 | if Piece(lstDrugClass.Items[i], '^', 2) = aDCien then | 
|---|
|  | 3391 | begin | 
|---|
|  | 3392 | Result := 'Drug - ' + Piece(lstDrugClass.Items[i], '^', 3); | 
|---|
|  | 3393 | break; | 
|---|
|  | 3394 | end; | 
|---|
|  | 3395 | end; | 
|---|
|  | 3396 |  | 
|---|
|  | 3397 | procedure TfrmGraphs.splItemsBottomMoved(Sender: TObject); | 
|---|
|  | 3398 | begin | 
|---|
|  | 3399 | chkItemsBottom.Left := pnlItemsBottom.Width - chkItemsBottom.Width - 2; | 
|---|
|  | 3400 | pnlItemsTop.Width := pnlItemsBottom.Width; | 
|---|
|  | 3401 | chkItemsTop.Left := pnlItemsTop.Width - chkItemsTop.Width - 2; | 
|---|
|  | 3402 | end; | 
|---|
|  | 3403 |  | 
|---|
|  | 3404 | procedure TfrmGraphs.splItemsTopMoved(Sender: TObject); | 
|---|
|  | 3405 | begin | 
|---|
|  | 3406 | chkItemsTop.Left := pnlItemsTop.Width - chkItemsTop.Width - 2; | 
|---|
|  | 3407 | pnlItemsBottom.Width := pnlItemsTop.Width; | 
|---|
|  | 3408 | chkItemsBottom.Left := pnlItemsBottom.Width - chkItemsBottom.Width - 2; | 
|---|
|  | 3409 | end; | 
|---|
|  | 3410 |  | 
|---|
|  | 3411 | procedure TfrmGraphs.cboDateRangeChange(Sender: TObject); | 
|---|
|  | 3412 | var | 
|---|
|  | 3413 | datetag: integer; | 
|---|
|  | 3414 | endofday: double; | 
|---|
|  | 3415 | dateranges, manualstart, manualstop: string; | 
|---|
|  | 3416 | begin | 
|---|
|  | 3417 | endofday := FMDateTimeOffsetBy(FMToday, 1); | 
|---|
|  | 3418 | SelCopy(lvwItemsTop, lstSelCopyTop); | 
|---|
|  | 3419 | SelCopy(lvwItemsBottom, lstSelCopyBottom); | 
|---|
|  | 3420 | dateranges := ''; | 
|---|
|  | 3421 | if (cboDateRange.ItemID = 'S') then | 
|---|
|  | 3422 | begin | 
|---|
|  | 3423 | with calDateRange do | 
|---|
|  | 3424 | begin | 
|---|
|  | 3425 | if Execute then | 
|---|
|  | 3426 | if Length(TextOfStart) > 0 then | 
|---|
|  | 3427 | if Length(TextOfStop) > 0 then | 
|---|
|  | 3428 | begin | 
|---|
|  | 3429 | dateranges := | 
|---|
|  | 3430 | '^' + UpperCase(TextOfStart) + ' to ' + UpperCase(TextOfStop) + | 
|---|
|  | 3431 | '^^^' + RelativeStart + ';' + RelativeStop + | 
|---|
|  | 3432 | '^' + floattostr(FMDateStart) + '^' + floattostr(FMDateStop); | 
|---|
|  | 3433 | cboDateRange.Items.Append(dateranges); | 
|---|
|  | 3434 | cboDateRange.ItemIndex := cboDateRange.Items.Count - 1; | 
|---|
|  | 3435 | end | 
|---|
|  | 3436 | else | 
|---|
|  | 3437 | cboDateRange.ItemIndex := -1 | 
|---|
|  | 3438 | else | 
|---|
|  | 3439 | cboDateRange.ItemIndex := -1 | 
|---|
|  | 3440 | else | 
|---|
|  | 3441 | cboDateRange.ItemIndex := -1; | 
|---|
|  | 3442 | end; | 
|---|
|  | 3443 | end; | 
|---|
|  | 3444 | HideGraphs(true); | 
|---|
|  | 3445 | datetag := cboDateRange.ItemIEN; | 
|---|
|  | 3446 | with FGraphSetting do | 
|---|
|  | 3447 | case datetag of | 
|---|
|  | 3448 | 0:  begin | 
|---|
|  | 3449 | if cboDateRange.ItemIndex > 8 then    // selected date range | 
|---|
|  | 3450 | begin | 
|---|
|  | 3451 | if dateranges = '' then dateranges := cboDateRange.Items[cboDateRange.ItemIndex]; | 
|---|
|  | 3452 | manualstart := Piece(dateranges, '^' , 6); | 
|---|
|  | 3453 | manualstop := Piece(dateranges, '^' , 7); | 
|---|
|  | 3454 | if (manualstop <> '') and (length(Piece(manualstop, '.', 2)) = 0) then | 
|---|
|  | 3455 | manualstop := manualstop + '.2359'; | 
|---|
|  | 3456 | FMStartDate := MakeFMDateTime(manualstart); | 
|---|
|  | 3457 | FMStopDate := MakeFMDateTime(manualstop); | 
|---|
|  | 3458 | if (manualstart <> '') and (length(Piece(manualstart, '.', 2)) = 0) then | 
|---|
|  | 3459 | begin | 
|---|
|  | 3460 | FMStartDate := FMDateTimeOffsetBy(FMStartDate, -1); | 
|---|
|  | 3461 | manualstart := floattostr(FMStartDate) + '.2359'; | 
|---|
|  | 3462 | FMStartDate := MakeFMDateTime(manualstart); | 
|---|
|  | 3463 | end; | 
|---|
|  | 3464 | end; | 
|---|
|  | 3465 | end; | 
|---|
|  | 3466 | 1:  begin | 
|---|
|  | 3467 | FMStartDate := FMToday; | 
|---|
|  | 3468 | FMStopDate := endofday; | 
|---|
|  | 3469 | end; | 
|---|
|  | 3470 | 2:  begin | 
|---|
|  | 3471 | FMStartDate := FMDateTimeOffsetBy(FMToday, -7); | 
|---|
|  | 3472 | FMStopDate := endofday; | 
|---|
|  | 3473 | end; | 
|---|
|  | 3474 | 3:  begin | 
|---|
|  | 3475 | FMStartDate := FMDateTimeOffsetBy(FMToday, -14); | 
|---|
|  | 3476 | FMStopDate := endofday; | 
|---|
|  | 3477 | end; | 
|---|
|  | 3478 | 4:  begin | 
|---|
|  | 3479 | FMStartDate := FMDateTimeOffsetBy(FMToday, -30); | 
|---|
|  | 3480 | FMStopDate := endofday; | 
|---|
|  | 3481 | end; | 
|---|
|  | 3482 | 5:  begin | 
|---|
|  | 3483 | FMStartDate := FMDateTimeOffsetBy(FMToday, -183); | 
|---|
|  | 3484 | FMStopDate := endofday; | 
|---|
|  | 3485 | end; | 
|---|
|  | 3486 | 6:  begin | 
|---|
|  | 3487 | FMStartDate := FMDateTimeOffsetBy(FMToday, -365); | 
|---|
|  | 3488 | FMStopDate := endofday; | 
|---|
|  | 3489 | end; | 
|---|
|  | 3490 | 7:  begin | 
|---|
|  | 3491 | FMStartDate := FMDateTimeOffsetBy(FMToday, -730); | 
|---|
|  | 3492 | FMStopDate := endofday; | 
|---|
|  | 3493 | end; | 
|---|
|  | 3494 | 8:  begin | 
|---|
|  | 3495 | FMStartDate := FM_START_DATE;   // earliest recorded values | 
|---|
|  | 3496 | FMStopDate := endofday; | 
|---|
|  | 3497 | end; | 
|---|
|  | 3498 | else | 
|---|
|  | 3499 | begin | 
|---|
|  | 3500 | if dateranges = '' then dateranges := cboDateRange.Items[cboDateRange.ItemIndex]; | 
|---|
|  | 3501 | manualstart := Piece(dateranges, '^' , 6); | 
|---|
|  | 3502 | manualstop := Piece(dateranges, '^' , 7); | 
|---|
|  | 3503 | if (manualstop <> '') and (length(Piece(manualstop, '.', 2)) = 0) then manualstop := manualstop + '.2359'; | 
|---|
|  | 3504 | FMStartDate := MakeFMDateTime(manualstart); | 
|---|
|  | 3505 | FMStopDate := MakeFMDateTime(manualstop); | 
|---|
|  | 3506 | if (manualstart <> '') and (length(Piece(manualstart, '.', 2)) = 0) then | 
|---|
|  | 3507 | begin | 
|---|
|  | 3508 | FMStartDate := FMDateTimeOffsetBy(FMStartDate, -1); | 
|---|
|  | 3509 | manualstart := floattostr(FMStartDate) + '.2359'; | 
|---|
|  | 3510 | FMStartDate := MakeFMDateTime(manualstart); | 
|---|
|  | 3511 | end; | 
|---|
|  | 3512 | end; | 
|---|
|  | 3513 | end; | 
|---|
|  | 3514 | FilterListView(FGraphSetting.FMStartDate, FGraphSetting.FMStopDate); | 
|---|
|  | 3515 | SelReset(lstSelCopyTop, lvwItemsTop); | 
|---|
|  | 3516 | SelReset(lstSelCopyBottom, lvwItemsBottom); | 
|---|
|  | 3517 | DisplayData('top'); | 
|---|
|  | 3518 | DisplayData('bottom'); | 
|---|
|  | 3519 | if cboViewsTop.ItemIndex > 1 then cboViewsTopChange(self); | 
|---|
|  | 3520 | if cboViewsBottom.ItemIndex > 1 then cboViewsBottomChange(self); | 
|---|
|  | 3521 | HideGraphs(false); | 
|---|
|  | 3522 | end; | 
|---|
|  | 3523 |  | 
|---|
|  | 3524 | function TfrmGraphs.StdDev(value, high, low: double): double; | 
|---|
|  | 3525 | begin | 
|---|
|  | 3526 | if high - low <> 0 then | 
|---|
|  | 3527 | begin | 
|---|
|  | 3528 | Result := (value - (low + ((high - low) / 2)))/((high - low) / 4); | 
|---|
|  | 3529 | Result := RoundTo(Result, -2); | 
|---|
|  | 3530 | end | 
|---|
|  | 3531 | else | 
|---|
|  | 3532 | Result := 0; | 
|---|
|  | 3533 | end; | 
|---|
|  | 3534 |  | 
|---|
|  | 3535 | function TfrmGraphs.InvVal(value: double): double; | 
|---|
|  | 3536 | begin | 
|---|
|  | 3537 | if value = 0 then value := 0.0001; | 
|---|
|  | 3538 | Result := 1 / value; | 
|---|
|  | 3539 | Result := RoundTo(Result, -2); | 
|---|
|  | 3540 | end; | 
|---|
|  | 3541 |  | 
|---|
|  | 3542 | procedure TfrmGraphs.lvwItemsTopCompare(Sender: TObject; Item1, | 
|---|
|  | 3543 | Item2: TListItem; Data: Integer; var Compare: Integer); | 
|---|
|  | 3544 | begin | 
|---|
|  | 3545 | if not(Sender is TListView) then exit; | 
|---|
|  | 3546 | if FsortAscending then | 
|---|
|  | 3547 | begin | 
|---|
|  | 3548 | if FSortCol = 0 then | 
|---|
|  | 3549 | Compare := CompareStr(Item1.Caption, Item2.Caption) | 
|---|
|  | 3550 | else | 
|---|
|  | 3551 | Compare := CompareStr(Item1.SubItems[FsortCol - 1], | 
|---|
|  | 3552 | Item2.SubItems[FsortCol - 1]); | 
|---|
|  | 3553 | end | 
|---|
|  | 3554 | else | 
|---|
|  | 3555 | begin | 
|---|
|  | 3556 | if FSortCol = 0 then | 
|---|
|  | 3557 | Compare := CompareStr(Item2.Caption, Item1.Caption) | 
|---|
|  | 3558 | else | 
|---|
|  | 3559 | Compare := CompareStr(Item2.SubItems[FsortCol - 1], | 
|---|
|  | 3560 | Item1.SubItems[FsortCol - 1]); | 
|---|
|  | 3561 | end; | 
|---|
|  | 3562 | end; | 
|---|
|  | 3563 |  | 
|---|
|  | 3564 | procedure TfrmGraphs.lvwItemsTopColumnClick(Sender: TObject; | 
|---|
|  | 3565 | Column: TListColumn); | 
|---|
|  | 3566 | begin | 
|---|
|  | 3567 | if FSortCol = Column.Index then | 
|---|
|  | 3568 | FSortAscending := not FSortAscending | 
|---|
|  | 3569 | else | 
|---|
|  | 3570 | FSortAscending := true; | 
|---|
|  | 3571 | FSortCol := Column.Index; | 
|---|
|  | 3572 | (Sender as TListView).AlphaSort; | 
|---|
|  | 3573 | end; | 
|---|
|  | 3574 |  | 
|---|
|  | 3575 | procedure TfrmGraphs.lvwItemsBottomCompare(Sender: TObject; Item1, | 
|---|
|  | 3576 | Item2: TListItem; Data: Integer; var Compare: Integer); | 
|---|
|  | 3577 | begin | 
|---|
|  | 3578 | if not(Sender is TListView) then exit; | 
|---|
|  | 3579 | if FBSortAscending then | 
|---|
|  | 3580 | begin | 
|---|
|  | 3581 | if FBSortCol = 0 then | 
|---|
|  | 3582 | Compare := CompareStr(Item1.Caption, Item2.Caption) | 
|---|
|  | 3583 | else | 
|---|
|  | 3584 | Compare := CompareStr(Item1.SubItems[FBSortCol - 1], | 
|---|
|  | 3585 | Item2.SubItems[FBSortCol - 1]); | 
|---|
|  | 3586 | end | 
|---|
|  | 3587 | else | 
|---|
|  | 3588 | begin | 
|---|
|  | 3589 | if FBSortCol = 0 then | 
|---|
|  | 3590 | Compare := CompareStr(Item2.Caption, Item1.Caption) | 
|---|
|  | 3591 | else | 
|---|
|  | 3592 | Compare := CompareStr(Item2.SubItems[FBSortCol - 1], | 
|---|
|  | 3593 | Item1.SubItems[FBSortCol - 1]); | 
|---|
|  | 3594 | end; | 
|---|
|  | 3595 | end; | 
|---|
|  | 3596 |  | 
|---|
|  | 3597 | procedure TfrmGraphs.lvwItemsBottomColumnClick(Sender: TObject; | 
|---|
|  | 3598 | Column: TListColumn); | 
|---|
|  | 3599 | begin | 
|---|
|  | 3600 | if FBSortCol = Column.Index then | 
|---|
|  | 3601 | FBSortAscending := not FBSortAscending | 
|---|
|  | 3602 | else | 
|---|
|  | 3603 | FBSortAscending := true; | 
|---|
|  | 3604 | FBSortCol := Column.Index; | 
|---|
|  | 3605 | (Sender as TListView).AlphaSort; | 
|---|
|  | 3606 | end; | 
|---|
|  | 3607 |  | 
|---|
|  | 3608 | procedure TfrmGraphs.btnGraphSelectionsClick(Sender: TObject); | 
|---|
|  | 3609 | var | 
|---|
|  | 3610 | actionOK, checkaction: boolean; | 
|---|
|  | 3611 | counter, i, listnum: integer; | 
|---|
|  | 3612 | profile, profilestring, section, selections, specnum, typeitem: string; | 
|---|
|  | 3613 | aGraphItem: TGraphItem; | 
|---|
|  | 3614 | begin | 
|---|
|  | 3615 | selections := ''; | 
|---|
|  | 3616 | for i := 0 to lvwItemsTop.Items.Count - 1 do | 
|---|
|  | 3617 | if lvwItemsTop.Items[i].Selected then | 
|---|
|  | 3618 | begin | 
|---|
|  | 3619 | aGraphItem := TGraphItem(lvwItemsTop.Items.Item[i].SubItems.Objects[3]); | 
|---|
|  | 3620 | typeitem := UpperCase(aGraphItem.Values); | 
|---|
|  | 3621 | if Piece(typeitem, '^', 1) = '63' then | 
|---|
|  | 3622 | begin | 
|---|
|  | 3623 | specnum := Piece(Piece(typeitem, '^', 2), '.', 2); | 
|---|
|  | 3624 | if length(specnum) > 0 then  // mulispecimen | 
|---|
|  | 3625 | if specnum = '1' then typeitem := Piece(typeitem, '.', 1) | 
|---|
|  | 3626 | else typeitem := ''; | 
|---|
|  | 3627 | end; | 
|---|
|  | 3628 | if length(typeitem) > 0 then | 
|---|
|  | 3629 | selections := selections + Piece(typeitem, '^', 1) + '~' + Piece(typeitem, '^', 2) +'~|'; | 
|---|
|  | 3630 | end; | 
|---|
|  | 3631 | checkaction := chkDualViews.Checked; | 
|---|
|  | 3632 | actionOK := false; | 
|---|
|  | 3633 | profile := '*'; | 
|---|
|  | 3634 | counter := cboViewsTop.Tag; | 
|---|
|  | 3635 | // load lstItems with all patient items and pass to Define View    ???? | 
|---|
|  | 3636 | DialogGraphProfiles(Font.Size, actionOK, checkaction, FGraphSetting, | 
|---|
|  | 3637 | profile, profilestring, section, Patient.DFN, counter, selections); | 
|---|
|  | 3638 | if (not actionOK) then exit; | 
|---|
|  | 3639 | FillViews; | 
|---|
|  | 3640 | if (section = 'niether') then exit; | 
|---|
|  | 3641 | cboViewsTop.Tag := counter; | 
|---|
|  | 3642 |  | 
|---|
|  | 3643 | lstViews.Items.Add(profilestring); | 
|---|
|  | 3644 | listnum := lstViews.Items.Count + 1; | 
|---|
|  | 3645 | for i := 0 to lstViews.Items.Count - 1 do | 
|---|
|  | 3646 | begin | 
|---|
|  | 3647 | profilestring := lstViews.Items[i]; | 
|---|
|  | 3648 | cboViewsTop.Items.Insert(i + 2, profilestring); | 
|---|
|  | 3649 | cboViewsBottom.Items.Insert(i + 2, profilestring); | 
|---|
|  | 3650 | end; | 
|---|
|  | 3651 | if (section = 'bottom') or (section = 'both') then | 
|---|
|  | 3652 | lvwItemsBottom.Tag := listnum; | 
|---|
|  | 3653 | if (section = 'top') or (section = 'both') then | 
|---|
|  | 3654 | lvwItemsTop.Tag  := listnum; | 
|---|
|  | 3655 | ViewSelections; | 
|---|
|  | 3656 | end; | 
|---|
|  | 3657 |  | 
|---|
|  | 3658 | procedure TfrmGraphs.ViewSelections; | 
|---|
|  | 3659 | var | 
|---|
|  | 3660 | i: integer; | 
|---|
|  | 3661 | begin    // uses lvwItems... Tag as index for view selection | 
|---|
|  | 3662 | with lvwItemsBottom do | 
|---|
|  | 3663 | begin | 
|---|
|  | 3664 | if (Tag = 0) and (length(lvwItemsBottom.Hint) > 0) then | 
|---|
|  | 3665 | begin | 
|---|
|  | 3666 | for i := 0 to cboViewsBottom.Items.Count - 1 do | 
|---|
|  | 3667 | begin | 
|---|
|  | 3668 | showmessage(cboViewsBottom.Items[i]); | 
|---|
|  | 3669 | if lvwItemsBottom.Hint = Piece(cboViewsBottom.Items[i], '^', 2) then | 
|---|
|  | 3670 | begin | 
|---|
|  | 3671 | Tag := i; | 
|---|
|  | 3672 | break; | 
|---|
|  | 3673 | end; | 
|---|
|  | 3674 | end; | 
|---|
|  | 3675 | end; | 
|---|
|  | 3676 | if Tag > 0 then | 
|---|
|  | 3677 | begin | 
|---|
|  | 3678 | if not chkDualViews.Checked then | 
|---|
|  | 3679 | begin | 
|---|
|  | 3680 | chkDualViews.Checked := true; | 
|---|
|  | 3681 | chkDualViewsClick(self); | 
|---|
|  | 3682 | end; | 
|---|
|  | 3683 | ClearSelection; | 
|---|
|  | 3684 | cboViewsBottom.ItemIndex := Tag; | 
|---|
|  | 3685 | Tag := 0; | 
|---|
|  | 3686 | Hint := ''; | 
|---|
|  | 3687 | cboViewsBottomChange(self); | 
|---|
|  | 3688 | end; | 
|---|
|  | 3689 | end; | 
|---|
|  | 3690 | with lvwItemsTop do | 
|---|
|  | 3691 | begin | 
|---|
|  | 3692 | if (Tag = 0) and (length(lvwItemsTop.Hint) > 0) then | 
|---|
|  | 3693 | begin | 
|---|
|  | 3694 | for i := 0 to cboViewsTop.Items.Count - 1 do | 
|---|
|  | 3695 | begin | 
|---|
|  | 3696 | if lvwItemsTop.Hint = Piece(cboViewsTop.Items[i], '^', 2) then | 
|---|
|  | 3697 | begin | 
|---|
|  | 3698 | Tag := i; | 
|---|
|  | 3699 | break; | 
|---|
|  | 3700 | end; | 
|---|
|  | 3701 | end; | 
|---|
|  | 3702 | end; | 
|---|
|  | 3703 | if Tag > 0 then | 
|---|
|  | 3704 | begin | 
|---|
|  | 3705 | ClearSelection; | 
|---|
|  | 3706 | cboViewsTop.ItemIndex := Tag; | 
|---|
|  | 3707 | Tag := 0; | 
|---|
|  | 3708 | Hint := ''; | 
|---|
|  | 3709 | cboViewsTopChange(self); | 
|---|
|  | 3710 | end; | 
|---|
|  | 3711 | end; | 
|---|
|  | 3712 | end; | 
|---|
|  | 3713 |  | 
|---|
|  | 3714 | procedure TfrmGraphs.ItemsClick(Sender: TObject; aListView, aOtherListView: TListView; | 
|---|
|  | 3715 | aCheckBox: TCheckBox; aComboBox: TORComboBox; aList: TListBox; aSection: string); | 
|---|
|  | 3716 | begin | 
|---|
|  | 3717 | FRetainZoom := (lstZoomHistory.Count > 0); | 
|---|
|  | 3718 | FWarning := false; | 
|---|
|  | 3719 | Screen.Cursor := crHourGlass; | 
|---|
|  | 3720 | HideGraphs(true); | 
|---|
|  | 3721 | if Sender = aListView then | 
|---|
|  | 3722 | begin | 
|---|
|  | 3723 | aComboBox.ItemIndex := -1; | 
|---|
|  | 3724 | aComboBox.Text := ''; | 
|---|
|  | 3725 | end; | 
|---|
|  | 3726 | if (Sender is TListView) then           // clear out selcopy list | 
|---|
|  | 3727 | aList.Items.Clear; | 
|---|
|  | 3728 | if aOtherListView.SelCount < 1 then | 
|---|
|  | 3729 | begin | 
|---|
|  | 3730 | FGraphSetting.HighTime := 0; | 
|---|
|  | 3731 | FGraphSetting.LowTime := BIG_NUMBER; | 
|---|
|  | 3732 | end | 
|---|
|  | 3733 | else if (FBHighTime <> 0) and (aSection = 'top') then | 
|---|
|  | 3734 | begin | 
|---|
|  | 3735 | if FBHighTime < FTHighTime then FGraphSetting.HighTime := FBHighTime; | 
|---|
|  | 3736 | if FBLowTime > FTLowTime then FGraphSetting.LowTime := FBLowTime; | 
|---|
|  | 3737 | end | 
|---|
|  | 3738 | else if (FTHighTime <> 0) and (aSection = 'bottom') then | 
|---|
|  | 3739 | begin | 
|---|
|  | 3740 | if FTHighTime < FBHighTime then FGraphSetting.HighTime := FTHighTime; | 
|---|
|  | 3741 | if FTLowTime > FBLowTime then FGraphSetting.LowTime := FTLowTime; | 
|---|
|  | 3742 | end; | 
|---|
|  | 3743 | if aSection = 'top' then | 
|---|
|  | 3744 | begin | 
|---|
|  | 3745 | FTHighTime := 0; | 
|---|
|  | 3746 | FTLowTime := BIG_NUMBER; | 
|---|
|  | 3747 | end | 
|---|
|  | 3748 | else if aSection = 'bottom' then | 
|---|
|  | 3749 | begin | 
|---|
|  | 3750 | FBHighTime := 0; | 
|---|
|  | 3751 | FBLowTime := BIG_NUMBER; | 
|---|
|  | 3752 | end; | 
|---|
|  | 3753 | CheckToAddData(aListView, aSection, 'SELECT'); | 
|---|
|  | 3754 | DisplayData(aSection); | 
|---|
|  | 3755 | if (aListView.SelCount = 1) and (aOtherListView.SelCount = 0) then | 
|---|
|  | 3756 | begin | 
|---|
|  | 3757 | lstZoomHistory.Items.Clear; | 
|---|
|  | 3758 | FRetainZoom := false; | 
|---|
|  | 3759 | mnuPopGraphZoomBack.Enabled := false; | 
|---|
|  | 3760 | end | 
|---|
|  | 3761 | else if FRetainZoom and (lstZoomHistory.Count > 0) then | 
|---|
|  | 3762 | ZoomUpdate; | 
|---|
|  | 3763 | HideGraphs(false); | 
|---|
|  | 3764 | if FWarning then | 
|---|
|  | 3765 | FWarning := false; | 
|---|
|  | 3766 | Screen.Cursor := crDefault; | 
|---|
|  | 3767 | end; | 
|---|
|  | 3768 |  | 
|---|
|  | 3769 | procedure TfrmGraphs.CheckToAddData(aListView: TListView; aSection, TypeToCheck: string); | 
|---|
|  | 3770 | var | 
|---|
|  | 3771 | done, ok, previous, singletype: boolean; | 
|---|
|  | 3772 | i, j: integer; | 
|---|
|  | 3773 | itemname, typeitem: string; | 
|---|
|  | 3774 | aGraphItem: TGraphItem; | 
|---|
|  | 3775 | begin | 
|---|
|  | 3776 | TypeToCheck := UpperCase(TypeToCheck); | 
|---|
|  | 3777 | if (TypeToCheck = 'SELECT') and (lvwItemsTop.SelCount = 0) | 
|---|
|  | 3778 | and (lvwItemsBottom.SelCount = 0) then exit; | 
|---|
|  | 3779 | singletype := length(Piece(TypeToCheck, '^', 2)) = 0; | 
|---|
|  | 3780 | for i := 0 to aListView.Items.Count - 1 do | 
|---|
|  | 3781 | begin | 
|---|
|  | 3782 | ok := false; | 
|---|
|  | 3783 | if (TypeToCheck = 'ALL') then ok := true; | 
|---|
|  | 3784 | if (TypeToCheck = 'SELECT') and aListView.Items[i].Selected then ok := true; | 
|---|
|  | 3785 | aGraphItem := TGraphItem(aListView.Items.Item[i].SubItems.Objects[3]); | 
|---|
|  | 3786 | typeitem := UpperCase(Pieces(aGraphItem.Values, '^', 1, 2)); | 
|---|
|  | 3787 | if not ok then | 
|---|
|  | 3788 | if TypeToCheck = typeitem then ok := true | 
|---|
|  | 3789 | else if (TypeToCheck = Piece(typeitem, '^', 1)) and | 
|---|
|  | 3790 | singletype then ok := true; | 
|---|
|  | 3791 | if ok then | 
|---|
|  | 3792 | begin | 
|---|
|  | 3793 | previous := false; | 
|---|
|  | 3794 | done := false; | 
|---|
|  | 3795 | j := 0; | 
|---|
|  | 3796 | with lstCheck do | 
|---|
|  | 3797 | while not done do | 
|---|
|  | 3798 | begin | 
|---|
|  | 3799 | if Items.Count = j then done := true | 
|---|
|  | 3800 | else if lstCheck.Items[j] = typeitem then | 
|---|
|  | 3801 | begin | 
|---|
|  | 3802 | previous := true; | 
|---|
|  | 3803 | done := true; | 
|---|
|  | 3804 | end | 
|---|
|  | 3805 | else j := j + 1; | 
|---|
|  | 3806 | end; | 
|---|
|  | 3807 | if not previous then | 
|---|
|  | 3808 | begin | 
|---|
|  | 3809 | lstCheck.Items.Add(typeitem); | 
|---|
|  | 3810 | itemname := aListView.Items[i].Caption; | 
|---|
|  | 3811 | if Piece(typeitem, '^', 1) = '63' then | 
|---|
|  | 3812 | LabData(typeitem, itemname, aSection) | 
|---|
|  | 3813 | else | 
|---|
|  | 3814 | lstData.Items.AddStrings(rpcGetItemData(typeitem, FMTimeStamp, Patient.DFN)); | 
|---|
|  | 3815 | end; | 
|---|
|  | 3816 | end; | 
|---|
|  | 3817 | end; | 
|---|
|  | 3818 | end; | 
|---|
|  | 3819 |  | 
|---|
|  | 3820 | procedure TfrmGraphs.lvwItemsTopClick(Sender: TObject); | 
|---|
|  | 3821 | var | 
|---|
|  | 3822 | i: integer; | 
|---|
|  | 3823 | begin | 
|---|
|  | 3824 | FFirstClick := true; | 
|---|
|  | 3825 | with FGraphSetting do | 
|---|
|  | 3826 | if lvwItemsTop.SelCount > MaxSelect then | 
|---|
|  | 3827 | begin | 
|---|
|  | 3828 | pnlItemsTopInfo.Tag := 1; | 
|---|
|  | 3829 | lvwItemsTop.ClearSelection; | 
|---|
|  | 3830 | showmessage('Too many items to graph'); | 
|---|
|  | 3831 | for i := 0 to lstSelPrevTop.Items.Count - 1 do | 
|---|
|  | 3832 | lvwItemsTop.Items[strtoint(lstSelPrevTop.Items[i])].Selected := true; | 
|---|
|  | 3833 | pnlItemsTopInfo.Tag := 0; | 
|---|
|  | 3834 | end | 
|---|
|  | 3835 | else | 
|---|
|  | 3836 | begin | 
|---|
|  | 3837 | lstSelPrevTop.Clear; | 
|---|
|  | 3838 | for i := 0 to lvwItemsTop.Items.Count - 1 do | 
|---|
|  | 3839 | if lvwItemsTop.Items[i].Selected then lstSelPrevTop.Items.Add(inttostr(i)); | 
|---|
|  | 3840 | ItemsClick(Sender, lvwItemsTop, lvwItemsBottom, chkItemsTop, cboViewsTop, lstSelCopyTop, 'top'); | 
|---|
|  | 3841 | end; | 
|---|
|  | 3842 | end; | 
|---|
|  | 3843 |  | 
|---|
|  | 3844 | procedure TfrmGraphs.lvwItemsBottomClick(Sender: TObject); | 
|---|
|  | 3845 | var | 
|---|
|  | 3846 | i: integer; | 
|---|
|  | 3847 | begin | 
|---|
|  | 3848 | FFirstClick := true; | 
|---|
|  | 3849 | with FGraphSetting do | 
|---|
|  | 3850 | if lvwItemsBottom.SelCount > MaxSelect then | 
|---|
|  | 3851 | begin | 
|---|
|  | 3852 | pnlItemsBottomInfo.Tag := 1; | 
|---|
|  | 3853 | lvwItemsBottom.ClearSelection; | 
|---|
|  | 3854 | showmessage('Too many items to graph'); | 
|---|
|  | 3855 | for i := 0 to lstSelPrevBottom.Items.Count - 1 do | 
|---|
|  | 3856 | lvwItemsBottom.Items[strtoint(lstSelPrevBottom.Items[i])].Selected := true; | 
|---|
|  | 3857 | pnlItemsBottomInfo.Tag := 0; | 
|---|
|  | 3858 | end | 
|---|
|  | 3859 | else | 
|---|
|  | 3860 | begin | 
|---|
|  | 3861 | lstSelPrevBottom.Clear; | 
|---|
|  | 3862 | for i := 0 to lvwItemsBottom.Items.Count - 1 do | 
|---|
|  | 3863 | if lvwItemsBottom.Items[i].Selected then lstSelPrevBottom.Items.Add(inttostr(i)); | 
|---|
|  | 3864 | ItemsClick(Sender, lvwItemsBottom, lvwItemsTop, chkItemsBottom, cboViewsBottom, lstSelCopyBottom, 'bottom'); | 
|---|
|  | 3865 | end; | 
|---|
|  | 3866 | end; | 
|---|
|  | 3867 |  | 
|---|
|  | 3868 | procedure TfrmGraphs.SelCopy(aListView: TListView; aListBox: TListBox); | 
|---|
|  | 3869 | var | 
|---|
|  | 3870 | i: integer; | 
|---|
|  | 3871 | aGraphItem: TGraphItem; | 
|---|
|  | 3872 | begin | 
|---|
|  | 3873 | if aListView.Items.Count > 0 then | 
|---|
|  | 3874 | begin | 
|---|
|  | 3875 | for i := 0 to aListView.Items.Count - 1 do | 
|---|
|  | 3876 | if aListView.Items[i].Selected then | 
|---|
|  | 3877 | begin | 
|---|
|  | 3878 | aGraphItem := TGraphItem(aListView.Items.Item[i].SubItems.Objects[3]);    //get file^ien match | 
|---|
|  | 3879 | aListBox.Items.Add(aGraphItem.Values); | 
|---|
|  | 3880 | end; | 
|---|
|  | 3881 | end; | 
|---|
|  | 3882 | end; | 
|---|
|  | 3883 |  | 
|---|
|  | 3884 | procedure TfrmGraphs.SelReset(aListbox: TListBox; aListView: TListView); | 
|---|
|  | 3885 | var | 
|---|
|  | 3886 | i, j: integer; | 
|---|
|  | 3887 | typeitem, itemtype: string; | 
|---|
|  | 3888 | aGraphItem: TGraphItem; | 
|---|
|  | 3889 | begin | 
|---|
|  | 3890 | for i := 0 to aListView.Items.Count - 1 do | 
|---|
|  | 3891 | begin | 
|---|
|  | 3892 | aGraphItem := TGraphItem(aListView.Items.Item[i].SubItems.Objects[3]);    //get file^ien match | 
|---|
|  | 3893 | typeitem := UpperCase(Pieces(aGraphItem.Values, '^', 1, 3)); | 
|---|
|  | 3894 | for j := 0 to aListBox.Items.Count - 1 do | 
|---|
|  | 3895 | begin | 
|---|
|  | 3896 | itemtype := UpperCase(Pieces(aListBox.Items[j], '^', 1, 3)); | 
|---|
|  | 3897 | if itemtype = typeitem then | 
|---|
|  | 3898 | begin | 
|---|
|  | 3899 | aListView.Items[i].Selected := true; | 
|---|
|  | 3900 | break; | 
|---|
|  | 3901 | end; | 
|---|
|  | 3902 | end | 
|---|
|  | 3903 | end; | 
|---|
|  | 3904 | end; | 
|---|
|  | 3905 |  | 
|---|
|  | 3906 | procedure TfrmGraphs.ViewsChange(aListView: TListView; aComboBox: TORComboBox; aSection: string); | 
|---|
|  | 3907 | var | 
|---|
|  | 3908 | Updated: boolean; | 
|---|
|  | 3909 | aProfile: string; | 
|---|
|  | 3910 | begin | 
|---|
|  | 3911 | timHintPause.Enabled := false; | 
|---|
|  | 3912 | InactivateHint; | 
|---|
|  | 3913 | if aComboBox.ItemIndex = -1 then exit;  // or clear graph  *************************** | 
|---|
|  | 3914 | if aComboBox.ItemIndex = 0 then  // <clear all selections> | 
|---|
|  | 3915 | begin | 
|---|
|  | 3916 | aComboBox.Text := ''; | 
|---|
|  | 3917 | aListView.ClearSelection; | 
|---|
|  | 3918 | if aSection = 'top' then | 
|---|
|  | 3919 | begin | 
|---|
|  | 3920 | FTHighTime := 0; | 
|---|
|  | 3921 | FTLowTime := BIG_NUMBER; | 
|---|
|  | 3922 | end | 
|---|
|  | 3923 | else | 
|---|
|  | 3924 | begin | 
|---|
|  | 3925 | FBHighTime := 0; | 
|---|
|  | 3926 | FBLowTime := BIG_NUMBER; | 
|---|
|  | 3927 | end; | 
|---|
|  | 3928 | DisplayData(aSection); | 
|---|
|  | 3929 | exit; | 
|---|
|  | 3930 | end; | 
|---|
|  | 3931 | if aComboBox.ItemIndex = 1 then  // <make selections> | 
|---|
|  | 3932 | begin | 
|---|
|  | 3933 | btnGraphSelectionsClick(self); | 
|---|
|  | 3934 | if aComboBox.ItemIndex = -1 then | 
|---|
|  | 3935 | aComboBox.Text := ''; | 
|---|
|  | 3936 | exit; | 
|---|
|  | 3937 | end;                            // view selected | 
|---|
|  | 3938 | aListView.ClearSelection; | 
|---|
|  | 3939 | Updated := false; | 
|---|
|  | 3940 | aProfile := aComboBox.Items[aComboBox.ItemIndex]; | 
|---|
|  | 3941 | if (length(Piece(aProfile, '^', 3)) = 0) or (length(Piece(aProfile, '^', 1)) = 0) then        //or <custom> | 
|---|
|  | 3942 | CheckProfile(aProfile, Updated); | 
|---|
|  | 3943 | aComboBox.Text := Piece(aProfile, '^', 2); | 
|---|
|  | 3944 | if Updated then | 
|---|
|  | 3945 | cboDateRangeChange(self); | 
|---|
|  | 3946 | if aSection = 'top' then | 
|---|
|  | 3947 | begin | 
|---|
|  | 3948 | AssignProfile(aProfile, 'top'); | 
|---|
|  | 3949 | if not FItemsSortedTop then | 
|---|
|  | 3950 | lvwItemsTopColumnClick(lvwItemsTop, lvwItemsTop.Column[0]); | 
|---|
|  | 3951 | if FGraphSetting.SortColumn > 0 then | 
|---|
|  | 3952 | lvwItemsTopColumnClick(lvwItemsTop, lvwItemsTop.Column[FGraphSetting.SortColumn]); | 
|---|
|  | 3953 | lvwItemsTopColumnClick(lvwItemsTop, lvwItemsTop.Column[2]); | 
|---|
|  | 3954 | lvwItemsTopColumnClick(lvwItemsTop, lvwItemsTop.Column[2]); | 
|---|
|  | 3955 | FItemsSortedTop := false; | 
|---|
|  | 3956 | end | 
|---|
|  | 3957 | else | 
|---|
|  | 3958 | begin | 
|---|
|  | 3959 | AssignProfile(aProfile, 'bottom'); | 
|---|
|  | 3960 | if not FItemsSortedBottom then | 
|---|
|  | 3961 | lvwItemsBottomColumnClick(lvwItemsBottom, lvwItemsBottom.Column[0]); | 
|---|
|  | 3962 | if FGraphSetting.SortColumn > 0 then | 
|---|
|  | 3963 | lvwItemsBottomColumnClick(lvwItemsBottom, lvwItemsBottom.Column[FGraphSetting.SortColumn]); | 
|---|
|  | 3964 | lvwItemsBottomColumnClick(lvwItemsBottom, lvwItemsBottom.Column[2]); | 
|---|
|  | 3965 | lvwItemsBottomColumnClick(lvwItemsBottom, lvwItemsBottom.Column[2]); | 
|---|
|  | 3966 | FItemsSortedBottom := false; | 
|---|
|  | 3967 | end; | 
|---|
|  | 3968 | aListView.ClearSelection; | 
|---|
|  | 3969 | AutoSelect(aListView); | 
|---|
|  | 3970 | DisplayData(aSection); | 
|---|
|  | 3971 | end; | 
|---|
|  | 3972 |  | 
|---|
|  | 3973 | procedure TfrmGraphs.cboViewsTopChange(Sender: TObject); | 
|---|
|  | 3974 | begin | 
|---|
|  | 3975 | ViewsChange(lvwItemsTop, cboViewsTop, 'top'); | 
|---|
|  | 3976 | end; | 
|---|
|  | 3977 |  | 
|---|
|  | 3978 | procedure TfrmGraphs.cboViewsBottomChange(Sender: TObject); | 
|---|
|  | 3979 | begin | 
|---|
|  | 3980 | ViewsChange(lvwItemsBottom, cboViewsBottom, 'bottom'); | 
|---|
|  | 3981 | end; | 
|---|
|  | 3982 |  | 
|---|
|  | 3983 | procedure TfrmGraphs.AssignProfile(aProfile, aSection: string); | 
|---|
|  | 3984 | var | 
|---|
|  | 3985 | profilename: string; | 
|---|
|  | 3986 | begin | 
|---|
|  | 3987 | profilename := Piece(aProfile, '^', 2); | 
|---|
|  | 3988 | aProfile := UpperCase(Piece(aProfile, '^', 3)); | 
|---|
|  | 3989 | if length(aProfile) = 0 then exit; | 
|---|
|  | 3990 | if aSection = 'top' then | 
|---|
|  | 3991 | SetProfile(aProfile, profilename, lvwItemsTop) | 
|---|
|  | 3992 | else | 
|---|
|  | 3993 | SetProfile(aProfile, profilename, lvwItemsBottom); | 
|---|
|  | 3994 | end; | 
|---|
|  | 3995 |  | 
|---|
|  | 3996 | procedure TfrmGraphs.SetProfile(aProfile, aName: string; aListView: TListView); | 
|---|
|  | 3997 | var | 
|---|
|  | 3998 | i, j: integer; | 
|---|
|  | 3999 | dcnm, itemdrugclass, itempart, itempart1, itempart2, itemnums: string; | 
|---|
|  | 4000 | itemstring, itemstring1, itemstringnums, profname: string; | 
|---|
|  | 4001 | aGraphItem: TGraphItem; | 
|---|
|  | 4002 | begin | 
|---|
|  | 4003 | if aProfile = '0' then | 
|---|
|  | 4004 | for i := 0 to aListView.Items.Count - 1 do | 
|---|
|  | 4005 | aListView.Items[i].SubItems[1] := '' | 
|---|
|  | 4006 | else | 
|---|
|  | 4007 | for i := 0 to aListView.Items.Count - 1 do | 
|---|
|  | 4008 | begin | 
|---|
|  | 4009 | profname := ''; | 
|---|
|  | 4010 | aGraphItem := TGraphItem(aListView.Items.Item[i].SubItems.Objects[3]);   //get file^ien match | 
|---|
|  | 4011 | itemstring := aGraphItem.Values; | 
|---|
|  | 4012 | itemstring1 := UpperCase(Piece(itemstring, '^', 1)); | 
|---|
|  | 4013 | itemdrugclass := Piece(itemstring, '^', 6); | 
|---|
|  | 4014 | itemstringnums := UpperCase(Pieces(itemstring, '^', 1, 2)); | 
|---|
|  | 4015 | for j := 1 to BIG_NUMBER do | 
|---|
|  | 4016 | begin | 
|---|
|  | 4017 | itempart := Piece(aProfile, '|', j); | 
|---|
|  | 4018 | if itempart = '' then break; | 
|---|
|  | 4019 | itempart1 := Piece(itempart, '~', 1); | 
|---|
|  | 4020 | itempart2 := Piece(itempart, '~', 2); | 
|---|
|  | 4021 | itemnums := itempart1 + '^' + itempart2; | 
|---|
|  | 4022 | if (itempart1 = '50.605') and (length(itemdrugclass) > 0) then | 
|---|
|  | 4023 | begin | 
|---|
|  | 4024 | dcnm := DCName(itempart2); | 
|---|
|  | 4025 | if dcnm = itemdrugclass then | 
|---|
|  | 4026 | begin | 
|---|
|  | 4027 | profname := aName; | 
|---|
|  | 4028 | break; | 
|---|
|  | 4029 | end; | 
|---|
|  | 4030 | end | 
|---|
|  | 4031 | else if itempart1 = '63' then | 
|---|
|  | 4032 | begin | 
|---|
|  | 4033 | if itemnums = Piece(itemstringnums, '.', 1) then | 
|---|
|  | 4034 | begin | 
|---|
|  | 4035 | profname := aName; | 
|---|
|  | 4036 | break; | 
|---|
|  | 4037 | end; | 
|---|
|  | 4038 | end | 
|---|
|  | 4039 | else | 
|---|
|  | 4040 | begin | 
|---|
|  | 4041 | if itemnums = itemstringnums then | 
|---|
|  | 4042 | begin | 
|---|
|  | 4043 | profname := aName; | 
|---|
|  | 4044 | break; | 
|---|
|  | 4045 | end; | 
|---|
|  | 4046 | end; | 
|---|
|  | 4047 | if (itempart1 = '0') and (itempart2 = itemstring1) then | 
|---|
|  | 4048 | begin | 
|---|
|  | 4049 | profname := aName; | 
|---|
|  | 4050 | break; | 
|---|
|  | 4051 | end | 
|---|
|  | 4052 | else if (itempart1 = '0') and (length(Piece(itempart2, ';', 2)) > 0) then    // subtypes | 
|---|
|  | 4053 | if copy(itempart2, 1, length(itemstring1)) = Piece(itempart2, ';', 1) then | 
|---|
|  | 4054 | if Piece(itempart2, ';', 2) = UpperCase(Piece(Piece(itemstring, '^', 2), ';', 2)) then | 
|---|
|  | 4055 | begin | 
|---|
|  | 4056 | profname := aName; | 
|---|
|  | 4057 | break; | 
|---|
|  | 4058 | end; | 
|---|
|  | 4059 | end; | 
|---|
|  | 4060 | aListView.Items[i].SubItems[1] := profname; | 
|---|
|  | 4061 | end; | 
|---|
|  | 4062 | end; | 
|---|
|  | 4063 |  | 
|---|
|  | 4064 | function TfrmGraphs.ExpandTax(profile: string): string; | 
|---|
|  | 4065 | var | 
|---|
|  | 4066 | i: integer; | 
|---|
|  | 4067 | itempart, itempart1, itempart2, newprofile: string; | 
|---|
|  | 4068 | taxonomies: TStrings; | 
|---|
|  | 4069 | expandedcodes: TStrings; | 
|---|
|  | 4070 | taxonomycodes: TStrings; | 
|---|
|  | 4071 | begin    //  '811.2~123~|0~63~|' or '55~12~|0~811.2~|0~63~|' | 
|---|
|  | 4072 | Result := profile; | 
|---|
|  | 4073 | if Pos('811.2~', profile) = 0 then exit; | 
|---|
|  | 4074 | taxonomies := TStringList.Create; | 
|---|
|  | 4075 | expandedcodes := TStringList.Create; | 
|---|
|  | 4076 | taxonomycodes := TStringList.Create; | 
|---|
|  | 4077 | newprofile := ''; | 
|---|
|  | 4078 | for i := 1 to BIG_NUMBER do | 
|---|
|  | 4079 | begin | 
|---|
|  | 4080 | itempart := Piece(profile, '|', i); | 
|---|
|  | 4081 | if length(itempart) = 0 then break; | 
|---|
|  | 4082 | if Pos('811.2~', itempart) = 0 then | 
|---|
|  | 4083 | newprofile := newprofile + '|' | 
|---|
|  | 4084 | else | 
|---|
|  | 4085 | taxonomies.Add(itempart); | 
|---|
|  | 4086 | end; | 
|---|
|  | 4087 | for i := 0 to taxonomies.Count -1 do | 
|---|
|  | 4088 | begin | 
|---|
|  | 4089 | itempart := taxonomies[i]; | 
|---|
|  | 4090 | if (Piece(itempart, '~', 1) = '0') and (Piece(itempart, '~', 2) = '811.2') then | 
|---|
|  | 4091 | begin | 
|---|
|  | 4092 | // this is Reminder Taxonomy <any> and would bring back a ton of codes | 
|---|
|  | 4093 | //FastAssign(rpcTaxonomy(true, nil), expandedcodes); | 
|---|
|  | 4094 | break; | 
|---|
|  | 4095 | end | 
|---|
|  | 4096 | else if Piece(itempart, '~', 1) = '811.2' then | 
|---|
|  | 4097 | taxonomycodes.Add(Piece(itempart, '~', 2)); | 
|---|
|  | 4098 | end; | 
|---|
|  | 4099 | if taxonomycodes.Count > 0 then | 
|---|
|  | 4100 | FastAssign(rpcTaxonomy(false, taxonomycodes), expandedcodes); | 
|---|
|  | 4101 | for i := 1 to expandedcodes.Count -1 do | 
|---|
|  | 4102 | begin | 
|---|
|  | 4103 | itempart := expandedcodes[i]; | 
|---|
|  | 4104 | itempart1 := Piece(itempart, ';', 1); | 
|---|
|  | 4105 | itempart2 := Piece(itempart, ';', 2); | 
|---|
|  | 4106 | newprofile := newprofile + itempart1 + '~' + itempart2 + '~|' | 
|---|
|  | 4107 | end; | 
|---|
|  | 4108 | Result := newprofile; | 
|---|
|  | 4109 | end; | 
|---|
|  | 4110 |  | 
|---|
|  | 4111 | procedure TfrmGraphs.CheckProfile(var aProfile: string; var Updated: boolean); | 
|---|
|  | 4112 | var | 
|---|
|  | 4113 | i, j: integer; | 
|---|
|  | 4114 | itempart, itempart1, itempart2, profile, profilename, profiletype, xprofile: string; | 
|---|
|  | 4115 | begin | 
|---|
|  | 4116 | profiletype := Piece(aProfile, '^', 1); | 
|---|
|  | 4117 | profilename := Piece(aProfile, '^', 2); | 
|---|
|  | 4118 | if profiletype = '-2' then | 
|---|
|  | 4119 | FastAssign(rpcGetGraphProfiles(UpperCase(profilename), '1', 0), lstTemp.Items) | 
|---|
|  | 4120 | else if profiletype = '-1' then | 
|---|
|  | 4121 | FastAssign(rpcGetGraphProfiles(UpperCase(profilename), '0', 0), lstTemp.Items); | 
|---|
|  | 4122 | if profiletype <> '' then | 
|---|
|  | 4123 | begin | 
|---|
|  | 4124 | for i := 0 to lstTemp.Items.Count - 1 do | 
|---|
|  | 4125 | aProfile := aProfile + lstTemp.Items[i]; | 
|---|
|  | 4126 | lstTemp.Items.Clear; | 
|---|
|  | 4127 | end; | 
|---|
|  | 4128 | Updated := false; | 
|---|
|  | 4129 | profile := UpperCase(Piece(aProfile, '^', 3)); | 
|---|
|  | 4130 | xprofile := ExpandTax(profile); | 
|---|
|  | 4131 | if xprofile <> profile then | 
|---|
|  | 4132 | begin                                         // taxonomies | 
|---|
|  | 4133 | profile := xprofile; | 
|---|
|  | 4134 | LoadDisplayCheck('45DX', Updated); | 
|---|
|  | 4135 | LoadDisplayCheck('45OP', Updated); | 
|---|
|  | 4136 | LoadDisplayCheck('9000010.07', Updated); | 
|---|
|  | 4137 | LoadDisplayCheck('9000010.18', Updated); | 
|---|
|  | 4138 | LoadDisplayCheck('9000011', Updated); | 
|---|
|  | 4139 | //LoadDisplayCheck('9999911', Updated);   // problems as durations not being used | 
|---|
|  | 4140 | end; | 
|---|
|  | 4141 | aProfile := Pieces(aProfile, '^', 1, 2) + '^' + profile; | 
|---|
|  | 4142 | for j := 1 to BIG_NUMBER do | 
|---|
|  | 4143 | begin | 
|---|
|  | 4144 | itempart := Piece(profile, '|', j); | 
|---|
|  | 4145 | if itempart = '' then break; | 
|---|
|  | 4146 | itempart1 := Piece(itempart, '~', 1); | 
|---|
|  | 4147 | itempart2 := Piece(itempart, '~', 2); | 
|---|
|  | 4148 | if itempart1 = '0' then                      // <any> type | 
|---|
|  | 4149 | LoadDisplayCheck(itempart2, Updated) | 
|---|
|  | 4150 | else if itempart1 = '50.605' then            // drug class | 
|---|
|  | 4151 | begin | 
|---|
|  | 4152 | LoadDisplayCheck('52', Updated); | 
|---|
|  | 4153 | LoadDisplayCheck('55', Updated); | 
|---|
|  | 4154 | //LoadDisplayCheck('55NVAE', Updated);     // nonvameds as events are not being used | 
|---|
|  | 4155 | LoadDisplayCheck('55NVA', Updated); | 
|---|
|  | 4156 | LoadDisplayCheck('53.79', Updated); | 
|---|
|  | 4157 | end | 
|---|
|  | 4158 | else if itempart1 <> '0' then                // all others | 
|---|
|  | 4159 | LoadDisplayCheck(itempart1, Updated); | 
|---|
|  | 4160 | end; | 
|---|
|  | 4161 | end; | 
|---|
|  | 4162 |  | 
|---|
|  | 4163 | procedure TfrmGraphs.LoadDisplayCheck(typeofitem: string; var Updated: boolean); | 
|---|
|  | 4164 | begin | 
|---|
|  | 4165 | if not TypeIsLoaded(typeofitem) then | 
|---|
|  | 4166 | begin | 
|---|
|  | 4167 | LoadType(typeofitem, '1'); | 
|---|
|  | 4168 | Updated := true; | 
|---|
|  | 4169 | end; | 
|---|
|  | 4170 | if not TypeIsDisplayed(typeofitem) then | 
|---|
|  | 4171 | begin | 
|---|
|  | 4172 | DisplayType(typeofitem, '1'); | 
|---|
|  | 4173 | Updated := true; | 
|---|
|  | 4174 | end; | 
|---|
|  | 4175 | end; | 
|---|
|  | 4176 |  | 
|---|
|  | 4177 | procedure TfrmGraphs.AutoSelect(aListView: TListView); | 
|---|
|  | 4178 | var | 
|---|
|  | 4179 | counter, i: integer; | 
|---|
|  | 4180 | begin | 
|---|
|  | 4181 | counter := 0; | 
|---|
|  | 4182 | for i := 0 to aListView.Items.Count - 1 do | 
|---|
|  | 4183 | begin | 
|---|
|  | 4184 | if length(aListView.Items[i].SubItems[1]) > 0 then | 
|---|
|  | 4185 | counter := counter + 1; | 
|---|
|  | 4186 | end; | 
|---|
|  | 4187 | if counter <= FGraphSetting.MaxSelect then | 
|---|
|  | 4188 | for i := 0 to aListView.Items.Count - 1 do | 
|---|
|  | 4189 | begin | 
|---|
|  | 4190 | if length(aListView.Items[i].SubItems[1]) > 0 then | 
|---|
|  | 4191 | aListView.Items[i].Selected := true; | 
|---|
|  | 4192 | end | 
|---|
|  | 4193 | else | 
|---|
|  | 4194 | begin | 
|---|
|  | 4195 | if aListView = lvwItemsTop then | 
|---|
|  | 4196 | lvwItemsTop.ClearSelection | 
|---|
|  | 4197 | else if aListView = lvwItemsBottom then | 
|---|
|  | 4198 | lvwItemsBottom.ClearSelection; | 
|---|
|  | 4199 | end; | 
|---|
|  | 4200 | if aListView = lvwItemsTop then | 
|---|
|  | 4201 | lvwItemsTopClick(self) | 
|---|
|  | 4202 | else if aListView = lvwItemsBottom then | 
|---|
|  | 4203 | lvwItemsBottomClick(self); | 
|---|
|  | 4204 | end; | 
|---|
|  | 4205 |  | 
|---|
|  | 4206 | procedure TfrmGraphs.LabData(aItemType, aItemName, aSection: string); | 
|---|
|  | 4207 | var | 
|---|
|  | 4208 | singlespec: boolean; | 
|---|
|  | 4209 | i, oldlisting: integer; | 
|---|
|  | 4210 | checkitem, checkstring, datastring, filename, itemnum, newitemname, newitemnum, newstring: string; | 
|---|
|  | 4211 | spec1, spec2, spec3, spec4: string; | 
|---|
|  | 4212 | aGraphItem: TGraphItem; | 
|---|
|  | 4213 | aListItem: TListItem; | 
|---|
|  | 4214 | begin | 
|---|
|  | 4215 | singlespec := true; | 
|---|
|  | 4216 | spec1 := ''; spec2 := ''; spec3 := ''; spec4 := ''; | 
|---|
|  | 4217 | lstSpec1.Items.Clear; lstSpec2.Items.Clear; lstSpec3.Items.Clear; lstSpec4.Items.Clear; | 
|---|
|  | 4218 | FastAssign(rpcGetItemData(aItemType, FMTimeStamp, Patient.DFN), lstScratchLab.Items); | 
|---|
|  | 4219 | for i := 0 to lstScratchLab.Items.Count - 1 do | 
|---|
|  | 4220 | begin | 
|---|
|  | 4221 | datastring := lstScratchLab.Items[i]; | 
|---|
|  | 4222 | checkstring := Pieces(datastring, '^', 1, 2) + '^' + Pieces(datastring, '^', 7, 8); | 
|---|
|  | 4223 | if length(spec1) = 0  then | 
|---|
|  | 4224 | begin | 
|---|
|  | 4225 | spec1 := checkstring; | 
|---|
|  | 4226 | lstSpec1.Items.Add(datastring) | 
|---|
|  | 4227 | end | 
|---|
|  | 4228 | else if spec1 = checkstring then | 
|---|
|  | 4229 | lstSpec1.Items.Add(datastring) | 
|---|
|  | 4230 | else if length(spec2) = 0 then | 
|---|
|  | 4231 | begin | 
|---|
|  | 4232 | singlespec := false; | 
|---|
|  | 4233 | spec2 := checkstring; | 
|---|
|  | 4234 | lstSpec2.Items.Add(datastring) | 
|---|
|  | 4235 | end | 
|---|
|  | 4236 | else if spec2 = checkstring then | 
|---|
|  | 4237 | lstSpec2.Items.Add(datastring) | 
|---|
|  | 4238 | else if length(spec3) = 0 then | 
|---|
|  | 4239 | begin | 
|---|
|  | 4240 | spec3 := checkstring; | 
|---|
|  | 4241 | lstSpec3.Items.Add(datastring) | 
|---|
|  | 4242 | end | 
|---|
|  | 4243 | else if spec3 = checkstring then | 
|---|
|  | 4244 | lstSpec3.Items.Add(datastring) | 
|---|
|  | 4245 | else | 
|---|
|  | 4246 | begin | 
|---|
|  | 4247 | spec4 := checkstring; | 
|---|
|  | 4248 | lstSpec4.Items.Add(datastring) | 
|---|
|  | 4249 | end; | 
|---|
|  | 4250 | end; | 
|---|
|  | 4251 | if singlespec then | 
|---|
|  | 4252 | lstData.Items.AddStrings(lstScratchLab.Items) | 
|---|
|  | 4253 | else | 
|---|
|  | 4254 | begin | 
|---|
|  | 4255 | lstMultiSpec.Items.Clear; | 
|---|
|  | 4256 | itemnum := Piece(aItemType, '^', 2); | 
|---|
|  | 4257 | if length(spec1) > 0 then | 
|---|
|  | 4258 | begin | 
|---|
|  | 4259 | newitemnum := itemnum + '.1'; | 
|---|
|  | 4260 | newitemname := aItemName + ' (' + LowerCase(Piece(spec1, '^', 4)) + ')'; | 
|---|
|  | 4261 | for i := 0 to lstItems.Items.Count - 1 do | 
|---|
|  | 4262 | if aItemType = Pieces(lstItems.Items[i], '^', 1, 2) then | 
|---|
|  | 4263 | begin | 
|---|
|  | 4264 | newstring := lstItems.Items[i]; | 
|---|
|  | 4265 | lstItems.Items.Delete(i); | 
|---|
|  | 4266 | break; | 
|---|
|  | 4267 | end; | 
|---|
|  | 4268 | for i := 0 to lstData.Items.Count - 1 do | 
|---|
|  | 4269 | if aItemType = Pieces(lstData.Items[i], '^', 1, 2) then | 
|---|
|  | 4270 | lstData.Items.Delete(i); | 
|---|
|  | 4271 | ResetSpec(lstSpec1, itemnum, newitemnum, newitemname, newstring); | 
|---|
|  | 4272 | end; | 
|---|
|  | 4273 | if length(spec2) > 0 then | 
|---|
|  | 4274 | begin | 
|---|
|  | 4275 | newitemnum := itemnum + '.2'; | 
|---|
|  | 4276 | newitemname := aItemName + ' (' + LowerCase(Piece(spec2, '^', 4)) + ')'; | 
|---|
|  | 4277 | ResetSpec(lstSpec2, itemnum, newitemnum, newitemname, newstring); | 
|---|
|  | 4278 | end; | 
|---|
|  | 4279 | if length(spec3) > 0 then | 
|---|
|  | 4280 | begin | 
|---|
|  | 4281 | newitemnum := itemnum + '.3'; | 
|---|
|  | 4282 | newitemname := aItemName + ' (' + LowerCase(Piece(spec3, '^', 4)) + ')'; | 
|---|
|  | 4283 | ResetSpec(lstSpec3, itemnum, newitemnum, newitemname, newstring); | 
|---|
|  | 4284 | end; | 
|---|
|  | 4285 | if length(spec4) > 0 then | 
|---|
|  | 4286 | begin | 
|---|
|  | 4287 | newitemnum := itemnum + '.4'; | 
|---|
|  | 4288 | newitemname := aItemName + ' (other)';     // not specific after 3 specimens (from same time) | 
|---|
|  | 4289 | ResetSpec(lstSpec4, itemnum, newitemnum, newitemname, newstring); | 
|---|
|  | 4290 | end; | 
|---|
|  | 4291 | oldlisting := 0; | 
|---|
|  | 4292 | lvwItemsTop.SortType := stNone;    // avoids out of bounds error | 
|---|
|  | 4293 | for i := 0 to lvwItemsTop.Items.Count - 1 do | 
|---|
|  | 4294 | begin | 
|---|
|  | 4295 | aGraphItem := TGraphItem(lvwItemsTop.Items.Item[i].SubItems.Objects[3]);   //get file^ien match | 
|---|
|  | 4296 | checkitem := Pieces(aGraphItem.Values, '^', 1, 2); | 
|---|
|  | 4297 | if aItemType = checkitem then | 
|---|
|  | 4298 | begin | 
|---|
|  | 4299 | oldlisting := i; | 
|---|
|  | 4300 | lvwItemsTop.Items.Delete(i); | 
|---|
|  | 4301 | break; | 
|---|
|  | 4302 | end; | 
|---|
|  | 4303 | end; | 
|---|
|  | 4304 | filename := FileNameX('63'); | 
|---|
|  | 4305 | for i := 0 to lstMultiSpec.Items.Count - 1 do | 
|---|
|  | 4306 | begin | 
|---|
|  | 4307 | lstCheck.Items.Add(UpperCase(Pieces(lstMultiSpec.Items[i], '^', 1, 2))); | 
|---|
|  | 4308 | if (FGraphSetting.FMStartDate = FM_START_DATE) | 
|---|
|  | 4309 | or DateRangeMultiItems(FGraphSetting.FMStartDate, FGraphSetting.FMStopDate, Piece(lstMultiSpec.Items[i], '^', 2)) then | 
|---|
|  | 4310 | begin | 
|---|
|  | 4311 | with lvwItemsTop do | 
|---|
|  | 4312 | aListItem := Items.Insert(oldlisting); | 
|---|
|  | 4313 | aListItem.Caption := Piece(lstMultiSpec.Items[i], '^', 4); | 
|---|
|  | 4314 | aListItem.SubItems.Add(filename); | 
|---|
|  | 4315 | aListItem.SubItems.Add(''); | 
|---|
|  | 4316 | aListItem.SubItems.Add(''); | 
|---|
|  | 4317 | aGraphItem := TGraphItem.Create; | 
|---|
|  | 4318 | aGraphItem.Values := lstMultiSpec.Items[i]; | 
|---|
|  | 4319 | aListItem.SubItems.AddObject('info object', aGraphItem); | 
|---|
|  | 4320 | if aSection = 'top' then lvwItemsTop.Items[oldlisting].Selected := true; | 
|---|
|  | 4321 | end; | 
|---|
|  | 4322 | end; | 
|---|
|  | 4323 | lvwItemsTop.SortType := stBoth; | 
|---|
|  | 4324 | oldlisting := 0; | 
|---|
|  | 4325 | lvwItemsBottom.SortType := stNone;    // avoids out of bounds error | 
|---|
|  | 4326 | for i := 0 to lvwItemsBottom.Items.Count - 1 do | 
|---|
|  | 4327 | begin | 
|---|
|  | 4328 | aGraphItem := TGraphItem(lvwItemsBottom.Items.Item[i].SubItems.Objects[3]);   //get file^ien match | 
|---|
|  | 4329 | checkitem := Pieces(aGraphItem.Values, '^', 1, 2); | 
|---|
|  | 4330 | if aItemType = checkitem then | 
|---|
|  | 4331 | begin | 
|---|
|  | 4332 | oldlisting := i; | 
|---|
|  | 4333 | lvwItemsBottom.Items.Delete(i); | 
|---|
|  | 4334 | break; | 
|---|
|  | 4335 | end; | 
|---|
|  | 4336 | end; | 
|---|
|  | 4337 | for i := 0 to lstMultiSpec.Items.Count - 1 do | 
|---|
|  | 4338 | begin | 
|---|
|  | 4339 | aListItem := lvwItemsBottom.Items.Insert(oldlisting); | 
|---|
|  | 4340 | aListItem.Caption := Piece(lstMultiSpec.Items[i], '^', 4); | 
|---|
|  | 4341 | aListItem.SubItems.Add(filename); | 
|---|
|  | 4342 | aListItem.SubItems.Add(''); | 
|---|
|  | 4343 | aListItem.SubItems.Add(''); | 
|---|
|  | 4344 | aGraphItem := TGraphItem.Create; | 
|---|
|  | 4345 | aGraphItem.Values := lstMultiSpec.Items[i]; | 
|---|
|  | 4346 | aListItem.SubItems.AddObject('info object', aGraphItem); | 
|---|
|  | 4347 | if aSection = 'bottom' then lvwItemsBottom.Items[oldlisting].Selected := true; | 
|---|
|  | 4348 | end; | 
|---|
|  | 4349 | lvwItemsBottom.SortType := stBoth; | 
|---|
|  | 4350 | end; | 
|---|
|  | 4351 | end; | 
|---|
|  | 4352 |  | 
|---|
|  | 4353 | procedure TfrmGraphs.RefUnits(aItem, aSpec: string; var low, high, units: string); | 
|---|
|  | 4354 | var | 
|---|
|  | 4355 | i: integer; | 
|---|
|  | 4356 | item2: double; | 
|---|
|  | 4357 | itemspec, specstring: string; | 
|---|
|  | 4358 | begin | 
|---|
|  | 4359 | item2 := strtofloatdef(aItem, -BIG_NUMBER); | 
|---|
|  | 4360 | if item2 <> -BIG_NUMBER then | 
|---|
|  | 4361 | begin | 
|---|
|  | 4362 | item2 := round(item2); | 
|---|
|  | 4363 | aItem := floattostr(item2); | 
|---|
|  | 4364 | end; | 
|---|
|  | 4365 | itemspec := aItem + '^' + aSpec; | 
|---|
|  | 4366 | for i := 0 to lstTestSpec.Items.Count - 1 do | 
|---|
|  | 4367 | if itemspec = Pieces(lstTestSpec.Items[i], '^', 1, 2) then | 
|---|
|  | 4368 | begin | 
|---|
|  | 4369 | specstring := lstTestSpec.Items[i]; | 
|---|
|  | 4370 | low :=   Piece(specstring, '^', 3); | 
|---|
|  | 4371 | high :=  Piece(specstring, '^', 4); | 
|---|
|  | 4372 | units := Piece(specstring, '^', 8); | 
|---|
|  | 4373 | if (Copy(low, 1, 3) = '$S(') then low  := SelectRef(low); | 
|---|
|  | 4374 | if (Copy(high, 1, 3) = '$S(') then high := SelectRef(high); | 
|---|
|  | 4375 | break; | 
|---|
|  | 4376 | end; | 
|---|
|  | 4377 | end; | 
|---|
|  | 4378 |  | 
|---|
|  | 4379 | function TfrmGraphs.SelectRef(aRef: string): string; | 
|---|
|  | 4380 | // check ref range for AGE and SEX variables in $S statement | 
|---|
|  | 4381 |  | 
|---|
|  | 4382 | procedure CheckRef(selection: string; var value: string; var ok: boolean); | 
|---|
|  | 4383 | var | 
|---|
|  | 4384 | age: integer; | 
|---|
|  | 4385 | part1, part2, part3: string; | 
|---|
|  | 4386 | begin | 
|---|
|  | 4387 | value := ''; | 
|---|
|  | 4388 | ok := false; | 
|---|
|  | 4389 | if pos('$S', selection) > 0 then exit; | 
|---|
|  | 4390 | if pos(':', selection) = 0 then exit; | 
|---|
|  | 4391 | part1 := Piece(selection, ':', 1); | 
|---|
|  | 4392 | part2 := Piece(selection, ':', 2); | 
|---|
|  | 4393 | part3 := Piece(selection, ':', 3); | 
|---|
|  | 4394 | if length(part1) = 0 then exit; | 
|---|
|  | 4395 | if length(part2) = 0 then exit; | 
|---|
|  | 4396 | if length(part3) <> 0 then exit; | 
|---|
|  | 4397 | ok := true; | 
|---|
|  | 4398 | value := part2; | 
|---|
|  | 4399 | if part1 = '1' then exit; | 
|---|
|  | 4400 | if copy(part1, 1, 4) = 'SEX=' then | 
|---|
|  | 4401 | begin | 
|---|
|  | 4402 | if (part1 = 'SEX="M"') and (Patient.Sex = 'M') then exit; | 
|---|
|  | 4403 | if (part1 = 'SEX="F"') and (Patient.Sex = 'F') then exit; //?? check for '= '> '<    ?? | 
|---|
|  | 4404 | value := ''; | 
|---|
|  | 4405 | end | 
|---|
|  | 4406 | else if copy(part1, 1, 3) = 'AGE' then | 
|---|
|  | 4407 | begin | 
|---|
|  | 4408 | part3 := copy(part1, 5, length(part1)); | 
|---|
|  | 4409 | age := strtointdef(part3, BIG_NUMBER); | 
|---|
|  | 4410 | if age <> BIG_NUMBER then | 
|---|
|  | 4411 | begin | 
|---|
|  | 4412 | part3 := copy(part1, 1, 4); | 
|---|
|  | 4413 | if (part3 = 'AGE>') and (Patient.Age > age) then exit; | 
|---|
|  | 4414 | if (part3 = 'AGE<') and (Patient.Age < age) then exit; | 
|---|
|  | 4415 | if (part3 = 'AGE=') and (Patient.Age = age) then exit; | 
|---|
|  | 4416 | end; | 
|---|
|  | 4417 | value := ''; | 
|---|
|  | 4418 | end | 
|---|
|  | 4419 | else | 
|---|
|  | 4420 | value:= ''; | 
|---|
|  | 4421 | end; | 
|---|
|  | 4422 |  | 
|---|
|  | 4423 | var | 
|---|
|  | 4424 | ok: boolean; | 
|---|
|  | 4425 | i: integer; | 
|---|
|  | 4426 | selection, selections: string; | 
|---|
|  | 4427 | begin | 
|---|
|  | 4428 | Result := ''; | 
|---|
|  | 4429 | if copy(aRef, length(aRef), 1) = ')' then | 
|---|
|  | 4430 | begin | 
|---|
|  | 4431 | selections := copy(aRef, 4, length(aRef) - 4); | 
|---|
|  | 4432 | for i := 1 to BIG_NUMBER do | 
|---|
|  | 4433 | begin | 
|---|
|  | 4434 | selection := Piece(selections, ',', i); | 
|---|
|  | 4435 | if selection = '' then break; | 
|---|
|  | 4436 | ok := true; | 
|---|
|  | 4437 | CheckRef(selection, Result, ok); | 
|---|
|  | 4438 | if not ok then break; | 
|---|
|  | 4439 | if length(Result) > 0 then break; | 
|---|
|  | 4440 | end; | 
|---|
|  | 4441 | end; | 
|---|
|  | 4442 | end; | 
|---|
|  | 4443 |  | 
|---|
|  | 4444 | procedure TfrmGraphs.ResetSpec(aListBox: TListBox; aItemNum, aNewItemNum, aNewItemName, aNewString: string); | 
|---|
|  | 4445 | var                                             //also add itemx | 
|---|
|  | 4446 | i: integer; | 
|---|
|  | 4447 | checkdate, newdate: double; | 
|---|
|  | 4448 | newestdate, newstring: string; | 
|---|
|  | 4449 | begin | 
|---|
|  | 4450 | lstTemp.Items.Clear; | 
|---|
|  | 4451 | newdate := 0; | 
|---|
|  | 4452 | for i := 0 to aListBox.Items.Count - 1 do | 
|---|
|  | 4453 | begin | 
|---|
|  | 4454 | newstring := aListBox.Items[i]; | 
|---|
|  | 4455 | newestdate := FMCorrectedDate(Piece(newstring, '^', 3)); | 
|---|
|  | 4456 | checkdate := strtofloatdef(newestdate, -BIG_NUMBER); | 
|---|
|  | 4457 | if checkdate > newdate then newdate := checkdate; | 
|---|
|  | 4458 | SetPiece(newstring, '^', 2, aNewItemNum); | 
|---|
|  | 4459 | lstTemp.Items.Add(newstring); | 
|---|
|  | 4460 | end; | 
|---|
|  | 4461 | lstData.Items.AddStrings(lstTemp.Items); | 
|---|
|  | 4462 | newestdate := floattostr(newdate); | 
|---|
|  | 4463 | SetPiece(aNewString, '^', 2, aNewItemNum); | 
|---|
|  | 4464 | SetPiece(aNewString, '^', 4, aNewItemName); | 
|---|
|  | 4465 | SetPiece(aNewString, '^', 6, newestdate); | 
|---|
|  | 4466 | lstItems.Items.Add(aNewString); | 
|---|
|  | 4467 | lstMultiSpec.Items.Add(aNewString); | 
|---|
|  | 4468 | end; | 
|---|
|  | 4469 |  | 
|---|
|  | 4470 | procedure TfrmGraphs.chartBaseClickLegend(Sender: TCustomChart; | 
|---|
|  | 4471 | Button: TMouseButton; Shift: TShiftState; X, Y: Integer); | 
|---|
|  | 4472 | var | 
|---|
|  | 4473 | seriestitle: string; | 
|---|
|  | 4474 | begin | 
|---|
|  | 4475 | FGraphClick := Sender; | 
|---|
|  | 4476 | chartDatelineTop.Tag := -1;   // indicates a legend click | 
|---|
|  | 4477 | if Button <> mbRight then | 
|---|
|  | 4478 | ItemDateRange(Sender) | 
|---|
|  | 4479 | else | 
|---|
|  | 4480 | begin | 
|---|
|  | 4481 | mnuPopGraphIsolate.Enabled := true; | 
|---|
|  | 4482 | if pnlTop.Tag = 1 then | 
|---|
|  | 4483 | begin | 
|---|
|  | 4484 | if chkItemsTop.Checked then | 
|---|
|  | 4485 | begin | 
|---|
|  | 4486 | seriestitle := Sender.SeriesTitleLegend(0); | 
|---|
|  | 4487 | scrlTop.Hint := 'Details - for ' + seriestitle; | 
|---|
|  | 4488 | scrlTop.Tag := 1; | 
|---|
|  | 4489 | mnuPopGraphIsolate.Caption := 'Move - ' + seriestitle + ' - from Top to Bottom'; | 
|---|
|  | 4490 | mnuPopGraphIsolate.Hint := seriestitle; | 
|---|
|  | 4491 | mnuPopGraphRemove.Enabled := true; | 
|---|
|  | 4492 | mnuPopGraphRemove.Caption := 'Remove - ' + seriestitle; | 
|---|
|  | 4493 | mnuPopGraphDetails.Caption := 'Details - ' + seriestitle; | 
|---|
|  | 4494 | end | 
|---|
|  | 4495 | else | 
|---|
|  | 4496 | begin | 
|---|
|  | 4497 | mnuPopGraphIsolate.Caption := 'Move all selections to bottom'; | 
|---|
|  | 4498 | mnuPopGraphRemove.Caption := 'Remove all selections from top'; | 
|---|
|  | 4499 | end; | 
|---|
|  | 4500 | end | 
|---|
|  | 4501 | else | 
|---|
|  | 4502 | begin | 
|---|
|  | 4503 | if chkItemsBottom.Checked then | 
|---|
|  | 4504 | begin | 
|---|
|  | 4505 | seriestitle := Sender.SeriesTitleLegend(0); | 
|---|
|  | 4506 | scrlTop.Hint := 'Details - for ' + seriestitle; | 
|---|
|  | 4507 | scrlTop.Tag := 1; | 
|---|
|  | 4508 | mnuPopGraphIsolate.Caption := 'Move - ' + seriestitle + ' - from Bottom to Top'; | 
|---|
|  | 4509 | mnuPopGraphIsolate.Hint := seriestitle; | 
|---|
|  | 4510 | mnuPopGraphRemove.Enabled := true; | 
|---|
|  | 4511 | mnuPopGraphRemove.Caption := 'Remove - ' + seriestitle; | 
|---|
|  | 4512 | mnuPopGraphDetails.Caption := 'Details - ' + seriestitle; | 
|---|
|  | 4513 | end | 
|---|
|  | 4514 | else | 
|---|
|  | 4515 | begin | 
|---|
|  | 4516 | mnuPopGraphIsolate.Caption := 'Move all selections to top'; | 
|---|
|  | 4517 | mnuPopGraphRemove.Caption := 'Remove all selections from bottom'; | 
|---|
|  | 4518 | end; | 
|---|
|  | 4519 | end; | 
|---|
|  | 4520 | end; | 
|---|
|  | 4521 | end; | 
|---|
|  | 4522 |  | 
|---|
|  | 4523 | function TfrmGraphs.BPValue(aDateTime: TDateTime): string; | 
|---|
|  | 4524 | var | 
|---|
|  | 4525 | i: integer; | 
|---|
|  | 4526 | fmdatetime: double; | 
|---|
|  | 4527 | datastring, datecheck, fmstring: string; | 
|---|
|  | 4528 | begin | 
|---|
|  | 4529 | Result := ''; | 
|---|
|  | 4530 | fmdatetime := datetimetofmdatetime(aDateTime); | 
|---|
|  | 4531 | fmstring := floattostr(fmdatetime); | 
|---|
|  | 4532 | for i := 0 to lstData.Items.Count - 1 do | 
|---|
|  | 4533 | begin | 
|---|
|  | 4534 | datastring := lstData.Items[i]; | 
|---|
|  | 4535 | if Pieces(datastring, '^', 1, 2) = '120.5^1' then   //********** get item # for bp instead of 1 | 
|---|
|  | 4536 | begin | 
|---|
|  | 4537 | datecheck := Piece(datastring, '^', 3); | 
|---|
|  | 4538 | if length(Piece(datecheck, '.', 2)) > 0 then | 
|---|
|  | 4539 | datecheck := Piece(datecheck, '.', 1) + '.' + copy(Piece(datecheck, '.', 2), 1, 4); | 
|---|
|  | 4540 | if fmstring = datecheck then | 
|---|
|  | 4541 | begin | 
|---|
|  | 4542 | Result := Piece(datastring, '^', 5); | 
|---|
|  | 4543 | break; | 
|---|
|  | 4544 | end; | 
|---|
|  | 4545 | end; | 
|---|
|  | 4546 | end; | 
|---|
|  | 4547 | end; | 
|---|
|  | 4548 |  | 
|---|
|  | 4549 | procedure TfrmGraphs.mnuMedsasganttClick(Sender: TObject); | 
|---|
|  | 4550 | begin | 
|---|
|  | 4551 | (Sender as TMenuItem).Checked := true; | 
|---|
|  | 4552 | lvwItemsTopClick(self); | 
|---|
|  | 4553 | lvwItemsBottomClick(self); | 
|---|
|  | 4554 | end; | 
|---|
|  | 4555 |  | 
|---|
|  | 4556 | procedure TfrmGraphs.mnuPopGraphResetClick(Sender: TObject); | 
|---|
|  | 4557 | begin | 
|---|
|  | 4558 | FFirstClick := true; | 
|---|
|  | 4559 | lstZoomHistory.Items.Clear; | 
|---|
|  | 4560 | FRetainZoom := false; | 
|---|
|  | 4561 | mnuPopGraphZoomBack.Enabled := false; | 
|---|
|  | 4562 | lvwItemsTopClick(self); | 
|---|
|  | 4563 | end; | 
|---|
|  | 4564 |  | 
|---|
|  | 4565 | procedure TfrmGraphs.serDatelineTopGetMarkText(Sender: TChartSeries; | 
|---|
|  | 4566 | ValueIndex: Integer; var MarkText: String); | 
|---|
|  | 4567 | var | 
|---|
|  | 4568 | cnt, i: integer; | 
|---|
|  | 4569 | checktag, nonstring: string; | 
|---|
|  | 4570 | begin    // ********* listing one series' values is ok but no multiple ??? | 
|---|
|  | 4571 | MarkText := Sender.Title; | 
|---|
|  | 4572 | if Copy(MarkText, 1, 4) = 'Ref ' then | 
|---|
|  | 4573 | MarkText := ''; | 
|---|
|  | 4574 | if Sender.Title = '(non-numeric)' then | 
|---|
|  | 4575 | begin | 
|---|
|  | 4576 | if Sender.Tag > 0 then | 
|---|
|  | 4577 | begin | 
|---|
|  | 4578 | checktag := inttostr(Sender.Tag); | 
|---|
|  | 4579 | cnt := -1; | 
|---|
|  | 4580 | for i := 0 to lstNonNumeric.Items.Count - 1 do | 
|---|
|  | 4581 | begin | 
|---|
|  | 4582 | nonstring := lstNonNumeric.Items[i]; | 
|---|
|  | 4583 | if  checktag = Piece(nonstring, '^', 3) then | 
|---|
|  | 4584 | begin | 
|---|
|  | 4585 | cnt := cnt + 1; | 
|---|
|  | 4586 | if  cnt = ValueIndex then | 
|---|
|  | 4587 | begin | 
|---|
|  | 4588 | MarkText := Piece(nonstring, '^', 2); | 
|---|
|  | 4589 | break; | 
|---|
|  | 4590 | end; | 
|---|
|  | 4591 | end; | 
|---|
|  | 4592 | end; | 
|---|
|  | 4593 | if MarkText = '(non-numeric)' then | 
|---|
|  | 4594 | beep; | 
|---|
|  | 4595 | end; | 
|---|
|  | 4596 | end; | 
|---|
|  | 4597 | end; | 
|---|
|  | 4598 |  | 
|---|
|  | 4599 | procedure TfrmGraphs.mnuPopGraphRemoveClick(Sender: TObject); | 
|---|
|  | 4600 | var | 
|---|
|  | 4601 | i, selnum: integer; | 
|---|
|  | 4602 | aSection, typeitem: string; | 
|---|
|  | 4603 | aComboBox: TORComboBox; | 
|---|
|  | 4604 | aListView: TListView; | 
|---|
|  | 4605 | begin | 
|---|
|  | 4606 | FFirstClick := true; | 
|---|
|  | 4607 | if pnlTop.Tag = 1 then | 
|---|
|  | 4608 | begin | 
|---|
|  | 4609 | aComboBox := cboViewsTop; | 
|---|
|  | 4610 | aListView := lvwItemsTop; | 
|---|
|  | 4611 | aSection := 'top'; | 
|---|
|  | 4612 | end | 
|---|
|  | 4613 | else | 
|---|
|  | 4614 | begin | 
|---|
|  | 4615 | aComboBox := cboViewsBottom; | 
|---|
|  | 4616 | aListView := lvwItemsBottom; | 
|---|
|  | 4617 | aSection := 'bottom'; | 
|---|
|  | 4618 | end; | 
|---|
|  | 4619 | aComboBox.ItemIndex := -1; | 
|---|
|  | 4620 | aComboBox.Text := ''; | 
|---|
|  | 4621 | if aListView.SelCount = 0 then exit; | 
|---|
|  | 4622 | if StripHotKey(mnuPopGraphRemove.Caption) = ('Remove all selections from ' + aSection) then | 
|---|
|  | 4623 | begin | 
|---|
|  | 4624 | with aListView do | 
|---|
|  | 4625 | for i := 0 to Items.Count - 1 do | 
|---|
|  | 4626 | if Items[i].Selected then | 
|---|
|  | 4627 | begin | 
|---|
|  | 4628 | Items[i].Selected := false; | 
|---|
|  | 4629 | end; | 
|---|
|  | 4630 | DisplayData('top'); | 
|---|
|  | 4631 | DisplayData('bottom'); | 
|---|
|  | 4632 | end | 
|---|
|  | 4633 | else | 
|---|
|  | 4634 | begin | 
|---|
|  | 4635 | ItemCheck(aListView, mnuPopGraphIsolate.Hint, selnum, typeitem); | 
|---|
|  | 4636 | if selnum = -1 then exit; | 
|---|
|  | 4637 | aListView.Items[selnum].Selected := false; | 
|---|
|  | 4638 | DisplayData('top'); | 
|---|
|  | 4639 | DisplayData('bottom'); | 
|---|
|  | 4640 | end; | 
|---|
|  | 4641 | mnuPopGraphRemove.Enabled := false; | 
|---|
|  | 4642 | mnuPopGraphResetClick(self); | 
|---|
|  | 4643 | end; | 
|---|
|  | 4644 |  | 
|---|
|  | 4645 | procedure TfrmGraphs.mnuPopGraphTodayClick(Sender: TObject); | 
|---|
|  | 4646 | begin | 
|---|
|  | 4647 | with dlgDate do | 
|---|
|  | 4648 | begin | 
|---|
|  | 4649 | FMDateTime := FMToday; | 
|---|
|  | 4650 | if Execute then FMToday := FMDateTime; | 
|---|
|  | 4651 | end; | 
|---|
|  | 4652 | end; | 
|---|
|  | 4653 |  | 
|---|
|  | 4654 | procedure TfrmGraphs.BaseResize(aScrollBox: TScrollBox); | 
|---|
|  | 4655 | var | 
|---|
|  | 4656 | displayheight, displaynum, i: integer; | 
|---|
|  | 4657 | begin | 
|---|
|  | 4658 | ChartOnZoom(chartDatelineTop); | 
|---|
|  | 4659 | with aScrollBox do | 
|---|
|  | 4660 | begin | 
|---|
|  | 4661 | if ControlCount < FGraphSetting.MaxGraphs then | 
|---|
|  | 4662 | displaynum := ControlCount | 
|---|
|  | 4663 | else | 
|---|
|  | 4664 | displaynum := FGraphSetting.MaxGraphs; | 
|---|
|  | 4665 | displayheight := FGraphSetting.MinGraphHeight; | 
|---|
|  | 4666 | if displaynum > 0 then | 
|---|
|  | 4667 | if (Height div displaynum) < FGraphSetting.MinGraphHeight then | 
|---|
|  | 4668 | displayheight := FGraphSetting.MinGraphHeight | 
|---|
|  | 4669 | else | 
|---|
|  | 4670 | displayheight := (Height div displaynum); | 
|---|
|  | 4671 | for i := 0 to aScrollBox.ControlCount - 1 do | 
|---|
|  | 4672 | Controls[i].height := displayheight; | 
|---|
|  | 4673 | end; | 
|---|
|  | 4674 | end; | 
|---|
|  | 4675 |  | 
|---|
|  | 4676 | procedure TfrmGraphs.pnlScrollTopBaseResize(Sender: TObject); | 
|---|
|  | 4677 | begin | 
|---|
|  | 4678 | ChartOnZoom(chartDatelineTop); | 
|---|
|  | 4679 | BaseResize(scrlTop); | 
|---|
|  | 4680 | BaseResize(scrlBottom); | 
|---|
|  | 4681 | end; | 
|---|
|  | 4682 |  | 
|---|
|  | 4683 | procedure TfrmGraphs.NextPointerStyle(aSeries: TChartSeries; aSerCnt: integer); | 
|---|
|  | 4684 | var | 
|---|
|  | 4685 | colors1, colors2, colors3, colors4, colors5, colors6: integer; | 
|---|
|  | 4686 | begin | 
|---|
|  | 4687 | colors1 := NUM_COLORS + 1; | 
|---|
|  | 4688 | colors2 := NUM_COLORS * 2 + 1; | 
|---|
|  | 4689 | colors3 := NUM_COLORS * 3 + 1; | 
|---|
|  | 4690 | colors4 := NUM_COLORS * 4 + 1; | 
|---|
|  | 4691 | colors5 := NUM_COLORS * 5 + 1; | 
|---|
|  | 4692 | colors6 := NUM_COLORS * 6 + 1; | 
|---|
|  | 4693 | if aSeries is TLineSeries then | 
|---|
|  | 4694 | begin | 
|---|
|  | 4695 | with (aSeries as TLineSeries) do | 
|---|
|  | 4696 | if aSerCnt < colors1 then | 
|---|
|  | 4697 | Pointer.Style := psCircle | 
|---|
|  | 4698 | else if aSerCnt < colors2 then | 
|---|
|  | 4699 | Pointer.Style := psTriangle | 
|---|
|  | 4700 | else if aSerCnt < colors3 then | 
|---|
|  | 4701 | Pointer.Style := psRectangle | 
|---|
|  | 4702 | else if aSerCnt < colors4 then | 
|---|
|  | 4703 | Pointer.Style := psStar | 
|---|
|  | 4704 | else if aSerCnt < colors5 then | 
|---|
|  | 4705 | Pointer.Style := psDownTriangle | 
|---|
|  | 4706 | else if aSerCnt < colors6 then | 
|---|
|  | 4707 | Pointer.Style := psCross | 
|---|
|  | 4708 | else | 
|---|
|  | 4709 | Pointer.Style := psDiagCross; | 
|---|
|  | 4710 | end | 
|---|
|  | 4711 | else if aSeries is TBarSeries then | 
|---|
|  | 4712 | begin | 
|---|
|  | 4713 | with (aSeries as TBarSeries) do | 
|---|
|  | 4714 | if aSerCnt < colors1 then | 
|---|
|  | 4715 | BarStyle := bsPyramid | 
|---|
|  | 4716 | else if aSerCnt < colors2 then | 
|---|
|  | 4717 | BarStyle := bsInvPyramid | 
|---|
|  | 4718 | else if aSerCnt < colors3 then | 
|---|
|  | 4719 | BarStyle := bsArrow | 
|---|
|  | 4720 | else if aSerCnt < colors4 then | 
|---|
|  | 4721 | BarStyle := bsEllipse | 
|---|
|  | 4722 | else | 
|---|
|  | 4723 | BarStyle := bsRectangle; | 
|---|
|  | 4724 | end | 
|---|
|  | 4725 | else if aSeries is TPointSeries then | 
|---|
|  | 4726 | begin | 
|---|
|  | 4727 | with (aSeries as TPointSeries) do | 
|---|
|  | 4728 | if aSerCnt < colors1 then | 
|---|
|  | 4729 | Pointer.Style := psRectangle | 
|---|
|  | 4730 | else if aSerCnt < colors2 then | 
|---|
|  | 4731 | Pointer.Style := psTriangle | 
|---|
|  | 4732 | else if aSerCnt < colors3 then | 
|---|
|  | 4733 | Pointer.Style := psCircle | 
|---|
|  | 4734 | else if aSerCnt < colors4 then | 
|---|
|  | 4735 | Pointer.Style := psStar | 
|---|
|  | 4736 | else if aSerCnt < colors5 then | 
|---|
|  | 4737 | Pointer.Style := psDownTriangle | 
|---|
|  | 4738 | else if aSerCnt < colors6 then | 
|---|
|  | 4739 | Pointer.Style := psCross | 
|---|
|  | 4740 | else | 
|---|
|  | 4741 | Pointer.Style := psDiagCross; | 
|---|
|  | 4742 | end; | 
|---|
|  | 4743 | end; | 
|---|
|  | 4744 |  | 
|---|
|  | 4745 | function TfrmGraphs.FMCorrectedDate(fmtime: string): string; | 
|---|
|  | 4746 | begin | 
|---|
|  | 4747 | if Copy(fmtime, 4, 4) = '0000' then Result := Copy(fmtime, 1, 3) + '0101' | 
|---|
|  | 4748 | else if Copy(fmtime, 6, 2) = '00' then Result := Copy(fmtime, 1, 5) + '01' | 
|---|
|  | 4749 | else Result := fmtime; | 
|---|
|  | 4750 | end; | 
|---|
|  | 4751 |  | 
|---|
|  | 4752 | procedure TfrmGraphs.FixedDates(var adatetime, adatetime1: TDateTime); | 
|---|
|  | 4753 | begin | 
|---|
|  | 4754 | if FGraphSetting.FMStartDate <> FM_START_DATE then | 
|---|
|  | 4755 | begin  // do not use when All Results | 
|---|
|  | 4756 | adatetime := FMDateTimeToDateTime(FGraphSetting.FMStopDate); | 
|---|
|  | 4757 | adatetime1 := FMDateTimeToDateTime(FGraphSetting.FMStartDate); | 
|---|
|  | 4758 | FGraphSetting.HighTime := adatetime; | 
|---|
|  | 4759 | FGraphSetting.LowTime := adatetime1; | 
|---|
|  | 4760 | FTHighTime := adatetime; | 
|---|
|  | 4761 | FTLowTime := adatetime1; | 
|---|
|  | 4762 | FBHighTime := adatetime; | 
|---|
|  | 4763 | FBLowTime := adatetime1; | 
|---|
|  | 4764 | end; | 
|---|
|  | 4765 | end; | 
|---|
|  | 4766 |  | 
|---|
|  | 4767 | procedure TfrmGraphs.HighLow(fmtime, fmtime1: string; aChart: TChart; var adatetime, adatetime1: TDateTime); | 
|---|
|  | 4768 | begin | 
|---|
|  | 4769 | adatetime1 := 0; | 
|---|
|  | 4770 | adatetime := FMToDateTime(fmtime); | 
|---|
|  | 4771 | if adatetime > FGraphSetting.HighTime then FGraphSetting.HighTime := adatetime; | 
|---|
|  | 4772 | if adatetime < FGraphSetting.LowTime then FGraphSetting.LowTime := adatetime; | 
|---|
|  | 4773 | if aChart = chartDatelineTop then | 
|---|
|  | 4774 | begin | 
|---|
|  | 4775 | if adatetime > FTHighTime then FTHighTime := adatetime; | 
|---|
|  | 4776 | if adatetime < FTLowTime then FTLowTime := adatetime; | 
|---|
|  | 4777 | end | 
|---|
|  | 4778 | else | 
|---|
|  | 4779 | begin | 
|---|
|  | 4780 | if adatetime > FBHighTime then FBHighTime := adatetime; | 
|---|
|  | 4781 | if adatetime < FBLowTime then FBLowTime := adatetime; | 
|---|
|  | 4782 | end; | 
|---|
|  | 4783 | if fmtime1 <> '' then | 
|---|
|  | 4784 | begin | 
|---|
|  | 4785 | adatetime1 := FMToDateTime(fmtime1); | 
|---|
|  | 4786 | if adatetime1 > FGraphSetting.HighTime then FGraphSetting.HighTime := adatetime1; | 
|---|
|  | 4787 | if adatetime1 < FGraphSetting.LowTime then FGraphSetting.LowTime := adatetime1; | 
|---|
|  | 4788 | if aChart = chartDatelineTop then | 
|---|
|  | 4789 | begin | 
|---|
|  | 4790 | if adatetime1 > FTHighTime then FTHighTime := adatetime1; | 
|---|
|  | 4791 | if adatetime1 < FTLowTime then FTLowTime := adatetime1; | 
|---|
|  | 4792 | end | 
|---|
|  | 4793 | else | 
|---|
|  | 4794 | begin | 
|---|
|  | 4795 | if adatetime1 > FBHighTime then FBHighTime := adatetime1; | 
|---|
|  | 4796 | if adatetime1 < FBLowTime then FBLowTime := adatetime1; | 
|---|
|  | 4797 | end; | 
|---|
|  | 4798 | end; | 
|---|
|  | 4799 | end; | 
|---|
|  | 4800 |  | 
|---|
|  | 4801 | procedure TfrmGraphs.HideGraphs(action: boolean); | 
|---|
|  | 4802 | begin | 
|---|
|  | 4803 | pnlTop.Color := chartDatelineTop.Color; | 
|---|
|  | 4804 | pnlBottom.Color := chartDatelineTop.Color; | 
|---|
|  | 4805 | if action then | 
|---|
|  | 4806 | begin | 
|---|
|  | 4807 | pnlScrollTopBase.Visible := false; | 
|---|
|  | 4808 | pnlScrollBottomBase.Visible := false; | 
|---|
|  | 4809 | end | 
|---|
|  | 4810 | else | 
|---|
|  | 4811 | begin | 
|---|
|  | 4812 | pnlScrollTopBase.Visible := true; | 
|---|
|  | 4813 | pnlScrollBottomBase.Visible := true; | 
|---|
|  | 4814 | chartDatelineTop.Refresh; | 
|---|
|  | 4815 | end; | 
|---|
|  | 4816 | end; | 
|---|
|  | 4817 |  | 
|---|
|  | 4818 | //**************************************************************************** | 
|---|
|  | 4819 |  | 
|---|
|  | 4820 | procedure TfrmGraphs.MakeLineSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt, aNonCnt: integer; multiline: boolean); | 
|---|
|  | 4821 |  | 
|---|
|  | 4822 | procedure BorderValue(var bordervalue: double; value: double); | 
|---|
|  | 4823 | begin | 
|---|
|  | 4824 | if FGraphSetting.FixedDateRange then | 
|---|
|  | 4825 | if bordervalue = -BIG_NUMBER then | 
|---|
|  | 4826 | bordervalue := value; | 
|---|
|  | 4827 | end; | 
|---|
|  | 4828 |  | 
|---|
|  | 4829 | var | 
|---|
|  | 4830 | estimate, firstcnt, i, noncnt: integer; | 
|---|
|  | 4831 | value, fixeddatevalue, hi, highestvalue, highvalue, lo, nonvalue: double; | 
|---|
|  | 4832 | checkdata, fmtime, itemvalue, valueD, valueM, valueS: string; | 
|---|
|  | 4833 | high, low, specimen: string; | 
|---|
|  | 4834 | adatetime, adatetime1: TDateTime; | 
|---|
|  | 4835 | afixeddate, afixeddate1: TDateTime; | 
|---|
|  | 4836 | ser1, ser2, ser3, serLow, serHigh: TLineSeries; | 
|---|
|  | 4837 | serBlank, serPoint: TPointSeries; | 
|---|
|  | 4838 | begin | 
|---|
|  | 4839 | fixeddatevalue := -BIG_NUMBER; | 
|---|
|  | 4840 | highestvalue := aChart.MaxYValue(aChart.LeftAxis); | 
|---|
|  | 4841 | if highestvalue < 1 then highestvalue := 1; | 
|---|
|  | 4842 | firstcnt := lstNonNumeric.Items.Count; | 
|---|
|  | 4843 | noncnt := firstcnt; | 
|---|
|  | 4844 | aChart.LeftAxis.LabelsFont.Color := aChart.BottomAxis.LabelsFont.Color; | 
|---|
|  | 4845 | aSerCnt := aSerCnt + 1; | 
|---|
|  | 4846 | ser1 := TLineSeries.Create(aChart); | 
|---|
|  | 4847 | ser2 := TLineSeries.Create(aChart); | 
|---|
|  | 4848 | ser3 := TLineSeries.Create(aChart); | 
|---|
|  | 4849 | serPoint := TPointSeries.Create(aChart); | 
|---|
|  | 4850 | serBlank := TPointSeries.Create(aChart); | 
|---|
|  | 4851 | serLow := TLineSeries.Create(aChart); | 
|---|
|  | 4852 | serHigh := TLineSeries.Create(aChart); | 
|---|
|  | 4853 | specimen := LowerCase(Piece(aTitle, '^', 4)); | 
|---|
|  | 4854 | low := Piece(aTitle, '^', 5);                   // collect non numeric - graph as events | 
|---|
|  | 4855 | high := Piece(aTitle, '^', 6); | 
|---|
|  | 4856 | lo := strtofloatdef(low, -BIG_NUMBER); | 
|---|
|  | 4857 | hi := strtofloatdef(high, -BIG_NUMBER); | 
|---|
|  | 4858 | serLow.Active := false; | 
|---|
|  | 4859 | serHigh.Active := false; | 
|---|
|  | 4860 | serPoint.Active := false; | 
|---|
|  | 4861 | serBlank.Active := false; | 
|---|
|  | 4862 | with ser1 do | 
|---|
|  | 4863 | begin | 
|---|
|  | 4864 | LinePen.Visible := FGraphSetting.Lines; | 
|---|
|  | 4865 | ParentChart := aChart; | 
|---|
|  | 4866 | Title := Piece(aTitle, '^', 3); | 
|---|
|  | 4867 | if (length(specimen) > 0) and (not ansicontainsstr(Title, specimen)) then | 
|---|
|  | 4868 | Title := Title + ' (' + specimen + ')'; | 
|---|
|  | 4869 | XValues.DateTime := True; | 
|---|
|  | 4870 | NextPointerStyle(ser1, aSerCnt); | 
|---|
|  | 4871 | Identifier := aFileType; | 
|---|
|  | 4872 | Pointer.Visible := true; | 
|---|
|  | 4873 | Pointer.InflateMargins := true; | 
|---|
|  | 4874 | GetData(aTitle); | 
|---|
|  | 4875 | ColorEachPoint := false; | 
|---|
|  | 4876 | SeriesColor := NextColor(aSerCnt); | 
|---|
|  | 4877 | Marks.BackColor := clInfoBk; | 
|---|
|  | 4878 | if ser1.Title = 'Blood Pressure' then | 
|---|
|  | 4879 | begin | 
|---|
|  | 4880 | ser1.Title := 'Blood Pressure'; | 
|---|
|  | 4881 | with ser2 do | 
|---|
|  | 4882 | begin | 
|---|
|  | 4883 | ParentChart := aChart; | 
|---|
|  | 4884 | Title := 'Blood Pressure'; | 
|---|
|  | 4885 | XValues.DateTime := true; | 
|---|
|  | 4886 | Pointer.Style := ser1.Pointer.Style; | 
|---|
|  | 4887 | ShowInLegend := false;    //**** | 
|---|
|  | 4888 | Identifier := aFileType; | 
|---|
|  | 4889 | Pointer.Visible := true; | 
|---|
|  | 4890 | Pointer.InflateMargins := true; | 
|---|
|  | 4891 | ColorEachPoint := false; | 
|---|
|  | 4892 | SeriesColor := ser1.SeriesColor; | 
|---|
|  | 4893 | Marks.BackColor := clInfoBk; | 
|---|
|  | 4894 | Active := true; | 
|---|
|  | 4895 | end; | 
|---|
|  | 4896 | with ser3 do | 
|---|
|  | 4897 | begin | 
|---|
|  | 4898 | ParentChart := aChart; | 
|---|
|  | 4899 | Title := 'Blood Pressure'; | 
|---|
|  | 4900 | XValues.DateTime := true; | 
|---|
|  | 4901 | Pointer.Style := ser1.Pointer.Style; | 
|---|
|  | 4902 | ShowInLegend := false;   //**** | 
|---|
|  | 4903 | Identifier := aFileType; | 
|---|
|  | 4904 | Pointer.Visible := true; | 
|---|
|  | 4905 | Pointer.InflateMargins := true; | 
|---|
|  | 4906 | ColorEachPoint := false; | 
|---|
|  | 4907 | SeriesColor := ser1.SeriesColor; | 
|---|
|  | 4908 | Marks.BackColor := clInfoBk; | 
|---|
|  | 4909 | Active := false; | 
|---|
|  | 4910 | end; | 
|---|
|  | 4911 | end | 
|---|
|  | 4912 | else | 
|---|
|  | 4913 | begin | 
|---|
|  | 4914 | ser2.Active := false; | 
|---|
|  | 4915 | ser3.Active := false; | 
|---|
|  | 4916 | end; | 
|---|
|  | 4917 | highvalue := 0; | 
|---|
|  | 4918 | with lstTemp do | 
|---|
|  | 4919 | for i:= 0 to Items.Count - 1 do | 
|---|
|  | 4920 | begin | 
|---|
|  | 4921 | checkdata := lstTemp.Items[i]; | 
|---|
|  | 4922 | fmtime := FMCorrectedDate(Piece(Items[i], '^', 3)); | 
|---|
|  | 4923 | if IsFMDateTime(fmtime) then | 
|---|
|  | 4924 | begin | 
|---|
|  | 4925 | HighLow(fmtime, '', aChart, adatetime, adatetime1); | 
|---|
|  | 4926 | itemvalue := Piece(Items[i], '^', 5); | 
|---|
|  | 4927 | itemvalue := trim(itemvalue); | 
|---|
|  | 4928 | itemvalue := StringReplace(itemvalue, ',', '', [rfReplaceAll]); | 
|---|
|  | 4929 | if ser1.Title = 'Blood Pressure' then | 
|---|
|  | 4930 | begin | 
|---|
|  | 4931 | valueS := Piece(itemvalue, '/', 1); | 
|---|
|  | 4932 | valueD := Piece(itemvalue, '/', 2); | 
|---|
|  | 4933 | valueM := Piece(itemvalue, '/', 3); | 
|---|
|  | 4934 | value := strtofloatdef(valueS, -BIG_NUMBER); | 
|---|
|  | 4935 | if value <> -BIG_NUMBER then | 
|---|
|  | 4936 | ser1.AddXY(adatetime, value, '', clTeeColor); | 
|---|
|  | 4937 | value := strtofloatdef(valueD, -BIG_NUMBER); | 
|---|
|  | 4938 | if value <> -BIG_NUMBER then | 
|---|
|  | 4939 | ser2.AddXY(adatetime, value, '', clTeeColor); | 
|---|
|  | 4940 | value := strtofloatdef(valueM, -BIG_NUMBER); | 
|---|
|  | 4941 | if value <> -BIG_NUMBER then | 
|---|
|  | 4942 | begin | 
|---|
|  | 4943 | ser3.AddXY(adatetime, value, '', clTeeColor); | 
|---|
|  | 4944 | ser3.Active := true; | 
|---|
|  | 4945 | end; | 
|---|
|  | 4946 | BorderValue(fixeddatevalue, 100); | 
|---|
|  | 4947 | end | 
|---|
|  | 4948 | else | 
|---|
|  | 4949 | begin | 
|---|
|  | 4950 | value := strtofloatdef(itemvalue, -BIG_NUMBER); | 
|---|
|  | 4951 | if value <> -BIG_NUMBER then | 
|---|
|  | 4952 | begin | 
|---|
|  | 4953 | if (btnChangeSettings.Tag = 1) and (hi <> -BIG_NUMBER) and (lo <> -BIG_NUMBER) then | 
|---|
|  | 4954 | begin | 
|---|
|  | 4955 | value := StdDev(value, hi, lo); | 
|---|
|  | 4956 | ser1.AddXY(adatetime, value, '', clTeeColor); | 
|---|
|  | 4957 | high := '2'; low := '-2'; | 
|---|
|  | 4958 | BorderValue(fixeddatevalue, 0); | 
|---|
|  | 4959 | //splGraphs.Tag := 1;   // show ref range | 
|---|
|  | 4960 | end | 
|---|
|  | 4961 | else if btnChangeSettings.Tag = 2 then | 
|---|
|  | 4962 | begin | 
|---|
|  | 4963 | value := InvVal(value); | 
|---|
|  | 4964 | ser1.AddXY(adatetime, value, '', clTeeColor); | 
|---|
|  | 4965 | high := '2'; low := '0'; | 
|---|
|  | 4966 | BorderValue(fixeddatevalue, 0); | 
|---|
|  | 4967 | splGraphs.Tag := 0;  // do not show ref range | 
|---|
|  | 4968 | end | 
|---|
|  | 4969 | else | 
|---|
|  | 4970 | begin | 
|---|
|  | 4971 | ser1.AddXY(adatetime, value, '', clTeeColor); | 
|---|
|  | 4972 | if value > highvalue then | 
|---|
|  | 4973 | highvalue := value; | 
|---|
|  | 4974 | BorderValue(fixeddatevalue, value); | 
|---|
|  | 4975 | end; | 
|---|
|  | 4976 | end | 
|---|
|  | 4977 | else | 
|---|
|  | 4978 | begin | 
|---|
|  | 4979 | noncnt := noncnt + 1; | 
|---|
|  | 4980 | lstNonNumeric.Items.Add(floattostr(adatetime) + '^' + | 
|---|
|  | 4981 | itemvalue + '^' + inttostr(aNonCnt + 1)); | 
|---|
|  | 4982 | end; | 
|---|
|  | 4983 | end; | 
|---|
|  | 4984 | end; | 
|---|
|  | 4985 | end; | 
|---|
|  | 4986 | if (length(low) > 0) and (splGraphs.Tag = 1) then | 
|---|
|  | 4987 | begin | 
|---|
|  | 4988 | with serLow do | 
|---|
|  | 4989 | begin | 
|---|
|  | 4990 | Active := true; | 
|---|
|  | 4991 | ParentChart := aChart; | 
|---|
|  | 4992 | XValues.DateTime := True; | 
|---|
|  | 4993 | Pointer.Visible := false; | 
|---|
|  | 4994 | Pointer.InflateMargins := true; | 
|---|
|  | 4995 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 4996 | ColorEachPoint := false; | 
|---|
|  | 4997 | Title := 'Ref Low ' + low; | 
|---|
|  | 4998 | Pointer.Style := psCircle; | 
|---|
|  | 4999 | SeriesColor := ser1.SeriesColor; //clBtnShadow ; //clTeeColor; | 
|---|
|  | 5000 | Marks.Visible := false; | 
|---|
|  | 5001 | LinePen.Visible := true; | 
|---|
|  | 5002 | LinePen.Width := 2; | 
|---|
|  | 5003 | LinePen.Style := psDash;  //does not show when width <> 1 | 
|---|
|  | 5004 | end; | 
|---|
|  | 5005 | value := strtofloatdef(low, -BIG_NUMBER); | 
|---|
|  | 5006 | if value <> -BIG_NUMBER then | 
|---|
|  | 5007 | begin | 
|---|
|  | 5008 | serLow.AddXY(IncDay(FGraphSetting.LowTime, -1), value, '', clTeeColor); | 
|---|
|  | 5009 | serLow.AddXY(IncDay(FGraphSetting.HighTime, 1), value, '', clTeeColor); | 
|---|
|  | 5010 | BorderValue(fixeddatevalue, value); | 
|---|
|  | 5011 | end; | 
|---|
|  | 5012 | end; | 
|---|
|  | 5013 | if (length(high) > 0) and (splGraphs.Tag = 1) then | 
|---|
|  | 5014 | begin | 
|---|
|  | 5015 | with serHigh do | 
|---|
|  | 5016 | begin | 
|---|
|  | 5017 | Active := true; | 
|---|
|  | 5018 | ParentChart := aChart; | 
|---|
|  | 5019 | XValues.DateTime := True; | 
|---|
|  | 5020 | Pointer.Visible := false; | 
|---|
|  | 5021 | Pointer.InflateMargins := true; | 
|---|
|  | 5022 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5023 | ColorEachPoint := false; | 
|---|
|  | 5024 | Title := 'Ref High ' + high; | 
|---|
|  | 5025 | Pointer.Style := psCircle; | 
|---|
|  | 5026 | SeriesColor := ser1.SeriesColor; // clBtnShadow; //clTeeColor; | 
|---|
|  | 5027 | Marks.Visible := false; | 
|---|
|  | 5028 | LinePen.Visible := true; | 
|---|
|  | 5029 | LinePen.Width := 2; | 
|---|
|  | 5030 | LinePen.Style := psDash;  //does not show when width <> 1 | 
|---|
|  | 5031 | end; | 
|---|
|  | 5032 | value := strtofloatdef(high, -BIG_NUMBER); | 
|---|
|  | 5033 | if value <> -BIG_NUMBER then | 
|---|
|  | 5034 | begin | 
|---|
|  | 5035 | serHigh.AddXY(IncDay(FGraphSetting.LowTime, -1), value, '', clTeeColor); | 
|---|
|  | 5036 | serHigh.AddXY(IncDay(FGraphSetting.HighTime, 1), value, '', clTeeColor); | 
|---|
|  | 5037 | BorderValue(fixeddatevalue, value); | 
|---|
|  | 5038 | end; | 
|---|
|  | 5039 | end; | 
|---|
|  | 5040 | splGraphs.Tag := 0; | 
|---|
|  | 5041 | if noncnt > firstcnt then | 
|---|
|  | 5042 | begin | 
|---|
|  | 5043 | if aChart.Height < 10 then estimate := pnlMain.Height div 2 | 
|---|
|  | 5044 | else estimate := aChart.Height; | 
|---|
|  | 5045 | aNonCnt := aNonCnt + 1;  // use nonnumeric count to offset position | 
|---|
|  | 5046 | nonvalue := (aNonCnt * (10 / (estimate + 1)) * highestvalue); | 
|---|
|  | 5047 | with serBlank do | 
|---|
|  | 5048 | begin | 
|---|
|  | 5049 | Active := true; | 
|---|
|  | 5050 | ParentChart := aChart; | 
|---|
|  | 5051 | XValues.DateTime := True; | 
|---|
|  | 5052 | Pointer.Visible := true; | 
|---|
|  | 5053 | Pointer.InflateMargins := true; | 
|---|
|  | 5054 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5055 | ColorEachPoint := false; | 
|---|
|  | 5056 | Title := ''; | 
|---|
|  | 5057 | Pointer.Style := psSmallDot; | 
|---|
|  | 5058 | SeriesColor := aChart.Color; | 
|---|
|  | 5059 | Marks.Visible := false; | 
|---|
|  | 5060 | ShowInLegend := false; | 
|---|
|  | 5061 | end; | 
|---|
|  | 5062 | with serPoint do | 
|---|
|  | 5063 | begin | 
|---|
|  | 5064 | Active := true; | 
|---|
|  | 5065 | ParentChart := aChart; | 
|---|
|  | 5066 | XValues.DateTime := True; | 
|---|
|  | 5067 | Pointer.Visible := true; | 
|---|
|  | 5068 | Pointer.InflateMargins := true; | 
|---|
|  | 5069 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5070 | ColorEachPoint := false; | 
|---|
|  | 5071 | Title := '(non-numeric)'; | 
|---|
|  | 5072 | Hint := aTitle; | 
|---|
|  | 5073 | Tag := aNonCnt; | 
|---|
|  | 5074 | Pointer.Style := ser1.Pointer.Style; | 
|---|
|  | 5075 | SeriesColor := ser1.SeriesColor; | 
|---|
|  | 5076 | Marks.BackColor := clInfoBk; | 
|---|
|  | 5077 | ShowInLegend := false; | 
|---|
|  | 5078 | end; | 
|---|
|  | 5079 | for i := 0 to lstNonNumeric.Items.Count - 1 do | 
|---|
|  | 5080 | begin | 
|---|
|  | 5081 | if Piece(lstNonNumeric.Items[i], '^',3) = inttostr(aNonCnt) then | 
|---|
|  | 5082 | if highvalue = 0 then | 
|---|
|  | 5083 | begin | 
|---|
|  | 5084 | adatetime := strtofloatdef(Piece(lstNonNumeric.Items[i], '^', 1), -BIG_NUMBER); | 
|---|
|  | 5085 | if adatetime <> -BIG_NUMBER then | 
|---|
|  | 5086 | begin | 
|---|
|  | 5087 | serBlank.Pointer.Pen.Visible := false; | 
|---|
|  | 5088 | serBlank.AddXY(adatetime, 1, '', pnlScrollTopBase.Color); | 
|---|
|  | 5089 | break; | 
|---|
|  | 5090 | end; | 
|---|
|  | 5091 | end; | 
|---|
|  | 5092 | end; | 
|---|
|  | 5093 | for i := 0 to lstNonNumeric.Items.Count - 1 do | 
|---|
|  | 5094 | if Piece(lstNonNumeric.Items[i], '^',3) = inttostr(aNonCnt) then | 
|---|
|  | 5095 | begin | 
|---|
|  | 5096 | adatetime := strtofloatdef(Piece(lstNonNumeric.Items[i], '^', 1), -BIG_NUMBER); | 
|---|
|  | 5097 | if adatetime <> -BIG_NUMBER then | 
|---|
|  | 5098 | begin | 
|---|
|  | 5099 | serPoint.Pointer.Pen.Visible := true; | 
|---|
|  | 5100 | serPoint.AddXY(adatetime, nonvalue, '', ser1.SeriesColor); | 
|---|
|  | 5101 | BorderValue(fixeddatevalue, nonvalue); | 
|---|
|  | 5102 | end; | 
|---|
|  | 5103 | end; | 
|---|
|  | 5104 | if highvalue = 0 then | 
|---|
|  | 5105 | begin | 
|---|
|  | 5106 | aChart.LeftAxis.LabelsFont.Color := pnlScrollTopBase.Color; | 
|---|
|  | 5107 | FNonNumerics := true; | 
|---|
|  | 5108 | end; | 
|---|
|  | 5109 | end; | 
|---|
|  | 5110 | if ser1.Title = 'Pain' then | 
|---|
|  | 5111 | begin | 
|---|
|  | 5112 | if not serBlank.Active then | 
|---|
|  | 5113 | with serBlank do | 
|---|
|  | 5114 | begin | 
|---|
|  | 5115 | Active := true; | 
|---|
|  | 5116 | ParentChart := aChart; | 
|---|
|  | 5117 | XValues.DateTime := True; | 
|---|
|  | 5118 | Pointer.Visible := true; | 
|---|
|  | 5119 | Pointer.InflateMargins := true; | 
|---|
|  | 5120 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5121 | ColorEachPoint := false; | 
|---|
|  | 5122 | Title := ''; | 
|---|
|  | 5123 | Pointer.Style := psSmallDot; | 
|---|
|  | 5124 | SeriesColor := aChart.Color; | 
|---|
|  | 5125 | Marks.Visible := false; | 
|---|
|  | 5126 | ShowInLegend := false; | 
|---|
|  | 5127 | end; | 
|---|
|  | 5128 | serBlank.Pointer.Pen.Visible := false; | 
|---|
|  | 5129 | serBlank.AddXY(IncDay(FGraphSetting.LowTime, -1), 0, '', pnlScrollTopBase.Color); | 
|---|
|  | 5130 | serBlank.AddXY(IncDay(FGraphSetting.LowTime, -1), 10, '', pnlScrollTopBase.Color); | 
|---|
|  | 5131 | end; | 
|---|
|  | 5132 | if multiline then | 
|---|
|  | 5133 | begin | 
|---|
|  | 5134 | // do nothing for now | 
|---|
|  | 5135 | end; | 
|---|
|  | 5136 | if fixeddatevalue <> -BIG_NUMBER then | 
|---|
|  | 5137 | begin | 
|---|
|  | 5138 | if not serBlank.Active then | 
|---|
|  | 5139 | with serBlank do | 
|---|
|  | 5140 | begin | 
|---|
|  | 5141 | Active := true; | 
|---|
|  | 5142 | ParentChart := aChart; | 
|---|
|  | 5143 | XValues.DateTime := True; | 
|---|
|  | 5144 | Pointer.Visible := true; | 
|---|
|  | 5145 | Pointer.InflateMargins := true; | 
|---|
|  | 5146 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5147 | ColorEachPoint := false; | 
|---|
|  | 5148 | Title := ''; | 
|---|
|  | 5149 | Pointer.Style := psSmallDot; | 
|---|
|  | 5150 | SeriesColor := aChart.Color; | 
|---|
|  | 5151 | Marks.Visible := false; | 
|---|
|  | 5152 | ShowInLegend := false; | 
|---|
|  | 5153 | end; | 
|---|
|  | 5154 | FixedDates(afixeddate, afixeddate1); | 
|---|
|  | 5155 | serBlank.Pointer.Pen.Visible := false; | 
|---|
|  | 5156 | serBlank.AddXY(afixeddate, fixeddatevalue, '', aChart.Color); | 
|---|
|  | 5157 | serBlank.AddXY(afixeddate1, fixeddatevalue, '', aChart.Color); | 
|---|
|  | 5158 | end; | 
|---|
|  | 5159 | GetHorizAxis.ExactDateTime := True; | 
|---|
|  | 5160 | GetHorizAxis.Increment := DateTimeStep[dtOneMinute]; | 
|---|
|  | 5161 | end; | 
|---|
|  | 5162 | end; | 
|---|
|  | 5163 |  | 
|---|
|  | 5164 | procedure TfrmGraphs.MakePointSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 5165 | var | 
|---|
|  | 5166 | i: integer; | 
|---|
|  | 5167 | value: double; | 
|---|
|  | 5168 | fmtime: string; | 
|---|
|  | 5169 | adatetime, adatetime1: TDateTime; | 
|---|
|  | 5170 | ser1: TPointSeries; | 
|---|
|  | 5171 | begin | 
|---|
|  | 5172 | aSerCnt := aSerCnt + 1; | 
|---|
|  | 5173 | ser1 := TPointSeries.Create(aChart); | 
|---|
|  | 5174 | with ser1 do | 
|---|
|  | 5175 | begin | 
|---|
|  | 5176 | ParentChart := aChart; | 
|---|
|  | 5177 | Title := Piece(aTitle, '^', 3); | 
|---|
|  | 5178 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5179 | XValues.DateTime := True; | 
|---|
|  | 5180 | NextPointerStyle(ser1, aSerCnt); | 
|---|
|  | 5181 | Pointer.VertSize := 10; | 
|---|
|  | 5182 | Pointer.HorizSize := 2; | 
|---|
|  | 5183 | Identifier := aFileType; | 
|---|
|  | 5184 | Pointer.Visible := true; | 
|---|
|  | 5185 | GetData(aTitle); | 
|---|
|  | 5186 | ColorEachPoint := false; | 
|---|
|  | 5187 | SeriesColor := NextColor(aSerCnt); | 
|---|
|  | 5188 | Marks.BackColor := clInfoBk; | 
|---|
|  | 5189 | with lstTemp do | 
|---|
|  | 5190 | for i := 0 to lstTemp.Items.Count - 1 do | 
|---|
|  | 5191 | begin | 
|---|
|  | 5192 | fmtime := FMCorrectedDate(Piece(Items[i], '^', 3)); | 
|---|
|  | 5193 | if IsFMDateTime(fmtime) then | 
|---|
|  | 5194 | begin | 
|---|
|  | 5195 | HighLow(fmtime, '', aChart, adatetime, adatetime1); | 
|---|
|  | 5196 | value := strtofloatdef(Piece(Items[i], '^', 5), -BIG_NUMBER); | 
|---|
|  | 5197 | if value = -BIG_NUMBER then | 
|---|
|  | 5198 | begin | 
|---|
|  | 5199 | value := aSerCnt; | 
|---|
|  | 5200 | TempCheck(Pieces(Items[i], '^', 1, 2), value); | 
|---|
|  | 5201 | end; | 
|---|
|  | 5202 | ser1.AddXY(adatetime, value, '', clTeeColor); | 
|---|
|  | 5203 | end; | 
|---|
|  | 5204 | end; | 
|---|
|  | 5205 | GetHorizAxis.ExactDateTime := True; | 
|---|
|  | 5206 | GetHorizAxis.Increment := DateTimeStep[dtOneMinute]; | 
|---|
|  | 5207 | end; | 
|---|
|  | 5208 | end; | 
|---|
|  | 5209 |  | 
|---|
|  | 5210 | procedure TfrmGraphs.MakeBarSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 5211 | var | 
|---|
|  | 5212 | i: integer; | 
|---|
|  | 5213 | value: double; | 
|---|
|  | 5214 | fmtime: string; | 
|---|
|  | 5215 | adatetime, adatetime1: TDateTime; | 
|---|
|  | 5216 | afixeddate, afixeddate1: TDateTime; | 
|---|
|  | 5217 | ser1: TBarSeries; | 
|---|
|  | 5218 | serBlank: TPointSeries; | 
|---|
|  | 5219 | begin | 
|---|
|  | 5220 | aSerCnt := aSerCnt + 1; | 
|---|
|  | 5221 | ser1 := TBarSeries.Create(aChart); | 
|---|
|  | 5222 | serBlank := TPointSeries.Create(aChart); | 
|---|
|  | 5223 | with serBlank do | 
|---|
|  | 5224 | begin | 
|---|
|  | 5225 | Active := true; | 
|---|
|  | 5226 | ParentChart := aChart; | 
|---|
|  | 5227 | XValues.DateTime := True; | 
|---|
|  | 5228 | Pointer.Visible := true; | 
|---|
|  | 5229 | Pointer.InflateMargins := false; | 
|---|
|  | 5230 | ColorEachPoint := false; | 
|---|
|  | 5231 | Title := ''; | 
|---|
|  | 5232 | Pointer.Style := psSmallDot; | 
|---|
|  | 5233 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5234 | SeriesColor := aChart.Color; | 
|---|
|  | 5235 | Marks.BackColor := clInfoBk; | 
|---|
|  | 5236 | ShowInLegend := false; | 
|---|
|  | 5237 | end; | 
|---|
|  | 5238 | with ser1 do | 
|---|
|  | 5239 | begin | 
|---|
|  | 5240 | ParentChart := aChart; | 
|---|
|  | 5241 | Title := Piece(aTitle, '^', 3); | 
|---|
|  | 5242 | XValues.DateTime := True; | 
|---|
|  | 5243 | YOrigin := 0; | 
|---|
|  | 5244 | Identifier := aFileType; | 
|---|
|  | 5245 | Marks.Visible := false; | 
|---|
|  | 5246 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5247 | CustomBarWidth := 7; | 
|---|
|  | 5248 | Marks.Style := smsLabel; | 
|---|
|  | 5249 | GetData(aTitle); | 
|---|
|  | 5250 | ColorEachPoint := false; | 
|---|
|  | 5251 | SeriesColor := NextColor(aSerCnt); | 
|---|
|  | 5252 | Marks.BackColor := clInfoBk; | 
|---|
|  | 5253 | NextPointerStyle(ser1, aSerCnt); | 
|---|
|  | 5254 | with lstTemp do | 
|---|
|  | 5255 | for i:= 0 to Items.Count - 1 do | 
|---|
|  | 5256 | begin | 
|---|
|  | 5257 | fmtime := FMCorrectedDate(Piece(Items[i], '^', 3)); | 
|---|
|  | 5258 | if IsFMDateTime(fmtime) then | 
|---|
|  | 5259 | begin | 
|---|
|  | 5260 | HighLow(fmtime, '', aChart, adatetime, adatetime1); | 
|---|
|  | 5261 | value := 25 - (aSerCnt mod NUM_COLORS); | 
|---|
|  | 5262 | if FPrevEvent = copy(fmtime, 1, 10) then | 
|---|
|  | 5263 | if copy((FPrevEvent + '00'), 1, 12) = copy(fmtime, 1, 12) then  // same time occurrence | 
|---|
|  | 5264 | begin | 
|---|
|  | 5265 | pnlInfo.Caption := TXT_WARNING_SAME_TIME; | 
|---|
|  | 5266 | pnlInfo.Color := COLOR_WARNING; | 
|---|
|  | 5267 | pnlInfo.Visible := true; | 
|---|
|  | 5268 | pnlHeader.Visible := true; | 
|---|
|  | 5269 | FWarning := true; | 
|---|
|  | 5270 | end; | 
|---|
|  | 5271 | if value <> -BIG_NUMBER then | 
|---|
|  | 5272 | ser1.AddXY(adatetime, value, '', clTeeColor); | 
|---|
|  | 5273 | FPrevEvent := copy(fmtime, 1, 10); | 
|---|
|  | 5274 | if i = 0 then | 
|---|
|  | 5275 | begin | 
|---|
|  | 5276 | serBlank.Pointer.Pen.Visible := false; | 
|---|
|  | 5277 | serBlank.AddXY(adatetime, 100, '', aChart.Color); | 
|---|
|  | 5278 | if FGraphSetting.FixedDateRange then | 
|---|
|  | 5279 | begin | 
|---|
|  | 5280 | FixedDates(afixeddate, afixeddate1); | 
|---|
|  | 5281 | serBlank.AddXY(afixeddate, 100, '', aChart.Color); | 
|---|
|  | 5282 | serBlank.AddXY(afixeddate1, 100, '', aChart.Color); | 
|---|
|  | 5283 | end; | 
|---|
|  | 5284 | end; | 
|---|
|  | 5285 | end; | 
|---|
|  | 5286 | end; | 
|---|
|  | 5287 | GetHorizAxis.ExactDateTime := True; | 
|---|
|  | 5288 | GetHorizAxis.Increment := DateTimeStep[dtOneMinute]; | 
|---|
|  | 5289 | end; | 
|---|
|  | 5290 | end; | 
|---|
|  | 5291 |  | 
|---|
|  | 5292 | procedure TfrmGraphs.MakeManyGanttSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 5293 | var | 
|---|
|  | 5294 | i, value: integer; | 
|---|
|  | 5295 | fmtime, fmtime1: string; | 
|---|
|  | 5296 | adatetime, adatetime1: TDateTime; | 
|---|
|  | 5297 | afixeddate, afixeddate1: TDateTime; | 
|---|
|  | 5298 | gantt: TGanttSeries; | 
|---|
|  | 5299 | serBlank: TPointSeries; | 
|---|
|  | 5300 | begin | 
|---|
|  | 5301 | aSerCnt := aSerCnt + 1; | 
|---|
|  | 5302 | gantt := TGanttSeries.Create(aChart); | 
|---|
|  | 5303 | serBlank := TPointSeries.Create(aChart); | 
|---|
|  | 5304 | with serBlank do | 
|---|
|  | 5305 | begin | 
|---|
|  | 5306 | Active := true; | 
|---|
|  | 5307 | ParentChart := aChart; | 
|---|
|  | 5308 | XValues.DateTime := True; | 
|---|
|  | 5309 | Pointer.Visible := true; | 
|---|
|  | 5310 | Pointer.InflateMargins := false; | 
|---|
|  | 5311 | ColorEachPoint := false; | 
|---|
|  | 5312 | Title := ''; | 
|---|
|  | 5313 | Pointer.Style := psSmallDot; | 
|---|
|  | 5314 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5315 | SeriesColor := aChart.Color; | 
|---|
|  | 5316 | Marks.BackColor := clInfoBk; | 
|---|
|  | 5317 | ShowInLegend := false; | 
|---|
|  | 5318 | end; | 
|---|
|  | 5319 | with gantt do | 
|---|
|  | 5320 | begin | 
|---|
|  | 5321 | ParentChart := aChart; | 
|---|
|  | 5322 | Title := Piece(aTitle, '^', 3); | 
|---|
|  | 5323 | Marks.Style := smsLabel; | 
|---|
|  | 5324 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5325 | if Piece(aTitle, '^', 1) = '55' then       // make inpatient meds smaller to identify | 
|---|
|  | 5326 | Pointer.VertSize := RX_HEIGHT_IN | 
|---|
|  | 5327 | else if Piece(aTitle, '^', 1) = '55NVA' then       // make nonva meds smaller to identify | 
|---|
|  | 5328 | Pointer.VertSize := RX_HEIGHT_NVA | 
|---|
|  | 5329 | else if Piece(aTitle, '^', 1) = '9999911' then       // make problems smaller to identify | 
|---|
|  | 5330 | Pointer.VertSize := PROB_HEIGHT | 
|---|
|  | 5331 | else | 
|---|
|  | 5332 | Pointer.VertSize := RX_HEIGHT_OUT; | 
|---|
|  | 5333 | GetData(aTitle); | 
|---|
|  | 5334 | ColorEachPoint := false; | 
|---|
|  | 5335 | SeriesColor := NextColor(aSerCnt); | 
|---|
|  | 5336 | Identifier := aFileType; | 
|---|
|  | 5337 | Marks.BackColor := clInfoBk; | 
|---|
|  | 5338 | value := round(((aSerCnt mod NUM_COLORS) / NUM_COLORS) * 80) + 20 + aSerCnt; | 
|---|
|  | 5339 | if aFileType <> '9999911' then | 
|---|
|  | 5340 | if aChart <> chartDatelineTop then | 
|---|
|  | 5341 | if aChart <> chartDatelineBottom then | 
|---|
|  | 5342 | value := value - 26; | 
|---|
|  | 5343 | with lstTemp do | 
|---|
|  | 5344 | for i := 0 to lstTemp.Items.Count - 1 do | 
|---|
|  | 5345 | begin | 
|---|
|  | 5346 | fmtime := FMCorrectedDate(Piece(Items[i], '^', 3)); | 
|---|
|  | 5347 | fmtime1 := FMCorrectedDate(Piece(Items[i], '^', 4)); | 
|---|
|  | 5348 | if IsFMDateTime(fmtime) and IsFMDateTime(fmtime1) then | 
|---|
|  | 5349 | begin | 
|---|
|  | 5350 | HighLow(fmtime, fmtime1, aChart, adatetime, adatetime1); | 
|---|
|  | 5351 | AddGantt(adatetime, adatetime1, value, ''); | 
|---|
|  | 5352 | if i = 0 then | 
|---|
|  | 5353 | begin | 
|---|
|  | 5354 | serBlank.Pointer.Pen.Visible := false; | 
|---|
|  | 5355 | serBlank.AddXY(adatetime, 100, '', aChart.Color); | 
|---|
|  | 5356 | if aFileType = '9999911' then | 
|---|
|  | 5357 | serBlank.AddXY(adatetime, 0, '', aChart.Color); | 
|---|
|  | 5358 | if FGraphSetting.FixedDateRange then | 
|---|
|  | 5359 | begin | 
|---|
|  | 5360 | FixedDates(afixeddate, afixeddate1); | 
|---|
|  | 5361 | serBlank.AddXY(afixeddate, 100, '', aChart.Color); | 
|---|
|  | 5362 | serBlank.AddXY(afixeddate1, 100, '', aChart.Color); | 
|---|
|  | 5363 | end; | 
|---|
|  | 5364 | end; | 
|---|
|  | 5365 | end; | 
|---|
|  | 5366 | end; | 
|---|
|  | 5367 | GetHorizAxis.ExactDateTime := True; | 
|---|
|  | 5368 | GetHorizAxis.Increment := DateTimeStep[dtOneMinute]; | 
|---|
|  | 5369 | end; | 
|---|
|  | 5370 | end; | 
|---|
|  | 5371 |  | 
|---|
|  | 5372 | procedure TfrmGraphs.MakeVisitGanttSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 5373 | var | 
|---|
|  | 5374 | i: integer; | 
|---|
|  | 5375 | value: double; | 
|---|
|  | 5376 | fmtime, fmtime1: string; | 
|---|
|  | 5377 | adatetime, adatetime1: TDateTime; | 
|---|
|  | 5378 | afixeddate, afixeddate1: TDateTime; | 
|---|
|  | 5379 | gantt: TGanttSeries; | 
|---|
|  | 5380 | serBlank: TPointSeries; | 
|---|
|  | 5381 | begin | 
|---|
|  | 5382 | aSerCnt := aSerCnt + 1; | 
|---|
|  | 5383 | gantt := TGanttSeries.Create(aChart); | 
|---|
|  | 5384 | serBlank := TPointSeries.Create(aChart); | 
|---|
|  | 5385 | with serBlank do | 
|---|
|  | 5386 | begin | 
|---|
|  | 5387 | Active := true; | 
|---|
|  | 5388 | ParentChart := aChart; | 
|---|
|  | 5389 | XValues.DateTime := True; | 
|---|
|  | 5390 | Pointer.Visible := true; | 
|---|
|  | 5391 | Pointer.InflateMargins := false; | 
|---|
|  | 5392 | ColorEachPoint := false; | 
|---|
|  | 5393 | Title := ''; | 
|---|
|  | 5394 | Pointer.Style := psSmallDot; | 
|---|
|  | 5395 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5396 | SeriesColor := aChart.Color; | 
|---|
|  | 5397 | Marks.Visible := false; | 
|---|
|  | 5398 | ShowInLegend := false; | 
|---|
|  | 5399 | end; | 
|---|
|  | 5400 | with gantt do | 
|---|
|  | 5401 | begin | 
|---|
|  | 5402 | ParentChart := aChart; | 
|---|
|  | 5403 | Title := Piece(aTitle, '^', 3); | 
|---|
|  | 5404 | Marks.Style := smsLabel; | 
|---|
|  | 5405 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5406 | if Piece(aTitle, '^', 1) = '405' then  // make admit smaller to identify | 
|---|
|  | 5407 | Pointer.VertSize := NUM_COLORS + 3 | 
|---|
|  | 5408 | else if Piece(aTitle, '^', 1) = '9999911' then  // make problems smaller to identify | 
|---|
|  | 5409 | Pointer.VertSize := PROB_HEIGHT | 
|---|
|  | 5410 | else | 
|---|
|  | 5411 | Pointer.VertSize := NUM_COLORS + (aSerCnt mod NUM_COLORS) + 10; | 
|---|
|  | 5412 | GetData(aTitle); | 
|---|
|  | 5413 | ColorEachPoint := false; | 
|---|
|  | 5414 | SeriesColor := NextColor(aSerCnt); | 
|---|
|  | 5415 | Identifier := aFileType; | 
|---|
|  | 5416 | Marks.BackColor := clInfoBk; | 
|---|
|  | 5417 | value := aSerCnt div NUM_COLORS; | 
|---|
|  | 5418 | with lstTemp do | 
|---|
|  | 5419 | for i:= 0 to Items.Count - 1 do | 
|---|
|  | 5420 | begin | 
|---|
|  | 5421 | fmtime := FMCorrectedDate(Piece(Items[i], '^', 3)); | 
|---|
|  | 5422 | fmtime1 := FMCorrectedDate(Piece(Items[i], '^', 4)); | 
|---|
|  | 5423 | if IsFMDateTime(fmtime) and IsFMDateTime(fmtime1) then | 
|---|
|  | 5424 | begin | 
|---|
|  | 5425 | HighLow(fmtime, fmtime1, aChart, adatetime, adatetime1); | 
|---|
|  | 5426 | AddGantt(adatetime, adatetime1, value, ''); | 
|---|
|  | 5427 | if i = 0 then | 
|---|
|  | 5428 | begin | 
|---|
|  | 5429 | serBlank.Pointer.Pen.Visible := false; | 
|---|
|  | 5430 | serBlank.AddXY(adatetime, 100, '', aChart.Color); | 
|---|
|  | 5431 | if FGraphSetting.FixedDateRange then | 
|---|
|  | 5432 | begin | 
|---|
|  | 5433 | FixedDates(afixeddate, afixeddate1); | 
|---|
|  | 5434 | serBlank.AddXY(afixeddate, 100, '', aChart.Color); | 
|---|
|  | 5435 | serBlank.AddXY(afixeddate1, 100, '', aChart.Color); | 
|---|
|  | 5436 | end; | 
|---|
|  | 5437 | end; | 
|---|
|  | 5438 | end; | 
|---|
|  | 5439 | end; | 
|---|
|  | 5440 | GetHorizAxis.ExactDateTime := True; | 
|---|
|  | 5441 | GetHorizAxis.Increment := DateTimeStep[dtOneMinute]; | 
|---|
|  | 5442 | end; | 
|---|
|  | 5443 | end; | 
|---|
|  | 5444 |  | 
|---|
|  | 5445 | procedure TfrmGraphs.MakeWeightedGanttSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 5446 | var | 
|---|
|  | 5447 | i: integer; | 
|---|
|  | 5448 | value: double; | 
|---|
|  | 5449 | fmtime, fmtime1: string; | 
|---|
|  | 5450 | gantt: TGanttSeries; | 
|---|
|  | 5451 | adatetime, adatetime1: TDateTime; | 
|---|
|  | 5452 | begin | 
|---|
|  | 5453 | aSerCnt := aSerCnt + 1; | 
|---|
|  | 5454 | gantt := TGanttSeries.Create(aChart); | 
|---|
|  | 5455 | with gantt do | 
|---|
|  | 5456 | begin | 
|---|
|  | 5457 | ParentChart := aChart; | 
|---|
|  | 5458 | Title := Piece(aTitle, '^', 3); | 
|---|
|  | 5459 | Marks.Style := smsLabel; | 
|---|
|  | 5460 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5461 | value := NUM_COLORS; | 
|---|
|  | 5462 | GetData(aTitle); | 
|---|
|  | 5463 | ColorEachPoint := false; | 
|---|
|  | 5464 | SeriesColor := NextColor(aSerCnt); | 
|---|
|  | 5465 | Identifier := aFileType; | 
|---|
|  | 5466 | Marks.BackColor := clInfoBk; | 
|---|
|  | 5467 | with lstTemp do | 
|---|
|  | 5468 | for i:= 0 to Items.Count - 1 do | 
|---|
|  | 5469 | begin | 
|---|
|  | 5470 | fmtime := FMCorrectedDate(Piece(Items[i], '^', 3)); | 
|---|
|  | 5471 | fmtime1 := FMCorrectedDate(Piece(Items[i], '^', 4)); | 
|---|
|  | 5472 | if IsFMDateTime(fmtime) and IsFMDateTime(fmtime1) then | 
|---|
|  | 5473 | begin | 
|---|
|  | 5474 | HighLow(fmtime, fmtime1, aChart, adatetime, adatetime1); | 
|---|
|  | 5475 | value := Vfactor(Piece(aTitle, '^', 3)); | 
|---|
|  | 5476 | AddGantt(adatetime, adatetime1, 1, ''); | 
|---|
|  | 5477 | value := value + (value / 2); | 
|---|
|  | 5478 | end; | 
|---|
|  | 5479 | end; | 
|---|
|  | 5480 | Pointer.VertSize := round(value); | 
|---|
|  | 5481 | GetHorizAxis.ExactDateTime := True; | 
|---|
|  | 5482 | GetHorizAxis.Increment := DateTimeStep[dtOneMinute]; | 
|---|
|  | 5483 | end; | 
|---|
|  | 5484 | end; | 
|---|
|  | 5485 |  | 
|---|
|  | 5486 | procedure TfrmGraphs.MakeArrowSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 5487 | var | 
|---|
|  | 5488 | i: integer; | 
|---|
|  | 5489 | value: double; | 
|---|
|  | 5490 | fmtime, fmtime1: string; | 
|---|
|  | 5491 | arrows: TArrowSeries; | 
|---|
|  | 5492 | adatetime, adatetime1: TDateTime; | 
|---|
|  | 5493 | begin | 
|---|
|  | 5494 | aSerCnt := aSerCnt + 1; | 
|---|
|  | 5495 | arrows := TArrowSeries.Create(aChart); | 
|---|
|  | 5496 | with arrows do | 
|---|
|  | 5497 | begin | 
|---|
|  | 5498 | ParentChart := aChart; | 
|---|
|  | 5499 | Title := Piece(aTitle, '^', 3); | 
|---|
|  | 5500 | Clear; | 
|---|
|  | 5501 | ArrowWidth := 12; | 
|---|
|  | 5502 | ArrowHeight := 9; | 
|---|
|  | 5503 | StartXValues.DateTime := true; | 
|---|
|  | 5504 | EndXValues.DateTime := true; | 
|---|
|  | 5505 | Marks.Style := smsLabel; | 
|---|
|  | 5506 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5507 | Pointer.Visible := false; | 
|---|
|  | 5508 | Pointer.VertSize := 17; //pnlTop.Height;        //******* for meds | 
|---|
|  | 5509 | Pointer.HorizSize := 24; | 
|---|
|  | 5510 | Pointer.InflateMargins := true; | 
|---|
|  | 5511 | GetData(aTitle); | 
|---|
|  | 5512 | ColorEachPoint := false; | 
|---|
|  | 5513 | SeriesColor := NextColor(aSerCnt); | 
|---|
|  | 5514 | Identifier := aFileType; | 
|---|
|  | 5515 | Marks.BackColor := clInfoBk; | 
|---|
|  | 5516 | with lstTemp do | 
|---|
|  | 5517 | for i:= 0 to Items.Count - 1 do | 
|---|
|  | 5518 | begin | 
|---|
|  | 5519 | fmtime := FMCorrectedDate(Piece(Items[i], '^', 3)); | 
|---|
|  | 5520 | fmtime1 := FMCorrectedDate(Piece(Items[i], '^', 4)); | 
|---|
|  | 5521 | if IsFMDateTime(fmtime) and IsFMDateTime(fmtime1) then | 
|---|
|  | 5522 | begin | 
|---|
|  | 5523 | HighLow(fmtime, fmtime1, aChart, adatetime, adatetime1); | 
|---|
|  | 5524 | value := strtofloatdef(Piece(Items[i], '^', 5), -BIG_NUMBER); | 
|---|
|  | 5525 | if value = -BIG_NUMBER then | 
|---|
|  | 5526 | TempCheck(Pieces(Items[i], '^', 1, 2), value); | 
|---|
|  | 5527 | AddArrow(adatetime, value, adatetime1, value, '', SeriesColor); | 
|---|
|  | 5528 | end; | 
|---|
|  | 5529 | end; | 
|---|
|  | 5530 | GetHorizAxis.ExactDateTime := True; | 
|---|
|  | 5531 | GetHorizAxis.Increment := DateTimeStep[dtOneMinute]; | 
|---|
|  | 5532 | end; | 
|---|
|  | 5533 | end; | 
|---|
|  | 5534 |  | 
|---|
|  | 5535 | procedure TfrmGraphs.MakeWeightedArrowSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 5536 | var | 
|---|
|  | 5537 | i: integer; | 
|---|
|  | 5538 | value: double; | 
|---|
|  | 5539 | fmtime, fmtime1: string; | 
|---|
|  | 5540 | adatetime, adatetime1: TDateTime; | 
|---|
|  | 5541 | arrows: TArrowSeries; | 
|---|
|  | 5542 | begin | 
|---|
|  | 5543 | aSerCnt := aSerCnt + 1; | 
|---|
|  | 5544 | arrows := TArrowSeries.Create(aChart); | 
|---|
|  | 5545 | with arrows do | 
|---|
|  | 5546 | begin | 
|---|
|  | 5547 | ParentChart := aChart; | 
|---|
|  | 5548 | Title := Piece(aTitle, '^', 3); | 
|---|
|  | 5549 | Clear; | 
|---|
|  | 5550 | ArrowWidth := 12; | 
|---|
|  | 5551 | ArrowHeight := 9; | 
|---|
|  | 5552 | StartXValues.DateTime := true; | 
|---|
|  | 5553 | EndXValues.DateTime := true; | 
|---|
|  | 5554 | Marks.Style := smsLabel; | 
|---|
|  | 5555 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5556 | Pointer.Visible := false; | 
|---|
|  | 5557 | Pointer.VertSize := 17; //pnlTop.Height;        //******* for meds | 
|---|
|  | 5558 | Pointer.HorizSize := 24; | 
|---|
|  | 5559 | Pointer.InflateMargins := true; | 
|---|
|  | 5560 | GetData(aTitle); | 
|---|
|  | 5561 | ColorEachPoint := false; | 
|---|
|  | 5562 | SeriesColor := NextColor(aSerCnt); | 
|---|
|  | 5563 | Identifier := aFileType; | 
|---|
|  | 5564 | Marks.BackColor := clInfoBk; | 
|---|
|  | 5565 | with lstTemp do | 
|---|
|  | 5566 | for i:= 0 to Items.Count - 1 do | 
|---|
|  | 5567 | begin | 
|---|
|  | 5568 | fmtime := FMCorrectedDate(Piece(Items[i], '^', 3)); | 
|---|
|  | 5569 | fmtime1 := FMCorrectedDate(Piece(Items[i], '^', 4)); | 
|---|
|  | 5570 | if IsFMDateTime(fmtime) and IsFMDateTime(fmtime1) then | 
|---|
|  | 5571 | begin | 
|---|
|  | 5572 | HighLow(fmtime, fmtime1, aChart, adatetime, adatetime1); | 
|---|
|  | 5573 | value := strtofloatdef(Piece(Items[i], '^', 5), -BIG_NUMBER); | 
|---|
|  | 5574 | if value = -BIG_NUMBER then | 
|---|
|  | 5575 | TempCheck(Pieces(Items[i], '^', 1, 2), value); | 
|---|
|  | 5576 | AddArrow(adatetime, value, adatetime1, value, '', SeriesColor); | 
|---|
|  | 5577 | end; | 
|---|
|  | 5578 | end; | 
|---|
|  | 5579 | value := Vfactor(Piece(aTitle, '^', 3)); | 
|---|
|  | 5580 | if value < 1 then value := 1; | 
|---|
|  | 5581 | Pointer.HorizSize := round(value); | 
|---|
|  | 5582 | GetHorizAxis.ExactDateTime := True; | 
|---|
|  | 5583 | GetHorizAxis.Increment := DateTimeStep[dtOneMinute]; | 
|---|
|  | 5584 | end; | 
|---|
|  | 5585 | end; | 
|---|
|  | 5586 |  | 
|---|
|  | 5587 | procedure TfrmGraphs.MakeGanttSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 5588 | var | 
|---|
|  | 5589 | i: integer; | 
|---|
|  | 5590 | value: double; | 
|---|
|  | 5591 | fmtime, fmtime1: string; | 
|---|
|  | 5592 | adatetime, adatetime1: TDateTime; | 
|---|
|  | 5593 | gantt: TGanttSeries; | 
|---|
|  | 5594 | begin | 
|---|
|  | 5595 | aSerCnt := aSerCnt + 1; | 
|---|
|  | 5596 | gantt := TGanttSeries.Create(aChart); | 
|---|
|  | 5597 | with gantt do | 
|---|
|  | 5598 | begin | 
|---|
|  | 5599 | ParentChart := aChart; | 
|---|
|  | 5600 | Title := Piece(aTitle, '^', 3); | 
|---|
|  | 5601 | Marks.Style := smsLabel; | 
|---|
|  | 5602 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5603 | Pointer.VertSize := pnlTop.Height;        //******* like vertical bars | 
|---|
|  | 5604 | GetData(aTitle); | 
|---|
|  | 5605 | ColorEachPoint := false; | 
|---|
|  | 5606 | SeriesColor := NextColor(aSerCnt); | 
|---|
|  | 5607 | Identifier := aFileType; | 
|---|
|  | 5608 | Marks.BackColor := clInfoBk; | 
|---|
|  | 5609 | with lstTemp do | 
|---|
|  | 5610 | for i:= 0 to Items.Count - 1 do | 
|---|
|  | 5611 | begin | 
|---|
|  | 5612 | fmtime := FMCorrectedDate(Piece(Items[i], '^', 3)); | 
|---|
|  | 5613 | fmtime1 := FMCorrectedDate(Piece(Items[i], '^', 4)); | 
|---|
|  | 5614 | if IsFMDateTime(fmtime) and IsFMDateTime(fmtime1) then | 
|---|
|  | 5615 | begin | 
|---|
|  | 5616 | HighLow(fmtime, fmtime1, aChart, adatetime, adatetime1); | 
|---|
|  | 5617 | value := strtofloatdef(Piece(Items[i], '^', 5), -BIG_NUMBER); | 
|---|
|  | 5618 | if value = -BIG_NUMBER then | 
|---|
|  | 5619 | TempCheck(Pieces(Items[i], '^', 1, 2), value); | 
|---|
|  | 5620 | AddGantt(adatetime, adatetime1, 1, ''); | 
|---|
|  | 5621 | end; | 
|---|
|  | 5622 | end; | 
|---|
|  | 5623 | GetHorizAxis.ExactDateTime := True; | 
|---|
|  | 5624 | GetHorizAxis.Increment := DateTimeStep[dtOneMinute]; | 
|---|
|  | 5625 | end; | 
|---|
|  | 5626 | end; | 
|---|
|  | 5627 |  | 
|---|
|  | 5628 | procedure TfrmGraphs.MakeAGanttSeries(aChart: TChart; aTitle, aFileType: string; var aSerCnt: integer); | 
|---|
|  | 5629 | var | 
|---|
|  | 5630 | i: integer; | 
|---|
|  | 5631 | value: double; | 
|---|
|  | 5632 | fmtime, fmtime1: string; | 
|---|
|  | 5633 | gantt: TGanttSeries; | 
|---|
|  | 5634 | adatetime, adatetime1: TDateTime; | 
|---|
|  | 5635 | begin | 
|---|
|  | 5636 | aSerCnt := aSerCnt + 1; | 
|---|
|  | 5637 | if aChart = chartDatelineTop then | 
|---|
|  | 5638 | gantt := serDatelineTop | 
|---|
|  | 5639 | else | 
|---|
|  | 5640 | gantt := serDatelineBottom; | 
|---|
|  | 5641 | with gantt do | 
|---|
|  | 5642 | begin | 
|---|
|  | 5643 | ParentChart := aChart; | 
|---|
|  | 5644 | Active := true; | 
|---|
|  | 5645 | Title := Piece(aTitle, '^', 3); | 
|---|
|  | 5646 | Marks.Style := smsLabel; | 
|---|
|  | 5647 | OnGetMarkText := serDatelineTop.OnGetMarkText; | 
|---|
|  | 5648 | //Pointer.VertSize := pnlTop.Height;        //******* for meds | 
|---|
|  | 5649 | GetData(aTitle); | 
|---|
|  | 5650 | Identifier := aFileType; | 
|---|
|  | 5651 | ColorEachPoint := True; | 
|---|
|  | 5652 | with lstTemp do | 
|---|
|  | 5653 | for i:= 0 to Items.Count - 1 do | 
|---|
|  | 5654 | begin | 
|---|
|  | 5655 | fmtime := FMCorrectedDate(Piece(Items[i], '^', 3)); | 
|---|
|  | 5656 | fmtime1 := FMCorrectedDate(Piece(Items[i], '^', 4)); | 
|---|
|  | 5657 | if IsFMDateTime(fmtime) and IsFMDateTime(fmtime1) then | 
|---|
|  | 5658 | begin | 
|---|
|  | 5659 | HighLow(fmtime, fmtime1, aChart, adatetime, adatetime1); | 
|---|
|  | 5660 | value := strtofloatdef(Piece(Items[i], '^', 5), -BIG_NUMBER); | 
|---|
|  | 5661 | if value = -BIG_NUMBER then | 
|---|
|  | 5662 | TempCheck(Pieces(Items[i], '^', 1, 2), value); | 
|---|
|  | 5663 | AddGantt(adatetime, adatetime1, aSerCnt, ''); | 
|---|
|  | 5664 | end; | 
|---|
|  | 5665 | end; | 
|---|
|  | 5666 | GetHorizAxis.ExactDateTime := True; | 
|---|
|  | 5667 | GetHorizAxis.Increment := DateTimeStep[dtOneMinute]; | 
|---|
|  | 5668 | end; | 
|---|
|  | 5669 | end; | 
|---|
|  | 5670 |  | 
|---|
|  | 5671 | procedure TfrmGraphs.splGraphsMoved(Sender: TObject); | 
|---|
|  | 5672 | begin | 
|---|
|  | 5673 | if Sender = splGraphs then | 
|---|
|  | 5674 | chkDualViews.Checked := pnlBottom.Height > 3; | 
|---|
|  | 5675 | end; | 
|---|
|  | 5676 |  | 
|---|
|  | 5677 | function TfrmGraphs.ValueText(Sender: TCustomChart; Series: TChartSeries; ValueIndex: Integer): string; | 
|---|
|  | 5678 | var      // type#^typename^formatdate^itemname^result^date | 
|---|
|  | 5679 | i, offset, SeriesNum, selnum: integer; | 
|---|
|  | 5680 | dateend, datestart: double; | 
|---|
|  | 5681 | astring, datecheck, filetype, fmdatecheck, item, otherdate, partitem: string; | 
|---|
|  | 5682 | resultdate, results, seriestitle, typeitem, typename, typenum: string; | 
|---|
|  | 5683 | begin | 
|---|
|  | 5684 | SeriesNum := -1; | 
|---|
|  | 5685 | for i := 0 to Sender.SeriesCount -1 do | 
|---|
|  | 5686 | if Sender.Series[i] = Series then | 
|---|
|  | 5687 | begin | 
|---|
|  | 5688 | SeriesNum := i; | 
|---|
|  | 5689 | filetype := Sender.Series[i].Identifier; | 
|---|
|  | 5690 | break; | 
|---|
|  | 5691 | end; | 
|---|
|  | 5692 | seriestitle := Sender.Series[SeriesNum].Title; | 
|---|
|  | 5693 | if (seriestitle = '') and (SeriesNum < (Series.Count - 1)) then | 
|---|
|  | 5694 | if Sender.Series[SeriesNum + 1].Title = '(non-numeric)' then | 
|---|
|  | 5695 | begin | 
|---|
|  | 5696 | SeriesNum := SeriesNum + 1; | 
|---|
|  | 5697 | seriestitle := '(non-numeric)'; | 
|---|
|  | 5698 | end; | 
|---|
|  | 5699 | Result := ''; | 
|---|
|  | 5700 | if seriestitle <> '(non-numeric)' then | 
|---|
|  | 5701 | begin | 
|---|
|  | 5702 | ItemCheck(lvwItemsTop, seriestitle, selnum, typeitem); | 
|---|
|  | 5703 | typeitem := UpperCase(typeitem); | 
|---|
|  | 5704 | end | 
|---|
|  | 5705 | else | 
|---|
|  | 5706 | begin | 
|---|
|  | 5707 | selnum := 1; | 
|---|
|  | 5708 | typeitem := '63'; | 
|---|
|  | 5709 | offset := 2; // 2 series before | 
|---|
|  | 5710 | if (copy(Sender.Series[SeriesNum - offset].Title, 1, 4) = 'Ref ') then | 
|---|
|  | 5711 | if SeriesNum - 4 > -1 then | 
|---|
|  | 5712 | offset := 4 // if ref ranges | 
|---|
|  | 5713 | else if SeriesNum - 3 > -1 then | 
|---|
|  | 5714 | offset := 3; // if ref ranges | 
|---|
|  | 5715 | seriestitle := Sender.Series[SeriesNum - offset].Title + ' ' + seriestitle; | 
|---|
|  | 5716 | end; | 
|---|
|  | 5717 | if selnum < 0 then | 
|---|
|  | 5718 | begin | 
|---|
|  | 5719 | Result := '^^^' + seriestitle; | 
|---|
|  | 5720 | exit; | 
|---|
|  | 5721 | end; | 
|---|
|  | 5722 | typenum := Piece(typeitem, '^', 1); | 
|---|
|  | 5723 | if (typenum <> filetype) and (filetype <> '') then | 
|---|
|  | 5724 | begin | 
|---|
|  | 5725 | typenum := filetype; | 
|---|
|  | 5726 | typeitem := typenum + '^' + Piece(typeitem, '^', 2); | 
|---|
|  | 5727 | end; | 
|---|
|  | 5728 | if typenum = '55' then | 
|---|
|  | 5729 | begin | 
|---|
|  | 5730 | if Series is TGanttSeries then | 
|---|
|  | 5731 | if (Series as TGanttSeries).Pointer.VertSize <> RX_HEIGHT_IN then | 
|---|
|  | 5732 | if (Series as TGanttSeries).Pointer.VertSize <> RX_HEIGHT_NVA then | 
|---|
|  | 5733 | typenum := '52' | 
|---|
|  | 5734 | else typenum := '55NVA'; | 
|---|
|  | 5735 | end | 
|---|
|  | 5736 | else if typenum = '55NVA' then | 
|---|
|  | 5737 | begin | 
|---|
|  | 5738 | if Series is TGanttSeries then | 
|---|
|  | 5739 | if (Series as TGanttSeries).Pointer.VertSize <> RX_HEIGHT_NVA then | 
|---|
|  | 5740 | if (Series as TGanttSeries).Pointer.VertSize <> RX_HEIGHT_OUT then | 
|---|
|  | 5741 | typenum := '55' | 
|---|
|  | 5742 | else typenum := '52'; | 
|---|
|  | 5743 | end | 
|---|
|  | 5744 | else if typenum = '52' then | 
|---|
|  | 5745 | begin | 
|---|
|  | 5746 | if Series is TGanttSeries then | 
|---|
|  | 5747 | if (Series as TGanttSeries).Pointer.VertSize <> RX_HEIGHT_OUT then | 
|---|
|  | 5748 | if (Series as TGanttSeries).Pointer.VertSize <> RX_HEIGHT_NVA then | 
|---|
|  | 5749 | typenum := '55' | 
|---|
|  | 5750 | else typenum := '55NVA'; | 
|---|
|  | 5751 | end; | 
|---|
|  | 5752 | typename := FileNameX(typenum); | 
|---|
|  | 5753 | if ValueIndex < 0 then | 
|---|
|  | 5754 | begin | 
|---|
|  | 5755 | Result := typenum + '^' + typename + '^^' + seriestitle; | 
|---|
|  | 5756 | exit; | 
|---|
|  | 5757 | end; | 
|---|
|  | 5758 | if Copy(typename, length(typename) - 2, 3) = 'ies' then | 
|---|
|  | 5759 | typename := Copy(typename, 1, length(typename) - 3) + 'y' | 
|---|
|  | 5760 | else if Copy(typename, length(typename), 1) = 's' then | 
|---|
|  | 5761 | typename := Copy(typename, 1, length(typename) - 1); | 
|---|
|  | 5762 | if (Series is TGanttSeries) then | 
|---|
|  | 5763 | begin | 
|---|
|  | 5764 | datestart := (Series as TGanttSeries).StartValues[ValueIndex]; | 
|---|
|  | 5765 | dateend := (Series as TGanttSeries).EndValues[ValueIndex]; | 
|---|
|  | 5766 | end | 
|---|
|  | 5767 | else | 
|---|
|  | 5768 | begin | 
|---|
|  | 5769 | datestart := Series.XValue[ValueIndex]; | 
|---|
|  | 5770 | dateend := datestart; | 
|---|
|  | 5771 | end; | 
|---|
|  | 5772 | if datestart <> dateend then | 
|---|
|  | 5773 | begin | 
|---|
|  | 5774 | resultdate := FormatDateTime('mmm d, yyyy  h:nn am/pm', datestart) + | 
|---|
|  | 5775 | ' - ' + FormatDateTime('mmm d, yyyy  h:nn am/pm', dateend); | 
|---|
|  | 5776 | otherdate := FormatDateTime('mm/dd/yy hh:nn', datestart) + | 
|---|
|  | 5777 | ' - ' + FormatDateTime('mm/dd/yy hh:nn', dateend); | 
|---|
|  | 5778 | end | 
|---|
|  | 5779 | else | 
|---|
|  | 5780 | begin | 
|---|
|  | 5781 | resultdate := FormatDateTime('mmm d, yyyy  h:nn am/pm', datestart); | 
|---|
|  | 5782 | otherdate := FormatDateTime('mm/dd/yy hh:nn', datestart); | 
|---|
|  | 5783 | end; | 
|---|
|  | 5784 | results := ''; | 
|---|
|  | 5785 | if typenum = '63' then | 
|---|
|  | 5786 | begin | 
|---|
|  | 5787 | if Series is TLineSeries then | 
|---|
|  | 5788 | if (Series as TLineSeries).LinePen.Style = psDash then | 
|---|
|  | 5789 | exit;          // serHigh or serLow | 
|---|
|  | 5790 | if Series is TPointSeries then | 
|---|
|  | 5791 | if (Series as TPointSeries).Pointer.Style = psSmallDot then | 
|---|
|  | 5792 | exit;         // serBlank | 
|---|
|  | 5793 | if copy(seriestitle, length(seriestitle) - 12, length(seriestitle)) = '(non-numeric)' then | 
|---|
|  | 5794 | begin | 
|---|
|  | 5795 | seriestitle := copy(seriestitle, 1, length(seriestitle) - 13); | 
|---|
|  | 5796 | serDatelineTopGetMarkText(Sender.Series[SeriesNum], ValueIndex, results); | 
|---|
|  | 5797 | end | 
|---|
|  | 5798 | else | 
|---|
|  | 5799 | results := floattostr(Series.YValue[ValueIndex]); | 
|---|
|  | 5800 | end | 
|---|
|  | 5801 | else if typenum <> '120.5' then | 
|---|
|  | 5802 | begin | 
|---|
|  | 5803 | item := Piece(typeitem, '^', 2); | 
|---|
|  | 5804 | partitem := copy(item, 1, 4); | 
|---|
|  | 5805 | //if (partitem = 'M;A;') then     //or (partitem = 'M;T;') then   tb antibiotic on 1st piece | 
|---|
|  | 5806 | begin | 
|---|
|  | 5807 | fmdatecheck := floattostr(DateTimeToFMDateTime(Series.XValue[ValueIndex])); | 
|---|
|  | 5808 | for i := 0 to lstData.Items.Count - 1 do | 
|---|
|  | 5809 | begin | 
|---|
|  | 5810 | astring := lstData.Items[i]; | 
|---|
|  | 5811 | if item = Piece(astring, '^', 2) then | 
|---|
|  | 5812 | begin | 
|---|
|  | 5813 | datecheck := Piece(astring, '^', 3); | 
|---|
|  | 5814 | if length(Piece(datecheck, '.', 2)) > 0 then | 
|---|
|  | 5815 | datecheck := Piece(datecheck, '.', 1) + '.' + copy(Piece(datecheck, '.', 2), 1, 4); | 
|---|
|  | 5816 | if datecheck = fmdatecheck then | 
|---|
|  | 5817 | begin | 
|---|
|  | 5818 | results := MixedCase(Piece(astring, '^', 5)); | 
|---|
|  | 5819 | break; | 
|---|
|  | 5820 | end; | 
|---|
|  | 5821 | end; | 
|---|
|  | 5822 | end; | 
|---|
|  | 5823 | end; | 
|---|
|  | 5824 | end | 
|---|
|  | 5825 | else if typenum = '120.5' then | 
|---|
|  | 5826 | begin | 
|---|
|  | 5827 | if seriestitle = 'Blood Pressure' then | 
|---|
|  | 5828 | results := BPValue(Series.XValue[ValueIndex]) | 
|---|
|  | 5829 | else | 
|---|
|  | 5830 | results := floattostr(Series.YValue[ValueIndex]); | 
|---|
|  | 5831 | end; | 
|---|
|  | 5832 | Result := typenum + '  ^' + typename + '^' + resultdate + '^' + | 
|---|
|  | 5833 | seriestitle + '^' + results + '^' + otherdate; | 
|---|
|  | 5834 | end; | 
|---|
|  | 5835 |  | 
|---|
|  | 5836 | procedure TfrmGraphs.chartBaseMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); | 
|---|
|  | 5837 | var | 
|---|
|  | 5838 | ClickedLegend, ClickedValue, j: Integer; | 
|---|
|  | 5839 | itemname: string; | 
|---|
|  | 5840 | NewPt: TPoint; | 
|---|
|  | 5841 | begin | 
|---|
|  | 5842 | //if not FGraphSetting.Hints then exit;       //***** | 
|---|
|  | 5843 | FX := x; | 
|---|
|  | 5844 | FY := y; | 
|---|
|  | 5845 | FActiveGraph := (Sender as TChart); | 
|---|
|  | 5846 | NewPt := Mouse.CursorPos; | 
|---|
|  | 5847 | ClickedValue := -1; | 
|---|
|  | 5848 | ClickedLegend := -1; | 
|---|
|  | 5849 | if FHintWinActive then exit; | 
|---|
|  | 5850 | with FActiveGraph do | 
|---|
|  | 5851 | begin | 
|---|
|  | 5852 | for j := 0 to SeriesCount - 1 do | 
|---|
|  | 5853 | with (Series[j] as TChartSeries) do | 
|---|
|  | 5854 | begin | 
|---|
|  | 5855 | itemname := Series[j].Title; | 
|---|
|  | 5856 | if (Copy(itemname, 1, 7) <> 'Ref Low') and (Copy(itemname, 1, 8) <> 'Ref High') then | 
|---|
|  | 5857 | begin | 
|---|
|  | 5858 | ClickedValue := Clicked(FX, FY); | 
|---|
|  | 5859 | if ClickedValue > -1 then break; | 
|---|
|  | 5860 | ClickedLegend := Legend.Clicked(FX, FY); | 
|---|
|  | 5861 | if ClickedLegend > -1 then break; | 
|---|
|  | 5862 | end; | 
|---|
|  | 5863 | end; | 
|---|
|  | 5864 | if ClickedValue > -1 then | 
|---|
|  | 5865 | begin | 
|---|
|  | 5866 | FHintStop := false; | 
|---|
|  | 5867 | Screen.Cursor := crHandPoint; | 
|---|
|  | 5868 | timHintPause.Enabled := true; | 
|---|
|  | 5869 | end | 
|---|
|  | 5870 | else if ClickedLegend > -1 then | 
|---|
|  | 5871 | begin | 
|---|
|  | 5872 | timHintPause.Enabled := false; | 
|---|
|  | 5873 | InactivateHint; | 
|---|
|  | 5874 | Screen.Cursor := crHandPoint; | 
|---|
|  | 5875 | end | 
|---|
|  | 5876 | else | 
|---|
|  | 5877 | begin | 
|---|
|  | 5878 | timHintPause.Enabled := false; | 
|---|
|  | 5879 | InactivateHint; | 
|---|
|  | 5880 | Screen.Cursor := crDefault; | 
|---|
|  | 5881 | end; | 
|---|
|  | 5882 | end; | 
|---|
|  | 5883 | end; | 
|---|
|  | 5884 |  | 
|---|
|  | 5885 | procedure TfrmGraphs.timHintPauseTimer(Sender: TObject); | 
|---|
|  | 5886 | var | 
|---|
|  | 5887 | ClickedValue, j: Integer; | 
|---|
|  | 5888 | dttm, itemname, textvalue: string; | 
|---|
|  | 5889 | Rct: TRect; | 
|---|
|  | 5890 | begin | 
|---|
|  | 5891 | with FActiveGraph do | 
|---|
|  | 5892 | begin | 
|---|
|  | 5893 | ClickedValue := -1; | 
|---|
|  | 5894 | for j := 0 to SeriesCount - 1 do | 
|---|
|  | 5895 | with (Series[j] as TChartSeries) do | 
|---|
|  | 5896 | begin | 
|---|
|  | 5897 | if FHintStop then break; | 
|---|
|  | 5898 | ClickedValue := Clicked(FX, FY); | 
|---|
|  | 5899 | if ClickedValue > -1 then break; | 
|---|
|  | 5900 | end; | 
|---|
|  | 5901 | if FHintStop then          // stop when clicked | 
|---|
|  | 5902 | begin | 
|---|
|  | 5903 | timHintPause.Enabled := false; | 
|---|
|  | 5904 | InactivateHint; | 
|---|
|  | 5905 | FHintStop := false; | 
|---|
|  | 5906 | exit; | 
|---|
|  | 5907 | end; | 
|---|
|  | 5908 | if (ClickedValue > -1) and ((FOnValue <> ClickedValue) or (FOnSeries <> j)) then | 
|---|
|  | 5909 | begin     // on a value but not the same value or series | 
|---|
|  | 5910 | if FHintWinActive then | 
|---|
|  | 5911 | InactivateHint; | 
|---|
|  | 5912 | itemname := Series[j].Title; | 
|---|
|  | 5913 | if Copy(itemname, 1, 7)= 'Ref Low' then exit; | 
|---|
|  | 5914 | if Copy(itemname, 1, 8)= 'Ref High' then exit; | 
|---|
|  | 5915 | FOnSeries := j; | 
|---|
|  | 5916 | FOnValue := ClickedValue; | 
|---|
|  | 5917 | textvalue := ValueText(FActiveGraph, Series[j], ClickedValue); | 
|---|
|  | 5918 | dttm := Piece(textvalue, '^', 3); | 
|---|
|  | 5919 | //if copy(textvalue, length(textvalue) - 5, length(textvalue)) = ' 00:00' then | 
|---|
|  | 5920 | //  dttm := Pieces(dttm, ' ', 1, 3); | 
|---|
|  | 5921 | textvalue := Piece(textvalue, '^', 2) + '  ' + dttm + | 
|---|
|  | 5922 | #13 + Piece(textvalue, '^', 4) + '  ' + Piece(textvalue, '^', 5); | 
|---|
|  | 5923 | Rct := FHintWin.CalcHintRect(Screen.Width, textvalue, nil); | 
|---|
|  | 5924 | OffsetRect(Rct, FX, FY + 20); | 
|---|
|  | 5925 | Rct.Right := Rct.Right + 3; | 
|---|
|  | 5926 | Rct.TopLeft := ClientToScreen(Rct.TopLeft); | 
|---|
|  | 5927 | Rct.BottomRight := ClientToScreen(Rct.BottomRight); | 
|---|
|  | 5928 | FHintWin.ActivateHint(Rct, textvalue); | 
|---|
|  | 5929 | FHintWinActive := true; | 
|---|
|  | 5930 | end | 
|---|
|  | 5931 | else if (ClickedValue = -1) and ((FOnValue <> BIG_NUMBER) and (FOnSeries <> BIG_NUMBER)) then | 
|---|
|  | 5932 | begin  // not on a value anymore (used to be on a value and series) | 
|---|
|  | 5933 | FOnSeries := BIG_NUMBER; | 
|---|
|  | 5934 | FOnValue := BIG_NUMBER; | 
|---|
|  | 5935 | timHintPause.Enabled := false; | 
|---|
|  | 5936 | InactivateHint; | 
|---|
|  | 5937 | end; | 
|---|
|  | 5938 | end; | 
|---|
|  | 5939 | end; | 
|---|
|  | 5940 |  | 
|---|
|  | 5941 | procedure TfrmGraphs.InactivateHint; | 
|---|
|  | 5942 | begin | 
|---|
|  | 5943 | FHintWin.ReleaseHandle; | 
|---|
|  | 5944 | FHintWinActive := false; | 
|---|
|  | 5945 | end; | 
|---|
|  | 5946 |  | 
|---|
|  | 5947 | procedure TfrmGraphs.mnuPopGraphStayOnTopClick(Sender: TObject); | 
|---|
|  | 5948 | begin | 
|---|
|  | 5949 | mnuPopGraphStayOnTop.Checked := not mnuPopGraphStayOnTop.Checked; | 
|---|
|  | 5950 | if mnuPopGraphStayOnTop.Checked then | 
|---|
|  | 5951 | begin | 
|---|
|  | 5952 | MarkFormAsStayOnTop(Self, true); | 
|---|
|  | 5953 | FGraphSetting.StayOnTop := true; | 
|---|
|  | 5954 | end | 
|---|
|  | 5955 | else | 
|---|
|  | 5956 | begin | 
|---|
|  | 5957 | MarkFormAsStayOnTop(Self, false); | 
|---|
|  | 5958 | FGraphSetting.StayOnTop := false; | 
|---|
|  | 5959 | end; | 
|---|
|  | 5960 | end; | 
|---|
|  | 5961 |  | 
|---|
|  | 5962 | procedure TfrmGraphs.StayOnTop; | 
|---|
|  | 5963 | begin | 
|---|
|  | 5964 | with pnlMain.Parent do | 
|---|
|  | 5965 | if BorderWidth <> 1 then | 
|---|
|  | 5966 | begin | 
|---|
|  | 5967 | mnuPopGraphStayOnTop.Enabled :=false; | 
|---|
|  | 5968 | mnuPopGraphStayOnTop.Checked := false; | 
|---|
|  | 5969 | end | 
|---|
|  | 5970 | else | 
|---|
|  | 5971 | begin     // only use on float Graph | 
|---|
|  | 5972 | mnuPopGraphStayOnTop.Enabled :=true; | 
|---|
|  | 5973 | mnuPopGraphStayOnTop.Checked := not FGraphSetting.StayOnTop; | 
|---|
|  | 5974 | mnuPopGraphStayOnTopClick(self); | 
|---|
|  | 5975 | end; | 
|---|
|  | 5976 | end; | 
|---|
|  | 5977 |  | 
|---|
|  | 5978 | procedure TfrmGraphs.HideDates(aChart: TChart); | 
|---|
|  | 5979 | var | 
|---|
|  | 5980 | hidedates: boolean; | 
|---|
|  | 5981 | begin | 
|---|
|  | 5982 | with aChart do          // dateline charts always have dates | 
|---|
|  | 5983 | begin | 
|---|
|  | 5984 | if (aChart = chartDatelineTop) then | 
|---|
|  | 5985 | hidedates := false | 
|---|
|  | 5986 | else if (aChart = chartDatelineBottom) then | 
|---|
|  | 5987 | hidedates := false | 
|---|
|  | 5988 | else | 
|---|
|  | 5989 | hidedates := not FGraphSetting.Dates; | 
|---|
|  | 5990 | if hidedates then | 
|---|
|  | 5991 | begin | 
|---|
|  | 5992 | MarginBottom := 0; | 
|---|
|  | 5993 | BottomAxis.LabelsFont.Color := chartDatelineTop.Color; | 
|---|
|  | 5994 | BottomAxis.LabelsSize := 1; | 
|---|
|  | 5995 | LeftAxis.LabelsFont.Color := chartDatelineTop.LeftAxis.LabelsFont.Color; | 
|---|
|  | 5996 | end | 
|---|
|  | 5997 | else | 
|---|
|  | 5998 | begin | 
|---|
|  | 5999 | MarginBottom := chartDatelineTop.MarginBottom; | 
|---|
|  | 6000 | BottomAxis.LabelsFont.Color := chartDatelineTop.BottomAxis.LabelsFont.Color; | 
|---|
|  | 6001 | BottomAxis.LabelsSize := chartDatelineTop.BottomAxis.LabelsSize; | 
|---|
|  | 6002 | LeftAxis.LabelsFont.Color := chartDatelineTop.LeftAxis.LabelsFont.Color; | 
|---|
|  | 6003 | end; | 
|---|
|  | 6004 | end; | 
|---|
|  | 6005 | end; | 
|---|
|  | 6006 |  | 
|---|
|  | 6007 | procedure TfrmGraphs.mnuPopGraphZoomBackClick(Sender: TObject); | 
|---|
|  | 6008 | begin | 
|---|
|  | 6009 | FFirstClick := true; | 
|---|
|  | 6010 | with lstZoomHistory do | 
|---|
|  | 6011 | begin | 
|---|
|  | 6012 | Items.Delete(Count - 1); | 
|---|
|  | 6013 | if Count = 0 then mnuPopGraphResetClick(self) | 
|---|
|  | 6014 | else ZoomUpdate; | 
|---|
|  | 6015 | end; | 
|---|
|  | 6016 | end; | 
|---|
|  | 6017 |  | 
|---|
|  | 6018 | procedure TfrmGraphs.ZoomUpdate; | 
|---|
|  | 6019 | var | 
|---|
|  | 6020 | lastzoom: string; | 
|---|
|  | 6021 | BigTime, SmallTime: TDateTime; | 
|---|
|  | 6022 | begin | 
|---|
|  | 6023 | lastzoom := lstZoomHistory.Items[lstZoomHistory.Count - 1]; | 
|---|
|  | 6024 | SmallTime := StrToFloat(Piece(lastzoom, '^', 1)); | 
|---|
|  | 6025 | BigTime := StrToFloat(Piece(lastzoom, '^', 2)); | 
|---|
|  | 6026 | ZoomTo(SmallTime, BigTime); | 
|---|
|  | 6027 | ZoomUpdateInfo(SmallTime, BigTime); | 
|---|
|  | 6028 | end; | 
|---|
|  | 6029 |  | 
|---|
|  | 6030 | procedure TfrmGraphs.ZoomUpdateInfo(SmallTime, BigTime: TDateTime); | 
|---|
|  | 6031 | begin | 
|---|
|  | 6032 | pnlInfo.Caption := TXT_ZOOMED; | 
|---|
|  | 6033 | pnlInfo.Color := COLOR_ZOOM; | 
|---|
|  | 6034 | pnlInfo.Caption := pnlInfo.Caption + FormatDateTime('mmm d, yyyy  h:nn am/pm', SmallTime); | 
|---|
|  | 6035 | pnlInfo.Caption := pnlInfo.Caption + ' to ' + FormatDateTime('mmm d, yyyy  h:nn am/pm', BigTime) + '.'; | 
|---|
|  | 6036 | pnlInfo.Visible := true; | 
|---|
|  | 6037 | pnlHeader.Visible := true; | 
|---|
|  | 6038 | end; | 
|---|
|  | 6039 |  | 
|---|
|  | 6040 | procedure TfrmGraphs.ZoomTo(SmallTime, BigTime: TDateTime); | 
|---|
|  | 6041 | var | 
|---|
|  | 6042 | i: integer; | 
|---|
|  | 6043 | ChildControl: TControl; | 
|---|
|  | 6044 | begin | 
|---|
|  | 6045 | for i := 0 to scrlTop.ControlCount - 1 do | 
|---|
|  | 6046 | begin | 
|---|
|  | 6047 | ChildControl := scrlTop.Controls[i]; | 
|---|
|  | 6048 | SizeDates((ChildControl as TChart), SmallTime, BigTime); | 
|---|
|  | 6049 | end; | 
|---|
|  | 6050 | SizeDates(chartDatelineTop, SmallTime, BigTime); | 
|---|
|  | 6051 | for i := 0 to scrlBottom.ControlCount - 1 do | 
|---|
|  | 6052 | begin | 
|---|
|  | 6053 | ChildControl := scrlBottom.Controls[i]; | 
|---|
|  | 6054 | SizeDates((ChildControl as TChart), SmallTime, BigTime); | 
|---|
|  | 6055 | end; | 
|---|
|  | 6056 | SizeDates(chartDatelineBottom, SmallTime, BigTime); | 
|---|
|  | 6057 | end; | 
|---|
|  | 6058 |  | 
|---|
|  | 6059 | procedure TfrmGraphs.mnuPopGraphPrintClick(Sender: TObject); | 
|---|
|  | 6060 | var | 
|---|
|  | 6061 | topflag: boolean; | 
|---|
|  | 6062 | i, count: integer; | 
|---|
|  | 6063 | StrForFooter, StrForHeader, aTitle, aWarning, aDateRange: String; | 
|---|
|  | 6064 | aHeader: TStringList; | 
|---|
|  | 6065 | wrdApp, wrdDoc, wrdPrintDlg: Variant; | 
|---|
|  | 6066 | ChildControl: TControl; | 
|---|
|  | 6067 | begin | 
|---|
|  | 6068 | topflag := mnuPopGraphStayOnTop.Checked and mnuPopGraphStayOnTop.Enabled; | 
|---|
|  | 6069 | try | 
|---|
|  | 6070 | wrdApp := CreateOleObject('Word.Application'); | 
|---|
|  | 6071 | except | 
|---|
|  | 6072 | raise Exception.Create('Cannot start MS Word!'); | 
|---|
|  | 6073 | end; | 
|---|
|  | 6074 | Screen.Cursor := crDefault; | 
|---|
|  | 6075 | aTitle := 'CPRS Graphing'; | 
|---|
|  | 6076 | aWarning := pnlInfo.Caption; | 
|---|
|  | 6077 | aDateRange :=  'Date Range: ' + cboDateRange.Text + '  Selected Items from ' + | 
|---|
|  | 6078 | FormatDateTime('mm/dd/yy', FGraphSetting.LowTime) + ' to ' + | 
|---|
|  | 6079 | FormatDateTime('mm/dd/yy', FGraphSetting.HighTime); | 
|---|
|  | 6080 | aHeader := TStringList.Create; | 
|---|
|  | 6081 | CreatePatientHeader(aHeader, aTitle, aWarning, aDateRange); | 
|---|
|  | 6082 | StrForHeader := ''; | 
|---|
|  | 6083 | for i := 0 to aHeader.Count -1 do | 
|---|
|  | 6084 | StrForHeader := StrForHeader + aHeader[i] + Chr(13); | 
|---|
|  | 6085 | StrForFooter := aTitle + ' - *** WORK COPY ONLY ***' + Chr(13); | 
|---|
|  | 6086 | wrdApp.Visible := False; | 
|---|
|  | 6087 | wrdApp.Documents.Add; | 
|---|
|  | 6088 | wrdDoc := wrdApp.Documents.Item(1); | 
|---|
|  | 6089 | wrdDoc := wrdDoc.Sections.Item(1); | 
|---|
|  | 6090 | wrdDoc := wrdDoc.Headers.Item(1).Range; | 
|---|
|  | 6091 | wrdDoc.Font.Name := 'Courier New'; | 
|---|
|  | 6092 | wrdDoc.Font.Size := 9; | 
|---|
|  | 6093 | wrdDoc.Text := StrForHeader; | 
|---|
|  | 6094 | wrdDoc := wrdApp.Documents.Item(1); | 
|---|
|  | 6095 | wrdDoc := wrdDoc.Sections.Item(1); | 
|---|
|  | 6096 | wrdDoc := wrdDoc.Footers.Item(1); | 
|---|
|  | 6097 | wrdDoc.Range.Font.Name := 'Courier New'; | 
|---|
|  | 6098 | wrdDoc.Range.Font.Size := 9; | 
|---|
|  | 6099 | wrdDoc.Range.Text := StrForFooter; | 
|---|
|  | 6100 | wrdDoc.PageNumbers.Add; | 
|---|
|  | 6101 | wrdDoc := wrdApp.Documents.Item(1); | 
|---|
|  | 6102 | wrdDoc.Range.InsertParagraphAfter; | 
|---|
|  | 6103 | for i := 0 to scrlTop.ControlCount - 1 do           // goes from top to bottom | 
|---|
|  | 6104 | begin | 
|---|
|  | 6105 | ChildControl := scrlTop.Controls[i]; | 
|---|
|  | 6106 | if (ChildControl as TChart).Visible then | 
|---|
|  | 6107 | begin | 
|---|
|  | 6108 | (ChildControl as TChart).CopyToClipboardBitmap; | 
|---|
|  | 6109 | wrdDoc.Range.InsertParagraphAfter; | 
|---|
|  | 6110 | wrdDoc.Paragraphs.Last.Range.Paste; | 
|---|
|  | 6111 | end; | 
|---|
|  | 6112 | end; | 
|---|
|  | 6113 | if (chartDatelineTop.SeriesCount > 0) and (not chkItemsTop.Checked) then | 
|---|
|  | 6114 | begin | 
|---|
|  | 6115 | chartDatelineTop.CopyToClipboardBitmap; | 
|---|
|  | 6116 | wrdDoc.Range.InsertParagraphAfter; | 
|---|
|  | 6117 | wrdDoc.Paragraphs.Last.Range.Paste; | 
|---|
|  | 6118 | end; | 
|---|
|  | 6119 | wrdDoc.Range.InsertParagraphAfter; | 
|---|
|  | 6120 | wrdDoc.Paragraphs.Last.Range.Text := '   '; | 
|---|
|  | 6121 | for i := 0 to scrlBottom.ControlCount - 1 do | 
|---|
|  | 6122 | begin | 
|---|
|  | 6123 | ChildControl := scrlBottom.Controls[i]; | 
|---|
|  | 6124 | if (ChildControl as TChart).Visible then | 
|---|
|  | 6125 | begin | 
|---|
|  | 6126 | (ChildControl as TChart).CopyToClipboardBitmap; | 
|---|
|  | 6127 | wrdDoc.Range.InsertParagraphAfter; | 
|---|
|  | 6128 | wrdDoc.Paragraphs.Last.Range.Paste; | 
|---|
|  | 6129 | end; | 
|---|
|  | 6130 | end; | 
|---|
|  | 6131 | if (chartDatelineBottom.SeriesCount > 0) and (chkDualViews.Checked) | 
|---|
|  | 6132 | and (not chkItemsBottom.Checked) then | 
|---|
|  | 6133 | begin | 
|---|
|  | 6134 | chartDatelineBottom.CopyToClipboardBitmap; | 
|---|
|  | 6135 | wrdDoc.Range.InsertParagraphAfter; | 
|---|
|  | 6136 | wrdDoc.Paragraphs.Last.Range.Paste; | 
|---|
|  | 6137 | end; | 
|---|
|  | 6138 | wrdPrintDlg := wrdApp.Dialogs.item(wdDialogFilePrint); | 
|---|
|  | 6139 | Screen.Cursor := crDefault; | 
|---|
|  | 6140 | Application.ProcessMessages; | 
|---|
|  | 6141 | if topflag then | 
|---|
|  | 6142 | mnuPopGraphStayOnTopClick(self); | 
|---|
|  | 6143 | wrdPrintDlg.Show; | 
|---|
|  | 6144 | wrdApp.Visible := false; | 
|---|
|  | 6145 | Screen.Cursor := crHourGlass; | 
|---|
|  | 6146 | Application.ProcessMessages; | 
|---|
|  | 6147 | Sleep(5000); | 
|---|
|  | 6148 | count := 0; | 
|---|
|  | 6149 | while (wrdApp.Application.BackgroundPrintingStatus > 0) do | 
|---|
|  | 6150 | begin | 
|---|
|  | 6151 | Sleep(1000); | 
|---|
|  | 6152 | Application.ProcessMessages; | 
|---|
|  | 6153 | count := count + 1; | 
|---|
|  | 6154 | if count > 3 then break; | 
|---|
|  | 6155 | end; | 
|---|
|  | 6156 | wrdApp.DisplayAlerts := false; | 
|---|
|  | 6157 | wrdDoc.Close(false); | 
|---|
|  | 6158 | wrdApp.Quit; | 
|---|
|  | 6159 | wrdApp := Unassigned; // releases variant | 
|---|
|  | 6160 | aHeader.Free; | 
|---|
|  | 6161 | Application.ProcessMessages; | 
|---|
|  | 6162 | if topflag then | 
|---|
|  | 6163 | mnuPopGraphStayOnTopClick(self); | 
|---|
|  | 6164 | Screen.Cursor := crDefault; | 
|---|
|  | 6165 | end; | 
|---|
|  | 6166 |  | 
|---|
|  | 6167 | procedure TfrmGraphs.lvwItemsTopChange(Sender: TObject; Item: TListItem; | 
|---|
|  | 6168 | Change: TItemChange); | 
|---|
|  | 6169 | begin | 
|---|
|  | 6170 | if FArrowKeys and (lvwItemsTop.SelCount > 0) then | 
|---|
|  | 6171 | begin | 
|---|
|  | 6172 | if pnlItemsTopInfo.Tag <> 1 then | 
|---|
|  | 6173 | lvwItemsTopClick(self); | 
|---|
|  | 6174 | FArrowKeys := false; | 
|---|
|  | 6175 | end; | 
|---|
|  | 6176 | end; | 
|---|
|  | 6177 |  | 
|---|
|  | 6178 | procedure TfrmGraphs.lvwItemsBottomChange(Sender: TObject; Item: TListItem; | 
|---|
|  | 6179 | Change: TItemChange); | 
|---|
|  | 6180 | begin | 
|---|
|  | 6181 | if FArrowKeys and (lvwItemsBottom.SelCount > 0) then | 
|---|
|  | 6182 | begin | 
|---|
|  | 6183 | if pnlItemsBottomInfo.Tag <> 1 then | 
|---|
|  | 6184 | lvwItemsBottomClick(self); | 
|---|
|  | 6185 | FArrowKeys := false; | 
|---|
|  | 6186 | end; | 
|---|
|  | 6187 | end; | 
|---|
|  | 6188 |  | 
|---|
|  | 6189 | procedure TfrmGraphs.lvwItemsTopKeyDown(Sender: TObject; var Key: Word; | 
|---|
|  | 6190 | Shift: TShiftState); | 
|---|
|  | 6191 | begin | 
|---|
|  | 6192 | if Key in [VK_PRIOR, VK_NEXT, VK_UP, VK_DOWN] then | 
|---|
|  | 6193 | FArrowKeys := true; | 
|---|
|  | 6194 | end; | 
|---|
|  | 6195 |  | 
|---|
|  | 6196 | procedure TfrmGraphs.testcount1Click(Sender: TObject); | 
|---|
|  | 6197 |  | 
|---|
|  | 6198 | function boxcount(aListBox: TListBox): string; | 
|---|
|  | 6199 | var | 
|---|
|  | 6200 | i, ccnt: integer; | 
|---|
|  | 6201 | begin | 
|---|
|  | 6202 | Result := ''; | 
|---|
|  | 6203 | ccnt := 0; | 
|---|
|  | 6204 | for i := 0 to aListBox.Items.Count - 1 do | 
|---|
|  | 6205 | ccnt := ccnt + length(aListBox.Items[i]); | 
|---|
|  | 6206 | Result := inttostr(aListBox.Items.Count) + ';' + inttostr(ccnt); | 
|---|
|  | 6207 | end; | 
|---|
|  | 6208 |  | 
|---|
|  | 6209 | var | 
|---|
|  | 6210 | i, lines, total: integer; | 
|---|
|  | 6211 | aString: string; | 
|---|
|  | 6212 | begin | 
|---|
|  | 6213 | lines := 0; | 
|---|
|  | 6214 | total := 0; | 
|---|
|  | 6215 | with pnlData do | 
|---|
|  | 6216 | for i:= 0 to pnlData.ControlCount - 1 do | 
|---|
|  | 6217 | if Controls[i] is TListBox then | 
|---|
|  | 6218 | begin | 
|---|
|  | 6219 | aString := boxcount(Controls[i] as TListBox); | 
|---|
|  | 6220 | lines := lines + strtointdef(Piece(aString, ';', 1), 0); | 
|---|
|  | 6221 | total := total + strtointdef(Piece(aString, ';', 2), 0); | 
|---|
|  | 6222 | end; | 
|---|
|  | 6223 | aString := boxcount(lstTypes) + '^' + boxcount(lstItems) + '^' + boxcount(lstData) | 
|---|
|  | 6224 | + '  lines: ' + inttostr(lines) + '   total: ' + inttostr(total); | 
|---|
|  | 6225 | showmessage(aString); | 
|---|
|  | 6226 | end; | 
|---|
|  | 6227 |  | 
|---|
|  | 6228 | procedure TfrmGraphs.cboDateRangeDropDown(Sender: TObject); | 
|---|
|  | 6229 | begin | 
|---|
|  | 6230 | if (Top + Height) > (Screen.Height - 100) then | 
|---|
|  | 6231 | cboDateRange.DropDownCount := 3 | 
|---|
|  | 6232 | else | 
|---|
|  | 6233 | cboDateRange.DropDownCount := 9; | 
|---|
|  | 6234 | end; | 
|---|
|  | 6235 |  | 
|---|
|  | 6236 | procedure TfrmGraphs.mnuPopGraphFixedClick(Sender: TObject); | 
|---|
|  | 6237 | begin | 
|---|
|  | 6238 | with FGraphSetting do FixedDateRange := not FixedDateRange; | 
|---|
|  | 6239 | ChangeStyle; | 
|---|
|  | 6240 | end; | 
|---|
|  | 6241 |  | 
|---|
|  | 6242 | //***************** these are used to fix dropdown when large fonts | 
|---|
|  | 6243 |  | 
|---|
|  | 6244 | procedure TfrmGraphs.cboViewsTopDropDown(Sender: TObject); | 
|---|
|  | 6245 | begin | 
|---|
|  | 6246 | cboViewsTop.Align := alNone; | 
|---|
|  | 6247 | end; | 
|---|
|  | 6248 |  | 
|---|
|  | 6249 | procedure TfrmGraphs.cboViewsTopDropDownClose(Sender: TObject); | 
|---|
|  | 6250 | begin | 
|---|
|  | 6251 | cboViewsTop.Align := alClient; | 
|---|
|  | 6252 | end; | 
|---|
|  | 6253 |  | 
|---|
|  | 6254 | procedure TfrmGraphs.cboViewsBottomDropDown(Sender: TObject); | 
|---|
|  | 6255 | begin | 
|---|
|  | 6256 | cboViewsBottom.Align := alNone; | 
|---|
|  | 6257 | end; | 
|---|
|  | 6258 |  | 
|---|
|  | 6259 | procedure TfrmGraphs.cboViewsBottomDropDownClose(Sender: TObject); | 
|---|
|  | 6260 | begin | 
|---|
|  | 6261 | cboViewsBottom.Align := alClient; | 
|---|
|  | 6262 | end; | 
|---|
|  | 6263 |  | 
|---|
|  | 6264 | //********************* | 
|---|
|  | 6265 |  | 
|---|
|  | 6266 | procedure TfrmGraphs.FormDestroy(Sender: TObject); | 
|---|
|  | 6267 | begin | 
|---|
|  | 6268 | SetSize; | 
|---|
|  | 6269 | end; | 
|---|
|  | 6270 |  | 
|---|
|  | 6271 | procedure TfrmGraphs.SetFontSize(FontSize: integer); | 
|---|
|  | 6272 | begin   // for now, ignore changing chart font size | 
|---|
|  | 6273 | with chartDatelineTop do | 
|---|
|  | 6274 | begin | 
|---|
|  | 6275 | LeftAxis.LabelsFont.Size := 8; | 
|---|
|  | 6276 | BottomAxis.LabelsFont.Size := 8; | 
|---|
|  | 6277 | Foot.Font.Size := 8; | 
|---|
|  | 6278 | Legend.Font.Size := 8; | 
|---|
|  | 6279 | Title.Font.Size := 8; | 
|---|
|  | 6280 | end; | 
|---|
|  | 6281 | with chartDatelineBottom do | 
|---|
|  | 6282 | begin | 
|---|
|  | 6283 | LeftAxis.LabelsFont.Size := 8; | 
|---|
|  | 6284 | BottomAxis.LabelsFont.Size := 8; | 
|---|
|  | 6285 | Foot.Font.Size := 8; | 
|---|
|  | 6286 | Legend.Font.Size := 8; | 
|---|
|  | 6287 | Title.Font.Size := 8; | 
|---|
|  | 6288 | end; | 
|---|
|  | 6289 | end; | 
|---|
|  | 6290 |  | 
|---|
|  | 6291 | procedure TfrmGraphs.lvwItemsTopEnter(Sender: TObject); | 
|---|
|  | 6292 | begin | 
|---|
|  | 6293 | if lvwItemsTop.SelCount = 0 then | 
|---|
|  | 6294 | if lvwItemsTop.Items.Count > 0 then | 
|---|
|  | 6295 | lvwItemsTop.Items[0].Focused := true; | 
|---|
|  | 6296 | end; | 
|---|
|  | 6297 |  | 
|---|
|  | 6298 | procedure TfrmGraphs.chkItemsBottomEnter(Sender: TObject); | 
|---|
|  | 6299 | begin | 
|---|
|  | 6300 | if not chkDualViews.Checked then | 
|---|
|  | 6301 | if pnlFooter.Visible then | 
|---|
|  | 6302 | cboDateRange.SetFocus | 
|---|
|  | 6303 | else | 
|---|
|  | 6304 | SelectNext(ActiveControl as TWinControl, True, True); | 
|---|
|  | 6305 | end; | 
|---|
|  | 6306 |  | 
|---|
|  | 6307 | procedure TfrmGraphs.cboViewsBottomEnter(Sender: TObject); | 
|---|
|  | 6308 | begin | 
|---|
|  | 6309 | if not chkDualViews.Checked then | 
|---|
|  | 6310 | SelectNext(ActiveControl as TWinControl, True, True); | 
|---|
|  | 6311 | end; | 
|---|
|  | 6312 |  | 
|---|
|  | 6313 | procedure TfrmGraphs.lvwItemsBottomEnter(Sender: TObject); | 
|---|
|  | 6314 | begin | 
|---|
|  | 6315 | if lvwItemsBottom.SelCount = 0 then | 
|---|
|  | 6316 | if lvwItemsBottom.Items.Count > 0 then | 
|---|
|  | 6317 | lvwItemsBottom.Items[0].Focused := true; | 
|---|
|  | 6318 | if not chkDualViews.Checked then | 
|---|
|  | 6319 | SelectNext(ActiveControl as TWinControl, True, True); | 
|---|
|  | 6320 | end; | 
|---|
|  | 6321 |  | 
|---|
|  | 6322 | initialization | 
|---|
|  | 6323 | CoInitialize (nil); | 
|---|
|  | 6324 | end. | 
|---|