| 1 | unit fProbLex;
 | 
|---|
| 2 | 
 | 
|---|
| 3 | interface
 | 
|---|
| 4 | 
 | 
|---|
| 5 | uses
 | 
|---|
| 6 |   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
 | 
|---|
| 7 |   Forms, Dialogs, ORFn, uProbs, StdCtrls, Buttons, ExtCtrls, ORctrls, uConst,
 | 
|---|
| 8 |   fAutoSz, uInit;
 | 
|---|
| 9 | 
 | 
|---|
| 10 | type
 | 
|---|
| 11 |   TfrmPLLex = class(TForm)
 | 
|---|
| 12 |     Label1: TLabel;
 | 
|---|
| 13 |     bbCan: TBitBtn;
 | 
|---|
| 14 |     bbOK: TBitBtn;
 | 
|---|
| 15 |     Panel1: TPanel;
 | 
|---|
| 16 |     Bevel1: TBevel;
 | 
|---|
| 17 |     lblstatus: TLabel;
 | 
|---|
| 18 |     ebLex: TCaptionEdit;
 | 
|---|
| 19 |     lbLex: TORListBox;
 | 
|---|
| 20 |     bbSearch: TBitBtn;
 | 
|---|
| 21 |     procedure FormClose(Sender: TObject; var Action: TCloseAction);
 | 
|---|
| 22 |     procedure bbOKClick(Sender: TObject);
 | 
|---|
| 23 |     procedure bbCanClick(Sender: TObject);
 | 
|---|
| 24 |     procedure FormCreate(Sender: TObject);
 | 
|---|
| 25 |     procedure ebLexKeyPress(Sender: TObject; var Key: Char);
 | 
|---|
| 26 |     procedure bbSearchClick(Sender: TObject);
 | 
|---|
| 27 |     procedure lbLexClick(Sender: TObject);
 | 
|---|
| 28 |     procedure FormShow(Sender: TObject);
 | 
|---|
| 29 |   private
 | 
|---|
| 30 |     { Private declarations }
 | 
|---|
| 31 |   public
 | 
|---|
| 32 |     { Public declarations }
 | 
|---|
| 33 |   end;
 | 
|---|
| 34 | 
 | 
|---|
| 35 | 
 | 
|---|
| 36 | implementation
 | 
|---|
| 37 | 
 | 
|---|
| 38 | uses
 | 
|---|
| 39 |  fprobs, rProbs, fProbEdt;
 | 
|---|
| 40 | 
 | 
|---|
| 41 | {$R *.DFM}
 | 
|---|
| 42 | 
 | 
|---|
| 43 | var
 | 
|---|
| 44 |  ProblemList:TstringList;
 | 
|---|
| 45 | 
 | 
|---|
| 46 | const
 | 
|---|
| 47 |   TX_CONTINUE_799 = 'A suitable term was not found based on user input and current defaults.'#13#10 + 
 | 
|---|
| 48 |                     'If you proceed with this nonspecific term, an ICD code of "799.9 - OTHER'#13#10 +
 | 
|---|
| 49 |                     'UNKNOWN AND UNSPECIFIED CAUSE OF MORBIDITY OR MORTALITY" will be filed.'#13#10#13#10 +
 | 
|---|
| 50 |                     'Use ';
 | 
|---|
| 51 | 
 | 
|---|
| 52 | procedure TfrmPLLex.FormClose(Sender: TObject; var Action: TCloseAction);
 | 
|---|
| 53 | begin
 | 
|---|
| 54 |  ProblemList.free;
 | 
|---|
| 55 |  {frmProblems.lblProbList.Caption := frmProblems.pnlRight.Caption ;}
 | 
|---|
| 56 |  Release;
 | 
|---|
| 57 | end;
 | 
|---|
| 58 | 
 | 
|---|
| 59 | procedure TfrmPLLex.bbOKClick(Sender: TObject);
 | 
|---|
| 60 | const
 | 
|---|
| 61 |   TX799 = '799.9';
 | 
|---|
| 62 | var
 | 
|---|
| 63 |   x, y: string;
 | 
|---|
| 64 |   i: integer;
 | 
|---|
| 65 | begin
 | 
|---|
| 66 |   if (ebLex.Text = '') and ((lbLex.itemindex < 0) or (lbLex.Items.Count = 0)) then
 | 
|---|
| 67 |     exit {bail out - nothing selected}
 | 
|---|
| 68 |   else if ((lbLex.itemindex < 0) or (lbLex.Items.Count = 0)) then
 | 
|---|
| 69 |     begin
 | 
|---|
| 70 |       if InfoBox(TX_CONTINUE_799 + UpperCase(ebLex.Text) + '?', 'Unresolved Entry',
 | 
|---|
| 71 |         MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION) <> IDYES then Exit;
 | 
|---|
| 72 |       PLProblem:=u + ebLex.Text + u + TX799 + u;
 | 
|---|
| 73 |     end
 | 
|---|
| 74 |   else if (Piece(ProblemList[lbLex.ItemIndex], U, 3) = '') then
 | 
|---|
| 75 |     begin
 | 
|---|
| 76 |       if InfoBox(TX_CONTINUE_799 + UpperCase(lbLex.DisplayText[lbLex.ItemIndex]) + '?', 'Unresolved Entry',
 | 
|---|
| 77 |         MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION) <> IDYES then Exit;
 | 
|---|
| 78 |       PLProblem:=u + lbLex.DisplayText[lbLex.ItemIndex] + u + TX799 + u;
 | 
|---|
| 79 |     end
 | 
|---|
| 80 |   else
 | 
|---|
| 81 |     begin
 | 
|---|
| 82 |        x := ProblemList[lbLex.ItemIndex];
 | 
|---|
| 83 |        y := Piece(x, U, 2);
 | 
|---|
| 84 |        i := Pos(' *', y);
 | 
|---|
| 85 |        if i > 0 then y := Copy(y, 1, i - 1);
 | 
|---|
| 86 |        SetPiece(x, U, 2, y);
 | 
|---|
| 87 |        PLProblem := x;
 | 
|---|
| 88 |     end;
 | 
|---|
| 89 |   if (not Application.Terminated) and (not uInit.TimedOut) then   {prevents GPF if system close box is clicked
 | 
|---|
| 90 |                                                                    while frmDlgProbs is visible}
 | 
|---|
| 91 |      if Assigned(frmProblems) then PostMessage(frmProblems.Handle, UM_PLLex, 0, 0)  ;
 | 
|---|
| 92 |  Close;
 | 
|---|
| 93 | end;
 | 
|---|
| 94 | 
 | 
|---|
| 95 | procedure TfrmPLLex.bbCanClick(Sender: TObject);
 | 
|---|
| 96 | begin
 | 
|---|
| 97 |  PLProblem:='';
 | 
|---|
| 98 |  close;
 | 
|---|
| 99 | end;
 | 
|---|
| 100 | 
 | 
|---|
| 101 | procedure TfrmPLLex.FormCreate(Sender: TObject);
 | 
|---|
| 102 | begin
 | 
|---|
| 103 |   PLProblem := '';
 | 
|---|
| 104 |   ProblemList:=TStringList.create;
 | 
|---|
| 105 |   ResizeAnchoredFormToFont(self);
 | 
|---|
| 106 |   //Resize bevel to center horizontally
 | 
|---|
| 107 |   Bevel1.Width := Panel1.ClientWidth - Bevel1.Left- Bevel1.Left;
 | 
|---|
| 108 | end;
 | 
|---|
| 109 | 
 | 
|---|
| 110 | procedure TfrmPLLex.ebLexKeyPress(Sender: TObject; var Key: Char);
 | 
|---|
| 111 | begin
 | 
|---|
| 112 |  if key=#13 then
 | 
|---|
| 113 |   begin
 | 
|---|
| 114 |    bbSearchClick(Sender);
 | 
|---|
| 115 |    Key:=#0;
 | 
|---|
| 116 |   end
 | 
|---|
| 117 |  else
 | 
|---|
| 118 |   begin
 | 
|---|
| 119 |    lblStatus.caption:='';
 | 
|---|
| 120 |    lbLex.Items.clear;
 | 
|---|
| 121 |   end;
 | 
|---|
| 122 |  end;
 | 
|---|
| 123 | 
 | 
|---|
| 124 | procedure TfrmPLLex.bbSearchClick(Sender: TObject);
 | 
|---|
| 125 | VAR
 | 
|---|
| 126 |  ALIST:Tstringlist;
 | 
|---|
| 127 |  v,Max, Found:string;
 | 
|---|
| 128 |  onlist: integer;
 | 
|---|
| 129 | procedure SetLexList(v:string);
 | 
|---|
| 130 | var   {too bad ORCombo only allows 1 piece to be shown}
 | 
|---|
| 131 |  i, j: integer;
 | 
|---|
| 132 |  txt, term, code, sys, lin, x: String;
 | 
|---|
| 133 | begin
 | 
|---|
| 134 |  lbLex.Clear;
 | 
|---|
| 135 |  onlist:=-1;
 | 
|---|
| 136 |  for i:=0 to pred(ProblemList.count) do
 | 
|---|
| 137 |   begin
 | 
|---|
| 138 |    txt:=ProblemList[i];
 | 
|---|
| 139 |    Term:=Piece(txt,u,2);
 | 
|---|
| 140 |    code:=Piece(txt,u,3);
 | 
|---|
| 141 |    sys:=Piece(txt,u,5);
 | 
|---|
| 142 |    lin:=Piece(txt,u,1) + u + term + '   ' + sys ;
 | 
|---|
| 143 |    if code<>'' then lin:=lin + ':(' + code + ')';  
 | 
|---|
| 144 |    //lin:=Piece(txt,u,1) + u + term {+ '   ' + sys} ;
 | 
|---|
| 145 |    //{if code<>'' then lin:=lin + ':(' + code + ')';  }
 | 
