BS版图形系统 - 界面控件配置

UI设计案例,B端后台界面设计教程 股”字号为163、使用圆形工具(O)绘制一个圆,并设置属性:渐变 #5CFF92— #37D9FA,投影:#00D5FF、不透明度45%0、2、8、0,并继续绘制一个小圆,填充白色。1、画板工具(F)绘制一个250^334px的画板,使用文字工具输入文字,属性:思源黑体、粗体、16字号、#25396F并使用 IconPark 插件,搜索“更多”图标,放置在画板中。1、使用画板工具(F)绘制一个1075^64px的画板,使用文字工具输入相应的文字,文字属性:思源黑体、中等、14字号、#25396F。 阅读详情

QQ: 282397369

界面控件考虑

有了属性浏览器,下来就该处理工具栏了。
一个直观感觉,网页留给程序的空间,要比应用程序少。网页在浏览器这个程序中运行,不同的浏览器,提供相应的界面,占据标题、工具栏位置,甚至书签与侧栏。所以做网页程序的时候,尽量能将工作区整大一些。在这里插入图片描述
当然,如何整应该是UI设计的事,技术层面还是关心如何实现的问题。
在属性浏览器的基础上,初步实现了一个VCL的JS框架。但新建控件,还是要写一堆代码来控制新控件的各个属性,比如创建一个ScrollBox

        this.choosePanel = new TScrollBox(this);
        this.choosePanel.Name = "choosePanel";
        this.choosePanel.horzScrollBar.Visible = false;  // 水平滚动条不可见
        this.choosePanel.AddEvent(NControlEvent.OnKillFocus, this.closeChoosePanel, this); // 失去焦点即消失
        this.choosePanel.AddEvent(NControlEvent.OnChange, this.onListPanelChange, this); // 选择新的目标项
        this.choosePanel.Visible = false;   // 先不显示,需要时再弹出显示,并确定其显示区域

觉得在点烦。

资源配置化

那就通过资源来配置界面,感觉应该可以。用XML习惯了,那就用XML来实现。
从使用倒推,应该先写XML配置

XML资源配置

<?xml version='1.0' encoding='gb2312' ?>
<xml desc="UI Control Config by DrGraph">
	<TPanel name="ToolPanel" autoArrange="true" >
		<TButton name="btnOpen" Width="40" Height="40" Transparent="true" onClick="true" icon="icon/close.png" Tag="1" Hint="测试按钮" />
		<TButton name="btnOpen1" Width="40" Height="40" Transparent="true" onClick="true" icon="icon/close.png" Tag="1" Hint="测试按钮1" />
		<TButton name="btnOpen2" Width="40" Height="40" Transparent="true" onClick="true" icon="icon/close.png" Tag="1" Hint="测试按钮2" />
		<TButton name="btnOpen3" Width="40" Height="40" Transparent="true" onClick="true" icon="icon/close.png" Tag="1" Hint="测试按钮3" />
		<TButton name="btnOpen4" Width="40" Height="40" Transparent="true" onClick="true" icon="icon/close.png" Tag="1" Hint="测试按钮4" />
		<TButton name="btnOpen5" Width="40" Height="40" Transparent="true" onClick="true" icon="icon/close.png" Tag="1" Hint="测试按钮5" />
		<TButton name="btnOpen6" Width="40" Height="40" Transparent="true" onClick="true" icon="icon/close.png" Tag="1" Hint="测试按钮6" />
		<TButton name="btnOpen7" Width="40" Height="40" Transparent="true" onClick="true" icon="icon/close.png" Tag="1" Hint="测试按钮" />
		<TButton name="btnOpen8" Width="40" Height="40" Transparent="true" onClick="true" icon="icon/close.png" Tag="1" Hint="测试按钮1" />
		<TButton name="btnOpen9" Width="40" Height="40" Transparent="true" onClick="true" icon="icon/close.png" Tag="1" Hint="测试按钮2" />
		<TButton name="btnOpen10" Width="40" Height="40" Transparent="true" onClick="true" icon="icon/close.png" Tag="1" Hint="测试按钮3" />
		<TButton name="btnOpen11" Width="40" Height="40" Transparent="true" onClick="true" icon="icon/close.png" Tag="1" Hint="测试按钮4" />
		<TButton name="btnOpen12" Width="40" Height="40" Transparent="true" onClick="true" icon="icon/close.png" Tag="1" Hint="测试按钮5" />
		<TButton name="btnOpen13" Width="40" Height="40" Transparent="true" onClick="true" icon="icon/close.png" Tag="1" Hint="测试按钮6" />		
	</item>
</xml>

