} } }

    我的Win32开辟决定,Delphi老将复出

    添加时间:2013-7-11 点击量:

        这两天在开辟公司的一个教授教化软件客户端,因为要推敲到给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;

    无论对感情还是对生活,“只要甜不要苦”都是任性而孩子气的,因为我们也不完美,我们也会伤害人。正因为我们都不完美,也因为生活从不是事事如意,所以对这些“瑕疵”的收纳才让我们对生活、对他人的爱变得日益真实而具体。—— 汪冰《世界再亏欠你,也要敢于拥抱幸福》
    分享到: