有没有办法禁用备忘录控件中的文本选择?

问题描述 投票:1回答:4

有没有办法禁用备忘录控件中的文本选择,因为它非常烦人。 备忘录是只读的。

delphi windows-xp delphi-7 memo
4个回答
3
投票

我想你应该重新考虑一下。我意识到你的控件是以只读模式使用的,但是,如果最终用户希望复制文本的一部分呢?然后他需要能够选择有问题的部分。

尽管如此,如果你确定你需要禁用所有类型的选择,最简单的方法是使用TRichEdit而不是TMemo,并简单地做

procedure TForm1.RichEdit1SelectionChange(Sender: TObject);
begin
  RichEdit1.SelLength := 0;
end;

2
投票

您还可以使用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
投票

我和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";

工作得很好。我没有尝试从文件读入,但我确信如果流完全如此,它也可以工作。由于您不得不输入或读入您想要显示的文本 - 这应该可以正常工作,而不是每行使用一堆TLabel。如果您对自动换行有疑虑,则必须单独处理该部分。如果它是静态的,那么就像我在示例中那样手工完成。我当然希望这有助于或至少给出一个想法......

  • atomkey -

0
投票

据我所知,你实际上想要使用备忘录作为标签(有时它确实有意义)。当我需要使用TcxMemo(DeveloperExpress的memo组件)作为标签我使用这样简单的程序:

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;
热门问题
推荐问题
最新问题