無効になっているTMemoコンポーネントでスクロールバーを有効にする方法はありますか?コントロールのEnabledプロパティがFalseに設定されている場合でも、ユーザーがコンテンツをスクロールできるようにしたい。ReadOnlyと無効状態のような色の変更で考えられる回避策については知っていますが、これは大いに役立ちます。
前もって感謝します :)
コントロールは無効または有効にすることができますが、半分を無効にし、半分を有効にすることはできません。(そして、私たちの間のニトピッカーにとって、私はハックがそうするべきではないと思います:-)、以下に与えられた理由のために)。
ReadOnlyを使用するのが最も簡単な解決策です。ただし、コントロールが無効に見えないように色を変更する場合は注意が必要です。これは、有効/無効なコントロールの認識に関して、ユーザーにとっても非常に混乱します。スクロール可能な複数行のラベルのように見せたほうがよいでしょう。これは通常、(背景)色をその親の色と同じに設定することによって行われます。
@HalloDuによって提案およびリンクされたソリューションを使用したことはありませんが、それは良い代替案のように見えます。
まあ、それはあなたが望むものではありませんが、効果は同じです。WinControlsのViewOnlyプロパティが実装されているこの記事を見てください。これは、長年にわたって非常に役立つことがわかりました。リンク
これは完璧な方法ではありませんが、機能します。ScrollBarcompを使用します。メモに隣接しています。
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;
やり方がある。
TMemo全体をTScrollBox内に配置します。
メモにテキストを入力するときは、テキストのサイズに合わせて高さと幅を調整します(これは別の質問ですが、実行できると確信しています)