⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 templatemanager.pas

📁 PatientRunner 20 Source
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{ *************************************************************************** }
{                                                                             }
{ PatientRunner                                                               }
{                                                                             }
{ Copyright (c) 2002-2005 IgD Software, LLC                                   }
{                                                                             }
{ This file may be distributed and/or modified under the terms of the GNU     }
{ General Public License (GPL) version 2 as published by the Free Software    }
{ Foundation and appearing at http://www.gnu.org/licenses/gpl.html.           }
{                                                                             }
{ *************************************************************************** }

{ All the editing controls are the same as the note editing controls on the   }
{ PatientExplorer form.  Please refer to those for comments.                  }

unit TemplateManager;

interface

uses
  SysUtils, Classes, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls, Menus, FMTBcd, DB, SqlExpr,
  ImgList, ToolWin, Graphics, ad3RichEdit, ad3SpellBase, ad3Spell;

type
  PTemplateRecord = ^TTemplateRecord;
  TTemplateRecord = record
    TemplateID: integer;
    Description: string;
    TemplateStringStream: TStringStream;
    Author: string;
    //The following variables are for internal use and not part of the DB
    //There are 3 possible states for notes:
    //1.  Template is brand new and would require a SQL insert (NewNote)
    //2.  Template already exists and has been changed (Modded) and is open for
    //    editing.  A SQL update would be needed.
    //3.  Template already exists, is open for editing but is unchanged.  Leave
    //    the note open but no SQL update needed.
    NewNote: boolean;
    Modded: boolean; //used instead of 'modified' to prevent confusion
    OpenforEditing: boolean; //it is possible for a note to be "open" but not modified
  end;

  //The richedit control does not publish the OnDblClick event but it is there,
  //only protected.  Use an interposer class as below to make it public.
  TRichedit = class( ComCtrls.Trichedit )
  public
    property OnDblClick;
  end;

  TTemplateManagerForm = class(TForm)
    BottomPanel: TPanel;
    StatusBar: TStatusBar;
    LeftSplitter: TSplitter;
    RightSplitter: TSplitter;
    TemplateGroupBox: TGroupBox;
    TemplatesPopupMenu: TPopupMenu;
    NewNoteMenuItem: TMenuItem;
    EditNoteMenuItem: TMenuItem;
    DeleteNoteMenuItem: TMenuItem;
    N2: TMenuItem;
    Refresh: TMenuItem;
    MainMenu: TMainMenu;
    Templates: TMenuItem;
    NewNote: TMenuItem;
    EditNote: TMenuItem;
    DeleteNote: TMenuItem;
    N1: TMenuItem;
    Refresh1: TMenuItem;
    SQLQuery: TSQLQuery;
    PrintDialog: TPrintDialog;
    PrinterSetupDialog: TPrinterSetupDialog;
    N5: TMenuItem;
    Edit1: TMenuItem;
    Undo1: TMenuItem;
    N6: TMenuItem;
    Cut1: TMenuItem;
    Copy1: TMenuItem;
    Paste1: TMenuItem;
    N7: TMenuItem;
    Font1: TMenuItem;
    Save1: TMenuItem;
    RevertNote: TMenuItem;
    N8: TMenuItem;
    CoolBar1: TCoolBar;
    StandardToolBar: TToolBar;
    CutButton: TToolButton;
    CopyButton: TToolButton;
    PasteButton: TToolButton;
    UndoButton: TToolButton;
    ToolButton10: TToolButton;
    FontName: TComboBox;
    ToolButton11: TToolButton;
    FontSize: TEdit;
    UpDown1: TUpDown;
    ToolButton2: TToolButton;
    BoldButton: TToolButton;
    ItalicButton: TToolButton;
    UnderlineButton: TToolButton;
    ToolButton16: TToolButton;
    LeftAlign: TToolButton;
    CenterAlign: TToolButton;
    RightAlign: TToolButton;
    ToolButton20: TToolButton;
    BulletsButton: TToolButton;
    ToolBar1: TToolBar;
    Label7: TLabel;
    DescriptionEdit: TEdit;
    ToolBar2: TToolBar;
    FontDialog: TFontDialog;
    Undo2: TMenuItem;
    N9: TMenuItem;
    Cut2: TMenuItem;
    Copy2: TMenuItem;
    Paste2: TMenuItem;
    N10: TMenuItem;
    Font2: TMenuItem;
    Save2: TMenuItem;
    RevertNoteMenuItem: TMenuItem;
    N13: TMenuItem;
    TemplateRichEdit: TAddictRichEdit;
    ToolButton1: TToolButton;
    SpellingButton: TToolButton;
    AddictSpell31: TAddictSpell3;
    ToolbarImages: TImageList;
    ools1: TMenuItem;
    Spelling1: TMenuItem;
    SpellingOptions1: TMenuItem;
    N3: TMenuItem;
    Spelling2: TMenuItem;
    Panel1: TPanel;
    OKButton: TButton;
    CancelButton: TButton;
    TemplatesListViewPanel: TPanel;
    CheckBoxPanel: TPanel;
    ShowOnlyMyTemplatesCheckBox: TCheckBox;
    TemplatesListView: TListView;
    procedure TemplatesListBoxClick(Sender: TObject);
    procedure NewNoteClick(Sender: TObject);
    procedure EditNoteClick(Sender: TObject);
    procedure DeleteNoteClick(Sender: TObject);
    procedure RefreshTemplatesDBClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure SaveNoteClick(Sender: TObject);
    procedure RevertNoteClick(Sender: TObject);
    procedure UndoClick(Sender: TObject);
    procedure CutClick(Sender: TObject);
    procedure CopyClick(Sender: TObject);
    procedure PasteClick(Sender: TObject);
    procedure SelectionChange(Sender: TObject);
    procedure FontClick(Sender: TObject);
    procedure FontNameChange(Sender: TObject);
    procedure FontSizeChange(Sender: TObject);
    procedure BoldButtonClick(Sender: TObject);
    procedure ItalicButtonClick(Sender: TObject);
    procedure UnderlineButtonClick(Sender: TObject);
    procedure BulletsButtonClick(Sender: TObject);
    procedure AlignButtonClick(Sender: TObject);
    procedure OKButtonClick(Sender: TObject);
    procedure CancelButtonClick(Sender: TObject);
    procedure SpellingButtonClick(Sender: TObject);
    procedure SpellingOptions1Click(Sender: TObject);
    procedure TemplatesListViewCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    procedure FormDestroy(Sender: TObject);
  private
    PreviousItem: TListItem;
    FUpdating: boolean;
    FImport: boolean;
    procedure GetFontNames;
    function CurrText: TTextAttributes;
    procedure EnableTemplateEditingControls;
    procedure DisableTemplateEditingControls;
    procedure CleanUpTemplatesListView;
    procedure SetImport(const Value: boolean);
    procedure ReplaceText(FindText, ReplaceText: String; StartPos: Integer; SearchOptions: TSearchTypes; MatchCase: boolean);
  public
    property Import: boolean read FImport write SetImport;
  end;

var
  TemplateManagerForm: TTemplateManagerForm;

implementation

uses Main, Windows, Messages, Registry, PatientExplorer;

{$R *.dfm}

procedure TTemplateManagerForm.EnableTemplateEditingControls;
begin
  with DescriptionEdit do
  begin
    Color:=clWindow;
    ReadOnly:=False;
  end;

  with TemplateRichEdit do
  begin
    Color:=clWindow;
    ReadOnly:=False;
  end;
end;

procedure TTemplateManagerForm.DisableTemplateEditingControls;
begin
  with DescriptionEdit do
  begin
    Color:=clBtnFace;
    ReadOnly:=True;
  end;

  with TemplateRichEdit do
  begin
    Color:=clBtnFace;
    ReadOnly:=True;
  end;
end;

procedure TTemplateManagerForm.CleanUpTemplatesListView;
var i: integer;
begin
  try
    for i:=TemplatesListView.Items.Count-1 downto 0 do
    begin
      if Assigned(TemplatesListView.Items[i].Data) then
      begin
        PTemplateRecord(TemplatesListView.Items[i].Data)^.TemplateStringStream.Free;
        Dispose(PTemplateRecord(TemplatesListView.Items[i].Data));
      end;
      TemplatesListView.Items.Delete(i);
    end;
  finally
    TemplatesListView.Clear;
  end;

  PreviousItem:=nil;
end;

procedure TTemplateManagerForm.TemplatesListViewCustomDrawItem(
  Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
  if PTemplateRecord(Item.Data)^.Modded then
  begin
    Sender.Canvas.Font.Style:=[fsBold];
    Sender.Canvas.Font.Color:=clRed;
  end
  else
  begin
    Sender.Canvas.Font.Style:=[];
    Sender.Canvas.Font.Color:=clBlack;
  end;
end;

procedure TTemplateManagerForm.TemplatesListBoxClick(Sender: TObject);
var TemplatesListViewnotEmpty: boolean;
begin
  TemplatesListViewnotEmpty:=Boolean(TemplatesListView.Items.Count>0);

  EditNote.Enabled:=TemplatesListViewnotEmpty;
  EditNoteMenuItem.Enabled:=TemplatesListViewnotEmpty;
  DeleteNote.Enabled:=TemplatesListViewnotEmpty;
  DeleteNoteMenuItem.Enabled:=TemplatesListViewnotEmpty;

  if not TemplatesListViewnotEmpty then
  begin
    DescriptionEdit.Text:='';
    TemplateGroupBox.Caption:='Template Text';
    TemplateRichEdit.Clear;
    DisableTemplateEditingControls;
    Exit;
  end;

  if TemplatesListView.ItemFocused=nil then
  begin
    TemplatesListView.Selected:=TemplatesListView.TopItem;
    TemplatesListView.ItemFocused:=TemplatesListView.TopItem;
  end;

  if not Assigned(TemplatesListView.ItemFocused.Data) then Exit;

  if PreviousItem = nil then
    PreviousItem:=TemplatesListView.ItemFocused
  else
  begin
    if TemplatesListView.ItemFocused <> PreviousItem then
    begin
      if not Assigned(PreviousItem.Data) then Exit;

      if DescriptionEdit.Modified or TemplateRichEdit.Modified
        or PTemplateRecord(PreviousItem.Data)^.NewNote
        or PTemplateRecord(PreviousItem.Data)^.Modded then
      begin
        with PTemplateRecord(PreviousItem.Data)^ do
        begin
          Modded:=True;
          Description:=DescriptionEdit.Text;
          TemplateStringStream.Position:=0;
          TemplateRichEdit.Lines.SaveToStream(TemplateStringStream);

          PreviousItem.Caption:=PTemplateRecord(PreviousItem.Data)^.Description;
          PreviousItem.SubItems[0]:=Author; //author will not change
        end;
      end;
      PreviousItem:=TemplatesListView.ItemFocused;
    end
    else
      Exit;
  end;

  with PTemplateRecord(TemplatesListView.ItemFocused.Data)^ do
  begin
    DescriptionEdit.Text:=Description;
    TemplateGroupBox.Caption:='Template Text  (Author='+Author+')';
    TemplateStringStream.Position:=0;
    TemplateRichEdit.Lines.LoadFromStream(TemplateStringStream);

    TemplatesListView.ItemFocused.Caption:=Description;
    TemplatesListView.ItemFocused.SubItems[0]:=Author;

    if NewNote or Modded or OpenforEditing then
      EnableTemplateEditingControls
    else
      DisableTemplateEditingControls;

    DescriptionEdit.Modified:=False;
    TemplateRichEdit.Modified:=False;
  end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -