1

この質問は 2 つのシナリオに当てはまります。

(1)

1 つ目は、MDI フォームと MDI 子を持つことです。実行時にフォームのサイズを水平または垂直に変更しようとすると、メインの MDI フォームの端を超えることができません。どこかに SetBounds またはこのタイプのマウスが端にスナップするだけの動作。

私が望むのは、MDI フォームの境界四角形を超えて/外側にサイズ変更できるようにすることです。これにより、メインの MDI フォームにスクロールバーが表示されます (子フォームを移動するときと同じように)。

(2)

2 つ目は、MDI レイアウト アプリケーション内でのスクロールが少し煩わしく、あまり使い心地が良くないことです。そのため、MDI を使用する代わりに、TScrollBox 内に Form を設定することでシミュレートできると考えました。スクロール。ただし、最初のシナリオと同様に、Form を ScrollBox 内に配置しても、クライアントの外部でサイズ変更することはできません。また、このメソッドを実行しても、Form を ScrollBox 内に移動してもスクロールバーは表示されません。


新しい MDI アプリケーションを作成することで、これをすぐに試すことができます。右下隅を使用してサイズを変更し、できるだけ右/下にドラッグしてみてください。マウスはメインの MDI クライアントで停止し、外部のサイズ変更を防ぎます。

では、実行時に Form が MDI Child であるか TScrollBox の親であるかに関係なく、親の境界外でサイズ変更できるようにするにはどうすればよいでしょうか?

見落としているかもしれない設定が必要な単純なプロパティはありますか、それともフォームのメッセージをオーバーライドするなど、より多くの作業が必要ですか?

4

1 に答える 1

1

MDI の子は親のサイズに制限されませんが、親の境界の外では見えないため、それらの境界の外でサイズ変更することはできません。

ただし、それらを境界の外に移動できるため、子フォームを左に移動してフォームの一部のみを表示した場合、その表示部分のサイズを親の境界まで変更できます。したがって、実際にはサイズに制限はありませんが、サイズ ハンドル/境界線が非表示になるときにフォームのサイズを変更できないという機能上の制限にすぎません。

MDI子をスクロールボックスに配置したり、MDI子のサイズを変更したりするのではなく、子のコンテンツをスクロールボックスに配置し、子フォーム自体をそのままにしておく方がよいと思います。

または、もちろん、スクロールがまったく必要ないようにデザインを修正することもできますが、フォームを知らずに適切なアドバイスをすることは不可能です。

于 2012-12-13T16:34:33.693 に答える