首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在最大化丢失赋值之前动态地分配表单大小

在最大化丢失赋值之前动态地分配表单大小
EN

Stack Overflow用户
提问于 2020-06-26 15:05:29
回答 3查看 807关注 0票数 3

我有一个应用程序,它总是一开始就开始最大化。这包括将Self.WindowState := wsMaximized;放入主表单的OnCreate中。

在此之前,如果用户要将窗口状态更改为wsNormal,我将指定主窗体的默认维度。

因此,简而言之,主表单的OnCreate处理程序看起来如下所示:

代码语言:javascript
运行
AI代码解释
复制
procedure TfrmMain.FormCreate(Sender: TObject);
begin
  Width:= 1300;
  Height:= 800;
  WindowState:= wsMaximized;
end;

从理论上讲,我可以在设计时分配这些维度,这可以满足我的需要。但是,由于我的屏幕的大小,以及IDE,整个表单在没有滚动的情况下是看不见的。在设计中,我把表单大小保持在很小的范围内,这样我就能看到所有的东西。但是在运行时,我需要分配这些默认维度,然后在默认情况下最大化它。当用户将窗口状态更改为最大化时,我希望它进入我动态分配的维度。

问题是,它似乎失去了这些维度后,最大化的形式,并恢复到任何价值在设计时。如果我注释掉行WindowState:= wsMaximized;,那么它将以所需的默认维度显示表单。然而,最大化它似乎覆盖和忽略了我之前分配的这些值。

如何在默认情况下最大限度地创建和显示我的主表单,同时动态地分配默认大小,而不丢失已分配的值?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-27 05:56:31

(确认为10.3.3.)这个问题的确切原因我无法确定,但一个合理的原因是,在构造函数期间,正在读取表单组件,并且似乎显式地备份了以前的大小:

代码语言:javascript
运行
AI代码解释
复制
procedure TControl.SetWidth(Value: Integer);
begin
  SetBounds(FLeft, FTop, Value, FHeight);
  Include(FScalingFlags, sfWidth);
  if csReading in ComponentState then
    FExplicitWidth := FWidth;
end;

一种可能的解决方案是在OnCreate事件中设置所需的大小,就像您现在所做的那样,但是将设置所需的WindowsState推迟到OnShow事件之后。

代码语言:javascript
运行
AI代码解释
复制
procedure TForm1.FormCreate(Sender: TObject);
begin
  Width := 1300;
  Height := 800;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  WindowState := wsMaximized;
end;

当然,您可能应该使用一次性机制来防止连续调用。请你也看看wsMaximized窗体未显示为最大化

票数 5
EN

Stack Overflow用户

发布于 2020-06-29 10:31:22

显然,VCL并不存储显式的中间大小(无论如何在一些Delphi版本中),而是在实际显示表单时将更改与最大化的更改合并起来。

正如谢尔塔克·阿尤兹非常正确的建议,您可以使用SetWindowPlacement绕过这种VCL干扰:

代码语言:javascript
运行
AI代码解释
复制
procedure TForm1.FormCreate(Sender: TObject);
var
  WindowPlacement: TWindowPlacement;
begin
  GetWindowPlacement(Handle, WindowPlacement);
  WindowPlacement.rcNormalPosition := Bounds(Left, Top, 1300, 800);
  WindowPlacement.showCmd := SW_SHOWMAXIMIZED;
  SetWindowPlacement(Handle, WindowPlacement);
end;
票数 3
EN

Stack Overflow用户

发布于 2020-06-26 23:44:54

必须在FormActivate上设置窗体大小:

代码语言:javascript
运行
AI代码解释
复制
procedure TfrmMain.FormActivate(Sender: TObject);
begin
  if Tag = 0 then
  begin
    // Top := 100;
    // Left := 100;
    Width:= 1300;
    Height:= 800;
    WindowState:= wsMaximized;
    Tag := 1;
  end;
end;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62604026

复制
相关文章
数组大小分配(动态内存分配)
在很多情况下,我们无法确定要使用多大的数组。一般申请大于估计数目的固定大小,这样程序在运行时就申请了固定的大小,你觉得数组定义足够大,但是如果某种原因,数组的个数增大或减小,你又必须重新修改程序,扩大数组的存储范围。这种分配固定大小内存分配的方法称为静态内存分配。但是这种分配方法存在比较严重的缺陷,特别是处理某些问题时,在大多数情况下会浪费大量的内存空间;在少数情况下,当申请的数组不够大时,可能引起下标越界错误,甚至导致严重的后果。 为了解决这个问题,提出了动态内存分配。所谓动态内存分配是指在程序执行的过程中动态地分配或者回收存储空间的内存分配方法。动态分配不像数组等静态内存分配方法需要预先申请内存空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。从以上动、静态内存分配比较可以知道动态内存分配相对于静态内存分配的特点:
海盗船长
2020/08/27
2.6K0
bootstrap 表单控件大小
<form role="form"> <div class="form-group"> <input class="form-control input-lg" type="text" placeholder=".input-lg"> </div> <div class="form-group"> <input class="form-control" type="text" placeholder="默认输入"> </div> <div class="form-group"> <input class="form-control input-sm" type="text" placeholder=".input-sm"> </div> <div class="form-group"></div> <div class="form-group"> <select class="form-control input-lg"> <option value="">.input-lg</option> </select> </div> <div class="form-group"> <select class="form-control"> <option value="">默认选择</option> </select> </div> <div class="form-group"> <select class="form-control input-sm"> <option value="">.input-sm</option> </select> </div> <div class="row"> <div class="col-lg-2"> <input type="text" class="form-control" placeholder=".col-lg-2"> </div> <div class="col-lg-3"> <input type="text" class="form-control" placeholder=".col-lg-3"> </div> <div class="col-lg-4"> <input type="text" class="form-control" placeholder=".col-lg-4"> </div> </div> </form>
用户5760343
2019/07/07
1.2K0
JS阻止表单submit提交(在提交之前做验证及判断)
在工作中遇到表单提交之前,需要验证用户输入的是否为空,之前使用ajax做提交,在js里面直接做判断,如果用户输入为空则弹出提示框(起初默认是隐藏的,非alert弹出框),让用户重新输入,当输入框获取焦点的时候,弹出的提示框隐藏。
浩Coding
2019/07/12
13.8K0
CA2000:丢失范围之前释放对象
创建了 IDisposable 类型的本地对象,但该对象不会被释放,除非对对象的所有引用都超出范围。
呆呆
2022/02/26
9070
Qt中关闭窗口最大化按钮,固定大小
作者:admin,发布日期:2017-02-20 阅读:164;评论:0 效果 image.png 代码: w.setWindowFlags(Qt::WindowCloseButtonHint|Qt::WindowMinimizeButtonHint); 固定大小只要修改以下两条属性即可 image.png
繁花云
2018/07/31
2.4K0
Qt中关闭窗口最大化按钮,固定大小
调整分区大小后分区丢失的数据
盘符不见是比较常见的数据恢复案例,需要注意,盘符不见后不要再重建新的分区。保护好文件丢失现场,可以最大程度的恢复出文件。具体的恢复方法看正文了解。
用户10127983
2023/04/09
1.8K0
JavaScript大小比较 赋值运算符详解
比较运算中的操作数可以是任意类型的值,但是在执行运算时,会被转换为数字或字符串,然后再进行比较。如果是数字,则比较大小;如果是字符串,则根据字符编码表中的编号值从左到右逐个比较每个字符。
用户3519280
2023/07/07
6270
Confluence 6 在升级之前
在这个指南中,我们将会与你一同对最新的 Confluence 站点在 Windows 或者 Linux 平台进行安装和更新。
HoneyMoose
2019/04/20
6320
Confluence 6 在升级之前
离开页面前,如何防止表单数据丢失?
本文介绍了如何实现一个FormPrompt组件,在用户尝试离开具有未保存更改的页面时发出警告。文章讨论了如何使用纯JavaScript和beforeunload事件处理这类情况,以及使用React Router v5中的Prompt组件和useBeforeUnload以及unstable等React特定解决方案。向用户添加一个确认对话框,询问他们在具有未保存表单更改的情况下是否确认重定向是一种良好的用户体验实践。通过显示此提示,用户将意识到他们有未保存的更改,并允许在继续重定向之前保存或丢弃它们的工作。
前端小智@大迁世界
2023/05/02
6K0
【C 语言】指针间接赋值 ( 直接赋值 和 间接赋值 | 在子函数中间接赋值 )
在 函数体 内部 , 声明普通变量 , 如果 获取该变量的地址 , 将该 地址 传递给 函数形参 , 在外部函数中 , 通过指针地址 , 修改内存中的数据 ;
韩曙亮
2023/03/29
4K0
【C 语言】指针间接赋值 ( 直接赋值 和 间接赋值 | 在子函数中间接赋值 )
[BCG]使属性页表单实现最大化最小化按钮1[可拖拽]
原文链接:http://blog.csdn.net/humanking7/article/details/52598085
祥知道
2020/03/10
7860
Confluence 6 在升级之前 原
在这个指南中,我们将会与你一同对最新的 Confluence 站点在 Windows 或者 Linux 平台进行安装和更新。
HoneyMoose
2019/04/29
5300
Confluence 6 在升级之前
                                                                            原
Netty入门之消息边界处理以及ByteBuffer大小分配
以上三篇内容主要讲了NIO的三大组件、ByteBuffer、文件编程、阻塞、非阻塞、 Selector等,需要了解像详情的请移步查看。
@派大星
2023/06/28
2390
Netty入门之消息边界处理以及ByteBuffer大小分配
在Linux系统中设置动态地址进行网络访问
在 Linux 系统中,配置动态地址可以帮助我们实现更安全、匿名或绕过某些限制的网络访问。本文将介绍几种常用的方法来配置和使用代理服务器,在 Linux 环境下轻松实现高效且可靠地通过HTTP进行网络访问。
华科云商小徐
2023/08/30
3800
Spark高级面试问题join丢失节点、parquet大小
千万数据的join或者reduce过程中总是有任务节点丢失的情况? 田毅:这个是经常出现的问题,最常见原因还是GC导致的长时间卡住,导致心跳超时。可以参考intel他们最近在summit上分享的GC调优方面的实践。GC问题在1.4版本中已经得到改善,比如大量数据查重。 Spark生成parquet格式一般建议每个parquet多大? 田毅:这个我的建议是别弄太大,数据(压缩前)最好别超过128M,这个数不是绝对的,要看你的列数和压缩比。 阎志涛:我们的都在几百兆,parquet主要还是看你读取出多少列来。如
Albert陈凯
2018/04/04
1.3K0
Consul初探-在深交之前先认识
首先,官方介绍是:Consul 是一种服务网格的解决方案,在 Consul 中,提供了服务发现、配置、分段等控制管理平台,Consul 中的每项功能都可以单独使用,也可以一起使用来构建完整的服务网格;在 Consul 内部,有一个简单的代理服务,所以在安装 Consul 后,马上就可以开始使用 Consul ;当然,Consul 也支持集成第三方代理,比如 Envoy。
梁规晓
2019/07/09
5230
Consul初探-在深交之前先认识
java——推断日期是否在今天之前
这里说的日期是指字符串的日期格式,如“2014-10-15”,我们要推断这个日期是否在今天之前,网上看到好多推断的方法,都是拿这个日期转换成Date对象 然后与new Date()比較,使用comparetTo() 或者before()方法,事实上这样做都会有点小问题,这样做忽略了一个小时分钟的比較,会出现错误,得不到正确的结果。
全栈程序员站长
2022/07/08
2.1K0
sqlmap 源码分析(三)在注入之前
sqlmap是web狗永远也绕不过去的神器,为了能自由的使用sqlmap,阅读源码还是有必要的…
LoRexxar
2023/02/21
1.6K0
MCU在执行main之前做了什么?
本文以Arm Cortex-M为例,介绍了在IAR Embedded Workbench中微控制器(MCU)的启动过程。在MCU复位后,程序计数器(PC)会指向相应的复位向量,并开始执行启动代码(startup code)。如果MCU支持浮点单元(FPU),则在启动过程中,首先会调用__iar_init_vfp来初始化FPU,然后继续执行__iar_program_start。接着,__iar_program_start会调用__cmain函数。在__cmain中,会先调用__low_level_init函数,然后调用__iar_data_init3来进行全局和静态变量的初始化。在__iar_data_init3中,首先会调用__iar_zero_init3来初始化初始值为0的全局和静态变量,随后会调用__iar_copy_init3来初始化初始值为非0的全局和静态变量。最终,在启动过程的最后阶段,会通过调用__call_main来跳转到main函数,从而开始执行主程序。
刘盼
2023/08/22
9810
MCU在执行main之前做了什么?
Linux 查看CPU核心数、内存大小和硬盘分配
1、Linux 查看CPU核心数 cat /proc/cpuinfo | grep "model name" && cat /proc/cpuinfo | grep "physical id" 2、 
静谧星空TEL
2021/04/27
10.4K0
Linux 查看CPU核心数、内存大小和硬盘分配

相似问题

Django表单集:在保存表单/数据之前赋值

10

在最大化窗口大小之前,JFrame不会更新

130

表单大小最大化不断增加

10

不最大化表单的大小

13

对象在执行赋值之前分配操作对象。多么?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档