【问题标题】:Enable scroll bars in disabled TMemo control在禁用的 TMemo 控件中启用滚动条
【发布时间】:2011-02-23 12:39:07
【问题描述】:

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

提前致谢:)

【问题讨论】:

  • 你不应该这样做。这很糟糕。
  • @Andreas - 好吧,我已经从问题中删除了代码,正如我所见,没有办法做到这一点:'(

标签: delphi winapi scroll tmemo


【解决方案1】:

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

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

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

【讨论】:

  • 为了更挑剔 - 可以覆盖一些消息处理以避免 IBeam 光标和文本选择等。
  • 我认为没有必要改变颜色。当用户尝试输入文本时,发现它没有输入,他们认为,哦,这是一个只读框。
  • @David:我碰巧不同意。当我使用控件时我讨厌它,我认为我可以编辑它,然后发现我不能。可用性似乎表明这不仅仅是个人的怪癖。如果控件的颜色像标签一样,我会立即假设它是只读的,甚至不会尝试更改内容,从而避免不被允许做我想做的事情的挫败感,甚至可能没有任何线索说明为什么它不是。不允许。
  • 我有一个非常特殊的情况,当表单上的所有组件都被禁用时,用户知道,他们无法更改任何内容(在表单的标题中也提到了)。他们只想阅读备忘录中的整个文本,而现在由于禁用了滚动条而无法做到这一点。我将简单地将它们放在滚动框上,第一个想法是什么,在我在这里问之前如何做。谢谢你的时间:)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    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;
    

    【讨论】:

    • “13”取决于字体大小。
    【解决方案4】:

    有办法。

    将整个 TMemo 放在 TScrollBox 中。

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

    【讨论】:

    • 如果我自己这么说,这个答案是天才。 :-)
    • 是的,你是对的,自从我收到提交者的这个请求后,我就想到了这个解决方法。而且因为不可能顺利完成,所以我会跟进。为您 +1,即使我想知道其他内容 :)
    猜你喜欢
    • 2011-07-31
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 2014-04-16
    相关资源
    最近更新 更多