Delphi10控件Style自定义注意点

StyledSettings属性,除常用Family、Size、Style等设置外,修改其它项目注意将Other项设置为True。否则,某些自定义属性无效。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要将另一个窗口嵌入到 Delphi XE5 的控件中,可以使用 TPanel 控件和 WinAPI 函数 SetParent。 下面是一个简单的示例,假设你有一个 TForm1,里面有一个 TPanel 组件名为 Panel1。你想要将另一个窗口嵌入到 Panel1 中。 1. 首先,你需要获取要嵌入的窗口的句柄(handle)。可以使用 FindWindow 或 FindWindowEx 函数来查找窗口句柄。比如,假设你要嵌入的窗口的标题为 "My Window",可以使用以下代码查找它的句柄: ``` var hWnd: HWND; begin hWnd := FindWindow(nil, 'My Window'); if hWnd = 0 then begin ShowMessage('Window not found'); Exit; end; ``` 2. 找到窗口句柄后,可以将它的父窗口设置为 Panel1。这样,窗口就会成为 Panel1 的子窗口,从而被嵌入到 Panel1 中。可以使用 WinAPI 函数 SetParent 来设置父窗口。以下是一个示例: ``` begin SetParent(hWnd, Panel1.Handle); end; ``` 3. 如果你想要在窗口嵌入 Panel1 后,让它的大小自适应 Panel1 的大小,可以在 Panel1 的 OnResize 事件中设置窗口的大小。例如: ``` procedure TForm1.Panel1Resize(Sender: TObject); begin SetWindowPos(hWnd, 0, 0, 0, Panel1.Width, Panel1.Height, SWP_NOZORDER or SWP_NOACTIVATE); end; ``` 这样,当 Panel1 的大小改变时,嵌入的窗口的大小也会跟着改变。 请注意,将另一个窗口嵌入到 Delphi XE5 的控件中需要小心处理。一些窗口可能不支持成为其他窗口的子窗口,或者可能会有一些不可预知的问题。在实际应用中,你需要对特定的窗口进行测试和验证。 ### 回答2: 在Delphi XE5中,可以使用TFrame组件来实现将别的窗口嵌入到控件中的功能。 1. 首先,在Delphi XE5的窗体设计器中创建一个新的TFrame组件,并将其放置在要嵌入其他窗口的控件上(如Panel、GroupBox等)。 2. 在需要嵌入的窗口上右键单击,在弹出菜单中选择“创建新单位”来创建一个新的窗口。 3. 在新创建的窗口上设计所需的用户界面及功能。 4. 在嵌入窗口所在的窗体上的Events视图中,找到要将嵌入窗口关联到TFrame的事件。 5. 在相关的事件中添加以下代码: ```delphi var Frame: TFrame; begin Frame := TFrame.Create(Self); // 创建一个TFrame对象 Frame.Parent := Panel1; // 设置TFrame的父控件为Panel1 Frame.Align := alClient; // 使TFrame铺满父控件 Frame.BorderStyle := bsNone; // 设置TFrame的边框样式为空 Frame.Visible := True; // 设置TFrame可见 EmbedForm(Handle, Frame.Handle); // 将窗体嵌入到TFrame中 end; ``` 6. 上述代码中的EmbedForm是自定义函数,用于将窗体嵌入到TFrame中,其实现如下: ```delphi procedure EmbedForm(AFormHandle, AFrameHandle: THandle); begin SetWindowLong(AFormHandle, GWL_STYLE, GetWindowLong(AFormHandle, GWL_STYLE) and not WS_CAPTION); SetParent(AFormHandle, AFrameHandle); SendMessage(AFormHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0); end; ``` 通过以上步骤,在Delphi XE5中就可以将其他窗口嵌入到控件中了。记得在不需要时及时释放窗体和TFrame对象的资源。 ### 回答3: 在Delphi XE5中,可以使用TPanel控件来实现将其他窗口嵌入到控件里面的功能。下面是一种示例的方法: 1. 创建一个新的Delphi VCL Forms应用程序项目。 2. 在主窗体中放置一个TPanel控件。可以在主窗体的设计视图中,从工具箱中拖拽一个TPanel控件到主窗体上。 3. 在主窗体的OnCreate事件处理程序中,使用Applicaton.Handle属性来获取当前应用程序的句柄。 例如: ``` procedure TForm1.FormCreate(Sender: TObject); begin Panel1.HandleNeeded; // 确保Panel1的句柄已经创建 SetWindowLong(Panel1.Handle, GWL_STYLE, WS_CHILD or WS_VISIBLE); SetParent(Panel1.Handle, Application.Handle); SetWindowPos(Panel1.Handle, 0, 0, 0, Panel1.Width, Panel1.Height, SWP_NOZORDER or SWP_SHOWWINDOW); end; ``` 以上代码将创建一个子窗口,并将其嵌入到Panel1控件中。具体实现过程如下: - 首先,通过SetWindowLong函数,修改Panel1的风格为WS_CHILD和WS_VISIBLE。这样做是为了将Panel1设置为一个子窗口,并使其可见。 - 然后,使用SetParent函数,将Panel1的句柄设置为当前应用程序的句柄,使其成为主窗口的子窗口。 - 最后,通过SetWindowPos函数,设置Panel1的位置和大小,并使用SWP_NOZORDER和SWP_SHOWWINDOW参数来保持其在Z轴方向上的顺序,并显示子窗口。 通过这样的处理,你可以将其他窗口(如另一个应用程序的主窗口)嵌入到Panel1控件中,并与主窗体一起显示和操作。请注意,你需要提前获取其他窗口的句柄,并在代码中将其设置为Panel1的子窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值