Delphi TCoolBar - CoolBand对齐

时间:2009-06-25 07:52:00

标签: delphi

是否可以将CoolBands对齐CoolBar的左侧? 意味着当CoolBar(Form)调整大小并且CoolBands移动到下面的行时,Band应该对齐到Bar的左侧(而不是右侧)。 类似于菜单行为,当项目不再适合一行时。

更有可能保存乐队的调整吗?

1 个答案:

答案 0 :(得分:0)

如果设置每个波段的MinWidth属性并将CoolBar AutoSize属性设置为True,则一旦波段处于MinWidth,它将自动换行。

编辑 :上述内容仍然正确,但应进行扩展 - 来自评论部分的新信息。 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-帮助://embarcadero.rs2009/ShellCC/platform/commctls/rebar/reflist.htm