VistA-cprs/CPRS-Chart/fProbLex.pas

223 lines
6.2 KiB
Plaintext

unit fProbLex;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, ORFn, uProbs, StdCtrls, Buttons, ExtCtrls, ORctrls, uConst,
fAutoSz, uInit, fBase508Form, VA508AccessibilityManager;
type
TfrmPLLex = class(TfrmBase508Form)
Label1: TLabel;
bbCan: TBitBtn;
bbOK: TBitBtn;
pnlStatus: TPanel;
Bevel1: TBevel;
lblstatus: TVA508StaticText;
ebLex: TCaptionEdit;
lbLex: TORListBox;
bbSearch: TBitBtn;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure bbOKClick(Sender: TObject);
procedure bbCanClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ebLexKeyPress(Sender: TObject; var Key: Char);
procedure bbSearchClick(Sender: TObject);
procedure lbLexClick(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
uses
fprobs, rProbs, fProbEdt;
{$R *.DFM}
var
ProblemList:TstringList;
const
TX_CONTINUE_799 = 'A suitable term was not found based on user input and current defaults.'#13#10 +
'If you proceed with this nonspecific term, an ICD code of "799.9 - OTHER'#13#10 +
'UNKNOWN AND UNSPECIFIED CAUSE OF MORBIDITY OR MORTALITY" will be filed.'#13#10#13#10 +
'Use ';
procedure TfrmPLLex.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ProblemList.free;
{frmProblems.lblProbList.Caption := frmProblems.pnlRight.Caption ;}
Release;
end;
procedure TfrmPLLex.bbOKClick(Sender: TObject);
const
TX799 = '799.9';
var
x, y: string;
i: integer;
begin
if (ebLex.Text = '') and ((lbLex.itemindex < 0) or (lbLex.Items.Count = 0)) then
exit {bail out - nothing selected}
else if ((lbLex.itemindex < 0) or (lbLex.Items.Count = 0)) then
begin
if InfoBox(TX_CONTINUE_799 + UpperCase(ebLex.Text) + '?', 'Unresolved Entry',
MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION) <> IDYES then Exit;
PLProblem:=u + ebLex.Text + u + TX799 + u;
end
else if (Piece(ProblemList[lbLex.ItemIndex], U, 3) = '') then
begin
if InfoBox(TX_CONTINUE_799 + UpperCase(lbLex.DisplayText[lbLex.ItemIndex]) + '?', 'Unresolved Entry',
MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION) <> IDYES then Exit;
PLProblem:=u + lbLex.DisplayText[lbLex.ItemIndex] + u + TX799 + u;
end
else
begin
x := ProblemList[lbLex.ItemIndex];
y := Piece(x, U, 2);
i := Pos(' *', y);
if i > 0 then y := Copy(y, 1, i - 1);
SetPiece(x, U, 2, y);
PLProblem := x;
end;
if (not Application.Terminated) and (not uInit.TimedOut) then {prevents GPF if system close box is clicked
while frmDlgProbs is visible}
if Assigned(frmProblems) then PostMessage(frmProblems.Handle, UM_PLLex, 0, 0) ;
Close;
end;
procedure TfrmPLLex.bbCanClick(Sender: TObject);
begin
PLProblem:='';
close;
end;
procedure TfrmPLLex.FormCreate(Sender: TObject);
begin
PLProblem := '';
ProblemList:=TStringList.create;
ResizeAnchoredFormToFont(self);
//Resize bevel to center horizontally
Bevel1.Width := pnlStatus.ClientWidth - Bevel1.Left- Bevel1.Left;
end;
procedure TfrmPLLex.ebLexKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
bbSearchClick(Sender);
Key:=#0;
end
else
begin
lblStatus.caption:='';
lbLex.Items.clear;
end;
end;
procedure TfrmPLLex.bbSearchClick(Sender: TObject);
VAR
ALIST:Tstringlist;
v,Max, Found:string;
onlist: integer;
procedure SetLexList(v:string);
var {too bad ORCombo only allows 1 piece to be shown}
i, j: integer;
txt, term, code, sys, lin, x: String;
begin
lbLex.Clear;
onlist:=-1;
for i:=0 to pred(ProblemList.count) do
begin
txt:=ProblemList[i];
Term:=Piece(txt,u,2);
code:=Piece(txt,u,3);
sys:=Piece(txt,u,5);
lin:=Piece(txt,u,1) + u + term + ' ' + sys ;
if code<>'' then lin:=lin + ':(' + code + ')';
//lin:=Piece(txt,u,1) + u + term {+ ' ' + sys} ;
//{if code<>'' then lin:=lin + ':(' + code + ')'; }
j := Pos(' *', Term);
if j > 0 then
x := UpperCase(Copy(Term, 1, j-1))
else
x := UpperCase(Term);
if (x=V) or (code=V) then onlist:=i;
lbLex.Items.add(lin);
end;
if onlist < 0 then
begin {Search term not in return list, so add it}
lbLex.Items.insert(0,(u + V) );
ProblemList.insert(0,(u + V + u + u));
lbLex.itemIndex:=0;
end
else
begin {search term is on return list, so highlight it}
lbLex.itemIndex:=onlist;
ActiveControl := bbOK;
end;
lbLex.SetFocus;
end;
begin {body}
if ebLex.text='' then
begin
InfoBox('Enter a term to search for, then click "SEARCH"', 'Information', MB_OK or MB_ICONINFORMATION);
exit; {don't bother to drop if no text entered}
end ;
Alist:=TStringList.create;
try
if lblStatus.caption = '' then
begin
lblStatus.caption := 'Searching Lexicon...';
lblStatus.refresh;
end;
v:=uppercase(ebLex.text);
if (v<>'') and (lbLex.itemindex<1) then
begin
ProblemList.clear;
{FastAssign(ProblemLexiconSearch(v), Alist) ;}
FastAssign(OldProblemLexiconSearch(v, 100), Alist) ;
end;
if Alist.count > 0 then
begin
FastAssign(Alist, lbLex.Items);
FastAssign(Alist, ProblemList);
Max:=ProblemList[pred(ProblemList.count)]; {get max number found}
ProblemList.delete(pred(ProblemList.count)); {shed max# found}
SetLexList(V);
if onlist < 0 then
Found := inttostr(ProblemList.Count -1)
else
Found := inttostr(ProblemList.Count);
lblStatus.caption:='Search returned ' + Found + ' items.' +
' out of a possible ' + Max;
lbLex.Itemindex := 0 ;
end
else
begin
lblStatus.caption:='No Entries Found for "' + ebLex.text + '"';
end ;
finally
Alist.free;
end;
end;
procedure TfrmPLLex.lbLexClick(Sender: TObject);
begin
bbOKClick(sender);
end;
procedure TfrmPLLex.FormShow(Sender: TObject);
begin
ebLex.setfocus;
end;
end.