Module

fBase508Form

Path

C:\CPRS\CPRS30\fBase508Form.pas

Last Modified

7/15/2014 3:26:36 PM

Initialization Code

initialization
  KeyMonitorHook   := SetWindowsHookEx(WH_KEYBOARD, KeyMonitorProc,   0, GetCurrentThreadID);
  MouseMonitorHook := SetWindowsHookEx(WH_MOUSE,    MouseMonitorProc, 0, GetCurrentThreadID);

  SpecifyFormIsNotADialog(TfrmBase508Form);
  SpecifyFormIsNotADialog(Tfrm2006Compatibility);

Finalization Code

finalization
  UnhookWindowsHookEx(KeyMonitorHook);
  UnhookWindowsHookEx(MouseMonitorHook);

end.

Units Used in Interface

Name Comments
uConst -

Units Used in Implementation

Name Comments
uHelpManager -

Classes

Name Comments
TExposedBtn -
TFriendWinControl -
TfrmBase508Form -

Procedures

Name Owner Declaration Scope Comments
Activate TfrmBase508Form procedure Activate; override; Protected
All forms in CPRS should be a descendant of this form, even those that are programatically
 made children of other forms.
AdjustControls - procedure AdjustControls(Control: TWinControl); Local -
AdjustForTitleBarHeightChanges TfrmBase508Form procedure AdjustForTitleBarHeightChanges; Private -
ClickDefaultButton TfrmBase508Form procedure ClickDefaultButton; Private -
FormKeyDown TfrmBase508Form procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); Public/Published -
Loaded TfrmBase508Form procedure Loaded; override; Protected -
ModifyUnfocusableControl TfrmBase508Form procedure ModifyUnfocusableControl(Control: TWinControl; Attach: boolean); Private -
Notification TfrmBase508Form procedure Notification(AComponent: TComponent; Operation: TOperation); override; Protected -
SetDefaultButton TfrmBase508Form procedure SetDefaultButton(const Value: TButton); Private -
SetParent TfrmBase508Form procedure SetParent(AParent: TWinControl); override; Protected -
UM508 TfrmBase508Form procedure UM508(var Message: TMessage); message UM_508; Private
To prevent a 508 feature from taking place, remove that feature's flag form the Actions set
 in an override of the UpdateAccessabilityActions proc.
UnfocusableControlEnter - procedure UnfocusableControlEnter(Self, Sender: TObject); Interfaced -
UpdateAccessibilityActions TfrmBase508Form procedure UpdateAccessibilityActions(var Actions: TAccessibilityActions); virtual; Protected -
WMNCLBUTTONDOWN TfrmBase508Form procedure WMNCLBUTTONDOWN(var Msg: TWMNCLButtonDown) ; message WM_NCLBUTTONDOWN; Private
=============================================================================================
  These two message handlers intercept the help button, and redirect it to the html system.  
=============================================================================================
WMNCLBUTTONUP TfrmBase508Form procedure WMNCLBUTTONUP(var Msg: TWMNCLButtonUp) ; message WM_NCLBUTTONUP; Private -

Functions

Name Owner Declaration Scope Comments
DoOnHelp TfrmBase508Form function DoOnHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean; Private -
FormHelp TfrmBase508Form function FormHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean; Public/Published -
GetDefaultButton TfrmBase508Form function GetDefaultButton(OwnerComponent: TComponent) : TButton; Private -
KeyMonitorProc - function KeyMonitorProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; StdCall; Global -
MouseMonitorProc - function MouseMonitorProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; StdCall; Global If mouse click clear last key code

Global Variables

Name Type Declaration Comments
KeyMonitorHook Simple (unknown) KeyMonitorHook: HHOOK; -
Last508KeyCode LongInt Last508KeyCode: LongInt = 0; -
MouseMonitorHook Simple (unknown) MouseMonitorHook: HHOOK; -

Constants

Name Declaration Scope Comments
aaColorConversion TAccessibilityAction Interfaced -
aaFixTabStopArrowNavigationBug TAccessibilityAction Interfaced -
aaTitleBarHeightAdjustment TAccessibilityAction Interfaced -
KEY_MASK $20000000 Global Ignore Alt keys
MSG_508_CODE_TITLE_BAR 1 Global -


