Ignore:
Timestamp:
Aug 12, 2009, 7:14:16 PM (15 years ago)
Author:
Kevin Toppenberg
Message:

TMG Ver 1.1 Added HTML Support, better demographics editing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cprs/branches/tmg-cprs/CPRS-Chart/fNotes.pas

    r453 r541  
    1 //kt -- Modified with SourceScanner on 7/19/2007
     1//kt -- Modified with SourceScanner on 7/19/2007, also 8/09
    22unit fNotes;
    33{$O-}
     
    99  fHSplit, StdCtrls, ExtCtrls, Menus, ComCtrls, ORCtrls, ORFn, uConst, ORDtTm,
    1010  uPCE, ORClasses, fDrawers, ImgList, rTIU, uTIU, uDocTree, fRptBox, fPrintList,
    11   fNoteST, ORNet, fNoteSTStop, OleCtrls, SHDocVw, DKLang;
     11  MSHTML,TMGHTML2,ActiveX,  //kt added this line 8/09 for HTML editing
     12  fNoteST, ORNet, fNoteSTStop, OleCtrls, SHDocVw, DKLang, Buttons, ToolWin;
     13
     14type
     15  TEditModes = (emNone,emText,emHTML);        //kt 8/09
     16  TViewModes = (vmEdit,vmView,vmText,vmHTML); //kt 8/09
     17  TViewModeSet = Set of TViewModes;           //kt 8/09
     18const
     19  vmHTML_MODE : array [false..true] of TViewModes = (vmText,vmHTML); //kt 8/09
     20  emHTML_MODE : array [false..true] of TEditModes = (emText,emHTML); //kt 8/09
    1221
    1322type
     
    150159    mnuViewRemoteData: TMenuItem;
    151160    mnuViewPostings: TMenuItem;
     161    pnlHtmlViewer: TPanel;                 //kt 8/09
     162    pnlTextWrite: TPanel;                  //kt 8/09
     163    popNoteMemoHTMLFormat: TMenuItem;      //kt 8/09
     164    pnlHTMLWrite: TPanel;                  //kt 8/09
     165    pnlHTMLEdit: TPanel;                   //kt 8/09
     166    ToolBar: TToolBar;                     //kt 8/09
     167    cbFontNames: TComboBox;                //kt 8/09
     168    cbFontSize: TComboBox;                 //kt 8/09
     169    btnFonts: TSpeedButton;                //kt 8/09
     170    btnItalic: TSpeedButton;               //kt 8/09
     171    btnBold: TSpeedButton;                 //kt 8/09
     172    btnUnderline: TSpeedButton;            //kt 8/09
     173    btnBullets: TSpeedButton;              //kt 8/09
     174    btnNumbers: TSpeedButton;              //kt 8/09
     175    btnLeftAlign: TSpeedButton;            //kt 8/09
     176    btnCenterAlign: TSpeedButton;          //kt 8/09
     177    btnRightAlign: TSpeedButton;           //kt 8/09
     178    btnMoreIndent: TSpeedButton;           //kt 8/09
     179    btnLessIndent: TSpeedButton;           //kt 8/09
     180    btnTextColor: TSpeedButton;            //kt 8/09
     181    btnBackColor: TSpeedButton;            //kt 8/09
    152182    procedure mnuChartTabClick(Sender: TObject);
    153183    procedure lstNotesClick(Sender: TObject);
     
    222252    procedure memNewNoteKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    223253    procedure sptHorzCanResize(Sender: TObject; var NewSize: Integer; var Accept: Boolean);
    224     procedure WebBrowser1DocumentComplete(Sender: TObject;   //kt added
    225       const pDisp: IDispatch; var URL: OleVariant);          //kt added
     254    //kt procedure WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);          //kt added
    226255    procedure popNoteMemoInsTemplateClick(Sender: TObject);
    227256    procedure popNoteMemoPreviewClick(Sender: TObject);
     
    235264    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
    236265      Y: Integer);
    237     procedure WebBrowser1CommandStateChange(Sender: TObject;
    238       Command: Integer; Enable: WordBool);   //kt
    239266    procedure memNewNoteKeyPress(Sender: TObject; var Key: Char);
    240267    procedure memNewNoteKeyUp(Sender: TObject; var Key: Word;
     
    245272    procedure ViewInfo(Sender: TObject);
    246273    procedure mnuViewInformationClick(Sender: TObject);
     274    procedure btnBackColorClick(Sender: TObject);    //kt 8/09
     275    procedure btnBoldClick(Sender: TObject);         //kt 8/09
     276    procedure btnBulletsClick(Sender: TObject);      //kt 8/09
     277    procedure btnCenterAlignClick(Sender: TObject);  //kt 8/09
     278    procedure btnFontsClick(Sender: TObject);        //kt 8/09
     279    procedure btnItalicClick(Sender: TObject);       //kt 8/09
     280    procedure btnLeftAlignClick(Sender: TObject);    //kt 8/09
     281    procedure btnLessIndentClick(Sender: TObject);   //kt 8/09
     282    procedure btnMoreIndentClick(Sender: TObject);   //kt 8/09
     283    procedure btnNumbersClick(Sender: TObject);      //kt 8/09
     284    procedure btnRightAlignClick(Sender: TObject);   //kt 8/09
     285    procedure btnTextColorClick(Sender: TObject);    //kt 8/09
     286    procedure btnUnderlineClick(Sender: TObject);    //kt 8/09
     287    procedure cbFontNamesChange(Sender: TObject);    //kt 8/09
     288    procedure cbFontSizeChange(Sender: TObject);     //kt 8/09
     289    procedure popNoteMemoHTMLFormatClick(Sender: TObject); //kt 8/09
    247290  private
    248291    FNavigatingTab : Boolean; //Currently Using tab to navigate
     
    256299    FImageFlag: TBitmap;
    257300    FEditNote: TEditNoteRec;
     301    FViewNote : TStringList;  //kt 8/09
     302    FWarmedUp : boolean;      //kt 8/09
    258303    FVerifyNoteTitle: Integer;
    259304    FDocList: TStringList;
     
    271316    LastAuthor: Int64;  //kt 6-1-05
    272317    LastAuthorName: string; //kt 6-1-05
     318    FHTMLEditMode : TEditModes;  //kt 7/09 This is the mode of the note being edited (even if not actively displayed)
     319    FViewMode : TViewModeSet;    //kt 7/09  This is the status of the display
    273320    procedure frmFramePnlPatientExit(Sender: TObject);
    274321    procedure frmDrawerPnlTemplatesButtonExit(Sender: TObject);
     
    307354    function SetNoteTreeLabel(AContext: TTIUContext): string;
    308355    procedure UpdateNoteAuthor(DocInfo: string);
     356    procedure SetHTMLEditMode(HTMLEditMode : boolean; Quiet : Boolean=false);  //kt
     357    procedure ToggleHTMLEditMode;                                              //kt
     358    procedure BroadcastImages(Note: TStrings);                                 //kt
     359    procedure ProperRepaint(Editing : Boolean);                                //kt
     360    procedure SetEditorFocus;                                                  //kt
     361    function  EditorHasText : boolean;                                         //kt
    309362  public
    310     HTMLfilename : string;   //kt added
     363    HtmlEditor : THtmlObj; //kt 8/09
     364    HtmlViewer : THtmlObj; //kt 8/09
     365    procedure SetDisplayToHTMLvsText(Mode :TViewModeSet; Lines : TStrings; ActivateOnly : boolean=False); //kt 8/09
    311366    function ActiveEditOf(AnIEN: Int64; ARequest: integer): Boolean;
    312367    function AllowContextChange(var WhyNot: string): Boolean; override;
     
    319374    procedure AssignRemForm;
    320375    property  OrderID: string read FOrderID;
     376    property  ViewMode :TViewModeSet read FViewMode;   //kt 8/09
    321377    procedure LstNotesToPrint;
     378    constructor Create(AOwner: TComponent); override;  //kt 8/09
     379    destructor Destroy; override;                      //kt 8/09
    322380  published
    323381    property Drawers: TFrmDrawers read GetDrawers; // Keep Drawers published
     
    339397     uAccessibleTreeView, uAccessibleTreeNode, fTemplateDialog, DateUtils,
    340398     StrUtils {//KT added 1-1-05},
    341      mshtml,  {//kt added 5-2-05}
    342      fImages, {//kt added 9-20-05}
     399     //fImages, {//kt added 9-20-05}
     400     fOptionsNotes, //kt 8/09
    343401     rHTMLTools;  {//kt added 5-27-05 for IsHTMLDocument}
    344402
     
    352410  NT_ACT_EDIT_NOTE = 4;
    353411  NT_ACT_ID_ENTRY  = 5;
     412
     413  VIEW_ACTIVATE_ONLY = true; //kt 8/09
    354414
    355415//TX_NEED_VISIT = 'A visit is required before creating a new progress note.';  <-- original line.  //kt 7/19/2007
     
    534594  uIDNotesActive: Boolean;
    535595
     596constructor TfrmNotes.Create(AOwner: TComponent);
     597//kt Added function 8/09
     598begin
     599  inherited Create(AOwner);
     600  FViewNote := TStringList.Create;
     601end;
     602
     603destructor TfrmNotes.Destroy;
     604//kt Added function 8/09
     605begin
     606  FViewNote.Free;
     607  FEditNote.Lines.Free; //kt
     608  inherited Destroy;
     609end;
     610
    536611
    537612{ TPage common methods --------------------------------------------------------------------- }
     
    578653    case BOOLCHAR[frmFrame.CCOWContextChanging] of
    579654      '1': begin
    580              if memNewNote.GetTextLen > 0 then
     655             if ((vmHTML in FViewMode) and (HTMLEditor.Text <> ''))                 //kt 8/09
     656               or ((not (vmHTML in FViewMode)) and (memNewNote.GetTextLen > 0 )) then begin  //kt
    581657//             WhyNot := WhyNot + 'A note in progress will be saved as unsigned.  '  <-- original line.  //kt 7/19/2007
    582658               WhyNot := WhyNot + DKLangConstW('fNotes_A_note_in_progress_will_be_saved_as_unsignedx') //kt added 7/19/2007
    583              else
     659             end else begin                                                         //kt
    584660//             WhyNot := WhyNot + 'An empty note in progress will be deleted.  ';  <-- original line.  //kt 7/19/2007
    585661               WhyNot := WhyNot + DKLangConstW('fNotes_An_empty_note_in_progress_will_be_deletedx'); //kt added 7/19/2007
     662             end;                                                                   //kt
    586663             Result := False;
    587664           end;
     
    649726  lstNotes.Clear;
    650727  memNote.Clear;
     728  HTMLViewer.Clear;   //kt
     729  HTMLEditor.Clear;   //kt
     730  FWarmedUp := false; //kt
     731  SetDisplayToHTMLvsText([vmText,vmView],nil,VIEW_ACTIVATE_ONLY); //kt
    651732  memPCEShow.Clear;
    652733  uPCEShow.Clear;
     
    774855    Addend       := 0;
    775856    {LastCosigner & LastCosignerName aren't cleared because they're used as default for next note.}
    776     Lines        := nil;
     857    //kt 8/09  Lines        := nil;
     858    if Assigned (Lines) then Lines.Clear;  //kt 8/09
    777859    PRF_IEN := 0;
    778860    ActionIEN := '';
     
    781863  txtSubject.Text := '';
    782864  if memNewNote <> nil then memNewNote.Clear; //CQ7012 Added test for nil
     865  HTMLEditor.Clear;  //kt 8/09
     866  HTMLViewer.Clear;  //kt 8/09
     867  FHTMLEditMode := emNone; //kt 8/09
    783868  timAutoSave.Enabled := False;
    784869  // clear the PCE object for editing
     
    795880  if(ShouldShow) then
    796881    sptVert.Top := memPCEShow.Top - sptVert.Height;
    797   memNote.Invalidate;
     882  if (vmHTML in FViewMode) then begin              //kt 8/09
     883    HTMLViewer.Invalidate;                         //kt 8/09
     884  end else begin                                   //kt 8/09
     885    memNote.Invalidate;
     886  end;                                             //kt 8/09
    798887end;
    799888
     
    10471136  x, WhyNot, DocInfo: string;
    10481137  tempPos : integer; //kt 6-1-05
     1138  Mode : TViewModeSet; //kt 8/09
     1139  BoilerplateIsHTML : boolean;//kt 8/09
    10491140
    10501141begin
     
    10571148  try
    10581149    ClearEditControls;
     1150    FEditNote.Lines.Free; //(done d/t full wipe-out on line below}  //kt 8/09
    10591151    FillChar(FEditNote, SizeOf(FEditNote), 0);  //v15.7
     1152    FEditNote.Lines := TStringList.Create; //Freed in Destructor    //kt 8/09
    10601153    with FEditNote do
    10611154    begin
     
    10741167          TitleName := '';
    10751168        end;
    1076       //DateTime     := FMNow;  //kt 6-1-05
    1077       DateTime     := Encounter.DateTime;  //kt 6-1-05
     1169      //DateTime     := FMNow;                    //kt 6-1-05
     1170      DateTime     := Encounter.DateTime;         //kt 6-1-05
    10781171      //kt begin changes -------------- 6-1-05
    10791172      if LastAuthor<>0 then begin
     
    11741267        FChanged := False;
    11751268        cmdChangeClick(Self); // will set captions, sign state for Changes
     1269        Mode := [vmEdit] + [vmHTML_MODE[fOptionsNotes.DefaultEditHTMLMode]];   //kt 8/09
     1270        SetDisplayToHTMLvsText(Mode, nil, VIEW_ACTIVATE_ONLY);                 // kt 8/09
    11761271        lstNotesClick(Self);  // will make pnlWrite visible
    11771272        if timAutoSave.Interval <> 0 then EnableAutosave := TRUE;
    1178         if txtSubject.Visible then txtSubject.SetFocus else memNewNote.SetFocus;
     1273        //kt 6/3/09  original --> if txtSubject.Visible then txtSubject.SetFocus else memNewNote.SetFocus;
     1274        if txtSubject.Visible then begin                          //kt 8/09
     1275          txtSubject.SetFocus;                                    //kt 8/09
     1276        end else begin                                            //kt 8/09
     1277          SetEditorFocus; //kt memNewNote.SetFocus;               //kt 8/09
     1278        end;                                                      //kt 8/09
    11791279      end else
    11801280      begin
     
    11951295      DocInfo := MakeXMLParamTIU(IntToStr(CreatedNote.IEN), FEditNote);
    11961296      ExecuteTemplateOrBoilerPlate(TmpBoilerPlate, FEditNote.Title, ltTitle, Self, 'Title: ' + FEditNote.TitleName, DocInfo);
    1197       memNewNote.Lines.Assign(TmpBoilerPlate);
     1297      //kt original --> memNewNote.Lines.Assign(TmpBoilerPlate);
     1298      BoilerplateIsHTML := rHTMLTools.IsHTML(TmpBoilerPlate.Text);    //kt 8/09
     1299      FEditNote.Lines.Assign(TmpBoilerPlate);                         //kt 8/09
     1300      if not ((vmHTML in FViewMode)) and BoilerplateIsHTML then begin //kt 8/09
     1301        FViewMode := FViewMode - [vmText] + [vmHTML];                 //kt 8/09
     1302      end;                                                            //kt 8/09
     1303      SetDisplayToHTMLvsText(FViewMode,FEditNote.Lines);              //kt 8/09
     1304      if (vmHTML in FViewMode) then begin                             //kt 8/09
     1305        HtmlEditor.MoveCaretToEnd;                                    //kt 8/09
     1306        Application.ProcessMessages;                                  //kt 8/09
     1307      end;                                                            //kt 8/09
    11981308      UpdateNoteAuthor(DocInfo);
    11991309      TmpBoilerPlate.Free;
     
    12041314  frmNotes.pnlWriteResize(Self);
    12051315end;
     1316
     1317
     1318procedure TfrmNotes.SetEditorFocus;
     1319//kt added function 8/09
     1320begin
     1321  try
     1322    if (vmHTML in FViewMode) then begin  //kt 8/09
     1323      HtmlEditor.SetFocus;               //kt 8/09
     1324    end else begin                       //kt 8/09
     1325      memNewNote.SetFocus;
     1326    end;                                 //kt 8/09
     1327  except
     1328    on E: Exception do begin
     1329      // ignore error.  Info in E
     1330    end;
     1331  end;
     1332end;
     1333
    12061334
    12071335procedure TfrmNotes.InsertAddendum;
     
    12901418      lstNotesClick(Self);  // will make pnlWrite visible
    12911419      if timAutoSave.Interval <> 0 then timAutoSave.Enabled := True;
    1292       memNewNote.SetFocus;
     1420      SetEditorFocus;  //kt memNewNote.SetFocus;  //kt 8/09
    12931421    end else
    12941422    begin
     
    13071435  tmpNode: TTreeNode;
    13081436  x: string;
     1437  Mode : TViewModeSet; //kt
     1438
    13091439begin
    13101440  ClearEditControls;
     
    13131443  Changes.Add(CH_DOC, lstNotes.ItemID, GetTitleText(EditingIndex), '', CH_SIGN_YES);
    13141444  GetNoteForEdit(FEditNote, lstNotes.ItemIEN);
    1315   memNewNote.Lines.Assign(FEditNote.Lines);
     1445  Mode := [vmEdit] + [vmHTML_MODE[IsHTML(FEditNote.Lines) or (vmHTML in FViewMode)]]; //kt 8/09
     1446  SetDisplayToHTMLvsText(Mode,FEditNote.Lines);                                       //kt 8/09
     1447  //kt memNewNote.Lines.Assign(FEditNote.Lines);                                      //kt 8/09
    13161448  FChanged := False;
    13171449  if FEditNote.Title = TYP_ADDENDUM then
     
    13611493  lstNotesClick(Self);  // will make pnlWrite visible
    13621494  if timAutoSave.Interval <> 0 then timAutoSave.Enabled := True;
    1363   memNewNote.SetFocus;
     1495  SetEditorFocus;    //kt memNewNote.SetFocus;  //kt 8/09
    13641496end;
    13651497
     
    13691501  UpdatedNote: TCreatedDoc;
    13701502  x: string;
     1503  EmptyNote : boolean; //kt
     1504
    13711505begin
    13721506  SetupVars;  //kt added 7/19/2007 to replace constants with vars.
    13731507  Saved := False;
    1374   if (memNewNote.GetTextLen = 0) or (not ContainsVisibleChar(memNewNote.Text)) then
    1375   begin
     1508  if not (vmHTML in FViewMode) then begin                         //kt 8/09
     1509    EmptyNote := (memNewNote.GetTextLen = 0)                      //kt 8/09
     1510                  or (not ContainsVisibleChar(memNewNote.Text));  //kt 8/09
     1511  end else begin                                                  //kt 8/09
     1512    EmptyNote := (HtmlEditor.GetTextLen = 0)                      //kt 8/09
     1513                  or (not ContainsVisibleChar(HtmlEditor.Text));  //kt 8/09
     1514  end;                                                            //kt 8/09
     1515  //kt 8/09 if (memNewNote.GetTextLen = 0) or (not ContainsVisibleChar(memNewNote.Text)) then
     1516  //kt 8/09  begin
     1517  if EmptyNote then begin
    13761518    lstNotes.ItemIndex := EditingIndex;
    13771519    x := lstNotes.ItemID;
     
    13951537  end;
    13961538  //ExpandTabsFilter(memNewNote.Lines, TAB_STOP_CHARS);
    1397   FEditNote.Lines    := memNewNote.Lines;
     1539  if FEditNote.Lines = nil then FEditNote.Lines := TStringList.Create; //kt
     1540  //kt 8/09 FEditNote.Lines    := memNewNote.Lines;
     1541  if (vmHTML in FViewMode) then begin                             //kt 8/09
     1542    SplitToArray(WrapHTML(HtmlEditor.HTMLText), FEditNote.Lines); //kt 8/09
     1543  end else begin                                                  //kt 8/09
     1544    FEditNote.Lines.Assign(memNewNote.Lines);                     //kt 8/09
     1545  end;                                                            //kt 8/09
    13981546  //FEditNote.Lines:= SetLinesTo74ForSave(memNewNote.Lines, Self);
    13991547  FEditNote.Subject  := txtSubject.Text;
     
    14171565    FNewIDChild := False;
    14181566    FChanged := False;
     1567    HTMLEditor.KeyStruck := false; //kt
    14191568  end else
    14201569  begin
     
    14381587begin
    14391588  inherited;
    1440   //kt --- Begin Modification 9-2005 kt
     1589  //kt --- Begin Modification 9-2005, 8/09 -------------
    14411590  CacheDir := ExtractFilePath(ParamStr(0))+ 'Cache'; //kt 9-05
    1442   if not DirectoryExists(CacheDir) then begin
    1443     CreateDir(CacheDir);
    1444   end;
    1445   HTMLfilename := CacheDir + '\html_note.html';   //kt 5-05
     1591  if not DirectoryExists(CacheDir) then CreateDir(CacheDir);
     1592  //kt HTMLfilename := CacheDir + '\html_note.html';   //kt 5-05
    14461593  LastAuthor :=0;  //kt 5-05
    14471594  LastAuthorName:='';  //kt 5-05
    1448   //kt --- End Modification 9-2005 kt
     1595  DesiredHTMLFontSize := 2;  //Used later to downsize during printing.
     1596  SetRegHTMLFontSize(DesiredHTMLFontSize);   //0=SMALLEST ... 4=LARGEST
     1597  //kt  Note: On creation, THtmlObj will remember Application.OnMessage.  But if
     1598  //          another object (say a prior THtmlObj) has become active and already
     1599  //          changed the handler, then there will be a problem.  So probably best
     1600  //          to create them all at one.  //kt
     1601  HtmlViewer := THtmlObj.Create(pnlHTMLViewer,Application);
     1602  HtmlEditor := THtmlObj.Create(pnlHTMLEdit,Application);
     1603  TWinControl(HtmlViewer).Parent:=pnlHTMLViewer;
     1604  TWinControl(HtmlViewer).Align:=alClient;
     1605  HtmlEditor.PrevControl := cmdPCE;
     1606  HtmlEditor.NextControl := cmdChange;
     1607  //Note: A 'loaded' function will initialize the THtmlObj's, but it can't be
     1608  //      done until after this constructor is done, and this TfrmNotes has been
     1609  //      assigned a parent.  So done elsewhere.
     1610  HtmlViewer.PopupMenu := popNoteMemo;
     1611  TWinControl(HtmlEditor).Parent:=pnlHTMLEdit;
     1612  TWinControl(HtmlEditor).Align:=alClient;
     1613  HtmlEditor.PopupMenu := popNoteMemo;
     1614  cbFontNames.Items.Assign(Screen.Fonts);
     1615  FViewMode := [vmView,vmText];
     1616  FHTMLEditMode := emNone;
     1617  HTMLViewer.BackgroundColor := ReadOnlyColor;
     1618  //kt --- End Modification 9-2005, 8/09 ------
    14491619  PageID := CT_NOTES;
    14501620  memNote.Color := ReadOnlyColor;
     
    14581628  frmDrawers.Align := alBottom;
    14591629  frmDrawers.RichEditControl := memNewNote;
     1630  frmDrawers.HTMLEditControl := HtmlEditor;       //kt 8/09
     1631  frmDrawers.HTMLModeSwitcher := SetHTMLEditMode; //kt 8/09
    14601632  frmDrawers.NewNoteButton := cmdNewNote;
    14611633  frmDrawers.Splitter := splDrawers;
     
    14681640  FDocList := TStringList.Create;
    14691641  TAccessibleTreeView.WrapControl(tvNotes);
     1642  RestoreRegHTMLFontSize;                         //kt, elh  8/09
    14701643end;
    14711644
     
    14751648  inherited;
    14761649  pnlRight.Refresh;
    1477   memNote.Repaint;
     1650  if (vmHTML in FViewMode) then begin //kt 8/09
     1651    HTMLViewer.Repaint;               //kt 8/09
     1652  end else begin                      //kt 8/09
     1653    memNote.Repaint
     1654  end;                                //kt 8/09
    14781655end;
    14791656
     
    14831660begin
    14841661  inherited;
     1662  //kt NOTE: I don't know how to do the equivalent for HTML.  Actually, I don't think it applies.
    14851663  LimitEditWidth(memNewNote, MAX_PROGRESSNOTE_WIDTH - 1);
    14861664
     
    14981676{ loads the text for the selected note or displays the editing panel for the selected note }
    14991677var
    1500   ImageList : TStringList;  //kt added 1/1/05
    1501   i       : integer;      //kt added 1/1/05
    1502 begin
    1503   inherited;
    1504   with lstNotes do if ItemIndex = -1 then Exit
    1505   else if ItemIndex = EditingIndex then
    1506   begin
    1507     pnlWrite.Visible := True;
    1508     pnlRead.Visible := False;
    1509     mnuViewDetail.Enabled    := False;
    1510     if (FEditNote.IDParent <> 0) and (not FNewIDChild) then
    1511       mnuActChange.Enabled     := False
    1512     else
    1513       mnuActChange.Enabled     := True;
    1514     mnuActLoadBoiler.Enabled := True;
    1515     UpdateReminderFinish;
    1516   end else
    1517   begin
    1518 //  StatusText('Retrieving selected progress note...');  <-- original line.  //kt 7/19/2007
    1519     StatusText(DKLangConstW('fNotes_Retrieving_selected_progress_notexxx')); //kt added 7/19/2007
    1520     Screen.Cursor := crAppStart;  //kt changed from crHourGlass; 1/1/05
    1521     //Screen.Cursor := crHourGlass;  //kt
    1522     pnlRead.Visible := True;
    1523     pnlWrite.Visible := False;
    1524     UpdateReminderFinish;
    1525     lblTitle.Caption := Piece(Piece(Items[ItemIndex], U, 8), ';', 1) + #9 + Piece(Items[ItemIndex], U, 2) + ', ' +
    1526                         Piece(Items[ItemIndex], U, 6) + ', ' + Piece(Piece(Items[ItemIndex], U, 5), ';', 2) +
    1527                         '  (' + FormatFMDateTime('mmm dd,yy@hh:nn', MakeFMDateTime(Piece(Items[ItemIndex], U, 3)))
    1528                         + ')';
    1529     lvNotes.Caption := lblTitle.Caption;
    1530     LoadDocumentText(memNote.Lines, ItemIEN);
    1531     memNote.SelStart := 0;
    1532     mnuViewDetail.Enabled    := True;
    1533     mnuViewDetail.Checked    := False;
    1534     mnuActChange.Enabled     := False;
    1535     mnuActLoadBoiler.Enabled := False;
    1536     Screen.Cursor := crDefault;
    1537     StatusText('');
    1538   end;
    1539   if(assigned(frmReminderTree)) then
    1540     frmReminderTree.EnableActions;
    1541 
    1542   //kt changed to following block 5/31/05
    1543   if IsHTMLDocument(MemNote.Lines) then begin
    1544     rHTMLTools.ActivateWebBrowser;
    1545   end else begin
    1546     rHTMLTools.ActivateMemo;
    1547   end;
    1548   //------end block --------
    1549 
     1678  Note      : TStrings;     //kt 6/09.  Will be pointer to FViewNote, or FEditNote.Lines
     1679  Editing   : boolean;      //kt 8/09
     1680  Mode      : TViewModeSet; //kt 8/09
     1681  IsHTML    : boolean;      //kt 8/09
     1682
     1683begin
     1684  inherited;
     1685  //kt 8/09  with lstNotes do if ItemIndex = -1 then Exit
     1686  //kt 8/09  else if ItemIndex = EditingIndex then
     1687
     1688  with lstNotes do begin                                                   //kt 8/09
     1689    if ItemIndex = -1 then Exit;                                           //kt 8/09
     1690    Editing := (ItemIndex = EditingIndex);                                 //kt 8/09
     1691    if Editing then begin                                                  //kt 8/09
     1692      if FEditNote.Lines = nil then FEditNote.Lines := TStringList.Create; //kt 8/09
     1693      Note := FEditNote.Lines;                                             //kt 8/09
     1694      {pnlWrite.Visible := True;                                           //kt 8/09
     1695      pnlRead.Visible := False; } //kt done in SetHTMLorTextEditor         //kt 8/09
     1696      mnuViewDetail.Enabled    := False;
     1697      if (FEditNote.IDParent <> 0) and (not FNewIDChild) then
     1698        mnuActChange.Enabled     := False
     1699      else
     1700        mnuActChange.Enabled     := True;
     1701      mnuActLoadBoiler.Enabled := True;
     1702      UpdateReminderFinish;
     1703      Mode := [vmEdit] + [vmHTML_MODE[(FHTMLEditMode=emHTML)]];            //kt 8/09
     1704      SetDisplayToHTMLvsText(Mode,FEditNote.Lines,VIEW_ACTIVATE_ONLY);     //kt 8/09
     1705      FWarmedUp := true;                                                   //kt 8/09
     1706    end else begin
     1707  //  StatusText('Retrieving selected progress note...');  <-- original line.  //kt 7/19/2007
     1708      StatusText(DKLangConstW('fNotes_Retrieving_selected_progress_notexxx')); //kt added 7/19/2007
     1709      Screen.Cursor := crAppStart;  //kt changed from crHourGlass; 1/1/05
     1710      //kt 8/09  pnlRead.Visible := True;
     1711      //kt 8/09  pnlWrite.Visible := False;
     1712      UpdateReminderFinish;
     1713      lblTitle.Caption := Piece(Piece(Items[ItemIndex], U, 8), ';', 1) + #9 + Piece(Items[ItemIndex], U, 2) + ', ' +
     1714                          Piece(Items[ItemIndex], U, 6) + ', ' + Piece(Piece(Items[ItemIndex], U, 5), ';', 2) +
     1715                          '  (' + FormatFMDateTime('mmm dd,yy@hh:nn', MakeFMDateTime(Piece(Items[ItemIndex], U, 3)))
     1716                          + ')';
     1717      lvNotes.Caption := lblTitle.Caption;
     1718      //kt 8/09 LoadDocumentText(memNote.Lines, ItemIEN);
     1719      LoadDocumentText(FViewNote, ItemIEN);  //kt 8/09
     1720      Note := FViewNote;                     //kt 8/09
     1721      memNote.SelStart := 0;
     1722      mnuViewDetail.Enabled    := True;
     1723      mnuViewDetail.Checked    := False;
     1724      mnuActChange.Enabled     := False;
     1725      mnuActLoadBoiler.Enabled := False;
     1726      Screen.Cursor := crDefault;
     1727      StatusText('');
     1728      IsHTML := rHTMLTools.IsHTML(FViewNote);            //kt 8/09
     1729      Mode := [vmView] + [vmHTML_MODE[IsHTML]];          //kt 8/09
     1730      SetDisplayToHTMLvsText(Mode,FViewNote);            //kt 8/09
     1731      if not FWarmedUp and IsHTML then begin             //kt 8/09
     1732        FWarmedUp := true;                               //kt 8/09
     1733        //First HTML page won't display without this...  //kt 8/09
     1734        SetDisplayToHTMLvsText(Mode,FViewNote);          //kt 8/09
     1735      end;                                               //kt 8/09
     1736    end;
     1737  end;  //kt 8/09
     1738
     1739  if(assigned(frmReminderTree)) then frmReminderTree.EnableActions;
    15501740  //DisplayPCE;    //kt 5-31-05 (moved down below)
    15511741  pnlRight.Refresh;
    1552   memNewNote.Repaint;
    1553   memNote.Repaint;
     1742  ProperRepaint(Editing); //kt 8/09
     1743  //kt 8/09 memNewNote.Repaint;
     1744  //kt 8/09 memNote.Repaint;
    15541745  NotifyOtherApps(NAE_REPORT, 'TIU^' + lstNotes.ItemID);
    1555   DisplayPCE;   //kt 5-31-05 (move down from above)
     1746  //kt RESTORE LATER... frmImages.NewNoteSelected(Editing);  //kt 9/05
     1747  DisplayPCE;                          //kt 5-31-05 (move down from above)
     1748  BroadcastImages(Note);               //kt 8/09
    15561749
    15571750  //-----------------------------
    1558   frmImages.NewNoteSelected(lstNotes.ItemIndex=EditingIndex);  //kt added 9-20-05
    1559   //kt added the following block:  1/1/05
     1751  //kt RESTORE LATER... frmImages.NewNoteSelected(lstNotes.ItemIndex=EditingIndex);  //kt added 9-20-05
     1752end;
     1753
     1754procedure TfrmNotes.ProperRepaint(Editing : Boolean);
     1755//kt Added function 8/09
     1756begin
     1757  if Editing then begin
     1758    if (vmHTML in FViewMode) then begin
     1759      HtmlEditor.Repaint;
     1760    end else begin
     1761      memNewNote.Repaint;
     1762    end;
     1763  end else begin
     1764    if (vmHTML in FViewMode) then begin
     1765      HtmlViewer.Repaint;
     1766    end else begin
     1767      memNote.Repaint;
     1768    end;
     1769  end;
     1770  Application.ProcessMessages;
     1771end;
     1772
     1773procedure TfrmNotes.BroadcastImages(Note: TStrings);
     1774//kt added function 8/09
     1775var
     1776  ImageList : TStringList;
     1777  i         : integer;
     1778begin
    15601779  ImageList := TStringList.Create;
    1561   if rHTMLTools.CheckForImageLink(memNote.Lines, ImageList) then begin
     1780  if rHTMLTools.CheckForImageLink(Note, ImageList) then begin
    15621781    for i:= 0 to ImageList.Count-1 do begin
    15631782      NotifyOtherApps(NAE_REPORT, 'IMAGE^' + ImageList.Strings[i]);
     
    15651784  end;
    15661785  ImageList.Free;
    1567   //kt end of addition 1/1/05
    1568   //-----------------------------
     1786end;
     1787
     1788function TfrmNotes.EditorHasText : boolean;
     1789//kt added function  8/09
     1790begin
     1791  if (vmHTML in FViewMode) then begin
     1792    Result := (HTMLViewer.Text <> '');
     1793  end else begin
     1794    Result := (memNote.Lines.Count > 0);
     1795  end;
    15691796end;
    15701797
     
    15901817      PCEObj := nil;
    15911818      AnIEN := lstNotes.ItemIEN;
    1592       if (AnIEN <> 0) and (memNote.Lines.Count > 0) then
     1819      //kt 8/09 if (AnIEN <> 0) and (memNote.Lines.Count > 0) then
     1820      if (AnIEN <> 0) and EditorHasText then                          //kt 8/09
    15931821      begin
    15941822        ActOnDocument(ActionSts, AnIEN, 'VIEW');
     
    16501878  begin
    16511879    ExecuteTemplateOrBoilerPlate(BoilerText, FEditNote.Title, ltTitle, Self, 'Title: ' + FEditNote.TitleName, DocInfo);
    1652     memNewNote.Lines.Assign(BoilerText);
     1880    SetDisplayToHTMLvsText([vmHTML,vmEdit],BoilerText); //kt 8/09
     1881    //kt  8/09  memNewNote.Lines.Assign(BoilerText);
    16531882    UpdateNoteAuthor(DocInfo);
    16541883    FChanged := False;
     
    16611890  BoilerText := TStringList.Create;
    16621891  try
    1663     NoteEmpty := memNewNote.Text = '';
     1892    if (vmHTML in FViewMode) then begin           //kt 8/09
     1893      NoteEmpty := (HTMLEditor.Text = '');        //kt 8/09
     1894    end else begin                                //kt 8/09
     1895      NoteEmpty := memNewNote.Text = '';
     1896    end;                                          //kt 8/09
    16641897    LoadBoilerPlate(BoilerText, FEditNote.Title);
    16651898    if (BoilerText.Text <> '') or
     
    16731906        1: begin
    16741907             ExecuteTemplateOrBoilerPlate(BoilerText, FEditNote.Title, ltTitle, Self, 'Title: ' + FEditNote.TitleName, DocInfo);
    1675              memNewNote.Lines.AddStrings(BoilerText);  // append
     1908             if (vmHTML in FViewMode) then begin                           //kt 8/09
     1909               HTMLEditor.Text := HTMLEditor.Text + Text2HTML(BoilerText); //kt 8/09
     1910             end else begin                                                //kt 8/09
     1911               memNewNote.Lines.AddStrings(BoilerText);  // append
     1912             end;                                                          //kt 8/09
    16761913             UpdateNoteAuthor(DocInfo);
    16771914           end;
     
    16871924          if not NoteEmpty then
    16881925//            if not FChanged and (InfoBox(TX_BLR_CLEAR, TC_BLR_CLEAR, MB_YESNO) = ID_YES)
    1689             if (InfoBox(TX_BLR_CLEAR, TC_BLR_CLEAR, MB_YESNO) = ID_YES)
    1690               then memNewNote.Lines.Clear;
     1926            if (InfoBox(TX_BLR_CLEAR, TC_BLR_CLEAR, MB_YESNO) = ID_YES) then begin
     1927              if (vmHTML in FViewMode) then begin        //kt 8/09
     1928                HTMLEditor.Clear;                        //kt 8/09
     1929              end else begin                             //kt 8/09
     1930                memNewNote.Lines.Clear;
     1931              end;                                       //kt 8/09
     1932            end;
    16911933        end;
    16921934    end; {if BoilerText.Text <> ''}
     
    17832025begin
    17842026  inherited;
     2027  //kt 8/09  NOTE: the equivalent functionality for HTML is HTMLEditor.Keystruck.  Don't have to set here.
    17852028  FChanged := True;
    17862029end;
     
    17982041var
    17992042  ErrMsg: string;
    1800 begin
    1801   if (EditingIndex > -1) and FChanged then
     2043  Changed : boolean; //kt 8/09
     2044begin
     2045  Changed := false;                               //kt 8/09
     2046  if (vmHTML in FViewMode) then begin             //kt 8/09
     2047    Changed := HTMLEditor.KeyStruck;              //kt 8/09
     2048  end else begin                                  //kt 8/09
     2049    Changed := FChanged;                          //kt 8/09
     2050  end;                                            //kt 8/09
     2051  //kt 8/09 if (EditingIndex > -1) and FChanged then
     2052  if (EditingIndex > -1) and Changed then         //kt  8/09
    18022053  begin
    18032054//  StatusText('Autosaving note...');  <-- original line.  //kt 7/19/2007
     
    18062057    timAutoSave.Enabled := False;
    18072058    try
     2059      if (vmHTML in FViewMode) then begin                                        //kt
     2060        rHTMLTools.SplitToArray (HTMLEditor.HTMLText, FEditNote.Lines);          //kt
     2061        SetText(ErrMsg, FEditNote.Lines, lstNotes.GetIEN(EditingIndex),Suppress);//kt
     2062      end else begin                                                             //kt
    18082063      SetText(ErrMsg, memNewNote.Lines, lstNotes.GetIEN(EditingIndex), Suppress);
     2064      end;                                                                       //kt
    18092065    finally
    18102066      timAutoSave.Enabled := True;
    18112067    end;
    18122068    FChanged := False;
     2069    HTMLEditor.KeyStruck := false; //kt
    18132070    StatusText('');
    18142071  end;
     
    22592516    if tvNotes.Selected <> nil then tvNotesChange(Self, tvNotes.Selected) else
    22602517    begin*)
     2518      FHTMLEditMode := emNone; //kt 8/09
    22612519      pnlWrite.Visible := False;
    22622520      pnlRead.Visible := True;
     
    25302788
    25312789procedure TfrmNotes.popNoteMemoPopup(Sender: TObject);
     2790const FORMAT_MODE : array[false..true] of string = ('fNotes_Formatted_Text','fNotes_Plain_Text');  //kt 8/09
    25322791begin
    25332792  inherited;
     
    25452804  end else
    25462805  begin
     2806    popNoteMemoHTMLFormat.Enabled := False;  //kt 8/09
    25472807    popNoteMemoCut.Enabled      := False;
    25482808    popNoteMemoCopy.Enabled     := False;
     
    25502810    popNoteMemoTemplate.Enabled := False;
    25512811  end;
     2812  popNoteMemoHTMLFormat.Caption := DKLangConstW('fNotes_Change_Edit_Mode_To') + ' ' + //kt 8/09
     2813                                   DKLangConstW(FORMAT_MODE[(vmHTML in FViewMode)]);  //kt 8/09
     2814  popNoteMemoHTMLFormat.Enabled := pnlWrite.Visible;                                  //kt 8/09
    25522815  if pnlWrite.Visible then
    25532816  begin
    2554     popNoteMemoSpell.Enabled    := True;
    2555     popNoteMemoGrammar.Enabled  := True;
    2556     popNoteMemoReformat.Enabled := True;
     2817    //kt 8/09 popNoteMemoSpell.Enabled      := True;
     2818    //kt 8/09 popNoteMemoGrammar.Enabled    := True;
     2819    //kt 8/09 popNoteMemoReformat.Enabled := True;
     2820    popNoteMemoSpell.Enabled      := not pnlHTMLWrite.Visible; //kt 8/09
     2821    popNoteMemoGrammar.Enabled    := not pnlHTMLWrite.Visible; //kt 8/09
     2822    popNoteMemoReformat.Enabled   := not pnlHTMLWrite.Visible; //kt 8/09
    25572823    popNoteMemoReplace.Enabled  := (FEditCtrl.GetTextLen > 0);
    25582824    popNoteMemoPreview.Enabled  := (frmDrawers.TheOpenDrawer = odTemplates) and Assigned(frmDrawers.tvTemplates.Selected);
     
    25672833    popNoteMemoInsTemplate.Enabled  := False;
    25682834  end;
     2835end;
     2836
     2837(*//kt 8/09  NOTICE:
     2838  On the form, popNoteMenu was edited to add a new item as below
     2839  popNoteMemoHTMLFormat : TMenuItem
     2840  Captions: ~ Edit as Formatted Text
     2841  OnClick -- popNoteMemoHTMLFormatClick
     2842*)
     2843
     2844procedure TfrmNotes.popNoteMemoHTMLFormatClick(Sender: TObject);
     2845//kt added function  8/09
     2846begin
     2847  inherited;
     2848  ToggleHTMLEditMode;
    25692849end;
    25702850
     
    26982978      StatusText(DKLangConstW('fNotes_Retrieving_progress_note_detailsxxx')); //kt added 7/19/2007
    26992979      Screen.Cursor := crAppStart;  //kt, was crHourGlass;
    2700       LoadDetailText(memNote.Lines, lstNotes.ItemIEN);
     2980      //kt LoadDetailText(memNote.Lines, lstNotes.ItemIEN);
     2981      LoadDetailText(FViewNote, lstNotes.ItemIEN);  //kt 8/09
     2982      SetDisplayToHTMLvsText(FViewMode,FViewNote);  //kt 8/09
    27012983      Screen.Cursor := crDefault;
    27022984      StatusText('');
    27032985      memNote.SelStart := 0;
    2704       memNote.Repaint;
     2986      if not (vmHTML in FViewMode) then  //kt 8/09
     2987        memNote.Repaint;
    27052988    end
    27062989  else
    27072990    lstNotesClick(Self);
    2708   SendMessage(memNote.Handle, WM_VSCROLL, SB_TOP, 0);
     2991  if (vmHTML in FViewMode) then begin                        //kt 8/09
     2992    SendMessage(HTMLViewer.Handle, WM_VSCROLL, SB_TOP, 0);   //kt 8/09
     2993  end else begin                                             //kt 8/09
     2994    SendMessage(memNote.Handle, WM_VSCROLL, SB_TOP, 0);
     2995  end;                                                       //kt 8/09
    27092996end;
    27102997
     
    27203007  begin
    27213008    FSilent := True;
    2722     if memNewNote.GetTextLen > 0 then SaveCurrentNote(Saved)
     3009    //kt 8/09 if memNewNote.GetTextLen > 0 then SaveCurrentNote(Saved)
     3010    if EditorHasText then SaveCurrentNote(Saved)  //kt 8/09
    27233011    else
    27243012    begin
     
    29683256  lvNotes.Items.Clear;
    29693257  memNote.Clear;
     3258  HTMLViewer.Clear; //kt 8/09
    29703259  tvNotes.FullCollapse;
    29713260  tvNotes.Selected := tvNotes.TopItem;
     
    30413330  //kt note: The Images tab will delete all files in .\Cache, which
    30423331  //         might include HTMLfilename.  No harm if already deleted.
    3043   DeleteFile(HTMLfilename);  //kt added 5-2-05
     3332  //kt 8/09 DeleteFile(HTMLfilename);  //kt added 5-2-05
    30443333  TAccessibleTreeView.UnwrapControl(tvNotes);
    30453334  FDocList.Free;
    30463335  FImageFlag.Free;
    30473336  KillDocTreeObjects(tvNotes);
     3337  HtmlEditor.Free; //kt 6/7/09
     3338  HtmlViewer.Free; //kt 6/7/09
    30483339  inherited;
    30493340end;
     
    30563347procedure TfrmNotes.AssignRemForm;
    30573348begin
     3349  //kt 8/09 ReminderDialog interaction has not yet been debugged with HTML formatted text.
    30583350  with RemForm do
    30593351  begin
     
    30653357    Drawers := frmDrawers;
    30663358    NewNoteRE := memNewNote;
     3359    NewNoteHTMLE := HTMLEditor;  //kt
    30673360    NoteList := lstNotes;
    30683361  end;
     
    30933386    uChanging := True;
    30943387    RedrawSuspend(memNote.Handle);
     3388    RedrawSuspend(HTMLViewer.Handle); //kt 8/09
    30953389    RedrawSuspend(lvNotes.Handle);
    30963390    tvNotes.Items.BeginUpdate;
     
    31013395    lvNotes.Items.Clear;
    31023396    memNote.Clear;
     3397    HTMLViewer.Clear;                 //kt 8/09
    31033398    memNote.Invalidate;
    31043399    lblTitle.Caption := '';
     
    32173512          end;
    32183513        memNote.Clear;
     3514        HTMLViewer.Clear; //kt 8/09
    32193515        with lvNotes do
    32203516          begin
     
    32403536      end;
    32413537  finally
    3242     RedrawActivate(memNote.Handle);
     3538    //kt NOTE: Is this enough??
     3539    if (vmHTML in FViewMode) then begin   //kt 8/09
     3540      RedrawActivate(HtmlViewer.Handle);  //kt 8/09
     3541    end else begin                        //kt 8/09
     3542      RedrawActivate(memNote.Handle);
     3543    end;                                  //kt 8/09
    32433544    RedrawActivate(lvNotes.Handle);
    32443545    tmpList.Free;
     
    32643565  i: integer;
    32653566  WhyNot: string;
     3567  Mode : TViewModeSet; //kt 8/09
    32663568begin
    32673569  if uChanging then Exit;
     
    32723574    begin
    32733575      memNote.Clear;
     3576      HTMLViewer.Clear; //kt 8/09
    32743577      if Selected = nil then Exit;
    32753578      if uIDNotesActive then
     
    32923595      RedrawSuspend(lvNotes.Handle);
    32933596      RedrawSuspend(memNote.Handle);
     3597      RedrawSuspend(HTMLViewer.Handle); //kt 8/09
    32943598      popNoteListExpandSelected.Enabled := Selected.HasChildren;
    32953599      popNoteListCollapseSelected.Enabled := Selected.HasChildren;
     
    33543658                ShowPCEControls(False);
    33553659              end;
    3356           pnlWrite.Visible := False;
    3357           pnlRead.Visible := True;
     3660          //kt 8/09
     3661          //kt  NOTE: At this point the list has changed.  But what is the new note-to-view's format?
     3662          //          We can't just use FViewMode.  Because that just states what mode was used on the last note.
     3663          Mode := [vmView] + [vmHTML_MODE[vmHTML in FViewMode]]; //kt 8/09
     3664          SetDisplayToHTMLvsText(Mode,nil,VIEW_ACTIVATE_ONLY);   //kt 8/09
     3665          //kt 8/09 pnlWrite.Visible := False;
     3666          //kt 8/09 pnlRead.Visible := True;
    33583667          //  uncommented next 4 lines in v17.5  (RV)
    33593668          //-----------------------------
     
    33683677        begin
    33693678          memNote.Clear;
     3679          HTMLViewer.Clear; //kt 8/09
    33703680          lvNotes.Visible := False;
    33713681          lstNotes.SelectByID(Piece(x, U, 1));
    33723682          lstNotesClick(Self);
    3373           SendMessage(memNote.Handle, WM_VSCROLL, SB_TOP, 0);
     3683          if (vmHTML in FViewMode) then begin                        //kt 8/09
     3684            SendMessage(HTMLViewer.Handle, WM_VSCROLL, SB_TOP, 0);   //kt 8/09
     3685          end else begin                                             //kt 8/09
     3686            SendMessage(memNote.Handle, WM_VSCROLL, SB_TOP, 0);
     3687          end;                                                       //kt 8/09
    33743688        end;
    33753689      SendMessage(tvNotes.Handle, WM_HSCROLL, SB_THUMBTRACK, 0);
    33763690      RedrawActivate(lvNotes.Handle);
    3377       RedrawActivate(memNote.Handle);
     3691      if (vmHTML in FViewMode) then begin           //kt 8/09
     3692        RedrawActivate(HtmlViewer.Handle);          //kt 8/09
     3693      end else begin                                //kt 8/09
     3694        RedrawActivate(memNote.Handle);
     3695      end;                                          //kt 8/09
    33783696    end;
    33793697end;
     
    35993917      lstNotes.SelectByID(Item.SubItems[5]);
    36003918      lstNotesClick(Self);
    3601       SendMessage(memNote.Handle, WM_VSCROLL, SB_TOP, 0);
     3919      if (vmHTML in FViewMode) then begin                        //kt 8/09
     3920        SendMessage(HTMLViewer.Handle, WM_VSCROLL, SB_TOP, 0);   //kt 8/09
     3921      end else begin                                             //kt 8/09
     3922        SendMessage(memNote.Handle, WM_VSCROLL, SB_TOP, 0);
     3923      end;                                                       //kt 8/09
    36023924    end;
    36033925end;
     
    39004222end;
    39014223
     4224(*
    39024225//kt 5-2-05 added following function (initially copied from fReports.pas)
    39034226procedure TfrmNotes.WebBrowser1DocumentComplete(Sender: TObject;
     
    39204243  }
    39214244end;
    3922 
     4245*)
    39234246
    39244247procedure TfrmNotes.popNoteMemoInsTemplateClick(Sender: TObject);
     
    40754398end;
    40764399
     4400procedure TfrmNotes.SetHTMLEditMode(HTMLEditMode : boolean; Quiet : boolean);
     4401//kt added function 7/09
     4402var   Mode      : TViewModeSet; //kt
     4403const HTML_MODE_S : Array[false..true] of string[16] = ('PLAIN','FORMATTED');
     4404begin
     4405  if FEditNote.Lines = nil then FEditNote.Lines := TStringList.Create; //kt
     4406  if HTMLEditMode then begin
     4407    if (FViewMode = [vmHTML,vmEdit]) then exit; //no change needed.
     4408    FEditNote.Lines.Assign(memNewNote.Lines);
     4409  end else begin
     4410    if (FViewMode = [vmText,vmEdit]) then exit; //no change needed.
     4411    if HtmlEditor.GetTextLen > 0 then begin
     4412      if MessageDlg('Do you want to convert this note to PLAIN TEXT?'+#10#13+
     4413                  '(May cause loss of formatting information.)',mtWarning, mbOKCancel,0) <> mrOK then begin
     4414        exit;
     4415      end;
     4416    end;
     4417    FEditNote.Lines.Text := HTMLEditor.Text;
     4418  end;
     4419  Mode := [vmEdit] + [vmHTML_MODE[HTMLEditMode]]; //kt
     4420  SetDisplayToHTMLvsText(Mode,FEditNote.Lines);
     4421  if not Quiet then begin
     4422    if MessageDlg('Start new notes in '+HTML_MODE_S[HTMLEditMode]+' TEXT by default?',mtConfirmation,[mbYES,mbNO],0) = mrYES then begin
     4423      fOptionsNotes.SetDefaultEditHTMLMode(HTMLEditMode);
     4424    end;
     4425  end;
     4426end;
     4427
     4428procedure TfrmNotes.ToggleHTMLEditMode;
     4429//kt added function 6/09
     4430var NewHTMLMode: boolean;
     4431begin
     4432  if not (vmEdit in FViewMode) then exit;  //quit if not in edit mode
     4433  NewHTMLMode := not (vmHTML in FViewMode);
     4434  SetHTMLEditMode(NewHTMLMode);
     4435end;
     4436
     4437
     4438procedure TfrmNotes.SetDisplayToHTMLvsText(Mode : TViewModeSet;
     4439                                           Lines : TStrings;
     4440                                           ActivateOnly : boolean {default=False});
     4441//kt added function 7/09
     4442//If ActivateOnly=True, then the visibility is set, but the control is not filled with text.
     4443
     4444type
     4445  TPanelVisibilityMode = (pvmReadMode, pvmWriteMode);  //kt
     4446
     4447  procedure SetPanelVisibility(Mode: TPanelVisibilityMode; HTMLMode : boolean);
     4448
     4449    procedure SetpnlReadVisibility(Visible : boolean; HTMLMode : boolean);
     4450    begin
     4451      pnlRead.Visible := Visible;
     4452      if Visible then begin
     4453        memNote.Visible := not HTMLMode;
     4454        memNote.TabStop := not HTMLMode;
     4455        pnlHTMLViewer.Visible := HTMLMode;
     4456        HTMLViewer.Visible := HTMLMode;
     4457        if HTMLMode then begin
     4458          HtmlViewer.BringToFront;
     4459        end else begin
     4460          MemNote.BringToFront;
     4461        end;
     4462      end else begin
     4463        memNote.Visible := false;
     4464        memNote.TabStop := false;
     4465        pnlHTMLViewer.Visible := false;
     4466        HTMLViewer.Visible := false;
     4467      end;
     4468    end; {SetDisplayToHTMLvsText.SetPanelVisibility.SetpnlReadVisibility}
     4469
     4470    procedure SetpnlWriteVisibility(Visible : boolean; HTMLMode : boolean);
     4471    begin
     4472      pnlWrite.Visible := Visible;
     4473      if Visible then begin
     4474        pnlHTMLWrite.Visible := HTMLMode;
     4475        pnlHTMLEdit.Visible := HTMLMode;
     4476        HTMLEditor.Visible := HTMLMode;
     4477        pnlTextWrite.Visible := not HTMLMode;
     4478        MemNewNote.Visible := not HTMLMode;
     4479        if HTMLMode then begin
     4480          HTMLEditor.BringToFront;
     4481        end else begin
     4482          MemNewNote.BringToFront;
     4483        end;
     4484      end else begin
     4485        pnlHTMLWrite.Visible := false;
     4486        pnlHTMLEdit.Visible := false;
     4487        HTMLEditor.Visible := false;
     4488        pnlTextWrite.Visible := false;
     4489        memNewNote.Visible := false;
     4490      end;
     4491    end; {SetDisplayToHTMLvsText.SetPanelVisibility.SetpnlWriteVisibility}
     4492
     4493  begin {SetDisplayToHTMLvsText.SetPanelVisibility}
     4494    SetpnlReadVisibility ((Mode=pvmReadMode), HTMLMode);
     4495    SetpnlWriteVisibility((Mode=pvmWriteMode),HTMLMode);
     4496    Application.ProcessMessages;
     4497  end; {SetDisplayToHTMLvsText.SetPanelVisibility}
     4498
     4499  procedure SetHTMLorTextEditor(HTMLEditMode : boolean;
     4500                                Lines : TStrings;
     4501                                ActivateOnly : boolean {default=False});
     4502    procedure ActivateHtmlEditor(Lines : TStrings);
     4503    var HTMLText : string;
     4504    begin
     4505      HtmlEditor.Editable := true;
     4506      if ActivateOnly=false then begin
     4507        if Lines <> nil then begin
     4508          if rHTMLTools.IsHTML(Lines) then begin
     4509            HTMLText := Lines.Text;
     4510          end else begin
     4511            HTMLText := Text2HTML(Lines);
     4512            if HTMLText='' then HTMLText := ' ';
     4513          end;
     4514        end else HTMLText := ' ';
     4515        HtmlEditor.HTMLText := HTMLText;
     4516        HTMLEditor.KeyStruck := false;
     4517      end;
     4518    end; {SetDisplayToHTMLvsText.SetHTMLorTextEditor.ActivateHtmlEditor}
     4519
     4520    procedure ActiveMemoEditor(Lines : TStrings);
     4521    begin
     4522      if ActivateOnly=false then begin
     4523        memNewNote.Lines.Assign(Lines); //kt new
     4524      end;
     4525      //kt HtmlEditor.Active := false; //stop intercepting OnMessages
     4526      HtmlEditor.Clear;
     4527    end; {SetDisplayToHTMLvsText.SetHTMLorTextEditor.ActiveMemoEditor}
     4528
     4529  begin {SetDisplayToHTMLvsText.SetHTMLorTextEditor}
     4530    FHTMLEditMode := emHTML_MODE[HTMLEditMode];
     4531    FViewMode := [vmEdit] + [vmHTML_MODE[HTMLEditMode]];
     4532    SetPanelVisibility(pvmWriteMode,HTMLEditMode);
     4533    pnlRight.Repaint; //kt TEMP
     4534    if HTMLEditMode then begin
     4535      ActivateHtmlEditor(Lines);
     4536    end else begin
     4537      ActiveMemoEditor(Lines);
     4538    end;
     4539    pnlRight.Repaint; //kt TEMP
     4540  end; {SetDisplayToHTMLvsText.SetHTMLorTextEditor}
     4541
     4542  procedure SetHTMLorTextViewer(HTMLViewMode : boolean;
     4543                                Lines : TStrings;
     4544                                ActivateOnly : boolean); //kt
     4545  //Set forms such that either HTML Viewer is visible, or standard edit window.
     4546    procedure ActivateHtmlViewer(Lines : TStrings);
     4547    begin
     4548      with frmNotes do begin
     4549        //ScanForSubs(MemNote.Lines);
     4550        pnlHtmlViewer.Visible := true;
     4551        //memNote.Visible := false;
     4552        //memNote.TabStop := false;
     4553        HtmlViewer.BringToFront;
     4554        if ActivateOnly=False then begin
     4555          FixHTML(Lines);
     4556          HtmlViewer.HTMLText := Lines.Text;
     4557        end;
     4558        HtmlViewer.Editable := false;
     4559        HtmlViewer.BackgroundColor := clCream;
     4560        HtmlViewer.TabStop := true;
     4561        RedrawActivate(HtmlViewer.Handle);
     4562      end;
     4563    end; {SetDisplayToHTMLvsText.SetHTMLorTextViewer.ActivateHtmlViewer}
     4564
     4565    procedure ActivateMemoViewer(Lines : TStrings);
     4566    begin
     4567      with frmNotes do begin
     4568        pnlHtmlViewer.Visible := false;
     4569        HtmlViewer.Clear;
     4570        //HtmlEditor.Clear;  //don't this here.  Only clear in ClearEditControls...
     4571        HtmlViewer.TabStop := false;
     4572        if ActivateOnly=False then memNote.Lines.Assign(Lines);   //new
     4573        memNote.Visible := true;
     4574        memNote.TabStop := true;
     4575        memNote.BringToFront;
     4576        RedrawActivate(memNote.Handle);
     4577      end;
     4578    end; {SetDisplayToHTMLvsText.SetHTMLorTextViewer.ActivateMemoViewer}
     4579
     4580  begin {SetHTMLorTextViewer}
     4581    FViewMode := [vmView] + [vmHTML_MODE[HTMLViewMode]];
     4582    SetPanelVisibility(pvmReadMode,HTMLviewMode);
     4583    //pnlRight.Repaint; //kt TEMP
     4584    if HTMLViewMode then begin
     4585      ActivateHtmlViewer(Lines);
     4586    end else begin
     4587      ActivateMemoViewer(Lines);
     4588      HtmlViewer.Clear;
     4589    end;
     4590    pnlRight.Repaint; //kt TEMP
     4591  end; {SetDisplayToHTMLvsText.SetHTMLorTextViewer}
     4592
     4593begin {SetDisplayToHTMLvsText}
     4594  if vmEdit in Mode then begin
     4595    SetHTMLorTextEditor((vmHTML in Mode),Lines,ActivateOnly);
     4596  end else begin
     4597    SetHTMLorTextViewer((vmHTML in Mode),Lines,ActivateOnly);
     4598  end;
     4599end; {SetDisplayToHTMLvsText}
     4600
     4601procedure TfrmNotes.btnBoldClick(Sender: TObject);
     4602//kt added function
     4603begin
     4604  inherited;
     4605  HtmlEditor.ToggleBold;
     4606end;
     4607
     4608procedure TfrmNotes.btnItalicClick(Sender: TObject);
     4609//kt added function
     4610begin
     4611  inherited;
     4612  HtmlEditor.ToggleItalic;
     4613end;
     4614
     4615procedure TfrmNotes.btnLessIndentClick(Sender: TObject);
     4616//kt added function
     4617begin
     4618  inherited;
     4619  HtmlEditor.Outdent;
     4620end;
     4621
     4622procedure TfrmNotes.btnMoreIndentClick(Sender: TObject);
     4623//kt added function
     4624begin
     4625  inherited;
     4626  HtmlEditor.Indent;
     4627end;
     4628
     4629procedure TfrmNotes.btnRightAlignClick(Sender: TObject);
     4630//kt added function
     4631begin
     4632  inherited;
     4633  HtmlEditor.AlignRight;
     4634end;
     4635
     4636procedure TfrmNotes.btnCenterAlignClick(Sender: TObject);
     4637//kt added function
     4638begin
     4639  inherited;
     4640  HtmlEditor.AlignCenter;
     4641end;
     4642
     4643procedure TfrmNotes.btnLeftAlignClick(Sender: TObject);
     4644//kt added function
     4645begin
     4646  inherited;
     4647  HtmlEditor.AlignLeft;
     4648end;
     4649
     4650procedure TfrmNotes.btnNumbersClick(Sender: TObject);
     4651//kt added function
     4652begin
     4653  inherited;
     4654  HtmlEditor.ToggleNumbering;
     4655end;
     4656
     4657procedure TfrmNotes.btnBulletsClick(Sender: TObject);
     4658//kt added function
     4659begin
     4660  inherited;
     4661  HtmlEditor.ToggleBullet;
     4662end;
     4663
     4664procedure TfrmNotes.btnUnderlineClick(Sender: TObject);
     4665//kt added function
     4666begin
     4667  inherited;
     4668  HtmlEditor.ToggleUnderline;
     4669end;
     4670
     4671procedure TfrmNotes.btnTextColorClick(Sender: TObject);
     4672//kt added function
     4673begin
     4674  inherited;
     4675  HtmlEditor.TextForeColorDialog;
     4676end;
     4677
     4678procedure TfrmNotes.btnBackColorClick(Sender: TObject);
     4679//kt added function
     4680begin
     4681  inherited;
     4682  HtmlEditor.TextBackColorDialog;
     4683end;
     4684
     4685procedure TfrmNotes.btnFontsClick(Sender: TObject);
     4686//kt added function
     4687begin
     4688  inherited;
     4689  HtmlEditor.FontDialog;
     4690end;
     4691
     4692procedure TfrmNotes.cbFontSizeChange(Sender: TObject);
     4693//kt added function
     4694const
     4695  FontSizes : array [0..6] of byte = (8,10,12,14,18,24,36);
     4696begin
     4697  inherited;
     4698  //HtmlEditor.FontSize := StrToInt(cbFontSize.Text);
     4699  HtmlEditor.FontSize := FontSizes[cbFontSize.ItemIndex];
     4700end;
     4701
     4702procedure TfrmNotes.cbFontNamesChange(Sender: TObject);
     4703//kt added function
     4704var i :  integer;
     4705    FontName : string;
     4706const
     4707   TEXT_BAR = '---------------';
     4708begin
     4709  inherited;
     4710  if cbFontNames.Text[1]='<' then exit;
     4711  FontName := cbFontNames.Text;
     4712  HtmlEditor.FontName := FontName;
     4713  i := cbFontNames.Items.IndexOf(TEXT_BAR);
     4714  if i < 1 then cbFontNames.Items.Insert(0,TEXT_BAR);
     4715  if i > 5 then cbFontNames.Items.Delete(5);
     4716  if cbFontNames.Items.IndexOf(FontName)> i then begin
     4717    cbFontNames.Items.Insert(0,FontName);
     4718  end;
     4719end;
     4720
     4721(*
    40774722//kt made this entire temp function
    40784723procedure TfrmNotes.WebBrowser1CommandStateChange(Sender: TObject;
     
    41014746  end;
    41024747end;
     4748*)
    41034749
    41044750procedure TfrmNotes.memNewNoteKeyPress(Sender: TObject; var Key: Char);
Note: See TracChangeset for help on using the changeset viewer.