1

有什么方法可以禁用备忘录控件中的文本选择,因为它非常烦人。
备忘录是只读的。

4

4 回答 4

3

我认为你应该重新考虑。我知道您的控件是在只读模式下使用的,但是,如果最终用户希望复制部分文本怎么办?然后他需要能够选择有问题的部分。

不过,如果您确定需要禁用每种选择,最简单的方法是使用 aTRichEdit而不是TMemo,并且只需

procedure TForm1.RichEdit1SelectionChange(Sender: TObject);
begin
  RichEdit1.SelLength := 0;
end;
于 2011-10-26T18:55:11.110 回答
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;
于 2011-10-26T20:38:41.773 回答
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";

工作得很好。我没有尝试从文件中读入,但我确信如果流与所看到的完全一样,它也可以工作。由于无论如何您都必须输入或阅读要显示的文本 - 这应该很好用,而不是为每一行使用一堆 TLabels。如果您担心自动换行,则必须单独处理该部分。如果它是静态的,那么就像我在示例中所做的那样手动完成。我当然希望这会有所帮助或至少给出一个想法......

  • 原子键 -
于 2016-08-17T06:57:31.167 回答
0

据我了解,您实际上想使用备忘录作为标签(有时它真的很有意义)。当我需要使用 TcxMemo(来自 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;
于 2013-04-10T07:57:32.897 回答