Module

fTemplateFieldEditor

Path

C:\CPRS\CPRS30\Templates\fTemplateFieldEditor.pas

Last Modified

7/15/2014 3:26:44 PM

Units Used in Interface

Name Comments
fBase508Form -
uTemplateFields -

Units Used in Implementation

Name Comments
fTemplateDialog -
fTemplateFields -
rTemplates -
uConst -
uSpell -

Classes

Name Comments
TfrmTemplateFieldEditor -

Procedures

Name Owner Declaration Scope Comments
btnApplyClick TfrmTemplateFieldEditor procedure btnApplyClick(Sender: TObject); Public/Published -
btnCancelClick TfrmTemplateFieldEditor procedure btnCancelClick(Sender: TObject); Public/Published -
btnOKClick TfrmTemplateFieldEditor procedure btnOKClick(Sender: TObject); Public/Published -
btnPreviewClick TfrmTemplateFieldEditor procedure btnPreviewClick(Sender: TObject); Public/Published -
cbActiveClick TfrmTemplateFieldEditor procedure cbActiveClick(Sender: TObject); Public/Published -
cbExcludeClick TfrmTemplateFieldEditor procedure cbExcludeClick(Sender: TObject); Public/Published -
cbHideClick TfrmTemplateFieldEditor procedure cbHideClick(Sender: TObject); Public/Published -
cbRequiredClick TfrmTemplateFieldEditor procedure cbRequiredClick(Sender: TObject); Public/Published -
cbSepLinesClick TfrmTemplateFieldEditor procedure cbSepLinesClick(Sender: TObject); Public/Published -
cbxDateTypeChange TfrmTemplateFieldEditor procedure cbxDateTypeChange(Sender: TObject); Public/Published -
cbxDefaultChange TfrmTemplateFieldEditor procedure cbxDefaultChange(Sender: TObject); Public/Published -
cbxObjsChange TfrmTemplateFieldEditor procedure cbxObjsChange(Sender: TObject); Public/Published -
cbxObjsKeyDown TfrmTemplateFieldEditor procedure cbxObjsKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); Public/Published -
cbxObjsNeedData TfrmTemplateFieldEditor procedure cbxObjsNeedData(Sender: TObject; const StartFrom: String; Direction, InsertAt: Integer); Public/Published -
cbxObjsSynonymCheck TfrmTemplateFieldEditor procedure cbxObjsSynonymCheck(Sender: TObject; const Text: String; var IsSynonym: Boolean); Public/Published -
cbxTypeChange TfrmTemplateFieldEditor procedure cbxTypeChange(Sender: TObject); Public/Published -
ControlExit TfrmTemplateFieldEditor procedure ControlExit(Sender: TObject); Public/Published -
edtDefaultChange TfrmTemplateFieldEditor procedure edtDefaultChange(Sender: TObject); Public/Published -
edtDefNumChange TfrmTemplateFieldEditor procedure edtDefNumChange(Sender: TObject); Public/Published -
edtIncChange TfrmTemplateFieldEditor procedure edtIncChange(Sender: TObject); Public/Published -
edtIndentChange TfrmTemplateFieldEditor procedure edtIndentChange(Sender: TObject); Public/Published -
edtLenChange TfrmTemplateFieldEditor procedure edtLenChange(Sender: TObject); Public/Published -
edtLMTextChange TfrmTemplateFieldEditor procedure edtLMTextChange(Sender: TObject); Public/Published -
edtMaxValChange TfrmTemplateFieldEditor procedure edtMaxValChange(Sender: TObject); Public/Published -
edtMinValChange TfrmTemplateFieldEditor procedure edtMinValChange(Sender: TObject); Public/Published -
edtNameChange TfrmTemplateFieldEditor procedure edtNameChange(Sender: TObject); Public/Published -
edtNameExit TfrmTemplateFieldEditor procedure edtNameExit(Sender: TObject); Public/Published -
edtPadChange TfrmTemplateFieldEditor procedure edtPadChange(Sender: TObject); Public/Published -
edtpopControlEnter TfrmTemplateFieldEditor procedure edtpopControlEnter(Sender: TObject); Public/Published -
edtTextLenChange TfrmTemplateFieldEditor procedure edtTextLenChange(Sender: TObject); Public/Published -
edtURLChange TfrmTemplateFieldEditor procedure edtURLChange(Sender: TObject); Public/Published -
EnableButtons TfrmTemplateFieldEditor procedure EnableButtons; Private -
FormCloseQuery TfrmTemplateFieldEditor procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); Public/Published -
FormCreate TfrmTemplateFieldEditor procedure FormCreate(Sender: TObject); Public/Published -
FormDestroy TfrmTemplateFieldEditor procedure FormDestroy(Sender: TObject); Public/Published -
FormResize TfrmTemplateFieldEditor procedure FormResize(Sender: TObject); Public/Published -
mnuActionClick TfrmTemplateFieldEditor procedure mnuActionClick(Sender: TObject); Public/Published -
mnuBPCheckGrammarClick TfrmTemplateFieldEditor procedure mnuBPCheckGrammarClick(Sender: TObject); Public/Published -
mnuBPCopyClick TfrmTemplateFieldEditor procedure mnuBPCopyClick(Sender: TObject); Public/Published -
mnuBPCutClick TfrmTemplateFieldEditor procedure mnuBPCutClick(Sender: TObject); Public/Published -
mnuBPPasteClick TfrmTemplateFieldEditor procedure mnuBPPasteClick(Sender: TObject); Public/Published -
mnuBPSelectAllClick TfrmTemplateFieldEditor procedure mnuBPSelectAllClick(Sender: TObject); Public/Published -
mnuBPSpellCheckClick TfrmTemplateFieldEditor procedure mnuBPSpellCheckClick(Sender: TObject); Public/Published -
mnuBPUndoClick TfrmTemplateFieldEditor procedure mnuBPUndoClick(Sender: TObject); Public/Published -
mnuCopyClick TfrmTemplateFieldEditor procedure mnuCopyClick(Sender: TObject); Public/Published -
mnuDeleteClick TfrmTemplateFieldEditor procedure mnuDeleteClick(Sender: TObject); Public/Published -
mnuInsertTemplateFieldClick TfrmTemplateFieldEditor procedure mnuInsertTemplateFieldClick(Sender: TObject); Public/Published -
mnuNewClick TfrmTemplateFieldEditor procedure mnuNewClick(Sender: TObject); Public/Published -
pnlObjsResize TfrmTemplateFieldEditor procedure pnlObjsResize(Sender: TObject); Public/Published -
popTextPopup TfrmTemplateFieldEditor procedure popTextPopup(Sender: TObject); Public/Published -
reItemsChange TfrmTemplateFieldEditor procedure reItemsChange(Sender: TObject); Public/Published -
reItemsResizeRequest TfrmTemplateFieldEditor procedure reItemsResizeRequest(Sender: TObject; Rect: TRect); Public/Published -
reItemsSelectionChange TfrmTemplateFieldEditor procedure reItemsSelectionChange(Sender: TObject); Public/Published -
reNotesChange TfrmTemplateFieldEditor procedure reNotesChange(Sender: TObject); Public/Published -
reNotesKeyUp TfrmTemplateFieldEditor procedure reNotesKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); Public/Published -
ResetListEntry TfrmTemplateFieldEditor procedure ResetListEntry; Private -
SetFld TfrmTemplateFieldEditor procedure SetFld(const Value: TTemplateField); Private -
SetHideSynonyms TfrmTemplateFieldEditor procedure SetHideSynonyms(const Value: boolean); Private -
SetLbl - procedure SetLbl(const Text: string); Local -
SetY - procedure SetY(Control: TControl; const Text: string); Local -
SyncItems TfrmTemplateFieldEditor procedure SyncItems(DoUpdate: boolean = TRUE); Private -
UpdateControls TfrmTemplateFieldEditor procedure UpdateControls; Private -
VerifyName TfrmTemplateFieldEditor procedure VerifyName; Private -

