📄 viewer.pas
字号:
Unit Viewer;
Interface
Uses
SysUtils,
WinTypes,
WinProcs,
Messages,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
ExtCtrls,
ComCtrls;
Type
TFrmViewer = Class(TForm)
RtfCode: TRichEdit;
SbrViewer: TStatusBar;
Procedure FormClose(Sender: TObject; Var Action: TCloseAction);
Procedure RtfCodeClick(Sender: TObject);
Procedure RtfCodeKeyDown(Sender: TObject; Var Key: Word; Shift: TShiftState);
Public
Procedure OpenAt(l, BytePos: Integer);
End;
Var
FrmViewer: TFrmViewer;
Implementation
{$R *.DFM}
Uses
RichEdit;
//-------------------------------------------------------------
Procedure TFrmViewer.FormClose(Sender: TObject; Var Action: TCloseAction);
Begin
Action := caFree; // Destroy form when closed
End;
//-------------------------------------------------------------
Procedure TFrmViewer.OpenAt(l, BytePos: Integer);
Var
ll,
LineNum: Integer;
Begin
Show;
SendMessage(RtfCode.Handle, em_SetSel, BytePos, BytePos + l);
LineNum := SendMessage(RtfCode.Handle, em_LineFromChar, BytePos, 0);
// Move selected line to top of window
ll := SendMessage(RtfCode.Handle, em_GetFirstVisibleLine, 0, 0);
SendMessage(RtfCode.Handle, em_LineScroll, 0, LineNum - ll);
RtfCodeClick(Self); // Update the status display
End;
//-------------------------------------------------------------
Procedure TFrmViewer.RtfCodeClick(Sender: TObject);
Var
r: TCharRange;
l, c: Integer;
Begin
With RtfCode Do
Begin
SendMessage(Handle, em_ExGetSel, 0, Longint(@r));
l := SendMessage(Handle, em_ExLineFromChar, 0, r.cpMin);
c := r.cpMin - SendMessage(Handle, em_LineIndex, l, 0);
End;
SbrViewer.SimpleText := Format('Line: %d Col: %d', [l + 1, c + 1]);
End;
//-------------------------------------------------------------
Procedure TFrmViewer.RtfCodeKeyDown(Sender: TObject;
Var Key: Word; Shift: TShiftState);
Begin
RtfCodeClick(Sender);
End;
//-------------------------------------------------------------
End.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -