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 + -
显示快捷键?