Есть ли способ отключить выделение текста в элементе управления заметкой? - PullRequest
1 голос
/ 26 октября 2011

Есть ли способ отключить выделение текста в элементе управления заметкой, потому что это очень раздражает.
Памятка только для чтения.

Ответы [ 4 ]

3 голосов
/ 26 октября 2011

Я думаю, вы должны переосмыслить. Я понимаю, что ваш элемент управления используется в режиме только для чтения, но все же, что если конечный пользователь захочет скопировать часть текста? Затем ему нужно , чтобы иметь возможность выбрать нужную деталь.

Тем не менее, если вы уверены, что вам необходимо отключить все виды выбора, самый простой подход - использовать TRichEdit вместо TMemo и просто

procedure TForm1.RichEdit1SelectionChange(Sender: TObject);
begin
  RichEdit1.SelLength := 0;
end;
2 голосов
/ 27 октября 2011

Вы также можете использовать событие onMouseUp

procedure TForm1.Memo1MouseUp(Sender: TObject: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Memo1.SelLength > 0 then
    Memo1.SelLength := 0;
end;

Но это не останавливает выбор с помощью клавиатуры ..

или вы также можете использовать onEnter и просто изменитьсосредоточиться на другой элемент управления в вашей форме.

procedure TForm1.Memo1Enter(Sender: TObject);
begin
  Edit1.SetFocus;
end;
1 голос
/ 17 августа 2016

Я играл с TRichEdit и TMemo, пока мне не стало скучно до слез. Да, вы можете сделать несколько трюков с обработкой событий на объекте, но это все еще не является желаемым эффектом - и курсор где-то мигает. Поэтому лучшее, что я смог найти, это использовать TLabel. Я использую Borland C ++ Builder 6, и \ n правильно переведен с помощью встроенных текстовых строк для TLabel. Итак,

Label1->Caption = "this is a test of the emergency\n"
                  "broadcast station, this is only\n"
                  "a test. If this had been an\n"
                  "actual emergency, blah blah blah...\n";

Работает просто отлично. Я не пытался читать из файла, но я уверен, что если бы поток был точно таким, как видно, он также работал бы. Так как вам все равно придется вводить или читать текст, который вы хотите отобразить - это должно работать хорошо, вместо того чтобы использовать кучу TLabels для каждой строки. Если вас беспокоит перенос слов, вам придется обрабатывать эту часть отдельно. Если он статический, то просто сделайте это вручную, как я делал в примере. Я очень надеюсь, что это помогает или, по крайней мере, дает представление ...

  • atomkey -
0 голосов
/ 10 апреля 2013

Насколько я понимаю, вы хотели бы использовать мемо как ярлык (а иногда это действительно имеет смысл).Когда мне нужно использовать TcxMemo (компонент memo из DeveloperExpress) в качестве метки, я использую такую ​​простую процедуру:

procedure ShowMemoAsLabel(m: TcxMemo);
begin
  m.Enabled := False;
  m.Properties.ReadOnly := True;

  // AH: Unfortunately it doesn't copy some important properties, maybe it will
  // be fixed in future versions of DEX, but at moment we do some job ourselves.
  m.StyleDisabled := m.Style;

  m.StyleDisabled.BorderColor := m.Style.BorderColor;
  m.StyleDisabled.BorderStyle := m.Style.BorderStyle;
  m.StyleDisabled.Color := m.Style.Color;
  m.StyleDisabled.Edges := m.Style.Edges;
  m.StyleDisabled.Shadow := m.Style.Shadow;
  m.StyleDisabled.TextColor := m.Style.TextColor;
  m.StyleDisabled.TextStyle := m.Style.TextStyle;
  m.StyleDisabled.TransparentBorder := m.Style.TransparentBorder;
end;
...