【发布时间】:2009-06-25 07:51:59
【问题描述】:
是否可以将 CoolBands 对齐到 CoolBar 的左侧? 意味着当 CoolBar (Form) 调整大小并且 CoolBands 移动到下面的行时,Band 应该对齐到 Bar 的左侧(而不是右侧)。 类似于菜单行为,当项目不再适合一行时。
还有可以保存波段的调整吗?
【问题讨论】:
标签: delphi
是否可以将 CoolBands 对齐到 CoolBar 的左侧? 意味着当 CoolBar (Form) 调整大小并且 CoolBands 移动到下面的行时,Band 应该对齐到 Bar 的左侧(而不是右侧)。 类似于菜单行为,当项目不再适合一行时。
还有可以保存波段的调整吗?
【问题讨论】:
标签: delphi
如果您设置每个波段的 MinWidth 属性并将 CoolBar AutoSize 属性设置为 True,则一旦波段达到其 MinWidth,它将自动换行。
编辑:以上内容仍然正确,但应加以扩展——来自 cmets 部分的新信息。 Coolbar 尝试始终填充控件的宽度,因此您的最后一个乐队会伸展以占用空间。如果将 MaxWidth 约束添加到带状控件,它们会在带状环绕和拉伸时向右对齐。这里最好的解决方案是将 MinWidth 设置为您需要的任何值,但让 CoolBar 确定最大宽度。
保存调整?你的意思是每个酷带的确切位置吗?如果是这样,我认为您不能直接存储它,不。但是重现布局应该是微不足道的。存储每个 Band 的 Break 和 Width 属性并按顺序应用它们。我认为您最好的策略是调整表单(或 TCoolBar)的大小,为每个波段应用 Break,然后为每个波段应用 Width(循环两次)。
如果这不起作用,您可以尝试直接调用 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));
这应该可行,但需要您使上述 OldStyle 等于现有样式。这反过来将要求您复制 TCoolBar.UpdateItem 中的大部分代码,或者首先发送消息 RB_SETBANDINFO。痛苦,所以尝试分配 Break 然后 Width。
在 Delphi Windows SDK 帮助文件中,如果需要,请查看 Rebar Reference 以获取有关所有消息的信息。在我看来,帮助 URL(用于帮助查看器)是 ms-help://embarcadero.rs2009/ShellCC/platform/commctls/rebar/reflist.htm
【讨论】: