| [459] | 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.
 | 
|---|