rm_editormemo.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 274 行
PAS
274 行
{*****************************************}
{ }
{ Report Machine v2.0 }
{ Memo editor }
{ }
{*****************************************}
unit RM_EditorMemo;
interface
{$I RM.inc}
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms,
StdCtrls, Buttons, ExtCtrls, ComCtrls, RM_Class;
type
TRMEditorForm = class(TRMObjEditorForm)
MemoPanel: TPanel;
Memo: TMemo;
Panel3: TPanel;
Bevel1: TBevel;
Panel1: TPanel;
btnInsExpr: TSpeedButton;
btnInsDBField: TSpeedButton;
BtnWordWrap: TSpeedButton;
Bevel2: TBevel;
btnOK: TSpeedButton;
btnCancel: TSpeedButton;
btnCut: TSpeedButton;
btnCopy: TSpeedButton;
btnPaste: TSpeedButton;
StatusBar: TStatusBar;
procedure MemoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure btnInsDBFieldClick(Sender: TObject);
procedure BtnWordWrapClick(Sender: TObject);
procedure btnInsExprClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure btnCutClick(Sender: TObject);
procedure btnCopyClick(Sender: TObject);
procedure btnPasteClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure MemoKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure MemoMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
FView: TRMView;
FRowStr, FColStr: string;
procedure Localize;
procedure ShowStatusbar(Sender: TObject);
public
{ Public declarations }
function ShowEditor(View: TRMView): TModalResult; override;
function Execute: Boolean;
end;
implementation
{$R *.DFM}
uses
Registry, RM_Const1, RM_Const, RM_Utils, RM_Common;
procedure TRMEditorForm.Localize;
begin
Font.Name := RMLoadStr(SRMDefaultFontName);
Font.Size := StrToInt(RMLoadStr(SRMDefaultFontSize));
Font.Charset := StrToInt(RMLoadStr(SCharset));
RMSetStrProp(Self, 'Caption', rmRes + 060);
RMSetStrProp(btnInsExpr, 'Hint', rmRes + 061);
RMSetStrProp(btnInsDBField, 'Hint', rmRes + 062);
RMSetStrProp(btnCut, 'Hint', rmRes + 091);
RMSetStrProp(btnCopy, 'Hint', rmRes + 092);
RMSetStrProp(btnPaste, 'Hint', rmRes + 093);
RMSetStrProp(BtnWordWrap, 'Hint', rmRes + 063);
RMSetStrProp(btnInsExpr, 'Caption', rmRes + 701);
RMSetStrProp(btnInsDBField, 'Caption', rmRes + 65);
btnOK.Caption := RMLoadStr(SOk);
btnCancel.Caption := RMLoadStr(SCancel);
FRowStr := RMLoadStr(rmRes + 578);
FColStr := RMLoadStr(rmRes + 579);
end;
function TRMEditorForm.Execute: Boolean;
begin
Result := (ShowModal = mrOk);
end;
function TRMEditorForm.ShowEditor(View: TRMView): TModalResult;
var
Ini: TRegIniFile;
Nm: string;
begin
Ini := TRegIniFile.Create(RMRegRootKey);
try
Nm := rsForm + RMDesigner.ClassName;
FView := View;
BtnWordWrap.Click;
Memo.Lines.Assign(FView.Memo);
Memo.Font.Name := Ini.ReadString(Nm, 'TextFontName', 'Arial');
Memo.Font.Size := Ini.ReadInteger(Nm, 'TextFontSize', 10);
Memo.Font.Name := TRMMemoView(FView).Font.Name;
Memo.Font.Size := 10;
Memo.Font.Charset := TRMMemoView(View).Font.Charset;
Memo.ReadOnly := rmrtDontModify in FView.Restrictions;
Result := ShowModal;
if Result = mrOk then
begin
RMDesigner.BeforeChange;
Memo.WordWrap := False;
FView.Memo.Text := Memo.Lines.Text;
end;
finally
Ini.Free;
end;
end;
const
VK_A = 65;
VK_X = 88;
VK_Y = 89;
VK_W = 87;
VK_Q = 81;
procedure TRMEditorForm.MemoKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = vk_Insert) and (Shift = []) then
btnInsDBFieldClick(Self)
else if (Key = VK_A) and (Shift = [ssCtrl]) then
begin
Memo.SelectAll
end
else if (Key = vk_X) and (Shift = [ssCtrl]) then
begin
Memo.CutToClipboard
end
else if (Shift = [ssCtrl]) and ((Key = VK_W) or (Key = VK_RETURN)) then
begin
Key := 0;
btnOk.Click;
end
else if (Key = vk_Escape) or ((Key = VK_Q) and (Shift = [ssCtrl])) then
begin
Key := 0;
btnCancel.Click;
end;
end;
procedure TRMEditorForm.btnInsDBFieldClick(Sender: TObject);
var
s: string;
begin
s := RMDesigner.InsertDBField;
if s <> '' then
Memo.SelText := s;
Memo.SetFocus;
end;
procedure TRMEditorForm.BtnWordWrapClick(Sender: TObject);
begin
Memo.WordWrap := BtnWordWrap.Down;
end;
procedure TRMEditorForm.btnInsExprClick(Sender: TObject);
var
s: string;
begin
s := RMDesigner.InsertExpression;
if s <> '' then
Memo.SelText := s;
Memo.SetFocus;
end;
procedure TRMEditorForm.FormCreate(Sender: TObject);
var
Ini: TRegIniFile;
Nm: string;
begin
Localize;
Ini := TRegIniFile.Create(RMRegRootKey);
try
Nm := rsForm + Self.ClassName;
btnWordWrap.Down := Ini.ReadBool(Nm, 'WordWrap', True);
finally
Ini.Free;
end;
end;
procedure TRMEditorForm.btnOKClick(Sender: TObject);
begin
ModalResult := mrOK;
end;
procedure TRMEditorForm.btnCancelClick(Sender: TObject);
begin
ModalResult := mrCancel;
end;
procedure TRMEditorForm.btnCutClick(Sender: TObject);
begin
Memo.CutToClipboard;
end;
procedure TRMEditorForm.btnCopyClick(Sender: TObject);
begin
Memo.CopyToClipboard;
end;
procedure TRMEditorForm.btnPasteClick(Sender: TObject);
begin
Memo.PasteFromClipboard;
end;
procedure TRMEditorForm.FormShow(Sender: TObject);
begin
Memo.SetFocus;
ShowStatusbar(Memo);
end;
procedure TRMEditorForm.FormDestroy(Sender: TObject);
var
Ini: TRegIniFile;
Nm: string;
begin
Ini := TRegIniFile.Create(RMRegRootKey);
try
Nm := rsForm + Self.ClassName;
Ini.WriteBool(Nm, 'WordWrap', BtnWordWrap.Down);
finally
Ini.Free;
end;
end;
procedure TRMEditorForm.ShowStatusbar(Sender: TObject);
var
Hang, Lie, Num, CharsLine: longint;
begin
Num := SendMessage(TMemo(Sender).Handle, EM_LINEFROMCHAR,
TMemo(Sender).SelStart, 0);
CharsLine := SendMessage(TMemo(Sender).Handle, EM_LINEINDEX, Num, 0);
Hang := Num + 1; //当前行
Lie := (TMemo(Sender).SelStart - CharsLine) + 1; //当前列
StatusBar.Panels[0].Text := FRowStr + IntToStr(Hang) + FColStr + IntToStr(Lie);
end;
procedure TRMEditorForm.MemoKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
ShowStatusbar(Memo);
end;
procedure TRMEditorForm.MemoMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ShowStatusbar(Memo);
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?