这两天在开发公司的一个教学软件客户端,因为要考虑到给PHP、平面设计等班的同学使用,为了避免安装.Net Framework、JRE的麻烦(如果把.Net Framework、JRE打包到安装包,也会使得安装包太大),因此没有选择使用.Net、Java开发。

那么接下来就考虑使用C/C++开发了,采用纯Win32开发太累,选用QT、MFC、WxWidgets之类能简化工作,MFC就不提了简直就是一坨翔谁用谁难受,QT开发出的界面太不Native,WxWidgets界面很Native而且类库设计的超好,使用WxWidgets开发程序甚至有时候感觉不到自己在使用C++,使用WxWidgets开发即能用到c++的高运行效率,又能用到.Net/Java一样的超酷类库。但是WxWidgets要考虑到跨多平台,所以调用ActiveX、Com等Windows平台相关特性的时候很困难,而我这个工具就是要有很多调用这些东西,所以只能忍痛放弃WxWidgets了。WxWidgets是开源的,如果有人能把WxWidgets 分支出一个For Windows Only的版本,把Windows平台特性支持提供好了,那么是非常酷的一件事情了。

当然现实是残酷了,必须选择一个更适合的技术了,我想到了我人生第一个深入研究的语言Delphi。Delphi能够开发Win32程序,同时提供的类库也丰富,调用Windows平台特性也非常方便。因此就决定使用Delphi开发了(其实C++Builder也不错)。

和当年的如日中天相比,现在的Delphi已经没落了,使用Delphi的人越来越少,CSDN的Delphi板块上经常是“很长时间没回来了,回来看看”、“再见Delphi,我投奔.net or java去了”、“某某大牛很久没有在Delphi版上出现了”,很悲凉的。而且我感觉很奇怪的是,我10年前就在使用Delphi7,到现在Delphi已经出了DelphiXE4了,而现在使用Delphi的人最多的竟然还是Delphi7。就像现在使用VC开发的最多的还是使用1998年出的VC6。不得不感叹社区氛围的差异。

这次开发我还是选择了DelpihXE,因为高版本的DelphiXE提供了泛型以及更丰富的库,当然还有更好用的开发环境。这次我要分享的就是在DelphiXE中更方便的操作“嵌入资源”的方法。

我开发的这个客户端中需要把一些png图片嵌入到exe中,然后在程序中动态加载png图片,这样可以实现单一exe文件的“绿色版”。到网上查资料,提到的方法都是手动编写.rc文件,然后命令行调用brcc32.exe把.rc编译成.res文件,然后在代码中通过{$R Sample.RES}引用编译。很麻烦,很奇怪,当年Win32开发的王者竟然没有傻瓜化的资源文件的引用方法,要知道连VC都有一个ResourceEditor呀。找了半天竟然真的没有,天哪!超级懒的我在DelphiXE里胡乱的点着,忽然发现主菜单的Project下发现了“Resources and Images”点开以后,Get It!就是我想要的。好吧,废话不说,我来分享一下怎么使用吧,虽然也许看到这篇文章的很多人也许根本就没用过Delphi甚至没听说过Delphi。另外,据网上的文章说,“Resources and Images”这个是Delphi2010之后才有的功能,我没有去验证。

用法:

1、  把PNG图片放到项目中;

2、  点击主菜单“Project”→“ Resources and Images”,弹出下面的对话框

它会自动识别项目中的图片、音频等文件自动添加进来,如果没有识别出来或者是自定义文件类型的话,就点击【Add】按钮手动添加,然后选择合适的资源类型ResourceType,然后在Resource Identifier中给资源取一个名字即可。

在代码中使用TResourceStream读取资源流:

stream := TResourceStream.Create(HInstance, 'PNGIMAGE_PAUSE',  RT_RCDATA);

DelphiXE中已经提供了Png解析库,uses pngimage,然后:

png := TPNGObject.Create;

png.LoadFromStream(stream);

下面是我封装的一个简单的从资源中读取PNG对象的方法:

function LoadPNGResource(resName:string):TPNGObject;

var

png: TPNGObject;

stream: TResourceStream;

begin

png := TPNGObject.Create;

stream := TResourceStream.Create(HInstance, 'PNGIMAGE_PAUSE',  RT_RCDATA);

try

png.LoadFromStream(stream);

finally

stream.Free;

end;

result := png;

end;