|---|
| 146 |    j := Pos(' *', Term);
 | 
|---|
| 147 |    if j > 0 then
 | 
|---|
| 148 |      x := UpperCase(Copy(Term, 1, j-1))
 | 
|---|
| 149 |    else
 | 
|---|
| 150 |      x := UpperCase(Term);
 | 
|---|
| 151 |    if (x=V) or (code=V) then onlist:=i;
 | 
|---|
| 152 |    lbLex.Items.add(lin);
 | 
|---|
| 153 |   end;
 | 
|---|
| 154 |  if onlist < 0 then
 | 
|---|
| 155 |    begin  {Search term not in return list, so add it}
 | 
|---|
| 156 |     lbLex.Items.insert(0,(u + V) );
 | 
|---|
| 157 |     ProblemList.insert(0,(u + V + u + u));
 | 
|---|
| 158 |     lbLex.itemIndex:=0;
 | 
|---|
| 159 |    end
 | 
|---|
| 160 |  else
 | 
|---|
| 161 |    begin  {search term is on return list, so highlight it}
 | 
|---|
| 162 |      lbLex.itemIndex:=onlist;
 | 
|---|
| 163 |      ActiveControl := bbOK;
 | 
|---|
| 164 |    end;
 | 
|---|
| 165 |  lbLex.SetFocus;
 | 
|---|
| 166 | end;
 | 
|---|
| 167 | 
 | 
|---|
| 168 | begin  {body}
 | 
|---|
| 169 | if ebLex.text='' then
 | 
|---|
| 170 |  begin
 | 
|---|
| 171 |    InfoBox('Enter a term to search for, then click "SEARCH"', 'Information', MB_OK or MB_ICONINFORMATION);
 | 
|---|
| 172 |    exit; {don't bother to drop if no text entered}
 | 
|---|
| 173 |  end ;
 | 
|---|
| 174 | Alist:=TStringList.create;
 | 
|---|
| 175 | try
 | 
|---|
| 176 |  if lblStatus.caption = '' then
 | 
|---|
| 177 |   begin
 | 
|---|
| 178 |    lblStatus.caption := 'Searching Lexicon...';
 | 
|---|
| 179 |    lblStatus.refresh;
 | 
|---|
| 180 |   end;
 | 
|---|
| 181 |  v:=uppercase(ebLex.text);
 | 
|---|
| 182 |  if (v<>'') and (lbLex.itemindex<1) then
 | 
|---|
| 183 |   begin
 | 
|---|
| 184 |    ProblemList.clear;
 | 
|---|
| 185 |    {Alist.Assign(ProblemLexiconSearch(v)) ;}
 | 
|---|
| 186 |    Alist.Assign(OldProblemLexiconSearch(v, 100)) ;
 | 
|---|
| 187 |   end;
 | 
|---|
| 188 |  if Alist.count > 0 then
 | 
|---|
| 189 |     begin
 | 
|---|
| 190 |      lbLex.Items.assign(Alist);
 | 
|---|
| 191 |      ProblemList.assign(Alist);
 | 
|---|
| 192 |      Max:=ProblemList[pred(ProblemList.count)]; {get max number found}
 | 
|---|
| 193 |      ProblemList.delete(pred(ProblemList.count)); {shed max# found}
 | 
|---|
| 194 |      SetLexList(V);
 | 
|---|
| 195 |      if onlist < 0 then
 | 
|---|
| 196 |        Found := inttostr(ProblemList.Count -1)
 | 
|---|
| 197 |      else
 | 
|---|
| 198 |        Found := inttostr(ProblemList.Count);
 | 
|---|
| 199 |      lblStatus.caption:='Search returned ' + Found + ' items.' +
 | 
|---|
| 200 |                         ' out of a possible ' + Max;
 | 
|---|
| 201 |      lbLex.Itemindex := 0 ;
 | 
|---|
| 202 |     end
 | 
|---|
| 203 |  else
 | 
|---|
| 204 |     begin
 | 
|---|
| 205 |      lblStatus.caption:='No Entries Found for "' + ebLex.text + '"';
 | 
|---|
| 206 |     end ;
 | 
|---|
| 207 |  finally
 | 
|---|
| 208 |   Alist.free;
 | 
|---|
| 209 |  end;
 | 
|---|
| 210 | end;
 | 
|---|
| 211 | 
 | 
|---|
| 212 | procedure TfrmPLLex.lbLexClick(Sender: TObject);
 | 
|---|
| 213 | begin
 | 
|---|
| 214 |  bbOKClick(sender);
 | 
|---|
| 215 | end;
 | 
|---|
| 216 | 
 | 
|---|
| 217 | procedure TfrmPLLex.FormShow(Sender: TObject);
 | 
|---|
| 218 | begin
 | 
|---|
| 219 |  ebLex.setfocus;
 | 
|---|
| 220 | end;
 | 
|---|
| 221 | 
 | 
|---|
| 222 | end.
 | 
|---|