📄 fmain.pas
字号:
SaveDialog1.FileName := ExtractFilePath(OpenDialog1.FileName) + 'NONAME.TXT';
if SaveDialog1.Execute then
begin
RAHLEditor1.Lines.SaveToFile(SaveDialog1.FileName);
FFileName := SaveDialog1.FileName;
FileTime := FileAge(FFileName);
end
else
Abort;
OpenDialog1.FileName := SaveDialog1.FileName;
UpdateCaption;
end;
procedure TMain.UpdateCaption;
begin
if FFileName <> '' then
begin
Caption := Capt + ' - ' + FFileName;
Application.Title := ExtractFileName(FFileName) + ' - ' + Capt;
end
else
begin
Caption := Capt + ' - new file' ;
Application.Title := 'new file - ' + Capt;
end;
end;
procedure TMain.WMDropFiles(var Message: TMessage);
var
FN: string;
begin
SetLength(FN, 260);
SetLength(FN, DragQueryFile(Message.WParam, 0, PChar(FN), 260));
CheckSave;
OpenFile(FN);
end;
procedure TMain.Search1Click(Sender: TObject);
begin
FindDialog1.FindText := RAHLEditor1.GetWordOnCaret;
FindDialog1.Execute;
end;
procedure TMain.miSearchAgainClick(Sender: TObject);
begin
FindNext;
end;
procedure TMain.FindDialog1Find(Sender: TObject);
begin
FindNext;
end;
procedure TMain.FindNext;
var
S, S1: string;
F: PChar;
begin
S := RAHLEditor1.Lines.Text;
S1 := FindDialog1.FindText;
if not (frMatchCase in FindDialog1.Options) then
begin
S := ANSIUpperCase(S);
S1 := ANSIUpperCase(S1);
end;
F := StrPos(PChar(S) + RAHLEditor1.SelStart, PChar(S1));
if F <> nil then
begin
RAHLEditor1.SelStart := F - PChar(S);
RAHLEditor1.SelLength := Length(S1);
end;
end;
procedure TMain.miSearchReplaceClick(Sender: TObject);
begin
// SAR1.ReplaceDialog;
end;
procedure TMain.miOptionsClick(Sender: TObject);
begin
if RAHLEdPropDlg1.Execute then
RAHLEditor1.Invalidate;
end;
{*********************** JvInterpreter support ***********************}
type
{ small hack }
TMyProgram = class(TJvInterpreterProgram);
procedure TMain.ErrorLogFmt(const Message: string; const Args: array of const);
var
S: string;
begin
S := Format(Message, Args);
{ save S to log file }
//.. not implemented
ShowMessage(S);
end; { ErrorLogFmt }
procedure TMain.JvInterpreterInitialize;
begin
Args := TJvInterpreterArgs.Create;
{ from JvInterpreter_all.pas }
JvInterpreter_System.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreter_Windows.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreter_SysUtils.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreter_Classes.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreter_Graphics.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreter_Controls.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreter_StdCtrls.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreter_ComCtrls.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreter_ExtCtrls.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreter_Forms.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreter_Dialogs.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreter_Menus .RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreterFm.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreter_JvEditor.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreter_JvRegAuto.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreter_JvUtils.RegisterJvInterpreterAdapter(GlobalJvInterpreterAdapter);
JvInterpreterFileName := raCommon.ReadString('Params', 'JvInterpreterFile', '');
if JvInterpreterFileName = '' then Exit;
JvInterpreterFileName := AddPath(JvInterpreterFileName, ExePath);
if not FileExists(JvInterpreterFileName) then
begin
ErrorLogFmt('File %s not found', [JvInterpreterFileName]);
Exit;
end;
try
JvInterpreterProgram1.Pas.LoadFromFile(JvInterpreterFileName);
except
ErrorLogFmt('Failed to load file %s', [JvInterpreterFileName]);
Exit;
end;
JvInterpreterProgram1.Compile;
JvInterpreterSafeCall('main', nil, [Null]);
end; { RegisterJvInterpreterAdapters }
procedure TMain.JvInterpreterUnInitialize;
begin
JvInterpreterSafeCall('done', nil, [Null]);
Args.Free;
end;
function TMain.JvInterpreterScript: boolean;
begin
Result := JvInterpreterProgram1.Source <> '';
end; { }
function TMain.JvInterpreterSafeCall(const FunName: string; Args: TJvInterpreterArgs;
Params: array of Variant): Variant;
begin
Result := Null;
if JvInterpreterScript and JvInterpreterProgram1.FunctionExists('', FunName) then
try
Result := JvInterpreterProgram1.CallFunction(FunName, Args, Params);
except
on E: EJvInterpreterError do
ErrorLogFmt('Call to function %s failed: %s', [FunName, E.Message]);
end
end; { JvInterpreterSafeCall }
procedure TMain.JvInterpreterFileOpened;
begin
JvInterpreterSafeCall('FileOpened', nil, [FFileName]);
end; { JvInterpreterOpen }
procedure TMain.JvInterpreterFileClosed;
begin
JvInterpreterSafeCall('FileClosed', nil, [FFileName]);
end; { JvInterpreterFileClosed }
procedure TMain.JvInterpreterProgram1GetValue(Sender: TObject; Identifer: String;
var Value: Variant; Args: TJvInterpreterArgs; var Done: Boolean);
var
S: string;
begin
if Cmp(Identifer, 'MainWindow') then
begin
Value := O2V(Self);
Done := True;
end
else if Cmp(Identifer, 'Editor') then
begin
Value := O2V(RAHLEditor1);
Done := True;
end
else if Cmp(Identifer, 'ODS') then
begin
//ODS(Args.Values[0]);
Value := Null;
Done := True;
end
else if Cmp(Identifer, 'Call') then
begin
S := Args.Values[0];
Args.Delete(0);
Value := JvInterpreterProgram1.CallFunction(S, Args, [Null]);
Done := True;
end
else if Cmp(Identifer, 'UseUnit') then
begin
TMyProgram(JvInterpreterProgram1).ReadUnit(Args.Values[0]);
Value := Null;
Done := True;
end
else if Args.Obj = RAHLEditor1 then
begin
if Cmp(Identifer, 'FileName') then
begin
Value := FFileName;
Done := True;
end
else if Cmp(Identifer, 'FileOpen') then
begin
OpenFile(Args.Values[0]);
Value := Null;
Done := True;
end
else if Cmp(Identifer, 'FileSave') then
begin
miFileSave.Click;
Value := Null;
Done := True;
end
else if Cmp(Identifer, 'CheckSave') then
begin
CheckSave;
Value := Null;
Done := True;
end
else if Cmp(Identifer, 'HighlighterName') then
begin
Value := Highlighters[RAHLEditor1.Highlighter];
Done := True;
end
else if Cmp(Identifer, 'LoadColors') then
begin
LoadColors;
Done := True;
end
else if Cmp(Identifer, 'BaseLine') then
begin
Value := BaseLine;
Done := True;
end
end;
end;
procedure TMain.JvInterpreterProgram1SetValue(Sender: TObject; Identifer: String;
const Value: Variant; Args: TJvInterpreterArgs; var Done: Boolean);
begin
if Args.Obj = RAHLEditor1 then
begin
if Cmp(Identifer, 'BaseLine') then
begin
BaseLine := Value;
Done := True;
end
end;
end;
procedure TMain.JvInterpreterProgram1GetUnitSource(UnitName: String;
var Source: String; var Done: Boolean);
begin
try
Source := LoadTextFile(AddPath(UnitName + PadExt, ExtractFilePath(JvInterpreterFileName)));
Done := True;
except
end;
end;
procedure TMain.RAHLEditor1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Args.Clear;
Args.Values[0] := Key;
Args.Values[1] := S2V(Byte(Shift));
Args.Types[0] := varInteger or varByRef;
Args.Count := 2;
JvInterpreterSafeCall('KeyDown', Args, [Null]);
Key := Args.Values[0];
end;
procedure TMain.RAHLEditor1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Args.Clear;
Args.Values[0] := Key;
Args.Values[1] := S2V(Byte(Shift));
Args.Types[0] := varInteger or varByRef;
Args.Count := 2;
JvInterpreterSafeCall('KeyUp', Args, [Null]);
Key := Args.Values[0];
end;
procedure TMain.RAHLEditor1KeyPress(Sender: TObject; var Key: Char);
begin
Args.Clear;
Args.Values[0] := Key;
Args.Types[0] := varInteger or varByRef;
Args.Count := 1;
JvInterpreterSafeCall('KeyPress', Args, [Null]);
if string(Args.Values[0]) <> '' then
Key := string(Args.Values[0])[1]
else
Key := #0;
end;
procedure TMain.RAHLEditor1PaintGutter(Sender: TObject; Canvas: TCanvas);
procedure Draw(Y, ImageIndex : integer);
var
Ro : integer;
R : TRect;
begin
if Y <> -1 then
with Sender as TJvEditor do begin
Ro := Y - TopRow;
R := CalcCellRect(0, Ro);
GutterImages.Draw(Canvas,
GutterWidth -GutterRightMargin -GutterImages.Width{R.Left},
R.Top + (CellRect.Height - GutterImages.Height) div 2 +1,
ImageIndex);
end;
end;
var
i : integer;
begin
for i := 0 to 9 do
if (Sender as TJvEditor).Bookmarks[i].Valid then
Draw((Sender as TJvEditor).Bookmarks[i].Y, i);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -