easyeditoractions.pas.svn-base
来自「支持自定义语法高亮显示的编辑器控件」· SVN-BASE 代码 · 共 1,309 行 · 第 1/3 页
SVN-BASE
1,309 行
exit;
SortList := TStringList.Create;
Sortlist.Sorted := True;
Sortlist.Duplicates := dupAccept;
try
CustomEasyEdit.EditSource.BeginSourceUpdate(oprOther);
CustomEasyEdit.EditSource.LockUndo;
Rect := CustomEasyEdit.SelRect;
for i := Rect.Top to Rect.Bottom do
begin
tHackCustomEasyEdit(CustomEasyEdit).GetSelBounds (i, L, R);
if L < R then
begin
s := Copy(CustomEasyEdit.EditSource.Strings[i], l + 1, r - l);
while Length(s) < (r-l) do
s := s + ' ';
SortList.Add(s);
end;
end;
SortList.Sort;
j := 0;
for i := Rect.Top to Rect.Bottom do
begin
tHackCustomEasyEdit(CustomEasyEdit).GetSelBounds (i, L, R);
if L < R then
begin
CustomEasyEdit.EditSource.CurrentPosition := Point(l,i);
CustomEasyEdit.EditSource.DeleteString(Length(SortList[j]));
CustomEasyEdit.EditSource.InsertString(SortList[j]);
Inc(j);
end;
end;
finally
SortList.Free;
CustomEasyEdit.EditSource.UnlockUndo;
CustomEasyEdit.EditSource.EndSourceUpdate;
CustomEasyEdit.CurrentPosition := pt;
CustomEasyEdit.SetSelection (Rect, st);
end;
end;
procedure TEasyEditSortDownAction.ExecuteTarget(Target: TObject);
var
SortList: TStringList;
Rect: TRect;
st : TEasySelType;
pt : tPoint;
i, j: Integer;
L, R: Integer;
s: string;
begin
st := CustomEasyEdit.SelType;
pt := CustomEasyEdit.CurrentPosition;
if st = slNone then
exit;
SortList := TStringList.Create;
Sortlist.Sorted := True;
Sortlist.Duplicates := dupAccept;
try
CustomEasyEdit.EditSource.BeginSourceUpdate(oprOther);
CustomEasyEdit.EditSource.LockUndo;
Rect := CustomEasyEdit.SelRect;
for i := Rect.Top to Rect.Bottom do
begin
tHackCustomEasyEdit(CustomEasyEdit).GetSelBounds (i, L, R);
if L < R then
begin
s := Copy(CustomEasyEdit.EditSource.Strings[i], l + 1, r - l);
while Length(s) < (r-l) do
s := s + ' ';
SortList.Add(s);
end;
end;
SortList.Sort;
j := 0;
for i := Rect.Bottom downto Rect.Top do
begin
tHackCustomEasyEdit(CustomEasyEdit).GetSelBounds (i, L, R);
if L < R then
begin
CustomEasyEdit.EditSource.CurrentPosition := Point(l,i);
CustomEasyEdit.EditSource.DeleteString(Length(SortList[j]));
CustomEasyEdit.EditSource.InsertString(SortList[j]);
Inc(j);
end;
end;
finally
SortList.Free;
CustomEasyEdit.EditSource.UnlockUndo;
CustomEasyEdit.EditSource.EndSourceUpdate;
CustomEasyEdit.CurrentPosition := pt;
CustomEasyEdit.SetSelection (Rect, st);
end;
end;
//*****************************************************************************
{ TEasyEditBaseSearchAction }
//*****************************************************************************
{ TEasyEditSearchAndReplaceAction }
procedure TEasyEditSearchAndReplaceAction.ExecuteTarget(Target: TObject);
begin
CustomEasyEdit.ExecuteDialog (cReplace)
end;
procedure TEasyEditSearchAndReplaceAction.UpdateTarget(Target: TObject);
begin
inherited UpdateTarget (Target);
IF Enabled THEN
Enabled := Enabled AND (not CustomEasyEdit.ReadOnly);
end;
{ TEasyEditSearchAction }
procedure TEasyEditSearchAction.ExecuteTarget(Target: TObject);
begin
CustomEasyEdit.ExecuteDialog (cFind)
end;
{ TEasyEditSearchAgainAction }
procedure TEasyEditSearchAgainAction.ExecuteTarget(Target: TObject);
VAR s : String;
pt : TPoint;
begin
IF (CustomEasyEdit.IncrSearchString <> '') And
(CustomEasyEdit.inIncrementalSearch) THEN
BEGIN
s := CustomEasyEdit.IncrSearchString;
pt := CustomEasyEdit.CurrentPosition;
pt.x:= pt.x + Length(s);
CustomEasyEdit.CurrentPosition := pt;
CustomEasyEdit.InitIncrementalSearch(0);
tHackCustomEasyEdit(Target).IncrementalSearch (s, FALSE);
END
ELSE
CustomEasyEdit.FindNext (cFind)
end;
{ TEasyEditSearchAndReplaceAgainAction }
procedure TEasyEditSearchAndReplaceAgainAction.ExecuteTarget(Target: TObject);
begin
// if Target is TCustomEasyEdit then
// CustomEasyEdit.FindNextEx (cReplace, True)
// else
inherited ExecuteTarget(Target);
end;
procedure TEasyEditSearchAndReplaceAgainAction.UpdateTarget(Target: TObject);
begin
inherited UpdateTarget (Target);
IF Enabled THEN
Enabled := Enabled AND (not CustomEasyEdit.ReadOnly);
end;
{ TEasyEditIncSearchAction }
procedure TEasyEditIncSearchAction.UpdateTarget(Target: TObject);
begin
inherited UpdateTarget (Target);
Checked := CustomEasyEdit.InIncrementalSearch;
end;
procedure TEasyEditIncSearchAction.ExecuteTarget(Target: TObject);
begin
Checked:= Not Checked;
IF Checked THEN
CustomEasyEdit.InitIncrementalSearch(0)
ELSE
CustomEasyEdit.DoneIncrementalSearch;
end;
{ TEasyEditSearchBaseIdentifier }
procedure TEasyEditSearchBaseIdentifier.ExecuteTarget(Target: TObject);
VAR
OldSettings : TEasySearchSettings;
SelectFoundText : boolean;
p : tPoint;
begin
OldSettings := TEasySearchSettings.Create;
try
p := CustomEasyEdit.CurrentPosition;
SelectFoundText := eoSelectFoundText IN CustomEasyEdit.Options;
CustomEasyEdit.Options := CustomEasyEdit.Options - [eoSelectFoundText];
OldSettings.Assign(SearchSettings);
with SearchSettings do
begin
// TextToFind := 'procedure';
TextToFind := CustomEasyEdit.EditSource.GetTextAt(CustomEasyEdit.CurrentPosition, false);
CaseSensitive := False;
WholeWordsOnly := true;
IF SearchNext THEN
BEGIN
Direction := srForward;
CustomEasyEdit.Navigate (cWordRight);
END
ELSE
BEGIN
Direction := srBackward;
CustomEasyEdit.Navigate (cWordRight);
CustomEasyEdit.Navigate (cWordLeft);
END;
Scope := scGlobal;
Origin := sgFromCursor;
ShowNotFound := false;
InReplace := false;
end;
IF NOT CustomEasyEdit.Find THEN
CustomEasyEdit.CurrentPosition := p;
IF SelectFoundText THEN
CustomEasyEdit.Options := CustomEasyEdit.Options + [eoSelectFoundText];
SearchSettings.Assign(OldSettings);
finally
OldSettings.Free;
End;
end;
{ TEasyEditSearchPrevIdentifier }
constructor TEasyEditSearchPrevIdentifier.create (AOwner : TComponent);
begin
inherited Create(AOwner);
SearchNext := False;
end;
{ TEasyEditSearchNextIdentifier }
constructor TEasyEditSearchNextIdentifier.create (AOwner : TComponent);
begin
inherited Create(AOwner);
SearchNext := True;
end;
{ TEasyEditSearchBaseBracketAction }
procedure TEasyEditSearchBaseBracketAction.ExecuteTarget(Target: TObject);
VAR i : Integer;
found : Boolean;
pt : tPoint;
ch : Char;
br : String;
begin
pt := TCustomEasyEdit (Target).CurrentPosition;
br := Brackets;
FOR i := 1 TO Length(Br) DO
BEGIN
br := Brackets;
ch := br[i];
IF FindOpen THEN
found := TCustomEasyEdit (Target).EditSource.FindOpenBracket (ch, pt)
ELSE
found := TCustomEasyEdit (Target).EditSource.FindCloseBracket (ch, pt);
IF Found THEN
BEGIN
TCustomEasyEdit (Target).CurrentPosition := pt;
Exit;
END;
END;
end;
procedure TEasyEditSearchBaseBracketAction.UpdateTarget(Target: TObject);
begin
inherited UpdateTarget (Target);
IF Enabled THEN
Enabled := Enabled AND (eoHighlightBrackets in CustomEasyEdit.Options);
end;
constructor TEasyEditSearchOpenBracketAction.create (AOwner : TComponent);
begin
Inherited create (AOwner);
FindOpen := True;
Brackets := '({[<';
end;
constructor TEasyEditSearchCloseBracketAction.create (AOwner : TComponent);
begin
Inherited create (AOwner);
FindOpen := False;
Brackets := ')}]>';
end;
//*****************************************************************************
{ TEasyEditBaseDialogAction }
//*****************************************************************************
{ TEasyEditGotoLineAction }
procedure TEasyEditGotoLineAction.ExecuteTarget(Target: TObject);
begin
CustomEasyEdit.ExecuteDialog (cGotoLine);
CustomEasyEdit.SetFocus;
end;
procedure TEasyEditPrintAction.ExecuteTarget(Target: TObject);
begin
PrintWithDialog(CustomEasyEdit);
end;
procedure TEasyEditPrintPreviewAction.ExecuteTarget(Target: TObject);
begin
PrintPreview(CustomEasyEdit);
end;
{ TEasyEditCustomizeAction }
//function TEasyEditCustomizeAction.HandlesTarget(Target: TObject): Boolean;
//begin
// //Result := inherited HandlesTarget(Target);
// Result := True;
//end;
//
//procedure TEasyEditCustomizeAction.UpdateTarget(Target: TObject);
//begin
// inherited UpdateTarget (Target);
// Enabled := True;
//end;
procedure TEasyEditCustomizeAction.ExecuteTarget(Target: TObject);
begin
if Assigned(CustomEasyEdit.Parser) THEN
if CustomEasyEdit.Parser is TEasyEditorparser THEN
EasyEditSettings.Styles.Assign(TEasyEditorparser(CustomEasyEdit.Parser).Styles);
ShowEditorSettings;
end;
//*****************************************************************************
{ TEasyEditBaseOptionAction }
//*****************************************************************************
procedure tEasyEditShowFormattingMarksAction.UpdateTarget(Target: TObject);
begin
Inherited UpdateTarget(Target);
Checked := eoPaintFormattingMarks IN CustomEasyEdit.Options ;
end;
procedure tEasyEditShowFormattingMarksAction.ExecuteTarget(Target: TObject);
BEGIN
Checked := NOT Checked;
IF Checked THEN
CustomEasyEdit.Options := CustomEasyEdit.Options + [eoPaintFormattingMarks]
else
CustomEasyEdit.Options := CustomEasyEdit.Options - [eoPaintFormattingMarks];
END;
procedure TEasyEditShowLineNumbersAction.UpdateTarget(Target: TObject);
begin
Inherited UpdateTarget(Target);
Checked := CustomEasyEdit.LineNumbers.Visible;
end;
procedure TEasyEditShowLineNumbersAction.ExecuteTarget(Target: TObject);
begin
Checked := NOT Checked;
CustomEasyEdit.LineNumbers.Visible := Checked;
end;
procedure TEasyEditWordWrapAction.UpdateTarget(Target: TObject);
begin
Inherited UpdateTarget(Target);
Checked := CustomEasyEdit.WordWrap;
end;
procedure TEasyEditWordWrapAction.ExecuteTarget(Target: TObject);
BEGIN
Checked := NOT Checked;
CustomEasyEdit.WordWrap := Checked;
END;
procedure TEasyEditHiglightBracketsAction.UpdateTarget(Target: TObject);
begin
Inherited UpdateTarget(Target);
Checked := eoHighlightBrackets IN CustomEasyEdit.Options;
end;
procedure TEasyEditHiglightBracketsAction.ExecuteTarget(Target: TObject);
BEGIN
Checked := NOT Checked;
IF Checked THEN
CustomEasyEdit.Options := CustomEasyEdit.Options + [eoHighlightBrackets]
else
CustomEasyEdit.Options := CustomEasyEdit.Options - [eoHighlightBrackets];
END;
constructor TEasyEditShowRulersAction.create (AOwner : TComponent);
begin
Inherited Create (AOwner);
HandledRulers := [roVertRuler, roHorzRuler];
end;
procedure TEasyEditShowRulersAction.UpdateTarget(Target: TObject);
begin
Inherited UpdateTarget(Target);
Checked := False;
IF (roVertRuler IN HandledRulers) AND
(roHorzRuler IN HandledRulers) THEN
Checked := (roVertRuler IN CustomEasyEdit.Ruler.Options) AND
(roHorzRuler IN CustomEasyEdit.Ruler.Options)
ELSE IF roVertRuler IN HandledRulers THEN
Checked := roVertRuler IN CustomEasyEdit.Ruler.Options
ELSE IF roHorzRuler IN HandledRulers THEN
Checked := (roHorzRuler IN CustomEasyEdit.Ruler.Options);
end;
procedure TEasyEditShowRulersAction.ExecuteTarget(Target: TObject);
begin
Checked := NOT Checked;
IF roVertRuler IN HandledRulers THEN
IF Checked THEN
CustomEasyEdit.Ruler.Options := CustomEasyEdit.Ruler.Options + [roVertRuler]
ELSE
CustomEasyEdit.Ruler.Options := CustomEasyEdit.Ruler.Options - [roVertRuler];
IF roHorzRuler IN HandledRulers THEN
IF Checked THEN
CustomEasyEdit.Ruler.Options := CustomEasyEdit.Ruler.Options + [roHorzRuler]
ELSE
CustomEasyEdit.Ruler.Options := CustomEasyEdit.Ruler.Options - [roHorzRuler];
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?