FAQ VCL
Компоненты\SynEdit\SynEdit

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

Как вывести содержимое редактора TSynEdit на печать?

type
  TForm1 = class(TForm)
    SynEdit1: TSynEdit;
    SynEditPrint1: TSynEditPrint;
    Button1: TButton;
    PrintDialog1: TPrintDialog;
    procedure Button1Click(Sender: TObject);
    {...}
  end;

implementation

procedure TForm1.Button1Click(Sender: TObject);
begin
  if PrintDialog.Execute then
  begin
    SynEditPrint1.SynEdit := SynEdit1;
    SynEditPrint1.Print;
  end;
end;


Как получить позицию каретки в TSynEdit?

// Способ первый
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(
    IntToStr(SynEdit1.CaretX) + #13 +
    IntToStr(SynEdit1.CaretY)
  );
end;

// Способ второй
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(
    IntToStr(SynEdit1.CaretXY.Line) + #13 +
    IntToStr(SynEdit1.CaretXY.Char)
  );
end;


Как изменить позицию каретки в TSynEdit?

// Способ первый
procedure TForm1.Button1Click(Sender: TObject);
begin
  SynEdit1.CaretX := 3;
  SynEdit1.CaretY := 3;
  SynEdit1.SetFocus;
end;

// Способ второй
uses
  SynEditKeyCmds;

procedure TForm1.Button1Click(Sender: TObject);
var
  Coord: TBufferCoord;
begin
  Coord.Char := 3;
  Coord.Line := 3;
  SynEdit1.CommandProcessor(ecGotoXY, #0, @Coord);
  SynEdit1.SetFocus;
end;

// Способ третий
uses
  SynEditKeyCmds;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Возможные варианты:
  //   ecLeft, ecRight, ecUp, ecDown, ecWordLeft,
  //   ecWordRight, ecLineStart, ecLineEnd, ecPageUp,
  //   ecPageDown, ecPageLeft, ecPageRight, ecPageTop,
  //   ecPageBottom, ecEditorTop, ecEditorBottom
  SynEdit1.CommandProcessor(ecLeft, #0, nil);
  SynEdit1.SetFocus;
end;


Как перевести позицию курсора в экранные координаты?

// Способ первый
uses
  SynEditTypes;

procedure TForm1.Button1Click(Sender: TObject);
var
  APos: TPoint;
begin
  APos := SynEdit1.ClientToScreen(
    SynEdit1.RowColumnToPixels(
      SynEdit1.BufferToDisplayPos(
        BufferCoord(SynEdit1.CaretXY.Char, SynEdit1.CaretXY.Line)
      )
    )
  );
end;

// Способ второй
procedure TForm1.Button1Click(Sender: TObject);
var
  APos: TPoint;
begin
  APos := SynEdit1.ClientToScreen(SynEdit1.RowColumnToPixels(SynEdit1.DisplayXY));
end;


Как получить содержимое текущей строки редактора TSynEdit?

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(SynEdit1.LineText);
end;


Как переключаться между режимами Insert/Overwrite в TSynEdit?

procedure TForm1.Button1Click(Sender: TObject);
begin
  SynEdit1.InsertMode := not SynEdit1.InsertMode;
  SynEdit1.SetFocus;
end;


Как программно выполнить Undo в TSynEdit?

// Способ первый
procedure TForm1.Button1Click(Sender: TObject);
begin
  SynEdit1.Undo;
end;

// Способ второй
procedure TForm1.Button1Click(Sender: TObject);
begin
  SynEdit1.Perform(WM_UNDO, 0, 0);
end;


Как программно выполнить Redo в TSynEdit?

procedure TForm1.Button1Click(Sender: TObject);
begin
  SynEdit1.Redo;
end;


Как проверить, есть ли в редакторе TSynEdit выделенный текст?

// Способ первый
procedure TForm1.Button1Click(Sender: TObject);
begin
  case SynEdit1.SelAvail of
    True: ShowMessage('Есть выделенный текст');
    False: ShowMessage('Нет выделенныого текста');
  end;
end;

// Способ второй
procedure TForm1.Button1Click(Sender: TObject);
begin
  case SynEdit1.SelLength > 0 of
    True: ShowMessage('Есть выделенный текст');
    False: ShowMessage('Нет выделенныого текста');
  end;
end;

// Способ третий
procedure TForm1.Button1Click(Sender: TObject);
begin
  case SynEdit1.SelText <> '' of
    True: ShowMessage('Есть выделенный текст');
    False: ShowMessage('Нет выделенныого текста');
  end;
end;


Как определить границы выделенного текста в TSynEdit?

// Способ первый
procedure TForm1.Button1Click(Sender: TObject);
begin
  with SynEdit1 do
    ShowMessage(Format('%d - %d', [SelStart, SelEnd]));
end;

// Способ второй
procedure TForm1.Button1Click(Sender: TObject);
begin
  with SynEdit1 do
    ShowMessage(
      Format('%d:%d - %d:%d',
             [BlockBegin.Line, BlockBegin.Char,
              BlockEnd.Line, BlockEnd.Char])
     );
end;

При использовании материала - ссылка на сайт обязательна