我的Win32开发抉择,Delphi老将复出的更多相关文章

  1. 跟我一起玩Win32开发(转自CSDN-东邪独孤)

    跟我一起玩Win32开发(1):关于C++的几个要点 跟我一起玩Win32开发(2):完整的开发流程 跟我一起玩Win32开发(3):窗口的重绘 跟我一起玩Win32开发(4):创建菜单 跟我一起玩W ...

  2. win32开发基础

    收集的,正在学习... 跟我一起玩Win32开发(1):关于C++的几个要点 跟我一起玩Win32开发(2):完整的开发流程 跟我一起玩Win32开发(3):窗口的重绘 跟我一起玩Win32开发(4) ...

  3. 跟我一起玩Win32开发(17):启动和结束进程

    这里我再次说明一下,我不知道为什么,现在的人那么喜欢走极端,估计是价值观都“升级”了的缘故吧. 我撰写这一系列Win32相关的文章,并不是叫大家一定要用Win32去开发项目,仅仅是给大家了解一下,Wi ...

  4. 玩转Win32开发(2):完整的开发流程

          上一篇中我给各位说了一般人认为C++中较为难的东西——指针.其实对于C++,难点当然不局限在指针这玩意儿上,还有一些有趣的概念,如模板类.虚基类.纯虚函数等,这些都是概念性的东西,几乎每一 ...

  5. 在Windows7上搭建Cocos2d-x win32开发环境

    很多其它相关内容请查看本人博客:http://www.bokeyi.com/ll/category/cocos2d-x/ 建议:为了避免安全相关的问题,请以管理员权限执行全部的操作,当执行命令的时候, ...

  6. 于windows建筑物Cocos2d-x win32开发环境

     这份文件是从cocos2d-x复制的官网.. . 在windows7上搭建COCOS2D-X开发环境并不难. 可是因为框架更新过快,非常多用户都有困难.我希望你们觉得这个教程实用. 建议:为了避 ...

  7. 基于uniGui开发的Delphi后台管理框架uniFramework

    uniGui是基于Delphi的一套开发Web应用的UI框架,前端使用的是ExtJS,最新版的uniGUI1.5 1480已支持新版的ExtJS6.5.3.我认为uniGUI是目前Delphi下最完善 ...

  8. 10分钟10行代码开发APP(delphi 应用案例)

    总结一下用到的知识(开发环境安装配置不计算在内): 第六章  使用不同风格的按钮: 第十七章  让布局适应不同大小与方向的窗体: 第二十五章 使用 dbExpress访问 InterBase ToGo ...

  9. 跟我一起玩Win32开发(25):监视剪贴板

    自从郭大侠和蓉儿离开桃花岛后,最近岛比较寂静,有一种“门前冷落鞍马稀”的感觉.于是,老邪就拿出<九阴真经>认真阅读,同时用迅雷下载经典大剧<汉武大帝>晚上睡觉前看上几集,老邪一 ...

随机推荐

  1. WampServer服务中MySQL无法正常启动解决方案

    打开wampserver->mysql->my.ini,添加或修改innodb_force_recovery = 1 然后重启所有服务就大功告成了!

  2. tomcat的乱码问题

    String filename=request.getParameter("filename"); filename=new String(filename.getBytes(&q ...

  3. 银行ATM机工作流程模拟编程

    [编程内容] 编程,模拟一个ATM(Automatic Teller Machine,自动取款机)的工作流程.依据帐户信息:姓名.帐号.密码.余额,完成ATM机功能:登录.显示余额.取款.修改密码. ...

  4. Find Query Window的运作(手电筒)

    Find Query Window的運作?(手电筒) 提示: 在點選 Toolbar的 Find鈕時,系統會觸發 Query_Find此 Trigger. 執行 App_Find.Query_Find ...

  5. 第五百八十二天 how can I 坚持

    好吧,是我错了,昨天,做好自己就行了,别人怎么样是别人的事,永远保持一颗单纯向上的心. 时间过得真快,明天又周六了.. 睡觉.

  6. Spark Idea Maven 开发环境搭建

    一.安装jdk jdk版本最好是1.7以上,设置好环境变量,安装过程,略. 二.安装Maven 我选择的Maven版本是3.3.3,安装过程,略. 编辑Maven安装目录conf/settings.x ...

  7. C# 集合与泛型

    一.古典集合方式 在C#2.0的时候集合主要通过两种方式实现: 1.使用ArrayList实现 新建ArrayList,然后将所有对象放入该数组中,简单直接,但缺点是该数组什么类型的元素都能接收,在实 ...

  8. windows 系统下 Firefox hostadmin插件无法修改Host

    firefox hostAdmin插件无法修改Host了,提示“ write hosts file failed check permissions”,肯定是权限出现了问题??? 使用管理员权限打开c ...

  9. ASP.NET ZERO Core Application 学习笔记

    地址:https://www.aspnetzero.com/Documents/Development-Guide-Core 1.恢复数据库 MIGRATOR CONSOLE APPLICATION ...

  10. MRP生产计划模式在多品种小批量生产过程中遭遇挑战

    传统的MPS主生产计划和MRP物料需求计划的方式,已很难适应按需生产环境,很多企业正在转向按需生产环境,按需生产的最大的挑战是模拟计算CTP可以承诺交期.准时交货和应对不确定的插单等变化.不仅需要订单 ...