将该文件保存为服务端的Res目录下的MainTool.xml,希望直接在界面上目标父窗口对象中直接创建这些控件

加载

那得实现相应的解析逻辑。继续倒推,则应该由目标控件载入这个资源:

        this.ToolPanel.loadFromRes(this, DrGraph.PATH_RES + "MainTool.xml", "ToolPanel");

也就是想将以上按钮直接加载到ToolPanel中,需要考虑到从服务端读取文件为异步的,所以调用一个回调函数,以期在载入资源后进行动态解析生成。

loadFromRes(caller: any, xmlUrl: string, nodeName: string = "") {
        this.FSubControls = [];
        this.FAlignControls = [];      

        let xml: CbwXML = new CbwXML(xmlUrl, "DrGraphRes");
        xml.read(function () {            
            let destNode: CbwXmlNode | null = xml.RootNode;
            if (nodeName.length > 0)
                destNode = destNode.NodeByAttribute("name", nodeName);
            if (destNode) 
                this.from(caller, destNode);
            else
                console.log(`未发现目标配置节点 ${nodeName}!!!`)
        }.bind(this));
    }

当然。动态生成就再实现一个from函数,基于VCL类库实现,也算是比较轻松。
基本类:

from(caller: any, node: CbwXmlNode) {
        this.Anchors.Clear();
        node.FAttributes.forEach((value, name) => {
            DrGraph.TRtti.SetPropertyValue(caller, name, value);
        })
    }

窗口类:

from(caller: any, destNode: CbwXmlNode) {
        super.from(caller, destNode);
        destNode.FElements.forEach((node) => {
            let nodeType: string = node.Name;
            let control = DrGraph.BuildControl(nodeType, this);
            if (control != null) 
                control.from(caller, node);            
            else
                console.log(`${nodeType} 类型未实现自动化`);
        })
        this.ReAlign();
    }

正如所想,那些配置的按钮,安静地在那里思考人生。
在这里插入图片描述

下一步任务

目前已支持TEdit、TPanel、TScrollBar、TComboBox、TLabel、TScrollBar、TButton、TPropertyGrid等常用控件,下一步可将其它一些如TCheckBox、TRadioButton、TForm、TMenu等实现,以丰富界面效果。
其次,为这些控件提供更多可以控制的属性,以便进行资源配置时使用。
再其次,将这些控件改造成脚本方式,后续可以支持主题应用。
这些够得做一段时间了。

C语言图形界面开发:从Win32 API到GTK+的底层实现与跨平台实践 图形用户界面(GUI)是软件与用户交互的核心,其底层实现依赖于操作系统提供的图形子系统。理解GUI的工作原理,需要从事件驱动模型和消息循环机制切入,这是所有现代GUI框架的基石。在技术实现上,直接调用系统原生API(如Windows的Win32 API或Linux的Xlib)能提供极致的控制力和性能,尤其适合对执行效率、资源占用有严苛要求的场景,例如嵌入式设备或需要深度定制的应用。通过剖析Win32 API的窗口创建、消息处理与GDI绘制流程,开发者可以透彻掌握窗口管理、事件分发与图形渲染的核心原理。同时, 阅读详情

相关推荐

BS管理系统界面模板

多套非常好的管理系统界面模板,不同风格,满足不同需求

软件架构风格-BS三层架构

BS三层架构(Browser/Server three-tier architecture)是一种常见的软件架构模式,将一个应用程序分为三个主要的逻辑层:表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。每个层有不同的职责和功能,通过清晰的分层结构提高了应用程序的可维护性、可扩展性和可测试性。

一步一个脚印,踏实努力,向着目标前进 6985

一个很好看的BS界面

一份很好看的BS界面,绝对值得拥有。我是来赚积分的。

电子病历控件,电子病历,EMR,unieditor(20100329已停用,请下载升级版本3.1)

http://codechina.net/source/2028817此编辑器为门诊及住院专用设计,可灵活在设计模式与编写模式进行切换,提供数据库直连技术,可以不通过ADO、ODBC、OLEDB等复杂的方式与数据库建立连接,存取效率更高更快,适应WINDOWS开发环境,只需通过动态库函数的调用,即可轻松实现书写病历和设计模板所需的复杂功能。所见即所得,详如压缩文件中之说明。

unieditor的专栏 1655

Web版流程图设计器WorkFlowBS

Web版流程图设计器WorkFlowBS

html5 bs画图工具

bs画图 ,在线绘图 支持html5

bs(二)表单(网格系统、下拉菜单、简单导航)

