【问题标题】:How do I tile MDI children and maintain BorderStyle = bsNone?如何平铺 MDI 子级并保持 BorderStyle = bsNone?
【发布时间】:2015-04-11 08:49:15
【问题描述】:

希望有人能帮忙

我创建了一个具有表单的对象。我在运行时实例化这个对象。然后,用户可以通过菜单步骤实例化第二个(或多个)对象。所以两个子表单现在存在于一个父表单中。每个对象表单的 BorderStyle 设置为 none,Style 在运行时创建表单时设置为 MDIChild:

BorderStyle := bsNone;
FormStyle := fsMDIChild;

一切都好。表单没有边框。

现在我想平铺创建的两个表单。菜单 > 点击平铺

procedure TMainForm.Tile1Click(Sender: TObject);
begin
     Tile;
end;

现在边界重新出现。 我需要一种摆脱边界的方法。

我已尝试逐步浏览对象集合并将 BorderStyle 显式设置为无:

procedure TMainForm.Tile1Click(Sender: TObject);
var
i: byte;
begin
    Tile;
    for i := 0 to GraphCollection.Count-1 do
        (GraphCollection.Items[i] as TGraphForm).BorderStyle := bsNone;
end;

这不起作用。

有没有人在 Tile 或 Cascade 之后保留 bsNone 样式的解决方法。

【问题讨论】:

  • The documentation 表示将 BorderStyle 更改为 bsNone 对 MDI 子级没有影响。也许这就是你在这里看到的。几个搜索结果提到覆盖CreateParams;你试过吗?
  • 什么是“graphcollection”? “Tile1Click”中的代码不应该是'for i:= 0 to MDIChildCount - 1 do if MDIChildren[i] is TGraphForm then TGraphForm (MDIChildren[i]).BorderStyle:= bsNone;' ?
  • MDI 对你能做的事情有很大的限制。预计这是不可能的。想办法在没有 mdi 的情况下做到这一点。
  • 罗布。感谢cmets。当我平铺时,边框样式从 bsNone 更改为 bsSizeable。我想在耕种后保留 bsNone 风格。我已经尝试过 CreateParams 选项。没有快乐。
  • 不。 Graphcollection 是创建的表单的 TObjectList。我已经尝试了这两种选择(根据我的帖子,类似于你所建议的)。没有快乐

标签: delphi mdi mdichild


【解决方案1】:

您可以通过其他方式做到这一点。我使用 Tabset(TTabSet 类)执行此操作,而不使用 fsMDIChild(但 BorderStyle = bsNone)。

您可以为在 TabSet 上打开的每个表单添加一个选项卡。通过单击任何选项卡,您可以激活或显示适当的表单。并通过关闭它来删除任何表单的相应选项卡。我准备了一个例子,你可以从here获取。

【讨论】:

  • 如何模拟平铺效果?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
相关资源
最近更新 更多