有没有办法禁用备忘录控件中的文本选择,因为它非常烦人 备忘录是只读的。
答案 0 :(得分:3)
我认为你应该重新思考。我意识到您的控件是以只读模式使用的,但是,如果最终用户希望复制 文本的一部分,该怎么办?然后他需要才能选择有问题的部分。
但是,如果您确定需要禁用所有类型的选择,最简单的方法是使用TRichEdit
代替TMemo
,并且只需
procedure TForm1.RichEdit1SelectionChange(Sender: TObject);
begin
RichEdit1.SelLength := 0;
end;
答案 1 :(得分: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;
答案 2 :(得分: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。如果您对自动换行有疑虑,则必须单独处理该部分。如果它是静态的,那么就像我在示例中那样手工完成。我当然希望这有助于或至少给出一个想法...
答案 3 :(得分: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;