网格系统 列类.col-md-4 //其中的数字表示占的百分比 注:其中md表示middle,还有es,sm,lg不同型号 在列元素上添加“col-md-offset-4”,表示该列向右移动4个列的宽度 列排序其实就是改变列的方向,就是改变左右浮动,并且设置浮动的距离。在Bootstrap框架的网格系统中是通过添加类名“col-md-push-*”和“col-md-pull-*” (其中星号代表

Jinming Su 2264

电子病历BS控件

开发电子病历BS版的好工具,支持java、c#等语言。

基于ueditor 扩展的电子病历编辑器

技术栈:react ueditor 效果图: EMR-YEDITOR 开发电子病历可以用此控件 author:penghongbao@elt2006.com wx:springjson

PENG15084664504的专栏 9463

基因组注释(Annotation)

Annotation

hgz2020的博客 6491

FTPClient使用中,碰到SocketTimeoutException 坑

ftpclient设置soTimeout无效

u010379794的博客 1951

BS版图形系统 - Ribbon Gallery

BS版图形系统 - Ribbon Gallery先准备相应图标实现资源配置初步效果上下箭头按钮处理下一步工作 今天尝试做一个Ribbon Gallery效果 直接参考PPT效果 当然,感觉在网页里,占用空间少一些好,所以把各图标间距整小一点。 先准备相应图标 实现 export class TRibbonGallery extends TPanel { rightPanel: TPanel; btnUp: TButton; btnMid: TButton; btnDown

drgraph的博客 372

原形网络(Prototypical Networks)基于PyTorch的实现

我在Jay2coomzz的基础上修改了数据处理方式和evaluation_model()方法,作为初学者若有不当之处恳请大家批评指正,原文链接如下: https://blog.youkuaiyun.com/weixin_38471579/article/details/102631018 数据集和源码链接将放到评论区 文章目录1 数据集一个简单的数据集介绍数据集处理2 搭建网络CNNProtonets 1 数据集 一个简单的数据集介绍 Omniglot数据集一共包含1623 类手写体,每一类中包含20 个样本。其中.

weixin_43872532的博客 6636

Windows GDI画刷完全指南:从纯色到纹理,掌握UI绘制的核心技术

在Windows图形编程中,图形设备接口(GDI)是实现界面绘制的基础框架,其核心原理是通过设备上下文(DC)管理绘图状态。画刷(Brush)作为GDI的关键对象,定义了封闭图形区域的填充样式,直接影响用户界面的视觉呈现和交互体验。从技术价值看,合理使用画刷能显著提升软件界面的美观度与专业性,同时优化绘制性能。在应用场景上,无论是传统桌面应用的对话框背景、控件美化,还是数据可视化图表、游戏UI的纹理填充,都离不开画刷的精准控制。本文聚焦**GDI资源管理**与**双缓冲技术**,深入解析纯色、阴影、位图等各

weixin_30561425的博客 341

X线DR医学图像 --- DR医用滤线栅及摩尔纹详解 (二) 摩尔纹的产生机理

1,横向摩尔纹的表现 2,纵向摩尔纹的表现 3,摩尔纹在pitch = 143μm(注:pitch为采样间隔/周期)的FPD上的表现。 4,摩尔纹的危害(严重的影响了临床诊断) 5,摩尔纹对胸片肺部肺纹理的破坏 6,滤线栅的频率(滤线栅生产厂家的产品参数)。判断摩尔纹产生的重要依据之一 7,DR平板探测器的采样频率/空间极限分辨率 l.........

松下J27录放机 4981

【异常】安装hermes-agent时Git克隆大仓库报错:error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly: CAN

摘要:本文分析了Ubuntu服务器执行Git递归克隆时出现的网络传输中断错误(HTTP/2流异常关闭、数据截断)。主要原因是网络限制、协议兼容问题和缓冲区不足。提供了四种解决方案:1)扩大Git HTTP缓冲区;2)切换为HTTP/1.1协议;3)采用浅克隆+分步拉取子模块;4)网络优化措施。重点推荐浅克隆分步拉取作为最有效方案,所有方法无需重启即可生效,可快速解决大仓库递归克隆失败问题。

奶爸的编程之路,也就一周冷个三天 670

ReactOS ARM移植实战:将Windows兼容系统带入移动设备的完整指南

你是否曾经想过,能否在ARM平板或嵌入式设备上运行一个完全兼容Windows NT架构的操作系统?ReactOS作为一款开源、兼容Windows API的操作系统,正在突破x86架构的限制,向ARM平台迈进。本文将为你详细解析ReactOS在ARM设备上的移植技术,从架构适配到触控优化,提供一套完整的实战指南。 ## 架构适配:跨越x86到ARM的技术鸿沟 ### 背景说明:为什么ARM移植如

