这两天在开发公司的一个教学软件客户端,因为要考虑到给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. Using AFNetWorking 2.0 upload file to php web service server based on Slim

    Recently i am developing the IOS app, a feature is needed to upload image to the webservice server. ...

  2. 关于yaha中文分词(将中文分词后,结合TfidfVectorizer变成向量)

    https://github.com/jannson/yaha # -*- coding: utf-8 -*- """ Created on Wed Aug 10 08: ...

  3. WPF 自定义控件

    在实际工作中,面对不同的客户需求,需要让空间显示出不同的效果.当style已经不能足够满足客户需求时,就需要程序猿自己设计自定义控件了. 根据工作经历,LZ做了个关于自定义控件的小Demo,仅供参考. ...

  4. c# & Fizzler to crawl web page in a certain website domain

    使用fizzler [HtmlAgilityPackExtension]和c#进行网页数据提取:fizzler是HtmlAgilityPack的一个扩展,支持jQuery Selector: 提取数据 ...

  5. 一个最简单的登录页面测试case

    具体需求: 有一个登陆页面, (假如上面有2个textbox, 一个提交按钮. 请针对这个页面设计30个以上的testcase.) 此题的考察目的:面试者是否熟悉各种测试方法,是否有丰富的Web测试经 ...

  6. Linux_09------Linux上系统扫描和安全策略

    先谢慕课网/** * linux系统扫描技术 * * 主机扫描.路由扫描.批量服务扫描.系统安全策略(防SYN和ddos攻击) */ /** * 主机扫描 * ping fping hping * * ...

  7. linux配置的问题

    1 从系统设置-文本设置中把双拼删掉 2 通过sudo passwd root 修改root密码 3 通过su获取root权限 4 通过sudo pppoeconf输入宽带帐号密码 5 把更新源修改成 ...

  8. 关于C#不同位数相与或,或赋值时,隐藏位数扩展该留意的问题

    __int64 a; char b; a = b; a |= b; 如上情况,当b的最高位为1时,即b=0x80(或更大)时,b在扩展成64过程中会将最高位向高位扩展变成0xfffffffffffff ...

  9. 性能检测工具介绍-Linux系统命令行

    本文介绍的关于Linux自带命令进行性能检测的介绍,详细介绍这些linux自带的工具的使用. 一.uptime uptime命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总 ...

  10. java.net.URL 模拟用户登录网页并维持session

    java.net.URL 模拟用户登录网页并维持session 半成品,并非完全有用 import java.io.BufferedReader; import java.io.InputStream ...