CSDN-Ada助手 2024-05-09 15:24 采纳率: 1.6%
浏览 13

关于#javascript#的问题:加两个Page界面,再一个page里面点击按钮,弹出一个窗体用于新增数据,可以让弹出窗体绑定再子界面上,并还有阴影和圆角的效果

该问题来自社区帖: https://bbs.csdn.net/topics/618646863.为符合问答规范, 该问题经过ChatGPT优化
<html><body>

Delphi的弹出窗体问题

系统是一个主界面,加两个Page界面,再一个page里面点击按钮,弹出一个窗体用于新增数据,用什么方案,可以让弹出窗体绑定再子界面上,并还有阴影和圆角的效果

example1

我测试的方案

procedure TFrame2.Button1Click(Sender: TObject);
var f:TForm4;
begin
  f := TForm4.Create(self);
  f.Name := 'U2';
  f.ParentWindow := Self.Handle;
  f.Show;
end;

这样弹出的窗体是绑定到了子界面上,但是阴影效果没有了

如果用ShowModal,主界面就全部无法操作了,还不能绑定到子界面里面

example2

我要的是这样的效果,周边是有阴影的,达到一个悬浮的效果

desired effect </body></html>
  • 写回答

5条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-05-09 15:25
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述: Delphi中如何让弹出窗体绑定到子界面上,并实现阴影和圆角的效果? 解决方案: 首先,我们可以使用以下代码实现将弹出窗体绑定在子界面上:
    procedure TFrame2.Button1Click(Sender: TObject);
    var 
      f: TForm4;
    begin  
      f := TForm4.Create(Self);
      f.Name := 'U2';
      f.ParentWindow := Self.Handle;
      f.Show;
    end;
    

    这段代码的关键是设置 ParentWindow 属性,将弹出窗体的父级设置为子界面,这样就可以实现弹出窗体绑定到子界面上。 但是,这样做并未实现阴影和圆角的效果。要想实现这些效果,我们可以使用 TPngImageList 组件和第三方组件 ShadowWindow。 首先,我们需要创建一个 TPngImageList 组件来存储阴影图像。在组件上添加需要用到的阴影图像,例如 shadow-top-left, shadow-top, shadow-top-right, shadow-right, shadow-bottom-right, shadow-bottom, shadow-bottom-leftshadow-left。为了使阴影效果更加明显,建议选择亮色的阴影图像。 然后,我们需要安装 ShadowWindow 组件。该组件可从以下网站下载:https://github.com/RRUZ/vcl-styles-utils/tree/master/ShadowWindow 安装之后,我们可以使用以下代码实现弹出窗体的阴影和圆角效果:

    uses
      ShadowWindow;
    procedure TFrame2.Button1Click(Sender: TObject);
    var 
      f: TForm4;
      shadow: TShadowWindow;
      P: TPoint;
    begin  
      f := TForm4.Create(Self);
      f.Name := 'U2';
      
      // 获取弹出窗口的位置,并计算适当的阴影大小
      P := Point(Self.Left, Self.Top + Self.Height);
      shadow := TShadowWindow.Create(f);
      shadow.ImageList := pngImageList1;
      shadow.HorzSize := 40; // 阴影宽度(向左和向右)
      shadow.VertSize := 20; // 阴影高度(向下)
      shadow.ShadowSide := sdAll;
      shadow.SetBounds(P.X, P.Y, f.Width, f.Height);
      shadow.ParentWindow := Self.Handle;
      shadow.Visible := True;
      
      f.ParentWindow := Shadow.Handle; // 将弹出窗体的父窗口设置为阴影窗口
      f.BorderStyle := bsNone;
      
      f.Show;
    end;
    

    这段代码的关键是创建一个 TShadowWindow 组件,并将其作为弹出窗体 f 的父级窗口。然后,我们使用 TPngImageList 组件设置阴影图像,并设置阴影大小和阴影方向等参数,从而实现阴影效果。最后,将弹出窗体 f 的边框样式设置为 bsNone,这样就可以实现圆角效果。 注意事项: 1. TPngImageList 组件是 Delphi XE2 版本之后才提供的,如果使用较早版本的 Delphi,可能需要手动处理图像透明度,以实现阴影效果。 2. ShadowWindow 组件仅适用于 Windows 系统。 示例代码见下方:

    评论

报告相同问题?

问题事件

  • 专家修改了标签 5月11日
  • 创建了问题 5月9日