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/fDrawers.pas

    r496 r541  
    1111  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    1212  ExtCtrls, StdCtrls, Buttons, ORCtrls, ComCtrls, ImgList, uTemplates,
     13  TMGHTML2, rHTMLTools, StrUtils, //kt added uses on this line. 8/09
    1314  Menus, ORClasses, ORFn, DKLang;
    1415
    1516type
     17  THTMLModeSwitcher = procedure(HTMLMode : boolean; Quiet : boolean) of object;  //kt 8/09
    1618  TDrawer = (odNone, odTemplates, odEncounter, odReminders, odOrders);
    1719  TDrawers = set of TDrawer;
     
    114116    FindNextText     : string;  //kt
    115117    //kt End Mod -------------------
     118    FHtmlEditControl: THtmlObj;            //kt 8/09
     119    FHtmlModeSwitcher : THTMLModeSwitcher; //kt 8/09
    116120    FOpenToNode: string;
    117121    FOldMouseUp: TMouseEvent;
     
    155159    procedure ReloadTemplates;
    156160    procedure SetRichEditControl(const Value: TRichEdit);
     161    procedure SetHTMLEditControl(const Value: THtmlObj);                   //kt 8/09
    157162    procedure CheckAsk;
    158163    procedure FontChanged(Sender: TObject);
     
    167172    procedure AddTemplateNode(const tmpl: TTemplate; const Owner: TTreeNode = nil);
    168173    procedure MoveCaret(X, Y: integer);
     174    procedure MoveHTMLCaret(X, Y: integer);                                //kt 8/09
    169175    procedure NewRECDragDrop(Sender, Source: TObject; X, Y: Integer);
    170176    procedure NewRECDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState;
    171177                             var Accept: Boolean);
     178    procedure NewRECHTMLDragDrop(Sender, Source: TObject; X, Y: Integer);  //kt 8/09
     179    procedure NewRECHTMLDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState;
     180                             var Accept: Boolean);                         //kt 8/09
    172181    procedure InsertText;
    173182    procedure SetSplitter(const Value: TSplitter);
     
    175184    procedure SetSplitterActive(Active: boolean);
    176185    function EnableDrawer(Drawer: TDrawer; EnableIt: boolean): boolean;
    177     function InsertOK(Ask: boolean): boolean;
     186    //kt 8/09 function InsertOK(Ask: boolean): boolean;
     187    function InsertOK(Ask: boolean; TemplateIsHTML : boolean = false): boolean;  //kt 8/09
    178188    procedure OpenToNode(Path: string = '');
    179189    property FindNext: boolean read FFindNext write SetFindNext;
     
    196206    procedure ResetTemplates;
    197207    property RichEditControl: TRichEdit read FRichEditControl write SetRichEditControl;
     208    property HTMLEditControl : THtmlObj read FHtmlEditControl write SetHTMLEditControl; //kt 8/09
     209    property HTMLModeSwitcher : THTMLModeSwitcher read FHtmlModeSwitcher write FHtmlModeSwitcher; //kt 8/09
    198210    property NewNoteButton: TButton read FNewNoteButton write FNewNoteButton;
    199211    property Splitter: TSplitter read FSplitter write SetSplitter;
     
    202214    property DefTempPiece: integer read FDefTempPiece write FDefTempPiece;
    203215    property TheOpenDrawer: TDrawer read FOpenDrawer;
     216    function HTMLEditActive : boolean;  //kt 8/09
    204217  published
    205218    property Align: TAlign read GetAlign write SetAlign;
     
    218231uses fTemplateView, uCore, rTemplates, fTemplateEditor, dShared, uReminders,
    219232  fReminderDialog, RichEdit, fRptBox, Clipbrd, fTemplateDialog, fIconLegend,
     233  Inifiles,  //kt 8/09
    220234  uAccessibleTreeView, uAccessibleTreeNode;
    221235
     
    846860end;
    847861
     862procedure TfrmDrawers.SetHTMLEditControl(const Value: THtmlObj);
     863//kt added this function 8/09
     864begin
     865  if (FHtmlEditControl <> Value) then begin
     866    if (assigned(FHtmlEditControl)) then begin
     867      FHtmlEditControl.OnDragDrop := FOldDragDrop;
     868      FHtmlEditControl.OnDragOver := FOldDragOver;
     869    end;
     870    FHtmlEditControl := Value;
     871    if (assigned(FHtmlEditControl)) then begin
     872      FOldDragDrop := FHtmlEditControl.OnDragDrop;
     873      FOldDragOver := FHtmlEditControl.OnDragOver;
     874      FHtmlEditControl.OnDragDrop := NewRECHTMLDragDrop;
     875      FHtmlEditControl.OnDragOver := NewRECHTMLDragOver;
     876    end;
     877  end;
     878end;
     879
     880function TfrmDrawers.HTMLEditActive : boolean;
     881//kt added this function 8/09
     882begin
     883  if assigned(FHtmlEditControl) then begin
     884    Result := FHtmlEditControl.Active;
     885  end else Result := false;
     886end;
    848887
    849888procedure TfrmDrawers.MoveCaret(X, Y: integer);
     
    857896end;
    858897
     898procedure TfrmDrawers.MoveHTMLCaret(X, Y: integer);
     899//kt added entire function 8/09
     900var   pt: TPoint;
     901begin
     902  FHtmlEditControl.SetFocus;
     903  pt := Point(x, y);
     904  FHTMLEditControl.MoveCaretToPos(pt);
     905end;
    859906
    860907procedure TfrmDrawers.NewRECDragDrop(Sender, Source: TObject; X,
     
    889936end;
    890937
     938procedure TfrmDrawers.NewRECHTMLDragDrop(Sender, Source: TObject; X, Y: Integer);
     939//kt added function 8/09
     940//NOTE: I think this can be combined with NewRECDragDrop, but must fix MoveCaret
     941begin
     942  if (Source = tvTemplates) then begin
     943    MoveHTMLCaret(X, Y);
     944    InsertText;
     945  end else if(assigned(FOldDragDrop)) then begin
     946    FOldDragDrop(Sender, Source, X, Y);
     947  end;
     948end;
     949
     950procedure TfrmDrawers.NewRECHTMLDragOver(Sender, Source: TObject;
     951                                     X, Y: Integer; State: TDragState;
     952                                     var Accept: Boolean);
     953//kt added function 8/09
     954begin
     955  Accept := FALSE;
     956  if (Source = tvTemplates) then begin
     957    if (assigned(FDragNode))
     958    and (TTemplate(FDragNode.Data).RealType in [ttDoc, ttGroup]) then begin
     959      Accept := TRUE;
     960      MoveHTMLCaret(X, Y);
     961    end;
     962  end else if (assigned(FOldDragOver)) then begin
     963    FOldDragOver(Sender, Source, X, Y, State, Accept);
     964  end;
     965end;
     966
    891967procedure TfrmDrawers.InsertText;
    892968var
     
    894970  txt, DocInfo: string;
    895971  Template: TTemplate;
     972  TemplateIsHTML : boolean; //kt 8/09
    896973
    897974begin
    898975  DocInfo := '';
    899   if InsertOK(TRUE) and (dmodShared.TemplateOK(tvTemplates.Selected.Data)) then
    900   begin
     976  //kt if InsertOK(TRUE) and (dmodShared.TemplateOK(tvTemplates.Selected.Data)) then begin
     977  if (dmodShared.TemplateOK(tvTemplates.Selected.Data)) then begin  //kt
    901978    Template := TTemplate(tvTemplates.Selected.Data);
     979    TemplateIsHTML := rHTMLTools.IsHTML(Template.Text); //kt
     980    if not InsertOK(TRUE,TemplateIsHTML) then exit;  //kt
    902981    Template.TemplatePreviewMode := FALSE;
    903982    if Template.IsReminderDialog then
     
    908987        txt := Template.COMObjectText('', DocInfo)
    909988      else
     989        uTemplates.bUsingHTMLMode := HTMLEditActive; //kt 8/09  Will be used in TTemplate.GetText
    910990        txt := Template.Text;
    911991      if(txt <> '') then
     
    913993//      CheckBoilerplate4Fields(txt, 'Template: ' + Template.PrintName);  <-- original line.  //kt 7/15/2007
    914994        CheckBoilerplate4Fields(txt, DKLangConstW('fDrawers_Templatex') + Template.PrintName); //kt added 7/15/2007
    915         BeforeLine := SendMessage(FRichEditControl.Handle, EM_EXLINEFROMCHAR, 0, FRichEditControl.SelStart);
    916         FRichEditControl.SelText := txt;
    917         FRichEditControl.SetFocus;
    918         SendMessage(FRichEditControl.Handle, EM_SCROLLCARET, 0, 0);
    919         AfterTop := SendMessage(FRichEditControl.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
    920         SendMessage(FRichEditControl.Handle, EM_LINESCROLL, 0, -1 * (AfterTop - BeforeLine));
     995        if HTMLEditActive then begin  //kt added block 8/09
     996          //FHtmlEditControl.InsertTextAtCaret(txt);
     997          FHtmlEditControl.SelText := txt;
     998          FHtmlEditControl.SetFocus;
     999        end else begin  //kt original below  8/09
     1000          BeforeLine := SendMessage(FRichEditControl.Handle, EM_EXLINEFROMCHAR, 0, FRichEditControl.SelStart);
     1001          FRichEditControl.SelText := txt;
     1002          FRichEditControl.SetFocus;
     1003          SendMessage(FRichEditControl.Handle, EM_SCROLLCARET, 0, 0);
     1004          AfterTop := SendMessage(FRichEditControl.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
     1005          SendMessage(FRichEditControl.Handle, EM_LINESCROLL, 0, -1 * (AfterTop - BeforeLine));
     1006        end;  //kt 8/09
    9211007      end;
    9221008    end;
     
    14971583end;
    14981584
    1499 function TfrmDrawers.InsertOK(Ask: boolean): boolean;
    1500 
    1501   function REOK: boolean;
    1502   begin
    1503     Result := assigned(FRichEditControl) and
    1504               FRichEditControl.Visible and
    1505               FRichEditControl.Parent.Visible;
    1506   end;
    1507 
    1508 begin
    1509   Result := REOK;
     1585
     1586//kt 8/09 function TfrmDrawers.InsertOK(Ask: boolean): boolean;
     1587function TfrmDrawers.InsertOK(Ask: boolean; TemplateIsHTML : boolean): boolean;  //kt 8/09
     1588
     1589  function EditControlOK: boolean;   //kt 8/09 renamed.  Was REOK
     1590  begin
     1591    if HTMLEditActive then begin  //kt added this part 8/09
     1592      Result := assigned(FHtmlEditControl) and
     1593                FHtmlEditControl.Visible and
     1594                TWinControl(FHtmlEditControl).Parent.Visible;
     1595    end else begin  //kt original below.
     1596      Result := assigned(FRichEditControl) and
     1597                FRichEditControl.Visible and
     1598                FRichEditControl.Parent.Visible and
     1599                FRichEditControl.Parent.Parent.Visible;   //kt added last line
     1600    end;
     1601  end;
     1602
     1603begin
     1604  Result := EditControlOK;  //kt renamed function.
    15101605  if (not ask) and (not Result) and (assigned(FNewNoteButton)) then
    15111606    Result := TRUE
     
    15151610  begin
    15161611    FNewNoteButton.Click;
    1517     Result := REOK;
     1612    if TemplateIsHTML and Assigned(FHtmlModeSwitcher) then begin  //kt 8/09
     1613      FHtmlModeSwitcher(TemplateIsHTML, true);                    //kt 8/09
     1614      FHtmlEditControl.MoveCaretToEnd;                            //kt 8/09
     1615    end;                                                          //kt 8/09
     1616    Result := EditControlOK;  //kt 8/09  Renamed function.
    15181617  end;
    15191618end;
Note: See TracChangeset for help on using the changeset viewer.