Module Source

1     unit fBase508Form;
2     
3     interface
4     
5     uses
6       Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7       Dialogs, StdCtrls, ExtCtrls, VA508AccessibilityManager, OR2006Compatibility, uConst;
8     
9     type
10      TAccessibilityAction = (aaColorConversion, aaTitleBarHeightAdjustment,
11                              aaFixTabStopArrowNavigationBug);
12      TAccessibilityActions = set of TAccessibilityAction;
13    
14    type
15      TfrmBase508Form = class(TForm)
16        amgrMain: TVA508AccessibilityManager;
17        procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
18        function FormHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean;
19      private
20        HelpClicked: boolean;
21        OldCursor: TCursor;
22        FLoadedCalled: boolean;
23        FDefaultButton: TButton;
24        FActions: TAccessibilityActions;
25        FUnfocusableControlPtr: TMethod;
26        procedure AdjustForTitleBarHeightChanges;
27        function GetDefaultButton(OwnerComponent: TComponent) : TButton;
28        procedure ClickDefaultButton;
29        procedure SetDefaultButton(const Value: TButton);
30        procedure ModifyUnfocusableControl(Control: TWinControl; Attach: boolean);
31        procedure UM508(var Message: TMessage); message UM_508;
32        procedure WMNCLBUTTONDOWN(var Msg: TWMNCLButtonDown) ; message WM_NCLBUTTONDOWN;
33        procedure WMNCLBUTTONUP(var Msg: TWMNCLButtonUp) ; message WM_NCLBUTTONUP;
34        function DoOnHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean;
35      protected
36        procedure Activate; override;
37        procedure Loaded; override;
38        procedure SetParent(AParent: TWinControl); override;
39        procedure Notification(AComponent: TComponent; Operation: TOperation); override;
40        procedure UpdateAccessibilityActions(var Actions: TAccessibilityActions); virtual;
41      public
42        constructor Create(AOwner: TComponent); override;
43        property DefaultButton : TButton read FDefaultButton write SetDefaultButton;
44      end;
45    
46    var
47      Last508KeyCode: LongInt = 0;
48    
49    procedure UnfocusableControlEnter(Self, Sender: TObject);
50    
51    implementation
52    
53    uses ORSystem, ShellAPI, ORFn, VA508AccessibilityRouter, VAUtils, uHelpManager;
54    
55    {$R *.dfm}
56    
57    const
58      MSG_508_CODE_TITLE_BAR = 1;
59    
60    type
61      TFriendWinControl = class(TWinControl);
62    
63    procedure UnfocusableControlEnter(Self, Sender: TObject);
64    var
65      ctrl: TWinControl;
66    begin
67      if (Last508KeyCode = VK_UP) or (Last508KeyCode = VK_LEFT) then
68      begin
69        ctrl := TWinControl(Sender);
70        ctrl := TFriendWinControl(ctrl.Parent).FindNextControl(ctrl, FALSE, TRUE, FALSE);
71        if assigned(ctrl) and (ctrl <> Sender) then
72          ctrl.SetFocus;
73        Last508KeyCode := 0;
74      end
75      else
76      if (Last508KeyCode = VK_DOWN) or (Last508KeyCode = VK_RIGHT) then
77      begin
78        keybd_event(VK_TAB,0,0,0);
79        keybd_event(VK_TAB,0,KEYEVENTF_KEYUP,0);
80        Last508KeyCode := 0;
81      end;
82    end;
83    
84    { TfrmBase508Form }
85    
86    // All forms in CPRS should be a descendant of this form, even those that are programatically
87    // made children of other forms.
88    procedure TfrmBase508Form.Activate;
89    begin
90      Last508KeyCode := 0;
91      inherited;
92    end;
93    
94    procedure TfrmBase508Form.AdjustForTitleBarHeightChanges;
95    var
96      OldResize: TNotifyEvent;
97    begin
98      if parent <> nil then exit;
99      OldResize := OnResize;
100     try
101       OnResize := nil;
102       AdjustForWindowsXPStyleTitleBar(Self);
103     finally
104       OnResize := OldResize;
105     end;
106   end;
107   
108   procedure TfrmBase508Form.Notification(AComponent: TComponent;
109     Operation: TOperation);
110   begin
111     inherited Notification(AComponent, Operation);
112     if FLoadedCalled and (aaFixTabStopArrowNavigationBug in FActions) and (AComponent is TWinControl) then
113     begin
114       ModifyUnfocusableControl(TWinControl(AComponent), Operation = opInsert);
115     end;
116   end;
117   
118   function TfrmBase508Form.GetDefaultButton(ownerComponent: TComponent): TButton;
119   var
120     i : integer;
121   begin
122     Result := nil;
123     with ownerComponent do begin
124       for i := 0 to ComponentCount - 1 do begin
125         if Components[i] is TButton then begin
126           if TButton(Components[i]).Default then
127             Result := TButton(Components[i]);
128         end
129         else if Components[i] is TFrame then
130           Result := GetDefaultButton(Components[i]);
131         if Assigned(Result) then
132           Break;
133       end;
134     end;
135   end;
136   
137   procedure TfrmBase508Form.Loaded;
138   begin
139     inherited Loaded;
140     FLoadedCalled := TRUE;
141   end;
142   
143   procedure TfrmBase508Form.ModifyUnfocusableControl(Control: TWinControl; Attach: boolean);
144   var
145     wc: TFriendWinControl;
146   begin
147     if (Control is TPanel) or (Control is TCustomGroupBox) then
148     begin
149       wc := TFriendWinControl(Control);
150       if not wc.TabStop then
151       begin
152         if not assigned(wc.OnEnter) then
153         begin
154           if Attach then        
155             wc.OnEnter := TNotifyEvent(FUnfocusableControlPtr);
156         end
157         else
158         begin
159           if (not Attach) and (TMethod(wc.OnEnter).Code = FUnfocusableControlPtr.Code) then
160             wc.OnEnter := nil;
161         end;
162       end;
163     end;
164   end;
165   
166   procedure TfrmBase508Form.SetDefaultButton(const Value: TButton);
167   begin
168     FDefaultButton := Value;
169   end;
170   
171   procedure TfrmBase508Form.SetParent(AParent: TWinControl);
172   begin
173     inherited SetParent(AParent);
174     if assigned(AParent) then
175       AutoScroll := False;
176   end;
177   
178   // to prevent a 508 feature from taking place, remove that feature's flag form the Actions set
179   // in an override of the UpdateAccessabilityActions proc.
180   procedure TfrmBase508Form.UM508(var Message: TMessage);
181   begin
182     case Message.WParam of
183       MSG_508_CODE_TITLE_BAR: AdjustForTitleBarHeightChanges;
184     end;
185   end;
186   
187   procedure TfrmBase508Form.UpdateAccessibilityActions(var Actions: TAccessibilityActions);
188   begin
189   end;
190   
191   
192   type
193     TExposedBtn = class(TButton);
194   
195   procedure TfrmBase508Form.ClickDefaultButton;
196   var
197     tempDefaultBtn: TButton;
198   begin
199     if Assigned(DefaultButton) then
200       tempDefaultBtn := DefaultButton
201     else
202       tempDefaultBtn := GetDefaultButton(Self);
203     if Assigned(tempDefaultBtn) then
204       if tempDefaultBtn.Visible then
205         TExposedBtn(tempDefaultBtn).Click;
206   end;
207   
208   
209   
210   constructor TfrmBase508Form.Create(AOwner: TComponent);
211   
212     procedure AdjustControls(Control: TWinControl);
213     var
214       i: integer;
215       wc: TWinControl;
216     begin
217       for I := 0 to Control.ControlCount-1 do
218       begin
219         if Control.Controls[i] is TWinControl then
220         begin
221           wc := TWinControl(Control.Controls[i]);
222           if not wc.TabStop then
223             ModifyUnfocusableControl(wc, TRUE);
224           AdjustControls(wc);
225         end;
226       end;
227     end;
228   
229   begin
230     inherited Create(AOwner);
231     HelpClicked := False;
232     OldCursor := crDefault;
233     if not assigned(Parent) then
234       AutoScroll := True;
235     FActions := [aaColorConversion, aaTitleBarHeightAdjustment, aaFixTabStopArrowNavigationBug];
236     UpdateAccessibilityActions(FActions);
237     if aaColorConversion in FActions then
238       UpdateColorsFor508Compliance(Self);
239   
240     if aaTitleBarHeightAdjustment in FActions then
241       PostMessage(Handle, UM_508, MSG_508_CODE_TITLE_BAR, 0);
242   
243     if aaFixTabStopArrowNavigationBug in FActions then
244     begin
245       FUnfocusableControlPtr.Code := @UnfocusableControlEnter;
246       FUnfocusableControlPtr.Data := nil;
247       AdjustControls(Self);
248     end;
249     Last508KeyCode := 0;
250   end;
251   
252   const
253     KEY_MASK = $20000000; // ignore Alt keys
254   var
255     KeyMonitorHook: HHOOK;
256     MouseMonitorHook: HHOOK;
257   
258   function KeyMonitorProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; StdCall;
259   begin
260     if (code = HC_ACTION) and ((lParam and KEY_MASK) = 0) then
261       Last508KeyCode := wParam;
262     Result := CallNextHookEx(KeyMonitorHook, Code, wParam, lParam);
263   end;
264   
265   // if mouse click clear last key code
266   function MouseMonitorProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; StdCall;
267   begin
268     if (Code = HC_ACTION) and (wParam > WM_MOUSEFIRST) and (wParam <= WM_MOUSELAST) then
269       Last508KeyCode := 0;
270     Result := CallNextHookEx(MouseMonitorHook, Code, wParam, lParam);
271   end;
272   
273   function TfrmBase508Form.DoOnHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean;
274   var
275     context: THelpContext;
276     current: TControl;
277   begin
278     CallHelp := False;
279   
280     if assigned(Screen.ActiveControl) then begin
281       current := Screen.ActiveControl;
282       if (Data = 0) then begin
283         while (current.HelpContext = 0) and (assigned(current.Parent)) do current := current.Parent;
284         context := current.HelpContext;
285       end else begin
286         context := Data;
287       end;
288       Result := FormHelp(Command, context, CallHelp);
289     end else begin
290       Result := Application.OnHelp(Command, Data, CallHelp);
291     end;
292   end;
293   
294   function TfrmBase508Form.FormHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean;
295   begin
296     Result := THelpManager.GetInstance.ExecHelp(Command, Data, CallHelp);
297   end;
298   
299   procedure TfrmBase508Form.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
300   var
301     CallHelp: boolean;
302   begin
303     if (Key = VK_RETURN) and (ssCtrl in Shift) then begin
304       ClickDefaultButton;
305       Key := 0;
306     end else if (Key = VK_F1) then begin
307       if assigned(ActiveControl) then
308         DoOnHelp(1, ActiveControl.HelpContext, CallHelp)
309       else
310         DoOnHelp(1, Self.HelpContext, CallHelp);
311       Key := 0;
312     end;
313   end;
314   
315   {=============================================================================================}
316   {  These two message handlers intercept the help button, and redirect it to the html system.  }
317   {=============================================================================================}
318   procedure TfrmBase508Form.WMNCLBUTTONDOWN(var Msg: TWMNCLButtonDown);
319   begin
320     if Msg.HitTest = HTHELP then
321       Msg.Result := 0 // "eat" the message
322     else
323       inherited;
324   end;
325   
326   procedure TfrmBase508Form.WMNCLBUTTONUP(var Msg: TWMNCLButtonUp);
327   var
328     CallHelp: boolean;
329     wc: TWinControl;
330   begin
331     if Msg.HitTest = HTHELP then begin
332       Msg.Result := 0;
333       OldCursor := Screen.Cursor;
334       Screen.Cursor := crHelp;
335       if HelpClicked then begin
336         wc := FindVCLWindow(Mouse.CursorPos); // find the control under the cursor.
337         if assigned(wc) then begin
338           while (wc.HelpContext = 0) and (assigned(wc.Parent)) do wc := wc.Parent;
339           FormHelp(1, wc.HelpContext, CallHelp);
340         end else
341           FormHelp(1, Self.HelpContext, CallHelp);
342       end else begin
343         Screen.Cursor := OldCursor;
344       end;
345       HelpClicked := not HelpClicked;
346     end else
347       inherited;
348   end;
349   
350   
351   initialization
352     KeyMonitorHook   := SetWindowsHookEx(WH_KEYBOARD, KeyMonitorProc,   0, GetCurrentThreadID);
353     MouseMonitorHook := SetWindowsHookEx(WH_MOUSE,    MouseMonitorProc, 0, GetCurrentThreadID);
354   
355     SpecifyFormIsNotADialog(TfrmBase508Form);
356     SpecifyFormIsNotADialog(Tfrm2006Compatibility);
357   
358   finalization
359     UnhookWindowsHookEx(KeyMonitorHook);
360     UnhookWindowsHookEx(MouseMonitorHook);
361   
362   end.

