📄 frmeapubmemoeditunt.pas
字号:
unit frmEAPubMemoEditUnt;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, ActnList, ActnMan, ToolWin, ActnCtrls,
StdCtrls, ActnMenus, Menus, ComCtrls, IniFiles;
type
TEAPubMemoEditParam = record
ReadOnly: Boolean;
Caption: string;
EditValue: string;
ShowStatus: Boolean;
MaxLength: Integer;
IsDelimited: Boolean;
end;
TfrmEAPubMemoEdit = class(TForm)
imgList16x16: TImageList;
sbStatus: TStatusBar;
dlgFont: TFontDialog;
dlgFind: TFindDialog;
dlgReplace: TReplaceDialog;
dlgOpen: TOpenDialog;
meoEdit: TRichEdit;
ActList: TActionList;
ActFile_SaveExit: TAction;
ActFile_Comeback: TAction;
ActFile_SendIn: TAction;
ActFile_Exit: TAction;
ActEdit_Undo: TAction;
ActEdit_Cut: TAction;
ActEdit_Copy: TAction;
ActEdit_Paste: TAction;
ActEdit_Clear: TAction;
ActEdit_Find: TAction;
ActEdit_FindNext: TAction;
ActEdit_Replace: TAction;
ActFmt_Font: TAction;
ActEdit_SelectAll: TAction;
ActFmt_WordWrap: TAction;
ActFile_About: TAction;
ActHelp_Help: TAction;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
ToolButton10: TToolButton;
ToolButton11: TToolButton;
ToolButton12: TToolButton;
ToolButton13: TToolButton;
ToolButton14: TToolButton;
ToolButton16: TToolButton;
ToolButton17: TToolButton;
ToolButton18: TToolButton;
ToolButton19: TToolButton;
ToolButton15: TToolButton;
ToolButton20: TToolButton;
ToolButton21: TToolButton;
pmEdit: TPopupMenu;
U1: TMenuItem;
N1: TMenuItem;
X1: TMenuItem;
C1: TMenuItem;
V1: TMenuItem;
D1: TMenuItem;
N2: TMenuItem;
A1: TMenuItem;
procedure ActFile_ExitExecute(Sender: TObject);
procedure ActHelp_HelpExecute(Sender: TObject);
procedure ActFile_ComebackExecute(Sender: TObject);
procedure ActEdit_UndoExecute(Sender: TObject);
procedure ActEdit_CutExecute(Sender: TObject);
procedure ActEdit_CopyExecute(Sender: TObject);
procedure ActEdit_PasteExecute(Sender: TObject);
procedure ActEdit_ClearExecute(Sender: TObject);
procedure ActEdit_SelectAllExecute(Sender: TObject);
procedure ActFmt_WordWrapExecute(Sender: TObject);
procedure ActFmt_FontExecute(Sender: TObject);
procedure ActEdit_FindExecute(Sender: TObject);
procedure ActFile_SaveExitExecute(Sender: TObject);
procedure ActFile_SendInExecute(Sender: TObject);
procedure ActFile_AboutExecute(Sender: TObject);
procedure dlgFindFind(Sender: TObject);
procedure ActEdit_ReplaceExecute(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormShow(Sender: TObject);
procedure dlgReplaceFind(Sender: TObject);
procedure dlgReplaceReplace(Sender: TObject);
procedure ActListUpdate(Action: TBasicAction; var Handled: Boolean);
private
FParam: TEAPubMemoEditParam;
FModifed: Boolean;
procedure DoMemoEditChange(Sender: TObject);
procedure SetModifed(Value: Boolean);
function GetWordWrap: Boolean;
procedure SetWordWrap(Value: Boolean);
public
procedure InitData;
procedure ClearData;
procedure SetData(AParam: TEAPubMemoEditParam);
procedure GetData(var AParam: TEAPubMemoEditParam);
procedure LoadIniData;
procedure SaveIniData;
procedure AdjustUI;
property Modifed: Boolean read FModifed write SetModifed;
property WordWrap: Boolean read GetWordWrap write SetWordWrap;
end;
function ShowEAPubMemoEditDlg(var AParam: TEAPubMemoEditParam): Boolean;
procedure TestEAPubMemoEditDlg;
var
frmEAPubMemoEdit: TfrmEAPubMemoEdit;
implementation
uses
RichEdit;
{$R *.dfm}
function ShowEAPubMemoEditDlg(var AParam: TEAPubMemoEditParam): Boolean;
begin
Result := False;
frmEAPubMemoEdit := TfrmEAPubMemoEdit.Create(Application);
with frmEAPubMemoEdit do
try
SetData(AParam);
InitData;
if ShowModal = IDOK then
begin
GetData(AParam);
Result := True;
end;
finally
ClearData;
Free;
end;
frmEAPubMemoEdit := nil;
end;
procedure TestEAPubMemoEditDlg;
var
P: TEAPubMemoEditParam;
begin
P.EditValue := 'SharpExpress';
P.Caption := 'gy';
P.ReadOnly := False;
P.ShowStatus := True;
if ShowEAPubMemoEditDlg(P) then
ShowMessage(P.EditValue);
end;
procedure MsgInfo(const AMsg: string);
begin
Application.MessageBox(PChar(AMsg), '提示');
end;
function GetIniFileName: string;
begin
Result := ExtractFilePath(Application.ExeName) + 'EAWindowSetup.ini';
end;
procedure TfrmEAPubMemoEdit.ActFile_ExitExecute(Sender: TObject);
begin
Close;
end;
procedure TfrmEAPubMemoEdit.ActHelp_HelpExecute(Sender: TObject);
begin
ShowMessage('SharpExpress');
end;
procedure TfrmEAPubMemoEdit.ClearData;
begin
SaveIniData;
end;
procedure TfrmEAPubMemoEdit.GetData(var AParam: TEAPubMemoEditParam);
begin
if FParam.IsDelimited then
AParam.EditValue := meoEdit.Lines.DelimitedText
else
AParam.EditValue := meoEdit.Text;
end;
procedure TfrmEAPubMemoEdit.InitData;
begin
Caption := FParam.Caption;
meoEdit.ReadOnly := FParam.ReadOnly;
if FParam.IsDelimited then
meoEdit.Lines.DelimitedText := FParam.EditValue
else
meoEdit.Text := FParam.EditValue;
meoEdit.MaxLength := FParam.MaxLength;
sbStatus.Visible := FParam.ShowStatus;
AdjustUI;
LoadIniData;
Modifed := False;
end;
procedure TfrmEAPubMemoEdit.SetData(AParam: TEAPubMemoEditParam);
begin
FParam := AParam;
end;
procedure TfrmEAPubMemoEdit.DoMemoEditChange(Sender: TObject);
begin
if not FParam.ReadOnly then
Modifed := True;
AdjustUI;
end;
procedure TfrmEAPubMemoEdit.SetModifed(Value: Boolean);
begin
if FModifed <> Value then
begin
FModifed := Value;
if FModifed then
ActEdit_Undo.Enabled := True
else begin
meoEdit.ClearUndo;
ActEdit_Undo.Enabled := False;
end;
end;
end;
procedure TfrmEAPubMemoEdit.AdjustUI;
begin
sbStatus.SimpleText := '文本行数:' + IntToStr(meoEdit.Lines.Count);
end;
procedure TfrmEAPubMemoEdit.ActFile_ComebackExecute(Sender: TObject);
begin
if FParam.IsDelimited then
meoEdit.Lines.DelimitedText := FParam.EditValue
else
meoEdit.Text := FParam.EditValue;
Modifed := False;
AdjustUI;
end;
procedure TfrmEAPubMemoEdit.ActEdit_UndoExecute(Sender: TObject);
begin
meoEdit.Undo;
AdjustUI;
end;
procedure TfrmEAPubMemoEdit.ActEdit_CutExecute(Sender: TObject);
begin
meoEdit.CutToClipboard;
AdjustUI;
end;
procedure TfrmEAPubMemoEdit.ActEdit_CopyExecute(Sender: TObject);
begin
meoEdit.CopyToClipboard;
AdjustUI;
end;
procedure TfrmEAPubMemoEdit.ActEdit_PasteExecute(Sender: TObject);
begin
meoEdit.PasteFromClipboard;
AdjustUI;
end;
procedure TfrmEAPubMemoEdit.ActEdit_ClearExecute(Sender: TObject);
begin
meoEdit.ClearSelection;
AdjustUI;
end;
procedure TfrmEAPubMemoEdit.ActEdit_SelectAllExecute(Sender: TObject);
begin
meoEdit.SelectAll;
end;
procedure TfrmEAPubMemoEdit.ActFmt_WordWrapExecute(Sender: TObject);
begin
WordWrap := not WordWrap;
end;
procedure TfrmEAPubMemoEdit.ActFmt_FontExecute(Sender: TObject);
begin
dlgFont.Font.Assign(meoEdit.Font);
if dlgFont.Execute then
meoEdit.Font.Assign(dlgFont.Font);
end;
procedure TfrmEAPubMemoEdit.ActEdit_FindExecute(Sender: TObject);
var
vFindText: string;
begin
vFindText := meoEdit.SelText;
if vFindText = '' then
vFindText := dlgFind.FindText;
dlgFind.FindText := vFindText;
dlgFind.Execute;
end;
procedure TfrmEAPubMemoEdit.ActFile_SaveExitExecute(Sender: TObject);
begin
Modifed := False;
ModalResult := IDOK;
end;
procedure TfrmEAPubMemoEdit.ActFile_SendInExecute(Sender: TObject);
begin
if dlgOpen.Execute then
begin
meoEdit.Lines.LoadFromFile(dlgOpen.FileName);
AdjustUI;
end;
end;
procedure TfrmEAPubMemoEdit.ActFile_AboutExecute(Sender: TObject);
begin
ShowMessage('SharpExpress');
end;
procedure TfrmEAPubMemoEdit.dlgFindFind(Sender: TObject);
var
vSerchType: TSearchTypes;
vIndex: Integer;
begin
vSerchType := [];
if frWholeWord in dlgFind.Options then
vSerchType := [stWholeWord];
if frMatchCase in dlgFind.Options then
vSerchType := vSerchType + [stMatchCase];
vIndex := meoEdit.FindText(dlgFind.FindText, meoEdit.SelStart + meoEdit.SelLength,
Length(meoEdit.Text), vSerchType);
if vIndex > -1 then
begin
meoEdit.SelStart := vIndex;
meoEdit.SelLength := Length(dlgFind.FindText);
meoEdit.SetFocus;
end
else
MsgInfo('没有找到字符串' + dlgFind.FindText + '。');
end;
procedure TfrmEAPubMemoEdit.ActEdit_ReplaceExecute(Sender: TObject);
var
vReplaceText: string;
begin
vReplaceText := meoEdit.SelText;
if vReplaceText = '' then
vReplaceText := dlgReplace.ReplaceText;
dlgReplace.ReplaceText := vReplaceText;
dlgReplace.Execute;
end;
procedure TfrmEAPubMemoEdit.LoadIniData;
var
vIni: TIniFile;
begin
vIni := TIniFile.Create(GetIniFileName);
try
//ea.Str.StrToFont(vIni.ReadString('PubMemoEdit', 'Font', ''), meoEdit.Font);
WordWrap := vIni.ReadBool('PubMemoEdit', 'WordWrap', True);
finally
vIni.Free;
end;
end;
procedure TfrmEAPubMemoEdit.SaveIniData;
var
vIni: TIniFile;
begin
vIni := TIniFile.Create(GetIniFileName);
try
//vIni.WriteString('PubMemoEdit', 'Font', ea.Str.FontToStr(meoEdit.Font));
vIni.WriteBool('PubMemoEdit', 'WordWrap', WordWrap);
finally
vIni.Free;
end;
end;
function TfrmEAPubMemoEdit.GetWordWrap: Boolean;
begin
Result := meoEdit.WordWrap;
end;
procedure TfrmEAPubMemoEdit.SetWordWrap(Value: Boolean);
begin
meoEdit.WordWrap := Value;
ActFmt_WordWrap.Checked := Value;
end;
procedure TfrmEAPubMemoEdit.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
if Modifed and not (Application.MessageBox('数据已修改,但尚未保存,真的要退出吗?',
'提示', MB_OK + MB_ICONQUESTION + MB_YESNO) = IDYES) then
CanClose := False;
end;
procedure TfrmEAPubMemoEdit.FormShow(Sender: TObject);
begin
if not FParam.ReadOnly then
meoEdit.OnChange := DoMemoEditChange;
end;
procedure TfrmEAPubMemoEdit.dlgReplaceFind(Sender: TObject);
var
vSerchType: TSearchTypes;
vIndex: Integer;
begin
vSerchType := [];
if frWholeWord in dlgReplace.Options then
vSerchType := [stWholeWord];
if frMatchCase in dlgReplace.Options then
vSerchType := vSerchType + [stMatchCase];
vIndex := meoEdit.FindText(dlgReplace.FindText, meoEdit.SelStart + meoEdit.SelLength,
Length(meoEdit.Text), vSerchType);
if vIndex > -1 then
begin
meoEdit.SelStart := vIndex;
meoEdit.SelLength := Length(dlgReplace.FindText);
meoEdit.SetFocus;
end
else
MsgInfo('没有找到字符串' + dlgReplace.FindText + '。');
end;
procedure TfrmEAPubMemoEdit.dlgReplaceReplace(Sender: TObject);
var
vIndex: Integer;
vSerchType: TSearchTypes;
begin
if SameText(meoEdit.SelText, dlgReplace.FindText) then
begin
vIndex := meoEdit.SelStart;
meoEdit.SelText := dlgReplace.ReplaceText;
meoEdit.SelStart := vIndex + Length(dlgReplace.ReplaceText);
end;
if frReplaceAll in dlgReplace.Options then
begin
vSerchType := [];
if frWholeWord in dlgReplace.Options then
vSerchType := [stWholeWord];
if frMatchCase in dlgReplace.Options then
vSerchType := vSerchType + [stMatchCase];
while True do
begin
vIndex := meoEdit.FindText(dlgReplace.FindText, meoEdit.SelStart + meoEdit.SelLength,
Length(meoEdit.Text), vSerchType);
if vIndex > -1 then
begin
meoEdit.SelStart := vIndex;
meoEdit.SelLength := Length(dlgReplace.FindText);
meoEdit.SelText := dlgReplace.ReplaceText;
meoEdit.SelStart := vIndex + Length(dlgReplace.ReplaceText);
end
else begin
dlgReplace.CloseDialog;
Exit;
end;
end;
end;
meoEdit.SetFocus;
end;
procedure TfrmEAPubMemoEdit.ActListUpdate(Action: TBasicAction;
var Handled: Boolean);
begin
ActFile_Comeback.Enabled := not FParam.ReadOnly;
ActEdit_Replace.Enabled := not FParam.ReadOnly;
ActEdit_Cut.Enabled := (not FParam.ReadOnly) and (meoEdit.SelText <> '');
ActEdit_Paste.Enabled := (not FParam.ReadOnly) and (meoEdit.Perform(EM_CANPASTE, 0, 0) <> 0);
ActEdit_Clear.Enabled := ActEdit_Cut.Enabled and (meoEdit.SelText <> '');
ActEdit_SelectAll.Enabled := meoEdit.Text <> '';
if meoEdit.HandleAllocated then
ActEdit_Undo.Enabled := meoEdit.Perform(EM_CANUNDO, 0, 0) <> 0;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -