GormTabsBar 待完成

news/2025/3/4 14:45:04/文章来源:https://www.cnblogs.com/feng88/p/18746673

前言

RAD Studio Athens 12.0 添加了一个新的 FormTabsBar 控件,作为通用且即用型的解决方案,用于在现代选项卡状用户界面中托管多个子表单,是在 VCL 中创建全新应用程序的一种方式。

这句话是官方的介绍,您应该知道,随着程序的功能日渐增多,传统的界面无论怎么设计都已经无法满足,继续新增的功能,以至于 现在流行一种 新的程序界面的设计方式,左侧导航、右侧 tab 选项卡,类似浏览器,这种界面将是以后 通用 功能繁多 软件的主流设计;

如下图:

image

那么说下问题:

问题1:与浏览器看着一样,实际一样吗??

浏览器 是多进程的,一个选项卡 一个进程,而delphi 不是多进程,还是在一个进程里,我们先看下浏览器:

image

浏览器面对的是 各种第三方 别人开发的网站,web技术日新月异的迭代,各种漏洞层出不穷,浏览器面对的外部环境不可控,很糟糕,设计成这种多进程的模式,主要是为了确保稳定性,你打开了一个选项卡进入了一个网站,若这个网站利用了漏洞,或死循环,您可以立即关闭掉这个选项卡,然后浏览器整体还能正常运行,多进程的优势就是 在复杂,糟糕的外部环境下,依然能稳定运行,劣势就是实现起来复杂,性能低下,浏览器这种技术 在 移动端是很难 火起来的,因为性能慢,臃肿 浪费电,若是PC端,电能是源源不断的,而移动端 电不给力,移动端 在未来 很长一段时间 都会流行 APP,而不是 web 技术;

我们自己开发的软件也要多进程吗???

完全没有必要,浏览器 之所以多进程,是被逼无奈的,外部环境 太复杂,太糟糕,完全不可控,就好比你不知道,哪个美女广告,你点开后,进入了一个利用浏览器漏洞,放马的网站,你不知道用户会打开什么网址;而我们自己开发的软件,每一个form都是我们自己设计开发的,完全可控,每一个form就相当于 一个网址,外部环境很好,没有必要 去搞多进程,多进程会 大幅度牺牲性能、带来复杂度、降低可维护性,仅仅是被逼无奈为了那么一点稳定性;微信小程序,也是没有采用多进程的模式,为什么呢,因为小程序需要上架 会被审核,也会被定期扫描,会被直接下架,小程序是被微信官方完全控制的,就好比 你能在浏览器上打开的网址是被完全控制的,还担心什么呢,不需要担心别人放马;浏览器的多进程模式 完全是因为外部不可控的 无奈之举;

问题2:若一个选项卡里的代码正在运行,关闭了这个选项卡怎么办?

比如 你打开一个选项卡 form1,里面有一个按钮 ,这个按钮的 onclick事件里 写上 发送 100个http请求,然后把响应结果展示在form1的ui界面上,结果发送到第33个时候,用户关闭了这个选项卡,form1.free,form1被释放了,那么第34个http请求响应的内容 去在ui上展示的时候,就会面临 Access Violation 错误,form1内存已经被释放!!就这么一个简单的 例子,你就会发现 代码执行的过程中,用户关闭选项卡带来的糟糕;

解决方法 就是 要在这个 form1里 使用协程,比如 这100个http请求,你有多种写法,举例:

go.bg(一个协程A).scope(form1).start,这个协程的作用域设置为 form1,然后 协程A里衍生 100个子协程,每个子协程不需要设置 作用域了,每个子协程就是简单的发送 http请求了,这个 form1关闭时 协程A,及其下面挂载的 100个http请求都会被连带关闭;很简单吧,协程的威力就体现出来了;当然你也可以不生成协程A,而是直接生成100个协程,每个协程都给其设置作用域到 form1上,也是没有问题的,只是没有必要每个协程都去设置作用域;

实例

以上面的问题2,做个实例吧:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/892352.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net 异步与同步

