3

有没有办法在禁用的 TMemo 组件中启用滚动条?即使控件的 Enabled 属性设置为 False,我也想让用户滚动内容。我知道 ReadOnly 的可能解决方法和禁用状态下的颜色更改,但这对我有很大帮助。

提前致谢 :)

4

4 回答 4

7

可以禁用或启用控件,但不能半禁用半启用。(而且,对于我们中间的挑剔者,我认为没有黑客应该这样做:-),原因如下)。

使用 ReadOnly 是最简单的解决方案。请注意颜色更改不要使控件看起来被禁用。在识别启用/禁用控件方面,这也会让用户非常困惑。最好让它看起来像一个可滚动的多行标签。这通常是通过将(背景)颜色设置为与其父颜色相同的颜色来完成的。

尚未使用@HalloDu 建议和链接的解决方案,但这看起来是一个不错的选择。

于 2011-02-23T13:52:12.640 回答
1

嗯,这不完全是你想要的,但效果是一样的。查看这篇文章,其中实现了 WinControls 的 ViewOnly 属性,多年来我发现它非常有用。关联

于 2011-02-23T12:47:31.907 回答
0

这不是完美的方式,但它有效:使用 ScrollBar comp。与备忘录相邻。

procedure TForm9.FormCreate(Sender: TObject);
begin
  Memo1.ScrollBars := ssNone;
  ScrollBar1.Min := 0;
  ScrollBar1.Max := Memo1.Lines.Count div (Memo1.Height div 13);//13 is height of a line in memo
end;

procedure TForm9.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin
  if ScrollCode in [scPageDown, scLineDown] then
    SendMessage(Memo1.Handle, WM_VSCROLL,  SB_PAGEDOWN,0)
  else if ScrollCode in [scPageUp, scLineUp] then
    SendMessage(Memo1.Handle, WM_VSCROLL,  SB_PAGEUP,0);
end;
于 2011-02-23T13:49:09.540 回答
0

有一种方法。

将整个 TMemo 放在 TScrollBox 中。

当你用文本填充备忘录时,调整高度和宽度以适应文本的大小(这是另一个问题,但我相信可以做到)

于 2011-02-24T00:12:41.803 回答