Как избежать невидимых непечатных символов в текстовом редакторе - PullRequest
0 голосов
/ 03 марта 2020

Пользователь может скопировать непечатаемый символ и вставить его в текстовый редактор (т.е.: TEdit).

После этого TEdit 's Text будет содержать непечатаемый символ, но пользователь не сможет его увидеть.


Пример:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  Clipbrd;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if(Length(Edit1.Text) > 5) then
    ShowMessage(IntToStr(Ord(Edit1.Text[6])))
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Clipboard.AsText := 'Hello' + #31 + 'World';
end;

end.

Вставка внутри Edit1 и нажатие Button1 покажет, что пятый символ - #31

showmessage dialog displaying 31 as the fifth character of the


Мне не нравится, что пользователь может не различают guish между TEdit, имеющим Text = 'Hello' + #31 + 'World', от другого редактора, имеющего Text = 'HelloWorld'.

По этой причине я хотел бы сделать одну из следующих двух вещей, предпочтительнее первую :

  • Отображение непечатаемых символов (как это делает Notepad ++ , включив опцию «Вид меню → Показать символ → Показать все символы»: screenshot of notepad++ displaying a non printable character )
  • Избегайте, чтобы редактор принимал непечатные символы

1 Ответ

0 голосов
/ 16 марта 2020

Вам будет трудно изменить способ редактирования текста в редакторе. В качестве компромисса рассмотрите возможность использования https://en.wikipedia.org/wiki/Monospaced_font вместо значения по умолчанию, которое должно отображать одинаковую ширину для каждого символа, даже пробелы нулевой длины.

...