Module Calls (2 levels)


fBase508Form
 ├uConst
 └uHelpManager

Module Called-By (2 levels)


                  fBase508Form
                   CPRSChart┤ 
                       fPage┤ 
                    fFrame┤ │ 
                   fHSplit┤ │ 
                    fCover┤ │ 
                     fMeds┤ │ 
                       fHP┤ │ 
                  fAResize┘ │ 
                     fAutoSz┤ 
                   fODBase┤ │ 
                  fTimeout┤ │ 
                 fOCAccept┤ │ 
         fBALocalDiagnoses┤ │ 
                  fPCEBase┤ │ 
                 fPCEOther┤ │ 
                fEncVitals┤ │ 
            fPrintLocation┤ │ 
                 fOMAction┤ │ 
                fPrintList┤ │ 
            fConsult513Prt┤ │ 
                   fNoteST┤ │ 
               fNoteSTStop┤ │ 
   fReportsAdhocComponent1┤ │ 
     fReportsAdhocSubItem1┤ │ 
             fDeviceSelect┤ │ 
                   fPtCWAD┤ │ 
                    fAbout┤ │ 
           fClinicWardMeds┤ │ 
                  fLabInfo┤ │ 
               fIconLegend┤ │ 
                  fOptions┤ │ 
       fBAOptionsDiagnoses┤ │ 
                 fODDietLT┤ │ 
              fOrdersRenew┤ │ 
                  fOrderVw┤ │ 
             fLkUpLocation┤ │ 
                 fOrdersCV┤ │ 
                  fODMedFA┤ │ 
             fODMedComplex┤ │ 
                  fNotePrt┤ │ 
                   fNoteDR┤ │ 
                  fNotesBP┤ │ 
            fNoteIDParents┤ │ 
                 fEditProc┤ │ 
              fEditConsult┤ │ 
              fConsMedRslt┤ │ 
             fNoteCPFields┤ │ 
            fOtherSchedule┤ │ 
                 fIVRoutes┤ │ 
               fEffectDate┤ │ 
                 fOMVerify┤ │ 
           fOrderSaveQuick┤ │ 
               fOrdersHold┤ │ 
             fOrdersUnhold┤ │ 
              fOrdersAlert┤ │ 
                fOrderFlag┤ │ 
              fOrderUnflag┤ │ 
            fOrdersRelease┤ │ 
                  fODChild┤ │ 
  fODChangeUnreleasedRenew┤ │ 
            fOrdersOnChart┤ │ 
        fOrdersEvntRelease┤ │ 
           fOrdersComplete┤ │ 
             fOrdersVerify┤ │ 
             fOrderComment┤ │ 
                fOCSession┤ │ 
                 fOrdersTS┤ │ 
                 fODActive┤ │ 
       fActivateDeactivate┤ │ 
             fOrdersRefill┤ │ 
                   fRename┤ │ 
          fODChangeEvtDisp┤ │ 
                fDateRange┤ │ 
                 fNoteCslt┤ │ 
                      fvit┤ │ 
                fAllgyFind┤ │ 
           fARTFreeTextMsg┤ │ 
                 fHFSearch┤ │ 
              fODSaveQuick┤ │ 
               fOMProgress┘ │ 
                   fFrame...┤ 
                  fODMedOIFA┤ 
                   fODMeds┤ │ 
                 fODMedNVA┘ │ 
                    fDrawers┤ 
                 fFrame...┤ │ 
                   dShared┤ │ 
                uReminders┤ │ 
                    fNotes┤ │ 
                 fConsults┤ │ 
                   fDCSumm┤ │ 
           fTemplateEditor┤ │ 
                  fSurgery┘ │ 
             fTemplateDialog┤ 
                fODBase...┤ │ 
                uTemplates┤ │ 
               fDrawers...┤ │ 
                 fNotes...┤ │ 
              fConsults...┤ │ 
                fDCSumm...┤ │ 
             fTemplateView┤ │ 
           fReminderDialog┤ │ 
               fSurgery...┤ │ 
      fTemplateFieldEditor┤ │ 
           fTemplateFields┤ │ 
                   fODAuto┘ │ 
               uReminders...┤ 
                     fPCELex┤ 
      fBALocalDiagnoses...┤ │ 
                fDiagnoses┤ │ 
              fPCEBaseMain┤ │ 
    fBAOptionsDiagnoses...┤ │ 
                fODConsult┤ │ 
                   fODProc┤ │ 
              fEditProc...┤ │ 
           fEditConsult...┘ │ 
             fEncounterFrame┤ 
                      uPCE┤ │ 
                      rPCE┤ │ 
               fPCEBase...┤ │ 
                fVisitType┤ │ 
             fDiagnoses...┤ │ 
           fPCEBaseMain...┤ │ 
                fProcedure┤ │ 
              fPCEOther...┤ │ 
             fImmunization┤ │ 
                 fSkinTest┤ │ 
                fPatientEd┤ │ 
             fHealthFactor┤ │ 
                     fExam┤ │ 
             fEncVitals...┤ │ 
                 fNotes...┤ │ 
              fConsults...┤ │ 
                fDCSumm...┤ │ 
               fSurgery...┤ │ 
                      fGAF┤ │ 
                  fPCEEdit┤ │ 
              fHFSearch...┘ │ 
                 fPCEBase...┤ 
             fPCEBaseMain...┤ 
                 fVitalsDate┤ 
                   uVitals┘ │ 
                     fVitals┤ 
             fEncVitals...┤ │ 
                 fCover...┤ │ 
                   fvit...┘ │ 
                   fPtSelMsg┤ 
                 fFrame...┘ │ 
                      fPtSel┤ 
                 fFrame...┤ │ 
               fPtSelOptns┤ │ 
                   fDupPts┘ │ 
                 fOrdersSign┤ 
                UBAGlobals┤ │ 
                 fFrame...┤ │ 
                   fOrders┤ │ 
      fBALocalDiagnoses...┤ │ 
                   fReview┤ │ 
                uSignItems┘ │ 
                     fRptBox┤ 
                   uOrders┤ │ 
                 fFrame...┤ │ 
                fOrders...┤ │ 
               fDrawers...┤ │ 
        fTemplateDialog...┤ │ 
             uReminders...┤ │ 
                fVitals...┤ │ 
                 fCover...┤ │ 
                 fPtSel...┤ │ 
            fOrdersSign...┤ │ 
                  fMeds...┤ │ 
                 fAllgyBox┤ │ 
                 fARTAllgy┤ │ 
                 fNotes...┤ │ 
                    fProbs┤ │ 
                   fGraphs┤ │ 
            fGraphProfiles┤ │ 
              fConsults...┤ │ 
          fTemplateView...┤ │ 
        fReminderDialog...┤ │ 
                     fLabs┤ │ 
                fPtCWAD...┤ │ 
                fReview...┤ │ 
         fPatientFlagMulti┤ │ 
                fNoteProps┤ │ 
               fNotesBP...┤ │ 
              fEditProc...┤ │ 
           fEditConsult...┤ │ 
           fConsMedRslt...┤ │ 
                    fODLab┤ │ 
                fODMeds...┤ │ 
         fOrdersRelease...┤ │ 
              fODMedNVA...┤ │ 
         fOrdersOnChart...┤ │ 
           fODReleaseEvent┤ │ 
                  uOptions┘ │ 
                    fReports┤ 
                 fFrame...┤ │ 
                 fProbs...┤ │ 
             fReportsPrint┤ │ 
