在禁用的TMemo控件中启用滚动条

时间:2011-02-23 12:39:08

标签: delphi winapi scroll tmemo

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

提前致谢:)

4 个答案:

答案 0 :(得分:7)

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

使用ReadOnly是最简单的解决方案。请注意,虽然颜色更改不会使控件看起来禁用。对于识别启用/禁用控件的用户而言,这也会非常混乱。最好让它看起来像一个可滚动的多行标签。这通常是通过将(背景)颜色设置为等于其父颜色来完成的。

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

答案 1 :(得分:1)

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

答案 2 :(得分: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;

答案 3 :(得分:0)

有一种方法。

将整个TMemo放在TScrollBox中。

当您使用文本填充备忘录时,请调整高度和宽度以适应文本的大小(这是另一个问题,但我确信可以完成)