Functions

Name Owner Declaration Scope Comments
EditDialogFields - function EditDialogFields: boolean; Interfaced -
GetPopupControl TfrmTemplateFieldEditor function GetPopupControl: TCustomEdit; Private -
SaveChanges TfrmTemplateFieldEditor function SaveChanges: boolean; Private -

Global Variables

Name Type Declaration Comments
frmTemplateFields TfrmTemplateFields frmTemplateFields: TfrmTemplateFields = nil; -


Module Source

1     unit fTemplateFieldEditor;
2     
3     interface
4     
5     uses
6       Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
7       ORCtrls, StdCtrls, ExtCtrls, Menus, ComCtrls, uTemplateFields, ORFn,
8       ToolWin, MenuBar, ORClasses, ORDtTm, fBase508Form, VA508AccessibilityManager;
9     
10    type
11      TfrmTemplateFieldEditor = class(TfrmBase508Form)
12        pnlBottom: TPanel;
13        btnOK: TButton;
14        btnCancel: TButton;
15        pnlObjs: TPanel;
16        cbxObjs: TORComboBox;
17        lblObjs: TLabel;
18        splLeft: TSplitter;
19        pnlRight: TPanel;
20        pnlPreview: TPanel;
21        lblNotes: TLabel;
22        pnlObjInfo: TPanel;
23        lblName: TLabel;
24        lblS2: TLabel;
25        lblLM: TLabel;
26        edtName: TCaptionEdit;
27        splBottom: TSplitter;
28        lblS1: TLabel;
29        edtLMText: TCaptionEdit;
30        cbxType: TORComboBox;
31        lblType: TLabel;
32        reNotes: TRichEdit;
33        btnApply: TButton;
34        btnPreview: TButton;
35        mnuMain: TMainMenu;
36        mnuAction: TMenuItem;
37        mnuNew: TMenuItem;
38        mnuCopy: TMenuItem;
39        cbHide: TCheckBox;
40        pnlTop: TPanel;
41        MenuBar1: TMenuBar;
42        btnNew: TButton;
43        btnCopy: TButton;
44        mnuDelete: TMenuItem;
45        btnDelete: TButton;
46        mnuPreview: TMenuItem;
47        popText: TPopupMenu;
48        mnuBPUndo: TMenuItem;
49        N8: TMenuItem;
50        mnuBPCut: TMenuItem;
51        mnuBPCopy: TMenuItem;
52        mnuBPPaste: TMenuItem;
53        mnuBPSelectAll: TMenuItem;
54        N2: TMenuItem;
55        mnuBPCheckGrammar: TMenuItem;
56        mnuBPSpellCheck: TMenuItem;
57        lblTextLen: TLabel;
58        edtTextLen: TCaptionEdit;
59        udTextLen: TUpDown;
60        pnlSwap: TPanel;
61        edtDefault: TCaptionEdit;
62        pnlNum: TPanel;
63        edtURL: TCaptionEdit;
64        udDefNum: TUpDown;
65        edtDefNum: TCaptionEdit;
66        udMinVal: TUpDown;
67        edtMinVal: TCaptionEdit;
68        lblMin: TLabel;
69        udInc: TUpDown;
70        edtInc: TCaptionEdit;
71        lblInc: TLabel;
72        lblMaxVal: TLabel;
73        edtMaxVal: TCaptionEdit;
74        udMaxVal: TUpDown;
75        reItems: TRichEdit;
76        lblLength: TLabel;
77        edtLen: TCaptionEdit;
78        udLen: TUpDown;
79        cbxDefault: TORComboBox;
80        lblS3: TLabel;
81        gbIndent: TGroupBox;
82        lblIndent: TLabel;
83        edtIndent: TCaptionEdit;
84        udIndent: TUpDown;
85        udPad: TUpDown;
86        edtPad: TCaptionEdit;
87        lblPad: TLabel;
88        gbMisc: TGroupBox;
89        cbActive: TCheckBox;
90        cbRequired: TCheckBox;
91        cbSepLines: TCheckBox;
92        pnlDate: TPanel;
93        edtDateDef: TCaptionEdit;
94        cbxDateType: TORComboBox;
95        lblDateType: TLabel;
96        cbExclude: TCheckBox;
97        lblReq: TStaticText;
98        lblLine: TLabel;
99        lblCol: TLabel;
100       N14: TMenuItem;
101       mnuInsertTemplateField: TMenuItem;
102       procedure cbxObjsNeedData(Sender: TObject; const StartFrom: String;
103         Direction, InsertAt: Integer);
104       procedure FormCreate(Sender: TObject);
105       procedure cbxObjsChange(Sender: TObject);
106       procedure edtNameChange(Sender: TObject);
107       procedure cbxTypeChange(Sender: TObject);
108       procedure edtLenChange(Sender: TObject);
109       procedure edtDefaultChange(Sender: TObject);
110       procedure cbxDefaultChange(Sender: TObject);
111       procedure edtLMTextChange(Sender: TObject);
112       procedure cbActiveClick(Sender: TObject);
113       procedure mnuNewClick(Sender: TObject);
114       procedure btnOKClick(Sender: TObject);
115       procedure btnApplyClick(Sender: TObject);
116       procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
117       procedure btnCancelClick(Sender: TObject);
118       procedure reItemsChange(Sender: TObject);
119       procedure cbHideClick(Sender: TObject);
120       procedure edtNameExit(Sender: TObject);
121       procedure mnuCopyClick(Sender: TObject);
122       procedure mnuDeleteClick(Sender: TObject);
123       procedure btnPreviewClick(Sender: TObject);
124       procedure mnuActionClick(Sender: TObject);
125       procedure cbRequiredClick(Sender: TObject);
126       procedure pnlObjsResize(Sender: TObject);
127       procedure FormDestroy(Sender: TObject);
128       procedure cbxObjsSynonymCheck(Sender: TObject; const Text: String;
129         var IsSynonym: Boolean);
130       procedure popTextPopup(Sender: TObject);
131       procedure mnuBPUndoClick(Sender: TObject);
132       procedure mnuBPCutClick(Sender: TObject);
133       procedure mnuBPCopyClick(Sender: TObject);
134       procedure mnuBPPasteClick(Sender: TObject);
135       procedure mnuBPSelectAllClick(Sender: TObject);
136       procedure mnuBPCheckGrammarClick(Sender: TObject);
137       procedure mnuBPSpellCheckClick(Sender: TObject);
138       procedure cbSepLinesClick(Sender: TObject);
139       procedure edtpopControlEnter(Sender: TObject);
140       procedure cbxObjsKeyDown(Sender: TObject; var Key: Word;
141         Shift: TShiftState);
142       procedure edtTextLenChange(Sender: TObject);
143       procedure edtDefNumChange(Sender: TObject);
144       procedure edtMinValChange(Sender: TObject);
145       procedure edtMaxValChange(Sender: TObject);
146       procedure edtIncChange(Sender: TObject);
147       procedure edtURLChange(Sender: TObject);
148       procedure edtPadChange(Sender: TObject);
149       procedure edtIndentChange(Sender: TObject);
150       procedure reNotesChange(Sender: TObject);
151       procedure cbxDateTypeChange(Sender: TObject);
152       procedure cbExcludeClick(Sender: TObject);
153       procedure FormResize(Sender: TObject);
154       procedure reItemsResizeRequest(Sender: TObject; Rect: TRect);
155       procedure reItemsSelectionChange(Sender: TObject);
156       procedure mnuInsertTemplateFieldClick(Sender: TObject);
157       procedure ControlExit(Sender: TObject);
158       procedure reNotesKeyUp(Sender: TObject; var Key: Word;
159         Shift: TShiftState);
160     private
161       CopyFld, FFld: TTemplateField;
162       FUpdating: boolean;
163       FReloadChanges: boolean;
164       FChangesPending: boolean;
165       FDeleted: TORStringList;
166       FHideSynonyms: boolean;
167       FLastRect: TRect;
168       procedure UpdateControls;
169       procedure SyncItems(DoUpdate: boolean = TRUE);
170       function SaveChanges: boolean;
171       procedure ResetListEntry;
172       procedure VerifyName;
173       procedure EnableButtons;
174       procedure SetFld(const Value: TTemplateField);
175       procedure SetHideSynonyms(const Value: boolean);
176       function GetPopupControl: TCustomEdit;
177     public
178       { Public declarations }
179     end;
180   
181   function EditDialogFields: boolean;
182   
183   implementation
184   
185   uses rTemplates, fTemplateDialog, Clipbrd, uSpell, uConst,
186        fTemplateFields, VAUtils;
187   
188   {$R *.DFM}
189   
190   { TfrmDlgObjEditor }
191   
192   var
193     frmTemplateFields: TfrmTemplateFields = nil;
194   
195   
196   function EditDialogFields: boolean;
197   var
198     frmTemplateFieldEditor: TfrmTemplateFieldEditor;
199   
200   begin
201     frmTemplateFieldEditor := TfrmTemplateFieldEditor.Create(Application);
202     try
203       frmTemplateFieldEditor.ShowModal;
204       Result := frmTemplateFieldEditor.FReloadChanges;
205     finally
206       frmTemplateFieldEditor.Free;
207     end;
208   end;
209   
210   procedure TfrmTemplateFieldEditor.UpdateControls;
211   const
212     DefTxt = 'Default:';
213   
214   var
215     ok, edt, txt, tmp: boolean;
216     Y, idx, Max: integer;
217     wpTxt: string;
218   
219     procedure SetLbl(const Text: string);
220     var
221       lbl: TLabel;
222   
223     begin
224       inc(idx);
225       case idx of
226         1: lbl := lblS1;
227         2: lbl := lblS2;
228         3: lbl := lblS3;
229         else
230            lbl := nil;
231       end;
232       if assigned(lbl) then
233         lbl.Caption := Text;
234     end;
235   
236     procedure SetY(Control: TControl; const Text: string);
237     begin
238       if (Control.Visible) then
239       begin
240         Control.Top := Y;
241         inc(Y, Control.Height);
242         SetLbl(Text);
243       end;
244     end;
245   
246   begin
247     if(not FUpdating) then
248     begin
249       FUpdating := TRUE;
250       try
251         Y := 0;
252         idx := 0;
253         ok := assigned(FFld);
254         if(ok) then
255         begin
256           edt := (FFld.FldType in EditLenTypes);
257           txt := (FFld.FldType in EditDfltTypes);
258         end
259         else
260         begin
261           edt := FALSE;
262           txt := FALSE;
263         end;
264         lblName.Enabled := ok;
265         edtName.Enabled := ok;
266         lblType.Enabled := ok;
267         cbxType.Enabled := ok;
268         lblLM.Enabled := ok;
269         edtLMText.Enabled := ok;
270         cbActive.Enabled := ok;
271   
272         gbMisc.Enabled := ok;
273         lblNotes.Enabled := ok;
274         reNotes.Enabled := ok;
275         if(ok) then
276         begin
277           edtName.Text := FFld.FldName;
278           cbxType.ItemIndex := ord(FFld.FldType);
279           edtLMText.Text := FFld.LMText;
280           cbActive.Checked := FFld.Inactive;
281           reNotes.Lines.Text := FFld.Notes;
282         end
283         else
284         begin
285           edtName.Text := '';
286           cbxType.ItemIndex := -1;
287           edtLMText.Text := '';
288           cbActive.Checked := FALSE;
289           reNotes.Clear;
290         end;
291   
292         tmp := ok and (not (FFld.FldType in NoRequired));
293         cbRequired.Enabled := tmp;
294         if tmp then
295           cbRequired.Checked := FFld.Required
296         else
297           cbRequired.Checked := FALSE;
298   
299         pnlSwap.DisableAlign;
300         try
301           tmp := ok and (FFld.FldType in SepLinesTypes);
302           cbSepLines.Enabled := tmp;
303           if tmp then
304             cbSepLines.Checked := FFld.SepLines
305           else
306             cbSepLines.Checked := FALSE;
307   
308           tmp := ok and (FFld.FldType in ExcludeText);
309           cbExclude.Enabled := tmp;
310           if tmp then
311             cbExclude.Checked := FFld.SepLines
312           else
313             cbExclude.Checked := FALSE;
314   
315           lblLength.Enabled := edt;
316           if ok and (FFld.FldType = dftWP) then
317           begin
318             lblTextLen.Caption := 'Num Lines:';
319             udLen.Min := 5;
320             udLen.Max := 74;
321             udTextLen.Min := 2;
322             udTextLen.Max := MaxTFWPLines;
323           end
324           else
325           begin
326             udLen.Min := 1;
327             udLen.Max := 70;
328             udTextLen.Min := 0;
329             udTextLen.Max := 240;
330             lblTextLen.Caption := 'Text Len:';
331           end;
332   
333           lblTextLen.Enabled := edt;
334           edtTextLen.Enabled := edt;
335           udTextLen.Enabled := edt;
336           edtLen.Enabled := edt;
337           udLen.Enabled := edt;
338   
339           edtDefault.Visible := txt;
340           SetY(edtDefault, DefTxt);
341           Max := MaxTFEdtLen;
342   
343           if(edt) then
344           begin
345             udLen.Associate := edtLen;
346             udLen.Position := FFld.MaxLen;
347             udTextLen.Associate := edtTextLen;
348             udTextLen.Position := FFld.TextLen;
349             if txt then
350               Max := FFld.MaxLen;
351           end
352           else
353           begin
354             udLen.Associate := nil;
355             edtLen.Text := '';
356             udTextLen.Associate := nil;
357             edtTextLen.Text := '';
358           end;
359   
360           if txt then
361           begin
362             edtDefault.MaxLength := Max;
363             edtDefault.Text := copy(FFld.EditDefault, 1, Max);
364           end;
365   
366           gbIndent.Enabled := ok;
367           lblIndent.Enabled := ok;
368           edtIndent.Enabled := ok;
369           udIndent.Enabled := ok;
370           if ok then
371           begin
372             udIndent.Associate := edtIndent;
373             udIndent.Position := FFld.Indent;
374           end
375           else
376           begin
377             udIndent.Associate := nil;
378             edtIndent.Text := '';
379           end;
380   
381           tmp := ok and (not cbExclude.Checked);
382           lblPad.Enabled := tmp;
383           edtPad.Enabled := tmp;
384           udPad.Enabled := tmp;
385           if tmp then
386           begin
387             udPad.Associate := edtPad;
388             udPad.Position := FFld.Pad;
389           end
390           else
391           begin
392             udPad.Associate := nil;
393             edtPad.Text := '';
394           end;
395   
396           tmp := ok and (FFld.FldType = dftNumber);
397           pnlNum.Visible := tmp;
398           SetY(pnlNum, DefTxt);
399           if tmp then
400           begin
401             udDefNum.Position := StrToIntDef(FFld.EditDefault, 0);
402             udMinVal.Position := FFld.MinVal;
403             udMaxVal.Position := FFld.MaxVal;
404             udInc.Position := FFld.Increment;
405           end;
406   
407           tmp := ok and (FFld.FldType = dftDate);
408           pnlDate.Visible := tmp;
409           SetY(pnlDate, DefTxt);
410           if tmp then
411           begin
412             edtDateDef.Text := FFld.EditDefault;
413             cbxDateType.SelectByID(TemplateFieldDateCodes[FFld.DateType]);
414           end;
415   
416           tmp := ok and (FFld.FldType in ItemDfltTypes);
417           cbxDefault.Visible := tmp;
418           SetY(cbxDefault, DefTxt);
419   
420           tmp := ok and (FFld.FldType = dftHyperlink);
421           edtURL.Visible := tmp;
422           SetY(edtURL, 'Address:');
423           if tmp then
424             edtURL.Text := FFld.URL;
425   
426           tmp := ok and (FFld.FldType in FldItemTypes);
427           reItems.Visible := tmp;
428           lblLine.Visible := tmp;
429           lblCol.Visible := tmp;
430           if tmp then
431           begin
432             if FFld.FldType = dftWP then
433               wpTxt := DefTxt
434             else
435               wpTxt := 'Items:';
436           end
437           else
438             wpTxt := '';
439           SetY(reItems, wpTxt);
440           if tmp then
441             reItems.Lines.Text := FFld.Items
442           else
443             reItems.Clear;
444         finally
445           pnlSwap.EnableAlign;
446         end;
447   
448         SetLbl('');
449         SetLbl('');
450         SetLbl('');
451         SyncItems(FALSE);
452         FormResize(Self);
453       finally
454         FUpdating := FALSE;
455       end;
456     end;
457   end;
458   
459   procedure TfrmTemplateFieldEditor.SyncItems(DoUpdate: boolean = TRUE);
460   var
461     i, idx, Siz, Max1, Max2: integer;
462     ChangeSizes: boolean;
463   
464   begin
465     if DoUpdate and FUpdating then
466       exit;
467     Max1 := 0;
468     Max2 := 0;
469     ChangeSizes := FALSE;
470     FUpdating := TRUE;
471     try
472       QuickCopy(reItems, cbxDefault);
473       idx := -1;
474       if(assigned(FFld)) and reItems.Visible and cbxDefault.Visible then
475       begin
476         ChangeSizes := TRUE;
477         for i := 0 to reItems.Lines.Count-1 do
478         begin
479           Siz := length(StripEmbedded(reItems.Lines[i]));
480           if Max1 < Siz then
481             Max1 := Siz;
482           if(idx < 0) and (FFld.ItemDefault = reItems.Lines[i]) then
483             idx := i;
484         end;
485         Max2 := Max1;
486         if Max1 > MaxTFEdtLen then
487           Max1 := MaxTFEdtLen;
488       end;
489       cbxDefault.ItemIndex := idx;
490     finally
491       FUpdating := FALSE;
492     end;
493     if ChangeSizes and DoUpdate then
494     begin
495       udLen.Position := Max1;
496       if (not udTextLen.Enabled) or
497          ((udTextLen.Position > 0) and (udTextLen.Position < Max2)) then
498         udTextLen.Position := Max2;
499     end;
500   end;
501   
502   procedure TfrmTemplateFieldEditor.cbxObjsNeedData(Sender: TObject;
503     const StartFrom: String; Direction, InsertAt: Integer);
504   var
505     tmp: TORStringList;
506     i, idx: integer;
507   
508   begin
509     tmp := TORStringList.Create;
510     try
511       FastAssign(SubSetOfTemplateFields(StartFrom, Direction), tmp);
512       for i := 0 to FDeleted.Count-1 do
513       begin
514         idx := tmp.IndexOfPiece(Piece(FDeleted[i],U,1), U, 1);
515         if(idx >= 0) then
516           tmp.delete(idx);
517       end;
518       ConvertCodes2Text(tmp, FALSE);
519       cbxObjs.ForDataUse(tmp);
520     finally
521       tmp.Free;
522     end;
523   end;
524   
525   procedure TfrmTemplateFieldEditor.FormCreate(Sender: TObject);
526   var
527     i: integer;
528     Child: TControl;
529     Overage: integer;
530   begin
531     FDeleted := TORStringList.Create;
532     FHideSynonyms := TRUE;
533     cbxObjs.InitLongList('');
534     cbxObjs.ItemHeight := 15;
535     UpdateControls;
536     ResizeAnchoredFormToFont(self);
537     //ResizeAnchoredFormToFont does the pnlObjInfo panel wrong.  So we fix it here.
538     gbMisc.Top := pnlObjInfo.ClientHeight - gbMisc.Height - 5;
539     gbIndent.Top := gbMisc.Top;
540     edtLMText.Top := gbMisc.Top - edtLMText.Height - 2;
541     lblLM.Top := edtLMText.Top + 5;
542     pnlSwap.Height := lblLM.Top - pnlSwap.Top;
543     Overage := edtName.Left + edtName.Width - pnlObjInfo.ClientWidth - 4;
544     for i := 0 to pnlObjInfo.ControlCount-1 do begin
545       Child := pnlObjInfo.Controls[i];
546       if (akRight in Child.Anchors) then begin
547         if (akLeft in Child.Anchors) then
548           Child.Width := Child.Width - Overage
549         else
550           Child.Left := Child.Left - Overage;
551       end;
552     end;
553   end;
554   
555   procedure TfrmTemplateFieldEditor.cbxObjsChange(Sender: TObject);
556   begin
557     if(cbxObjs.ItemIEN <> 0) then
558       SetFld(GetTemplateField(cbxObjs.ItemID, TRUE))
559     else
560       SetFld(nil);
561     UpdateControls;
562   end;
563   
564   procedure TfrmTemplateFieldEditor.edtNameChange(Sender: TObject);
565   var
566     ok: boolean;
567   
568   begin
569     if(not FUpdating) and (assigned(FFld)) then
570     begin
571       if (not FFld.NameChanged) and (not FFld.NewField) then
572       begin
573         ok := InfoBox('*** WARNING ***' + CRLF + CRLF +
574           'This template field has been saved, and may have been used in one or more' + CRLF +
575           'boilerplates.  Boilerplates can be found in templates, titles, reasons for request' + CRLF +
576           'and reminder dialogs.  Renaming this template field will cause any boilerplates' + CRLF +
577           'that use it to no longer function correctly.' + CRLF + CRLF +
578           'Are you sure you want to rename the ' + FFld.FldName + ' template field?',
579           'Warning', MB_YESNO or MB_ICONWARNING) = IDYES;
580         if ok then
581           InfoBox('Template field will be renamed when OK or Apply is pressed.', 'Information', MB_OK or MB_ICONINFORMATION)
582         else
583         begin
584           FUpdating := TRUE;
585           try
586             edtName.Text := FFld.FldName;
587           finally
588             FUpdating := FALSE;
589           end;
590         end;
591       end
592       else
593         ok := TRUE;
594       if ok then
595       begin
596         FFld.FldName := edtName.Text;
597         edtName.Text := FFld.FldName;
598         FChangesPending := TRUE;
599         ResetListEntry;
600       end;
601     end;
602   end;
603   
604   procedure TfrmTemplateFieldEditor.cbxTypeChange(Sender: TObject);
605   begin
606     if(not FUpdating) and (assigned(FFld)) then
607     begin
608       if(cbxType.ItemIndex < 0) then
609       begin
610         FUpdating := TRUE;
611         try
612           cbxType.ItemIndex := 0;
613         finally
614           FUpdating := FALSE;
615         end;
616       end;
617       FFld.FldType := TTemplateFieldType(cbxType.ItemIndex);
618     end;
619     EnableButtons;
620     UpdateControls;
621   end;
622   
623   procedure TfrmTemplateFieldEditor.edtLenChange(Sender: TObject);
624   var
625     v: integer;
626     ok: boolean;
627   
628   begin
629     EnsureText(edtLen, udLen);
630     if((not FUpdating) and (assigned(FFld)) and (FFld.FldType in (EditLenTypes))) then
631     begin
632       EnsureText(edtLen, udLen);
633       FFld.MaxLen := udLen.Position;
634       udLen.Position := FFld.MaxLen;
635       if edtDefault.Visible then
636       begin
637         edtDefault.MaxLength := FFld.MaxLen;
638         edtDefault.Text := copy(edtDefault.Text,1,FFld.MaxLen);
639       end;
640       case FFLd.FldType of
641         dftEditBox:  ok := TRUE;
642         dftComboBox: ok := (udTextLen.Position > 0);
643         else         ok := FALSE;
644       end;
645       if ok then
646       begin
647         v := udLen.Position;
648         if udTextLen.Position < v then
649           udTextLen.Position := v;
650       end;
651     end;
652   end;
653   
654   procedure TfrmTemplateFieldEditor.edtDefaultChange(Sender: TObject);
655   begin
656     if((not FUpdating) and (assigned(FFld)) and (FFld.FldType in EditDfltType2)) then
657     begin
658       FFld.EditDefault := TEdit(Sender).Text;
659       TEdit(Sender).Text := FFld.EditDefault;
660     end;
661   end;
662   
663   procedure TfrmTemplateFieldEditor.cbxDefaultChange(Sender: TObject);
664   begin
665     if((not FUpdating) and (assigned(FFld)) and (FFld.FldType in ItemDfltTypes)) then
666     begin
667       FFld.ItemDefault := cbxDefault.Text;
668       SyncItems;
669     end;
670   end;
671   
672   procedure TfrmTemplateFieldEditor.edtLMTextChange(Sender: TObject);
673   begin
674     if((not FUpdating) and (assigned(FFld))) then
675     begin
676       FFld.LMText := edtLMText.Text;
677       edtLMText.Text := FFld.LMText;
678     end;
679   end;
680   
681   procedure TfrmTemplateFieldEditor.cbActiveClick(Sender: TObject);
682   begin
683     if((not FUpdating) and (assigned(FFld))) then
684     begin
685       FFld.Inactive := cbActive.Checked;
686       cbActive.Checked := FFld.Inactive;
687       FChangesPending := TRUE;
688       //ResetListEntry;
689     end;
690   end;
691   
692   procedure TfrmTemplateFieldEditor.mnuNewClick(Sender: TObject);
693   begin
694     SetFld(TTemplateField.Create(nil));
695     if(assigned(FFld)) then
696     begin
697       FChangesPending := TRUE;
698       if cbxObjs.ShortCount = 0 then
699       begin
700         cbxObjs.Items.Insert(0,LLS_LINE);
701         cbxObjs.Items.Insert(1,'');
702       end;
703       if(assigned(CopyFld)) then
704         FFld.Assign(CopyFld);
705       cbxObjs.Items.Insert(0,FFld.ID + U + FFld.FldName);
706       cbxObjs.SelectByID(FFld.ID);
707       cbxObjsChange(nil);
708       if(assigned(FFld)) then
709         edtName.SetFocus;
710     end
711     else
712       UpdateControls;
713   end;
714   
715   procedure TfrmTemplateFieldEditor.btnOKClick(Sender: TObject);
716   begin
717     SaveChanges;
718   end;
719   
720   procedure TfrmTemplateFieldEditor.btnApplyClick(Sender: TObject);
721   var
722     tmp: string;
723   begin
724     SaveChanges;
725     cbxObjs.Clear;
726     if assigned(FFld) then
727       tmp := FFld.FldName
728     else
729       tmp := '';
730     cbxObjs.InitLongList(tmp);
731     cbxObjs.ItemIndex := 0;
732     cbxObjsChange(cbxObjs);
733   end;
734   
735   procedure TfrmTemplateFieldEditor.FormCloseQuery(Sender: TObject;
736     var CanClose: Boolean);
737   var
738     ans: word;
739   
740   begin
741     if(AnyTemplateFieldsModified) then
742     begin
743       ans := InfoBox('Save Changes?', 'Confirmation', MB_YESNOCANCEL or MB_ICONQUESTION);
744       if(ans = IDCANCEL) then
745         CanClose := FALSE
746       else
747       if(ans = IDYES) then
748         CanClose := SaveChanges;
749     end;
750   end;
751   
752   procedure TfrmTemplateFieldEditor.btnCancelClick(Sender: TObject);
753   var
754     i: integer;
755   
756   begin
757     for i := 0 to FDeleted.Count-1 do
758       UnlockTemplateField(Piece(FDeleted[i],U,1));
759     FDeleted.Clear;
760     ClearModifiedTemplateFields;
761   end;
762   
763   function TfrmTemplateFieldEditor.SaveChanges: boolean;
764   var
765     ans: word;
766     Errors: string;
767     i: integer;
768   
769   begin
770     for i := 0 to FDeleted.Count-1 do
771       DeleteTemplateField(Piece(FDeleted[i],U,1));
772     FDeleted.Clear;
773     Result := TRUE;
774     Errors := SaveTemplateFieldErrors;
775     if(Errors <> '') then
776     begin
777       ans := InfoBox(Errors + CRLF + CRLF + 'Cancel changes to these Template Fields?',
778         'Confirmation', MB_YESNO or MB_ICONQUESTION);
779       if(ans = IDYES) then
780         ClearModifiedTemplateFields
781       else
782         Result := FALSE;
783     end;
784     if(FChangesPending) then
785       FReloadChanges := TRUE;
786   end;
787   
788   procedure TfrmTemplateFieldEditor.reItemsChange(Sender: TObject);
789   begin
790     if((not FUpdating) and (assigned(FFld)) and (FFld.FldType in FldItemTypes)) then
791     begin
792       FFld.Items := reItems.Lines.Text;
793       SyncItems;
794     end;
795   end;
796   
797   procedure TfrmTemplateFieldEditor.cbHideClick(Sender: TObject);
798   begin
799     SetHideSynonyms(cbHide.Checked);
800   end;
801   
802   procedure TfrmTemplateFieldEditor.edtNameExit(Sender: TObject);
803   begin
804     if (ActiveControl <> btnCancel) and (ActiveControl <> btnDelete) then
805       VerifyName;
806   end;
807   
808   procedure TfrmTemplateFieldEditor.VerifyName;
809   var
810     bad: boolean;
811   
812   begin
813     if assigned(FFld) then
814     begin
815       if FDeleted.IndexOfPiece(FFld.FldName, U, 2) >= 0 then
816       begin
817         ShowMsg('Template field can not be named the same as a deleted' + CRLF +
818                     'field until OK or Apply has been pressed.');
819         bad := TRUE;
820       end
821       else
822         bad := TemplateFieldNameProblem(FFld);
823       if bad then
824         edtName.SetFocus;
825     end;
826   end;
827   
828   procedure TfrmTemplateFieldEditor.mnuCopyClick(Sender: TObject);
829   begin
830     if assigned(FFld) then
831     begin
832       CopyFld := FFld;
833       try
834         mnuNewClick(nil);
835       finally
836         CopyFld := nil;
837       end;
838     end;
839   end;
840   
841   procedure TfrmTemplateFieldEditor.SetFld(const Value: TTemplateField);
842   begin
843     FFld := Value;
844     EnableButtons;
845   end;
846   
847   procedure TfrmTemplateFieldEditor.mnuDeleteClick(Sender: TObject);
848   var
849     idx: integer;
850     ok: boolean;
851     Answer: word;
852     txt: string;
853     btns: TMsgDlgButtons;
854   
855   begin
856     if assigned(FFld) then
857     begin
858       ok := (FFld.NewField);
859       if not ok then
860       begin
861         btns := [mbYes, mbNo];
862         if FFld.Inactive then
863           txt := ''
864         else
865         begin
866           txt := '  Rather than deleting, you may want' + CRLF +
867                  'to inactivate this template field instead.  You may inactivate this template by' + CRLF +
868                  'pressing the Ignore button now.';
869           include(btns, mbIgnore);
870         end;
871         Answer := MessageDlg('*** WARNING ***' + CRLF + CRLF +
872                       'This template field has been saved, and may have been used in one or more' + CRLF +
873                       'boilerplates.  Boilerplates can be found in templates, titles, reasons for request' + CRLF +
874                       'and reminder dialogs.  Deleting this template field will cause any boilerplates' + CRLF +
875                       'that use it to no longer function correctly.' + txt + CRLF + CRLF +
876                       'Are you sure you want to delete the ' + FFld.FldName + ' template field?',
877                        mtWarning, btns, 0);
878         ok := (Answer = mrYes);
879         if(Answer = mrIgnore) then
880           cbActive.Checked := TRUE;
881       end;
882       if ok then
883       begin
884         if(FFld.NewField or FFld.CanModify) then
885         begin
886           if FFld.NewField then
887           begin
888             idx := cbxObjs.ItemIndex;
889             cbxObjs.ItemIndex := -1;
890             cbxObjs.Items.Delete(idx);
891             if cbxObjs.Items[0] = LLS_LINE then
892             begin
893               cbxObjs.Items.Delete(1);
894               cbxObjs.Items.Delete(0);
895             end;
896           end
897           else
898           begin
899             FDeleted.Add(FFld.ID + U + FFld.FldName);
900             cbxObjs.ItemIndex := -1;
901           end;
902         end;
903         FFld.Free;
904         SetFld(nil);
905         UpdateControls;
906         cbxObjs.InitLongList('');
907         FChangesPending := TRUE;
908       end;
909     end;
910   end;
911   
912   procedure TfrmTemplateFieldEditor.ResetListEntry;
913   var
914     txt: string;
915   
916   begin
917     if(assigned(FFld) and FFld.NewField and (cbxObjs.ItemIndex >= 0)) then
918     begin
919       txt := FFld.ID + U + FFld.FldName;
920       //if(FFld.Inactive) then
921         //txt := txt + ' <Inactive>';
922       cbxObjs.Items[cbxObjs.ItemIndex] := txt;
923       cbxObjs.ItemIndex := cbxObjs.ItemIndex;
924     end;
925   end;
926   
927   procedure TfrmTemplateFieldEditor.btnPreviewClick(Sender: TObject);
928   var
929     TmpSL: TStringList;
930   
931   begin
932     if(assigned(FFld)) then
933     begin
934       TmpSL := TStringList.Create;
935       try
936         TmpSL.Add(TemplateFieldBeginSignature + FFld.FldName + TemplateFieldEndSignature);
937         CheckBoilerplate4Fields(TmpSL, 'Preview Template Field: ' + FFld.FldName, TRUE);
938       finally
939         TmpSL.Free;
940       end;
941     end;
942   end;
943   
944   procedure TfrmTemplateFieldEditor.EnableButtons;
945   begin
946     btnCopy.Enabled := assigned(FFld);
947     mnuCopy.Enabled := btnCopy.Enabled;
948     btnDelete.Enabled := btnCopy.Enabled; // (assigned(FFld) and FFld.NewField);
949     mnuDelete.Enabled := btnDelete.Enabled;
950     btnPreview.Enabled := assigned(FFld) and (FFld.FldType <> dftUnknown);
951     mnuPreview.Enabled := btnPreview.Enabled;
952   end;
953   
954   procedure TfrmTemplateFieldEditor.mnuActionClick(Sender: TObject);
955   begin
956     EnableButtons;
957   end;
958   
959   procedure TfrmTemplateFieldEditor.cbRequiredClick(Sender: TObject);
960   begin
961     if((not FUpdating) and (assigned(FFld))) then
962     begin
963       FFld.Required := cbRequired.Checked;
964       cbRequired.Checked := FFld.Required;
965     end;
966   end;
967   
968   procedure TfrmTemplateFieldEditor.pnlObjsResize(Sender: TObject);
969   begin
970     btnPreview.Left := pnlRight.Left;
971   end;
972   
973   procedure TfrmTemplateFieldEditor.FormDestroy(Sender: TObject);
974   begin
975     FDeleted.Free;
976     if(assigned(frmTemplateFields)) then begin
977       frmTemplateFields.FRee;
978       frmTemplateFields := nil;
979     end; {if}
980   
981   end;
982   
983   procedure TfrmTemplateFieldEditor.SetHideSynonyms(const Value: boolean);
984   begin
985     FHideSynonyms := Value;
986     cbxObjs.HideSynonyms := FALSE; // Refresh Display
987     cbxObjs.HideSynonyms := TRUE;
988   end;
989   
990   procedure TfrmTemplateFieldEditor.cbxObjsSynonymCheck(Sender: TObject;
991     const Text: String; var IsSynonym: Boolean);
992   begin
993     if not FHideSynonyms then
994       IsSynonym := FALSE;
995     if(FDeleted.Count > 0) and (FDeleted.IndexOfPiece(Text,U,2) >= 0) then
996       IsSynonym := TRUE;
997   end;
998   
999   procedure TfrmTemplateFieldEditor.popTextPopup(Sender: TObject);
1000  var
1001    HasText, CanEdit, isre: boolean;
1002    ce: TCustomEdit;
1003    ShowTempField: boolean;
1004  
1005  begin
1006    ce := GetPopupControl;
1007    if assigned(ce) then
1008    begin
1009      isre := (ce is TRichEdit);
1010      CanEdit := (not TORExposedCustomEdit(ce).ReadOnly);
1011      mnuBPUndo.Enabled := (CanEdit and (ce.Perform(EM_CANUNDO, 0, 0) <> 0));
1012      if isre then
1013        HasText := (TRichEdit(ce).Lines.Count > 0)
1014      else
1015        HasText := (Text <> '');
1016      mnuBPSelectAll.Enabled := HasText;
1017      mnuBPCopy.Enabled := HasText and (ce.SelLength > 0);
1018      mnuBPPaste.Enabled := (CanEdit and Clipboard.HasFormat(CF_TEXT));
1019      mnuBPCut.Enabled := (CanEdit and HasText and (ce.SelLength > 0));
1020      ShowTempField := FALSE;
1021      if CanEdit then
1022        if (not assigned(frmTemplateFields)) or
1023           (assigned(frmTemplateFields) and not frmTemplateFields.Visible) then
1024          if (ce = reItems) or
1025             (ce = edtDefault) then
1026            ShowTempField := TRUE;
1027      mnuInsertTemplateField.Enabled := ShowTempField;
1028    end
1029    else
1030    begin
1031      isre := FALSE;
1032      HasText := FALSE;
1033      CanEdit := FALSE;
1034      mnuBPPaste.Enabled := FALSE;
1035      mnuBPCopy.Enabled := FALSE;
1036      mnuBPCut.Enabled := FALSE;
1037      mnuBPSelectAll.Enabled := FALSE;
1038      mnuBPUndo.Enabled := FALSE;
1039      mnuInsertTemplateField.Enabled := FALSE;
1040    end;
1041  
1042    mnuBPSpellCheck.Visible := isre;
1043    mnuBPCheckGrammar.Visible := isre;
1044  
1045    if isre and HasText and CanEdit then
1046    begin
1047      mnuBPSpellCheck.Enabled   := SpellCheckAvailable;
1048      mnuBPCheckGrammar.Enabled := SpellCheckAvailable;
1049    end
1050    else
1051    begin
1052      mnuBPSpellCheck.Enabled   := FALSE;
1053      mnuBPCheckGrammar.Enabled := FALSE;
1054    end;
1055  end;
1056  
1057  function TfrmTemplateFieldEditor.GetPopupControl: TCustomEdit;
1058  begin
1059    if assigned(popText.PopupComponent) and (popText.PopupComponent is TCustomEdit) then
1060      Result := TCustomEdit(popText.PopupComponent)
1061    else
1062      Result := nil;
1063  end;
1064  
1065  procedure TfrmTemplateFieldEditor.mnuBPUndoClick(Sender: TObject);
1066  var
1067    ce: TCustomEdit;
1068  
1069  begin
1070    ce := GetPopupControl;
1071    if assigned(ce) then
1072      ce.Perform(EM_UNDO, 0, 0);
1073  end;
1074  
1075  procedure TfrmTemplateFieldEditor.mnuBPCutClick(Sender: TObject);
1076  var
1077    ce: TCustomEdit;
1078    
1079  begin
1080    ce := GetPopupControl;
1081    if assigned(ce) then
1082      ce.CutToClipboard;
1083  end;
1084  
1085  procedure TfrmTemplateFieldEditor.mnuBPCopyClick(Sender: TObject);
1086  var
1087    ce: TCustomEdit;
1088    
1089  begin
1090    ce := GetPopupControl;
1091    if assigned(ce) then
1092      ce.CopyToClipboard;
1093  end;
1094  
1095  procedure TfrmTemplateFieldEditor.mnuBPPasteClick(Sender: TObject);
1096  var
1097    ce: TCustomEdit;
1098    
1099  begin
1100    ce := GetPopupControl;
1101    if assigned(ce) then
1102      ce.SelText := Clipboard.AsText;
1103  end;
1104  
1105  procedure TfrmTemplateFieldEditor.mnuBPSelectAllClick(Sender: TObject);
1106  var
1107    ce: TCustomEdit;
1108  
1109  begin
1110    ce := GetPopupControl;
1111    if assigned(ce) then
1112      ce.SelectAll;
1113  end;
1114  
1115  procedure TfrmTemplateFieldEditor.mnuBPCheckGrammarClick(Sender: TObject);
1116  var
1117    ce: TCustomEdit;
1118  
1119  begin
1120    ce := GetPopupControl;
1121    if(assigned(ce) and (ce is TRichEdit)) then
1122      GrammarCheckForControl(TRichEdit(ce));
1123  end;
1124  
1125  procedure TfrmTemplateFieldEditor.mnuBPSpellCheckClick(Sender: TObject);
1126  var
1127    ce: TCustomEdit;
1128  
1129  begin
1130    ce := GetPopupControl;
1131    if(assigned(ce) and (ce is TRichEdit)) then
1132      SpellCheckForControl(TRichEdit(ce));
1133  end;
1134  
1135  procedure TfrmTemplateFieldEditor.cbSepLinesClick(Sender: TObject);
1136  begin
1137    if((not FUpdating) and (assigned(FFld))) then
1138    begin
1139      FFld.SepLines := cbSepLines.Checked;
1140      cbSepLines.Checked := FFld.SepLines;
1141    end;
1142  end;
1143  
1144  procedure TfrmTemplateFieldEditor.edtpopControlEnter(Sender: TObject);
1145  begin
1146    popText.PopupComponent := TComponent(Sender);
1147    if assigned(frmTemplateFields) then
1148      begin
1149      if ((Sender = reItems) or (Sender = edtDefault)) then
1150        begin
1151        frmTemplateFields.btnInsert.Enabled := TRUE;
1152        if Sender = reItems then
1153          frmTemplateFields.re := reItems
1154        else
1155          frmTemplateFields.re := edtDefault;
1156        end
1157      else
1158        frmTemplateFields.btnInsert.Enabled := FALSE;
1159      end;
1160  end;
1161  
1162  procedure TfrmTemplateFieldEditor.cbxObjsKeyDown(Sender: TObject;
1163    var Key: Word; Shift: TShiftState);
1164  begin
1165    if(Key = VK_DELETE) and btnDelete.Enabled then
1166      mnuDeleteClick(btnDelete);
1167  end;
1168  
1169  procedure TfrmTemplateFieldEditor.edtTextLenChange(Sender: TObject);
1170  var
1171    v: integer;
1172  
1173  begin
1174    EnsureText(edtTextLen, udTextLen);
1175    if((not FUpdating) and (assigned(FFld)) and (FFld.FldType in EditLenTypes)) then
1176    begin
1177      FFld.TextLen := udTextLen.Position;
1178      udTextLen.Position := FFld.TextLen;
1179      if FFld.FldType = dftEditBox then
1180      begin
1181        v := udTextLen.Position;
1182        if udLen.Position > v then
1183          udLen.Position := v;
1184      end;
1185    end;
1186  end;
1187  
1188  procedure TfrmTemplateFieldEditor.edtDefNumChange(Sender: TObject);
1189  var
1190    v: integer;
1191  
1192  begin
1193    EnsureText(edtDefNum, udDefNum);
1194    if((not FUpdating) and (assigned(FFld)) and (FFld.FldType = dftNumber)) then
1195    begin
1196      FFld.EditDefault := IntToStr(udDefNum.Position);
1197      udDefNum.Position := StrToIntDef(FFld.EditDefault, 0);
1198      v := udDefNum.Position;
1199      if udMinVal.Position > v then
1200        udMinVal.Position := v;
1201      if udMaxVal.Position < v then
1202        udMaxVal.Position := v;
1203    end;
1204  end;
1205  
1206  procedure TfrmTemplateFieldEditor.edtMinValChange(Sender: TObject);
1207  var
1208    v: integer;
1209  
1210  begin
1211    EnsureText(edtMinVal, udMinVal);
1212    if((not FUpdating) and (assigned(FFld)) and (FFld.FldType = dftNumber)) then
1213    begin
1214      FFld.MinVal := udMinVal.Position;
1215      udMinVal.Position := FFld.MinVal;
1216      v := udMinVal.Position;
1217      if udDefNum.Position < v then
1218        udDefNum.Position := v;
1219      if udMaxVal.Position < v then
1220        udMaxVal.Position := v;
1221    end;
1222  end;
1223  
1224  procedure TfrmTemplateFieldEditor.edtMaxValChange(Sender: TObject);
1225  var
1226    v: integer;
1227  
1228  begin
1229    EnsureText(edtMaxVal, udMaxVal);
1230    if((not FUpdating) and (assigned(FFld)) and (FFld.FldType = dftNumber)) then
1231    begin
1232      FFld.MaxVal := udMaxVal.Position;
1233      udMaxVal.Position := FFld.MaxVal;
1234      v := udMaxVal.Position;
1235      if udDefNum.Position > v then
1236        udDefNum.Position := v;
1237      if udMinVal.Position > v then
1238        udMinVal.Position := v;
1239    end;
1240  end;
1241  
1242  procedure TfrmTemplateFieldEditor.edtIncChange(Sender: TObject);
1243  begin
1244    EnsureText(edtInc, udInc);
1245    if((not FUpdating) and (assigned(FFld)) and (FFld.FldType = dftNumber)) then
1246    begin
1247      FFld.Increment := udInc.Position;
1248      udInc.Position := FFld.Increment;
1249    end;
1250  end;
1251  
1252  procedure TfrmTemplateFieldEditor.edtURLChange(Sender: TObject);
1253  begin
1254    if((not FUpdating) and (assigned(FFld)) and (FFld.FldType = dftHyperlink)) then
1255    begin
1256      FFld.URL := edtURL.Text;
1257      edtURL.Text := FFld.URL;
1258    end;
1259  end;
1260  
1261  procedure TfrmTemplateFieldEditor.edtPadChange(Sender: TObject);
1262  begin
1263    EnsureText(edtPad, udPad);
1264    if((not FUpdating) and (assigned(FFld))) then
1265    begin
1266      FFld.Pad := udPad.Position;
1267      udPad.Position := FFld.Pad;
1268    end;
1269  end;
1270  
1271  procedure TfrmTemplateFieldEditor.edtIndentChange(Sender: TObject);
1272  begin
1273    EnsureText(edtIndent, udIndent);
1274    if((not FUpdating) and (assigned(FFld))) then
1275    begin
1276      FFld.Indent := udIndent.Position;
1277      udIndent.Position := FFld.Indent;
1278    end;
1279  end;
1280  
1281  procedure TfrmTemplateFieldEditor.reNotesChange(Sender: TObject);
1282  begin
1283    if((not FUpdating) and (assigned(FFld)) and FFld.CanModify) then
1284      FFld.Notes := reNotes.Lines.Text;
1285  end;
1286  
1287  procedure TfrmTemplateFieldEditor.cbxDateTypeChange(Sender: TObject);
1288  begin
1289    if((not FUpdating) and (assigned(FFld)) and (FFld.FldType = dftDate)) then
1290    begin
1291      if cbxDateType.ItemIndex >= 0 then
1292        FFld.DateType := TTmplFldDateType(cbxDateType.ItemIndex + 1)
1293      else
1294        FFld.DateType := dtDate;
1295      cbxDateType.SelectByID(TemplateFieldDateCodes[FFld.DateType]);
1296    end;
1297  
1298  end;
1299  
1300  procedure TfrmTemplateFieldEditor.cbExcludeClick(Sender: TObject);
1301  begin
1302    if((not FUpdating) and (assigned(FFld))) then
1303    begin
1304      FFld.SepLines := cbExclude.Checked;
1305      cbExclude.Checked := FFld.SepLines;
1306      UpdateControls;
1307    end;
1308  end;
1309  
1310  procedure TfrmTemplateFieldEditor.FormResize(Sender: TObject);
1311  begin
1312    LimitEditWidth(reItems, 240);
1313    LimitEditWidth(reNotes, MAX_ENTRY_WIDTH);
1314  end;
1315  
1316  procedure TfrmTemplateFieldEditor.reItemsResizeRequest(Sender: TObject;
1317    Rect: TRect);
1318  var
1319    R: TRect;
1320  
1321  begin
1322    R := TRichEdit(Sender).ClientRect;
1323    if (FLastRect.Right <> R.Right) or
1324       (FLastRect.Bottom <> R.Bottom) or
1325       (FLastRect.Left <> R.Left) or
1326       (FLastRect.Top <> R.Top) then
1327    begin
1328      FLastRect := R;
1329      FormResize(Self);
1330    end;
1331  end;
1332  
1333  procedure TfrmTemplateFieldEditor.reItemsSelectionChange(Sender: TObject);
1334  var
1335    p: TPoint;
1336  
1337  begin
1338    if lblLine.Visible then
1339    begin
1340      p := reItems.CaretPos;
1341      lblLine.Caption := 'Line: ' + inttostr(p.y + 1);
1342      lblCol.Caption  := 'Col: ' + inttostr(p.x + 1);
1343    end;
1344  end;
1345  
1346  procedure TfrmTemplateFieldEditor.mnuInsertTemplateFieldClick(Sender: TObject);
1347  var
1348    iCon: TCustomEdit;
1349    ShowButton: boolean;
1350  begin
1351    iCon := GetPopupControl;
1352    if iCon <> nil then
1353      begin
1354      if iCon.Name <> ActiveControl.Name then
1355        begin
1356        ActiveControl := iCon;
1357        iCon.SelStart := iCon.SelLength;
1358        end;
1359      if (not assigned(frmTemplateFields)) then
1360        begin
1361        frmTemplateFields := TfrmTemplateFields.Create(Self);
1362        frmTemplateFields.Font := Font;
1363        end;
1364      ShowButton := False;
1365      if iCon = reItems then
1366        begin
1367        frmTemplateFields.re := reItems;
1368        ShowButton := TRUE;
1369        end
1370      else if iCon = edtDefault then
1371        begin
1372        frmTemplateFields.re := edtDefault;
1373        ShowButton := TRUE;
1374        end;
1375      frmTemplateFields.btnInsert.Enabled := ShowButton;
1376  
1377      frmTemplateFields.Show;
1378      end
1379  
1380  end;
1381  
1382  procedure TfrmTemplateFieldEditor.ControlExit(Sender: TObject);
1383  begin
1384    if assigned(frmTemplateFields) then
1385      frmTemplateFields.btnInsert.Enabled := FALSE;
1386  end;
1387  
1388  procedure TfrmTemplateFieldEditor.reNotesKeyUp(Sender: TObject;
1389    var Key: Word; Shift: TShiftState);
1390  begin
1391    if (Key = VK_TAB) then
1392    begin
1393      if ssShift in Shift then
1394      begin
1395        FindNextControl(Sender as TWinControl, False, True, False).SetFocus; //previous control
1396        Key := 0;
1397      end
1398      else if ssCtrl	in Shift then
1399      begin
1400        FindNextControl(Sender as TWinControl, True, True, False).SetFocus; //next control
1401        Key := 0;
1402      end;
1403    end;
1404    if (key = VK_ESCAPE) then begin
1405      FindNextControl(Sender as TWinControl, False, True, False).SetFocus; //previous control
1406      key := 0;
1407    end;
1408  end;
1409  
1410  end.

Module Calls (2 levels)


fTemplateFieldEditor
 ├uTemplateFields
 │ ├uDlgComponents
 │ ├rTemplates
 │ ├mTemplateFieldButton
 │ ├uConst
 │ ├uCore
 │ └rCore
 ├fBase508Form
 │ ├uConst
 │ └uHelpManager
 ├rTemplates...
 ├fTemplateDialog
 │ ├uTemplates
 │ ├fBase508Form...
 │ ├uConst
 │ ├dShared
 │ ├uTemplateFields...
 │ ├fRptBox
 │ ├uInit
 │ ├rMisc
 │ └uDlgComponents...
 ├uSpell
 │ ├rCore...
 │ ├fSpellNotify
 │ └uInit...
 ├uConst
 └fTemplateFields
   ├fBase508Form...
   ├rTemplates...
   ├uTemplateFields...
   └fTemplateDialog...

Module Called-By (2 levels)


fTemplateFieldEditor
            fNotes┤ 
          fFrame┤ │ 
      fPrintList┤ │ 
     fNoteSTStop┤ │ 
       fConsults┤ │ 
 fReminderDialog┤ │ 
         fReview┘ │ 
      fConsults...┤ 
           fDCSumm┤ 
       fFrame...┤ │ 
   fPrintList...┤ │ 
      fReview...┤ │ 
    fAddlSigners┘ │ 
   fTemplateEditor┤ 
       fFrame...┤ │ 
        fDrawers┤ │ 
       fNotes...┤ │ 
    fConsults...┤ │ 
      fDCSumm...┤ │ 
        fSurgery┘ │ 
       fSurgery...┘