fReportsAdhocComponent1...┤ │ 
                fGraphs...┤ │ 
     fOptionsReportsCustom┤ │ 
    fOptionsReportsDefault┘ │ 
                      fVisit┤ 
                      fEncnt┤ 
                uOrders...┤ │ 
                 fFrame...┤ │ 
                fVitals...┤ │ 
                 fNotes...┤ │ 
                 fProbs...┤ │ 
              fConsults...┤ │ 
                fDCSumm...┤ │ 
               fSurgery...┤ │ 
               fPCEEdit...┘ │ 
                   fProbs...┤ 
                    fProbEdt┤ 
                 fProbs...┘ │ 
                    fProbflt┤ 
                 fProbs...┘ │ 
                    fProbLex┤ 
                 fProbs...┤ │ 
               fProbEdt...┘ │ 
               fProbFreetext┤ 
                 CPRSChart┤ │ 
               fProbLex...┘ │ 
                    fProbCmt┤ 
                 fProbs...┤ │ 
               fProbEdt...┘ │ 
            fReportsPrint...┤ 
                  fGraphs...┤ 
              fGraphSettings┤ 
                fGraphs...┤ │ 
               fOptions...┘ │ 
                  fGraphData┤ 
                 fFrame...┤ │ 
               fReports...┤ │ 
                fGraphs...┤ │ 
         fGraphSettings...┤ │ 
         fGraphProfiles...┘ │ 
           fGraphProfiles...┤ 
                fGraphOthers┤ 
                fGraphs...┤ │ 
         fGraphProfiles...┘ │ 
                fPCEProvider┤ 
                   uPCE...┤ │ 
        fEncounterFrame...┘ │ 
            fTemplateView...┤ 
          fTemplateEditor...┤ 
             fTemplateImport┤ 
             uTemplates...┘ │ 
          fReminderDialog...┤ 
                     fMHTest┤ 
                 fFrame...┤ │ 
             uReminders...┤ │ 
        fReminderDialog...┤ │ 
                rReminders┘ │ 
                    fLabs...┤ 
                    fLabTest┤ 
                  fLabs...┘ │ 
                   fLabTests┤ 
                  fLabs...┘ │ 
              fLabTestGroups┤ 
                  fLabs...┘ │ 
                   fLabPrint┤ 
                  fLabs...┘ │ 
                     fPtDemo┤ 
                 fFrame...┘ │ 
                  fReview...┤ 
                    fxBroker┤ 
                 fFrame...┘ │ 
                     fxLists┤ 
                 fFrame...┘ │ 
                    fxServer┤ 
                 fFrame...┘ │ 
                     fSplash┤ 
                 CPRSChart┘ │ 
               fReminderTree┤ 
                 fFrame...┤ │ 
             uReminders...┤ │ 
                 fNotes...┤ │ 
              fConsults...┤ │ 
        fReminderDialog...┤ │ 
               fSurgery...┘ │ 
                 fOptions...┤ 
                  fODMessage┤ 
                fOrdersPrint┤ 
                uOrders...┤ │ 
                fOrders...┘ │ 
                fSurgeryView┤ 
               fSurgery...┘ │ 
               fRemVisitInfo┤ 
        fReminderDialog...┘ │ 
               fDefaultEvent┤ 
              fPtSelOptns...┤ 
               fPtSelOptSave┤ 
            fPtSelOptns...┘ │ 
                  fDupPts...┤ 
                     fPtSens┤ 
                 fPtSelDemog┤ 
                 fPtSel...┘ │ 
        fPatientFlagMulti...┤ 
               fAlertForward┤ 
                 fFrame...┤ │ 
                 fPtSel...┘ │ 
                   fOrdersDC┤ 
                fOrders...┤ │ 
                  fMeds...┘ │ 
                      fODGen┤ 
                uOrders...┘ │ 
                  fConsultBS┤ 
              fConsults...┘ │ 
                  fConsultBD┤ 
              fConsults...┘ │ 
                   fSignItem┤ 
                 fNotes...┤ │ 
              fConsults...┤ │ 
                fDCSumm...┤ │ 
                fReview...┤ │ 
               fSurgery...┤ │ 
         fOrdersRelease...┘ │ 
                 fConsultBSt┤ 
              fConsults...┘ │ 
               fConsultsView┤ 
              fConsults...┘ │ 
                 fConsultAct┤ 
              fConsults...┘ │ 
                   fCsltNote┤ 
              fConsults...┘ │ 
                fAddlSigners┤ 
                 fNotes...┤ │ 
              fConsults...┤ │ 
                fDCSumm...┤ │ 
               fSurgery...┘ │ 
               fNoteProps...┤ 
                     fNoteBA┤ 
                 fNotes...┤ │ 
                fDCSumm...┘ │ 
                     fNoteBD┤ 
                 fNotes...┤ │ 
                fDCSumm...┘ │ 
                    fTIUView┤ 
                 fNotes...┤ │ 
                fDCSumm...┘ │ 
                fDCSummProps┤ 
                fDCSumm...┘ │ 
     fTemplateFieldEditor...┤ 
          fTemplateFields...┤ 
                fEditProc...┤ 
             fEditConsult...┤ 
             fConsultAlertTo┤ 
            fConsultAct...┤ │ 
           fConsMedRslt...┘ │ 
                     fPreReq┤ 
             fODConsult...┤ │ 
                fODProc...┘ │ 
                  fCombatVet┤ 
                 fFrame...┘ │ 
              fODRadApproval┤ 
                    fODRad┘ │ 
              fODRadConShRes┤ 
                 fODRad...┘ │ 
           fODLabOthCollSamp┤ 
                 fODLab...┤ │ 
                  fODBBank┘ │ 
               fODLabOthSpec┤ 
                 fODLab...┤ │ 
               fODBBank...┘ │ 
             fODLabImmedColl┤ 
                 fODLab...┤ │ 
               fODBBank...┘ │ 
               fLabCollTimes┤ 
                 fODLab...┤ │ 
               fODBBank...┘ │ 
                     fOMNavA┤ 
                uOrders...┘ │ 
                      fOMSet┤ 
                uOrders...┘ │ 
          fODReleaseEvent...┤ 
                 fOrdersCopy┤ 
                fOrders...┤ │ 
                mEvntDelay┘ │ 
                    fMedCopy┤ 
                  fMeds...┤ │ 
             mEvntDelay...┘ │ 
           fODValidateAction┤ 
                fOrders...┘ │ 
                fRenewOutMed┤ 
           fOrdersRenew...┘ │ 
            fTemplateObjects┤ 
        fTemplateEditor...┘ │ 
            fTemplateAutoGen┤ 
        fTemplateEditor...┘ │ 
              fRemCoverSheet┤ 
          fReminderTree...┤ │ 
         fOptionsReminders┘ │ 
            fRemCoverPreview┤ 
         fRemCoverSheet...┘ │ 
                 fPCEEdit...┤ 
                fOptionsDays┤ 
               fOptions...┘ │ 
        fOptionsReminders...┤ 
           fOptionsSurrogate┤ 
               fOptions...┘ │ 
    fOptionsPatientSelection┤ 
               fOptions...┘ │ 
               fOptionsLists┤ 
               fOptions...┘ │ 
             fOptionsNewList┤ 
          fOptionsLists...┘ │ 
               fOptionsTeams┤ 
               fOptions...┘ │ 
        fOptionsCombinations┤ 
               fOptions...┘ │ 
               fOptionsOther┤ 
               fOptions...┘ │ 
               fOptionsNotes┤ 
               fOptions...┘ │ 
              fOptionsTitles┤ 
               fOptions...┘ │ 
    fOptionsReportsCustom...┤ 
   fOptionsReportsDefault...┤ 
                fODRadImType┤ 
         fOptionsPrimaryList┤ 
           fOptionsSubscribe┤ 
                   fPostings┘