namespace demoSp;class Program {static void Main(string[] args){threadpl();}public static void threadpl(){Console.WriteLine("Async Test job:");Console.WriteLine("main start..");AsyncMethod(); Console.WriteLine("MyMethod()异步方法同…

Hackthebox Season 赛季靶场TitanicWP随笔

一个比较简单的赛季靶场,就是服务器十分不稳定,打起来经常抽风,curl和ping都不通,有点磨人心态 一、信息收集 先nmap扫描一下ip吧,输入nmap -sV -sC 10.10.11.55 -Pn 可以看到需要自行前往hosts中添加10.10.11.55 titanic.htb后才能访问网页,添加后使用whatweb跑一下,看看…

Qt图形连线功能升级:支持多拐点和颜色区分

本文在Qt图形框架中扩展了连线功能,实现了给连线添加多个拐点并使用不同颜色绘制的效果。该实现优化了连线的可视化效果,提升了代码可扩展性,为复杂图形编辑工具的开发提供了参考。摘要:本文在Qt图形框架中扩展了连线功能,实现了给连线添加多个拐点并使用不同颜色绘制的效…

《历史代码分析》1、接口安全校验-拦截器的使用

1、接口安全校验-拦截器的使用 ​​ 本系列《历史代码分析》为工作中遇到具有代表性的代码,已做脱敏处理。今天我们讲一下接口安全检验,使用到Spring中的拦截器。 请先看下面代码: package tech.xueyao.filter.interceptor;import tech.xueyao.contant.properties.SystemPro…

Anaconda安装指南(conda 不是内部或外部命令,也不是可运行的程序 或批处理文件)

原文链接:https://zhuanlan.zhihu.com/p/101434455 第一步:附上软件下载链接,自行下载 以下是Anaconda的下载链接及相关信息: 官方下载链接Anaconda官网下载地址:https://www.anaconda.com/products/distribution。Anaconda中文官网下载地址:https://www.anacondacn.com/…

docker-compose本地部署前后端分离的项目

本文使用docker-compose进行容器化部署前后端分离的项目(前端vue、后端springboot),部署的虚拟机是centOS系统1.准备打包项目 使用maven打包springboot项目为.jar文件得到springboot-0.0.1-SNAPSHOT.jar打包vue项目 npm install -g @vue/cli安装Vue CLI 在项目根目录下,运行…

使用云效实现流水线部署前后端分离的项目

使用云效实现流水线部署前后端分离的项目1.流水线远程自动化部署 1.1核心代码准备 使用git add .,git commit,git push将本地部署项目中的文档上传到远端仓库(新建的docker12)代码已上传成功修改Dockerfile有关镜像部分,使用阿里云容器镜像服务制品中心的base镜像。 jdk镜…

2.1 TCP/IP网络模型

不同设备的进程间通信,需要网络通信。 又设备多样,需要兼容,协商出来了网络协议。 应用层:专注为用户提供应用功能,如HTTP、FTP、Telnet、DNS等 工作在 用户态。 传输层:为应用层提供网络支持。(数据传输媒介) 传输协议:TCP和UDP。 网络层:实际的传输功能。 常用IP协…

关于flex布局

1.flex初探 简单示例 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title><style>.menu {border: 1px solid red;width: 500px;display: flex;}.menu .item{width: 45px;heigh…

构建窗体--java进阶day03

1.窗体对象Jframe 要创建窗体就需要Jframe对象,窗体创建好不会自己显示,还需要我们自己写一段代码让其显示2.设置窗体可见--setVisible(true) 该方法用于显示窗体3.窗体大小调节--setSize() 该方法用于调节窗体的大小,如下图宽(左到右)500,长(上到下)8004.修改窗体…

私藏!程序员必备的 6 款画图工具,工作效率直线飙升!

宝子们,日常工作里,画图可是个高频需求,不管是梳理思路、设计架构,还是给团队讲解方案,都离不开各种图形。今天我就把私藏多年的6款画图工具分享给大家,每一款都超实用,能帮咱高效搞定各类图形绘制工作! 一、Draw.io:功能强大的绘图宝藏 Draw.io堪称免费绘图工具里的…

[Webpack] 打包优化 一

代码准备 由于需要演示webpack的一些优化处理,因此代码提前做了一些处理,引入了vue-router路由,创建了几个view页面 引入了element-plus,axios,echarts,vue-echarts,@vueuse等组件丰富页面展示 引入了unplugin-vue-components,unplugin-auto-import等处理element-plus的…