gitblog_00754的博客 874

微信小程序 - 强力解决wx.getLocation定位不准的问题,如何修正微信小程序wx.getLocation获取用户位置信息不准确解决办法(高精度定位还是不够精准,定位不准有偏差,彻底消除误差)

如何解决getLocation定位偏差的问题?微信小程序API—wx.getLocation定位不准的问题,微信小程序wx.getLocation获取用户位置信息不准确解决办法,解决微信小程序wx.getLocation定位不准的问题,定位不准确,实际位置偏差大,相差几公里,微信小程序wx.getLocation获取用户位置信息不准确解决办法,关于微信小程序获取准确定位的方法及解决定位不准确的问题,偏差太多好几百米,wx.getLocation 返回定位精度不准问题,如何消除这个误差,开启高精度定位依旧有误

🏆 前端领域优质创作者 1万+

BeagleBone Green LCD Cape开发指南:从驱动加载到图形应用实战

在嵌入式Linux开发中,设备树(Device Tree)是描述硬件配置的核心机制,它通过数据文件向内核声明外设信息,实现硬件资源的动态管理。其原理在于将硬件抽象为节点和属性,使同一内核能适配不同硬件平台,极大提升了嵌入式系统的可移植性和模块化程度。这一技术的核心价值在于简化了驱动开发流程,支持硬件热插拔与动态配置,为复杂外设集成提供了标准框架。在应用场景上,设备树广泛用于显示屏、触摸屏、传感器等外设的即插即用支持,例如在BeagleBone开发板生态中,通过Cape扩展板的EEPROM存储设备树覆盖信息,

weixin_30875157的博客 323

基于YOLO26/11/v8算法的Web目标检测系统,人脸表情识别系统,Django+Vue3 的前后端分离,实现摄像头实时识别,YOLO26/YOLO11/v8 + LLM大模型智能分析,科研必备

在人工智能迈向通用化(AGI)的今天,“视觉感知 + 语言理解”的多模态联合是未来的趋势。单纯的检测画框已经无法满足复杂的业务需求,如何让系统“看懂”画面并进行“思考”,是当前视觉项目的重点。我们知道目标检测是计算机视觉中的重要任务,广泛应用于安防监控、自动驾驶、智能家居等领域。因此本项目将 YOLO 目标检测模型(兼容 YOLO26/v11/v8 系列)与 DeepSeek 等顶流大语言模型(LLM) 进行联合,使用 Django (后端) + Vue3 (前端) 技术栈

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2838

RK3568平台开发系列讲解(NPU篇)什么是RKNPU

📢本篇章将介绍RKNPU。

内核笔记 4354

BS系统经验总结

本文章是对刚做完BS系统的总结。主要记录开发过程中遇到的问题,及问题是如何解决的。 1,界面显示    一个系统界面首先要和谐,比如不同页面文本框长度高度要统一,按钮样式要一致,表格显示一样居中都居中靠左都靠左,这也就是所说的全局观,整体上的样式一直,界面才显得和谐。    这里主要解决按钮样式的问题。    系统的框架是直接用别人写好的,我们要做的就是向框架中填东

李双喆 4414

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

BS系统打开无menubar、toolbar

<br />    很多BS系统打开之后没有工具栏和菜单栏,使显示空间更充足,并且更加美观,实现内容很简单,我在整理的时候很想通过object控件中的方法在javascript自动最大化,但是放服务器之后执行无效,一直没找到原因,望哪位能指教。 index.html内容如下: <object id="max" classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"> <br /> <param name="Command" value="Maximize">

申良龙的专栏 352

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

BS架构ERP系统开发全系列之白金教程-主界面设计

1、打开VS2012 新建ERP专案,如图 在ERP解决方案上,右击添加新建项目,新建一个CommonTools共用类库,如图 删除Class1.cs,在CommonTools右击,添加新建类,输入BasePage,结果如图 在ERP专案上右击,打开ERP专案所在文件夹,如下图 添加三个文件夹(WS存放WebService),如图

mansai的专栏 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

如何通过F12的Elements控制页面样式

下面内容都是基于暂时性的,一旦刷新页面,内容就会消失。想让页面中某个字体加粗可以给它加上。

chen的博客 378

BSYBannerScrollview,最简单的Banner轮播图控件

实现这个功能,只需要在工程中拖入BSYScrollView.h 文件和BSYScrollView.m文件,在需要的文件中实现一下代码即可: 源码下载地址:demo

mjbaishiyun的专栏 1315
上一篇: BS版图形系统 - 属性浏览器
下一篇: BS版图形系统 - 中文录入
DrGraph
博客等级 码龄14年 228粉丝 77原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值