【问题标题】:Delphi TCoolBar - CoolBand alignmentDelphi TCoolBar - CoolBand 对齐
【发布时间】:2009-06-25 07:51:59
【问题描述】:

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

还有可以保存波段的调整吗?

【问题讨论】:

    标签: delphi


    【解决方案1】:

    如果您设置每个波段的 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

    【讨论】:

    • AutoSize 和 MinWidth 已经设置好,它会相应地包裹 Bands。但是当新行开始时,新行中的 Band 会与右侧对齐。这看起来有点奇怪。
    • 我没看到。乐队为我填满了整行。如果我对乐队的控制设置一个约束,乐队就会向左移动。即使将双向模式设置为从右到左,我也无法让它向右挂起。或许您可以告诉我们更多关于乐队、酷栏和表格的设置?我正在运行 Window XP SP 3。也许是 Windows 版本的东西?或者也许有一个空乐队正在占用
    • 另外,您对我关于恢复状态的回答满意吗?
    • 感谢您的回答。我认为会有一种更简单的方法来保存/加载状态:(关于 CoolBand 对齐。当乐队移动到下一行时。对齐是好的(左),但当前行中的最后一个乐队,然后移动到右侧(右对齐)。这让我想知道。顺便说一句:现在我使用 TToolBar 控件。当窗体调整大小时,该栏会按预期对齐控件。谢谢
    • 好的,我当时误解了对齐问题。 Coolbar AFAIK 尝试始终填充控件的宽度,因此您的最后一个乐队会伸展以占用空间。我在我的乐队上使用编辑框进行了测试,它们总是拉伸以弥补空间。将 MaxWidth 约束添加到编辑框我得到了你的问题。我的建议是将您的 MinWidth 设置为您需要的任何值,但让 CoolBar 确定最大宽度。
    猜你喜欢
    • 2013-01-30
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2012-02-22
    相关资源
    最近更新 更多