📄 templatemanager.pas
字号:
{ *************************************************************************** }
{ }
{ 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 + -