📄 edfieldunit1.pas
字号:
unit EdFieldUnit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, WPTbar, WPRTEDefs, WPCTRMemo, WPCTRRich, WPPanel,
ComCtrls, Buttons, ExtCtrls;
type
TWPEdTest = class(TForm)
PageControl1: TPageControl;
EditTab: TTabSheet;
TemplateTab: TTabSheet;
DataTab: TTabSheet;
WPToolPanel1: TWPToolPanel;
DataEdit: TWPRichText;
WPToolBar1: TWPToolBar;
TemplateEdit: TWPRichText;
FieldNames: TMemo;
Panel1: TPanel;
SelectField: TComboBox;
InsertBtn: TButton;
SelectField2: TComboBox;
ShowMarker: TCheckBox;
Label2: TLabel;
GetData: TButton;
Panel2: TPanel;
Reset: TButton;
procedure BitBtn1Click(Sender: TObject);
procedure PageControl1Change(Sender: TObject);
procedure InsertBtnClick(Sender: TObject);
procedure MoveToClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DataEditGetAttributeColor(Sender: TObject;
var CharStyle: TCharacterAttr; par: TParagraph; posinpar: Integer);
procedure ShowMarkerClick(Sender: TObject);
procedure DataEditMailMergeGetText(Sender: TObject;
const inspname: String; Contents: TWPMMInsertTextContents);
procedure DataEditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure GetDataClick(Sender: TObject);
procedure TemplateEditMailMergeGetText(Sender: TObject;
const inspname: String; Contents: TWPMMInsertTextContents);
procedure PageControl1Changing(Sender: TObject;
var AllowChange: Boolean);
procedure ResetClick(Sender: TObject);
private
FReadingData : Boolean;
public
procedure ReadData;
procedure WriteData;
end;
var
WPEdTest: TWPEdTest;
implementation
{$R *.dfm}
// Update the form with the editor
procedure TWPEdTest.BitBtn1Click(Sender: TObject);
begin
end;
// Read the data which is currently displayed in the editor
procedure TWPEdTest.ReadData;
begin
FReadingData := TRUE;
DataEdit.MergeText;
end;
// Write back the data
procedure TWPEdTest.WriteData;
begin
FReadingData := FALSE;
DataEdit.MergeText;
end;
procedure TWPEdTest.ResetClick(Sender: TObject);
begin
WriteData;
end;
// This reads and writes the data
procedure TWPEdTest.DataEditMailMergeGetText(Sender: TObject;
const inspname: String; Contents: TWPMMInsertTextContents);
var i : Integer;
begin
i := FieldNames.Lines.IndexOfName(inspname);
if (i>=0) then
begin
if FReadingData then
FieldNames.Lines[i] := inspname + '=' + Contents.OldText
else Contents.StringValue := FieldNames.Lines.Values[inspname];
end;
end;
procedure TWPEdTest.DataEditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_RETURN then Key := 0;
end;
procedure TWPEdTest.PageControl1Change(Sender: TObject);
var i,j : Integer;
s : string;
begin
// Fill the field drop down
// alternatively the Field[] array in a TDataSet could be used!
SelectField.Items.Clear;
for i:=0 to FieldNames.Lines.Count-1 do
begin
s := FieldNames.Lines[i];
j := Pos('=', s);
if j>0 then s := Copy(s,1,j-1);
if s<>'' then SelectField.Items.Add(s);
end;
SelectField2.Items := SelectField.Items;
// Move to first field in form
if PageControl1.TabIndex=0 then
begin
DataEdit.HideSelection;
DataEdit.MoveToNextField(true);
DataEdit.SetFocus;
end;
end;
procedure TWPEdTest.PageControl1Changing(Sender: TObject;
var AllowChange: Boolean);
begin
if PageControl1.TabIndex=0 then // Get data from data entry form -------------
begin
ReadData;
end else // Write data to data entry form ------------------------------------
begin
if PageControl1.TabIndex=1 then // update the form from editor!
begin
TemplateEdit.TextSaveFormat := 'WPTOOLS';
DataEdit.AsString := TemplateEdit.AsString;
end;
WriteData;
end;
end;
procedure TWPEdTest.InsertBtnClick(Sender: TObject);
begin
TemplateEdit.InputEditField(SelectField.Text, SelectField.Text);
end;
procedure TWPEdTest.MoveToClick(Sender: TObject);
var fieldname : String;
begin
fieldname := SelectField2.Text;
// If this is the current move on ...
if DataEdit.CurrentEditField=fieldname then
DataEdit.MoveToNextField(false);
// Try from here
if DataEdit.MoveToField(fieldname,false) then
DataEdit.SelectFieldAtCP(false, true)
// or from start
else if DataEdit.MoveToField(fieldname,true) then
DataEdit.SelectFieldAtCP(false, true);
DataEdit.SetFocus;
end;
procedure TWPEdTest.FormCreate(Sender: TObject);
begin
DataEdit.ProtectedProp := [ppAllExceptForEditFields];
DataEdit.EditOptionsEx := [wpTABMovesToNextEditField,
wpRepaintOnFieldMove];
DataEdit.InsertPointAttr.Hidden := FALSE;
// To highlight the current field
DataEdit.AutomaticTextAttr.UseOnGetAttrColorEvent := TRUE;
DataEdit.InsertPointAttr.CodeOpeningText := '[';
DataEdit.InsertPointAttr.CodeClosingText := ']';
DataEdit.InsertPointAttr.CodeTextColor := $E0FFE0;
end;
procedure TWPEdTest.DataEditGetAttributeColor(Sender: TObject;
var CharStyle: TCharacterAttr; par: TParagraph; posinpar: Integer);
var obj : TWPTextObj;
begin
obj := DataEdit.CodeInsideOf(par,posinpar,wpobjMergeField);
if obj = DataEdit.FieldAtCP then
begin
CharStyle.BackgroundColor := $A0FFFF;
CharStyle.UseBackgroundColor := TRUE;
end;
end;
procedure TWPEdTest.ShowMarkerClick(Sender: TObject);
begin
DataEdit.InsertPointAttr.Hidden := not ShowMarker.Checked;
DataEdit.DelayedReformat;
end;
procedure TWPEdTest.GetDataClick(Sender: TObject);
begin
TemplateEdit.MergeText;
end;
procedure TWPEdTest.TemplateEditMailMergeGetText(Sender: TObject;
const inspname: String; Contents: TWPMMInsertTextContents);
var i : Integer;
begin
i := FieldNames.Lines.IndexOfName(inspname);
if (i>=0) then
begin
Contents.StringValue := FieldNames.Lines.Values[inspname];
end else Contents.StringValue := '[' + inspname + ']';
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -