2009-06-25 8 views
0

Est-il possible d'aligner les bandes de refroidissement sur le côté gauche de la barre CoolBar? Signifie que lorsque la barre CoolBar (Form) est redimensionnée et que les bandes CoolBands se déplacent vers la rangée ci-dessous, la bande doit être alignée sur le côté gauche de la barre (plutôt que sur la droite). Similaire au comportement du menu, lorsque les éléments ne tiennent plus dans une rangée.Delphi TCoolBar - Alignement CoolBand

De plus, est-il possible de sauvegarder le réglage des bandes?

Répondre

0

Si vous définissez la propriété MinWidth de chaque bande et définissez la propriété CoolBar AutoSize sur True, elle se ferme automatiquement une fois qu'une bande est à sa largeur minimale.

Modifier: Ce qui précède est toujours correcte, mais devrait être étoffée - nouvelles informations de la section des commentaires. Le Coolbar essaie de toujours remplir la largeur du contrôle, de sorte que votre dernier groupe s'étire pour prendre de la place. Si vous ajoutez des contraintes MaxWidth aux contrôles en bandes, ils s'alignent sur la droite au fur et à mesure que le groupe enveloppe et s'étire. La meilleure solution ici est de définir votre MinWidth à tout ce dont vous avez besoin, mais de laisser le CoolBar déterminer la largeur maximale.

Enregistrer l'ajustement? Voulez-vous dire le placement exact de chaque bande de refroidissement? Si oui, je ne pense pas que vous pouvez le stocker directement, non. Mais il devrait être trivial de reproduire la mise en page. Stockez les propriétés Break et Width de chaque bande et appliquez-les dans l'ordre. Je pense que votre meilleure stratégie serait de redimensionner le formulaire (ou TCoolBar), appliquer Break pour chaque bande, puis Width pour chaque groupe (boucle deux fois).

Si cela ne fonctionne pas, vous pouvez essayer d'appeler directement le message Windows. Cela vous permettra de définir les deux propriétés en même temps.

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)); 

Cela devrait fonctionner, mais il faudra que vous faites OldStyle ci-dessus égale au style existant. Cela nécessitera à son tour de dupliquer une grande partie du code dans TCoolBar.UpdateItem ou d'envoyer le message RB_SETBANDINFO en premier. Douloureux, alors essayez d'assigner Break et ensuite Width.

Dans le fichier d'aide Delphi Windows SDK, consultez la section Rebar Reference pour obtenir des informations sur tous les messages si vous en avez besoin. Sur le mien, l'URL d'aide (pour le visualiseur d'aide) est ms-help: //embarcadero.rs2009/ShellCC/platform/commctls/rebar/reflist.htm

+0

AutoSize et MinWidth sont déjà définis et enveloppent les bandes en conséquence. Mais lorsque la nouvelle rangée commence, la bande de la nouvelle rangée est ensuite alignée sur le côté droit. Cela a l'air un peu étrange. –

+0

Je ne vois pas ça. Le groupe remplit toute la rangée pour moi. Et si je mets une contrainte sur le contrôle du groupe, le groupe se décale à gauche. Même lorsque vous réglez le mode BiDi de droite à gauche, je n'arrive pas à le faire fonctionner correctement. Peut-être pouvez-vous nous en dire plus sur les paramètres des bandes, de la barre de contrôle et du formulaire? Je cours Windows XP SP 3. Peut-être une chose version Windows? Ou peut-être il y a un groupe vide qui prend –

+0

Aussi, êtes-vous satisfait de ma réponse sur la restauration de l'état? –