没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|行业资讯|编辑:龚雪|2024-08-23 10:23:54.860|阅读 113 次
概述:本文主要介绍如何在WinForms应用程序种动态绘制系统名称来替代图表硬编码名称,希望对大家有所启示和帮助~
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
相关链接:
在以前做程序的时候,一般在登录窗口里面显示程序名称,登录窗口一般设置一张背景图片,由于程序的名称一般都是确定的,所以也不存在太大的问题,不过如果客户定制不同的系统的时候,需要使用Photoshop修改下图层的文字,再生成图片,然后替换一下也可以了。不过本着减少客户使用繁琐性,也可以使用空白名称的通用图片,配上使用GDI+的方式动态绘制系统名称的方式处理,发现效果也还不错,本文来介绍一下这个处理的过程。
PS:给大家推荐一个C#开发可以用到的界面组件——DevExpress WinForms,它能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!
DevExpress技术交流群10:532598169 欢迎一起进群讨论
如果我们采用传统的图片编辑方式,一般倾向于使用Photoshop来处理,不过现在也可以使用剪影来实现更多的效果了。
如原先是采用Photoshop来编辑登录图片的内容,这样系统登录的时候,就可以直接采用背景图片了。
需要的时候,在Photoshop找到图片源文件,替换一下内容,重新生成图片即可。
然后再系统的登录界面中,替换一下使用Photoshop生成的背景图片,就可以简单的实现了效果的替换了。
使用这种方式创建的文字效果比较丰富,可以充分利用图片编辑软件创建的字体效果,不过就是需要安装这个巨无霸软件。
前面使用Photoshop生成的背景图片,是一种解决方案,如果我们有相关的背景图片,也可以使用软件的GDI+的方式动态绘制系统名称。
首先我们使用Photoshop等图片编辑软件,编辑一下图片,保留标题位置为空白,然后也是通用的设置登录界面的背景,至于文字,我们通过登录窗口的Paint事件,使用GDI+的方式绘制系统名称。
我们的软件系统名称,一般是设置在配置文件中的,如下是WinForms的App.config文件内容。
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <!--指定默认的数据库类型,如果不指定则使用第一个连接字符串--> <add key="DefaultDb" value="sqlserver" /> <!--软件名称--> <add key="ApplicationName" value="SqlSugar开发框架" /> <!--开发商名称--> <add key="Manufacturer" value="广州爱奇迪软件科技有限公司" />
如下是系统的绘制逻辑处理,由于处理代码行数较多,就抽取为辅助函数,方便查看重用。
/// <summary> /// 系统登录界面 /// </summary> public partial class Login : DevExpress.XtraEditors.XtraForm { /// <summary> /// 配置文件对象 /// </summary> private AppConfig config = new AppConfig(); /// <summary> /// 窗体构造函数 /// </summary> public Login() { InitializeComponent(); //动态绘制软件的系统名称 this.Paint += (s, e)=> { string applicationName = config.AppConfigGet("ApplicationName") ?? "SqlSugar开发框架"; applicationName = JsonLanguage.Default.GetString(applicationName); MyHelper.Draw3DTitle(e.Graphics, applicationName, Color.Black, Color.Gray); }; }
上面的MyHelper.Draw3DTitle就是我们封装的处理方式,用于对GDI+的处理过程进行剥离,提高代码的可阅读性。
在介绍代码的详细实现过程前,我们来看看使用GDI+实现的效果,其中字体使用了一些3D的效果。
上面登录界面的效果是自动根据内容生成,其中文字如果比较多,也会自动根据宽度进行适应,把字体大小调整合适。
由于实现的效果相对不是很复杂,因此代码我就全部贴出来供参考了。主要就是对字体进行调整,以及增加3D效果的处理。
public static void Draw3DTitle(Graphics g, string title, Color frontColor, Color shadowColor, bool useGradient = false, int depth = 5, string fontName = "华文中宋", FontStyle fontStyle = FontStyle.Bold, int maxFontSize = 36, int startX = 140, int startY = 100, int targetWidth = 450, int targetHeight = 100) { // 获取适合目标宽度的字体大小 var font = GetAdjustedFont(g, title, fontName, fontStyle, targetWidth, maxFontSize, 6); // 绘制阴影 for (int i = depth; i >= 0; i--) { using (Brush shadowBrush = new SolidBrush(Color.FromArgb(255 - (depth - i) * 25, shadowColor))) { g.DrawString(title, font, shadowBrush, new PointF(startX + i, startY + i)); } } Brush textBrush = new SolidBrush(frontColor); // 创建渐变填充 if (useGradient) { textBrush = new LinearGradientBrush(new Rectangle(startX, startY, targetWidth, targetHeight), frontColor, Color.Blue, 45f); } // 绘制前景文本 g.DrawString(title, font, textBrush, new PointF(startX, startY)); } /// <summary> /// 根据目标宽度,调整字体大小 /// </summary> private static Font GetAdjustedFont(Graphics g, string text, string fontName, FontStyle fontStyle, int targetWidth, int maxFontSize, int minFontSize) { // 调整字体大小,直到文本适合目标宽度 for (int size = maxFontSize; size >= minFontSize; size--) { var testFont = new Font(fontName, size, fontStyle); var textSize = g.MeasureString(text, testFont); if (textSize.Width <= targetWidth) { return testFont; } } // 如果没有合适的大小,返回最小字体大小 return new Font(fontName, minFontSize, fontStyle); }
如果需要更加丰富的效果 ,可以对画刷进行更多的定义,如可以使用渐变色等处理。
以上就是我们SQLSugar开发框架中,对于动态程序标题的另外一种解决方案,可以根据需要选择不同的处理方式。
本文转载自
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@fc6vip.cn
文章转载自:在工业数字化和智能制造的进程中,设备互联、系统集成和数据安全是每个企业绕不开的话题。
随着人工智能(AI)的迅速发展,如何让AI系统与外部工具、数据源和服务顺畅协作,成为了技术开发中的一大挑战。模型上下文协议(MCP)为AI系统之间提供了标准化的连接方式,而SmartBear API Hub则为开发者提供了强大的工具集,帮助简化MCP开发过程,提升系统的可靠性和可扩展性。本文将深入探讨如何通过SmartBear API Hub高效应对MCP开发中的各种挑战,从而助力开发者构建更加稳
在功能安全领域,软件开发需满足严格的验证与确认要求。传统模式下,一般需要组合多种工具来完成不同阶段的测试。作为一款专注于代码质量和功能安全的自动化测试工具,Parasoft C/C++test 提供了静态分析、单元测试、覆盖率验证等能力的集成化测试解决方案,该工具通过TÜV SÜD权威认证,能够帮助企业系统化落实功能安全要求,降低合规难度。
在功能安全项目中,开发工具可信度是认证审核的关键。工具鉴定通常伴随巨大的工作量、复杂的文档和较高的项目风险。传统流程中,团队需耗费大量资源完成工具鉴定测试与认证文档准备。作为专注于代码质量和功能安全的自动化测试工具,Parasoft C/C++test 凭借“预认证背书”与“自动化认证工具包”的相结合,将复杂工作转化为标准化测试流程,从根本上帮助企业降低合规风险与成本。
优秀的界面控件开发包,帮助企业构建卓越应用!
DevExpress DXperience Subscription高性价比的企业级.NET用户界面套包,助力企业创建卓越应用!
DevExpress WinForms Subscription为Windows Forms平台创建具有影响力的业务解决方案,高性价比WinForms界面控件套包。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@fc6vip.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