2009-06-25 9 views
0

CoolBandsをCoolBarの左側に揃えることは可能ですか? CoolBar(フォーム)のサイズが変更され、CoolBandsが下の行に移動するとき、バンドは(右ではなく)バーの左側に揃えられます。 アイテムがもう1つの行に収まりきらないときのメニューの動作に似ています。Delphi TCoolBar - CoolBandアラインメント

さらに、バンドの調整を保存することは可能ですか?

答えて

0

各バンドのMinWidthプロパティを設定し、CoolBar AutoSizeプロパティをTrueに設定すると、バンドがMinWidthになると自動的にラップします。

を編集してください。上記は正しいですが、コメントセクションから新しい情報に拡張する必要があります。 Coolbarは、コントロールの幅を常に埋めるようにします。最後のバンドが広がってスペースを取るようにします。バンドコントロールにMaxWidth制約を追加すると、バンドが折り返して伸びると右に揃えられます。ここでの最適な解決方法は、MinWidthを必要なものに設定することですが、CoolBarで最大幅を決定させることができます。

調整を保存しますか?各クールバンドの正確な配置を意味しますか?もしそうなら、あなたはそれを直接保管することはできないと思います。しかし、レイアウトを再現するのは簡単なことです。各バンドのブレークと幅のプロパティを保存し、順番に適用します。あなたの最善の戦略は、フォーム(またはTCoolBar)のサイズを変更し、各バンドにBreakを適用し、次に各バンド(ループを2回)に適用することです。

これでうまくいかない場合は、Windowsメッセージを直接呼び出すことができます。これにより、両方のプロパティを同時に設定することができます。動作するはずですが、あなたは既存のスタイルに等しい上オールドスタイルを作ることが必要になります

uses 
    CommCtrl; 
... 
var 
    Info: TRebarBandInfo; 
... 
    ZeroMemory(@Info, SizeOf(Info)); 
    Info.cbSize := SizeOf(Info); 
    Info.fMask := RBBIM_SIZE + RBBIM_STYLE; 
    Info.cx := 400; // Your desired width 
    Info.fStyle := RBBS_BREAK + OldStyle; 
    SendMessage(Coolbar.Handle, RB_SETBANDINFO, 0, Integer(@Info)); 

。そのためには、TCoolBar.UpdateItemのコードの大部分を複製するか、メッセージRB_SETBANDINFOを先に送信する必要があります。痛みを伴うので、Break and Widthを割り当ててみてください。

Delphi Windows SDKのヘルプファイルでは、必要に応じてすべてのメッセージの情報についてRebar Referenceをチェックしてください。鉱山では、ヘルプURL(ヘルプビューア用)は です。ms-help://embarcadero.rs2009/ShellCC/platform/commctls/rebar/reflist.htm

+0

AutoSizeとMinWidthは既に設定されており、それに応じてバンドをラップします。しかし、新しい行が始まると、新しい行のバンドが右側に揃えられます。それは少し奇妙に見えます。 –

+0

私はそれを見ません。バンドは私のために行全体を埋める。バンドのコントロールに制約を設定すると、バンドは左にシフトします。 BiDiモードを右から左に設定しても、右に掛けることはできません。 バンド、クールバー、フォームの設定についてもっと詳しく教えてください。 私はWindow XP SP 3を実行しています。おそらくWindows版のものでしょうか? おそらく空きバンドがあります –

+0

また、あなたは状態を復元する上で私の答えに満足していますか? –

関連する問題