‘Delphi’ 分类的存档

[转载]Delphi之使用资源文件(Using Resource Files) – 瓢虫Monster – 博客园. New Term 每个Windows应用程序都使用资源。资源(Resources)不是可执行代码,但它属于程序的一部分元素。 典型的Windows程序的资源有: 加速器(Accelerators) 位图(Bitmaps) 光标(Cursors) 对话框(Dialog boxes) 图标(Icons) 菜单(Menus) 数据表(Data tables) 字串表(String tables) 版本信息(Version information) 用户定义的专用资源(User-defined specialty resources)如声音和视频文件 Note 用Project Options对话框的Version Info页面可轻松地将版本信息加到Delphi工程中。如下图: 资源一般包括在扩展名为.rc的资源脚本文件中(resource script file),资源文件就是文本文件。资源文件用资源编译器编译,并在链接时加到应用程序的.exe文件中。 通常大家认为资源要加到可执行文件中,但是有些资源,如位图、字符串表、波形文件,既可以放到外部文件中(.bmp、.txt、.wav),也可加到.exe文件并包含到应用程序文件中。 把资源放到.exe文件中有两条主要优点: 存取资源的速度更快。因为在一个可执行文件中查找资源花的事件比从磁盘文件中装入资源花的时间要少。 程序和资源可一起包含到单个单元(即.exe文件)中,而不需要一大堆的支持文件。 它的不足之处是:会使.exe文件稍稍增大。其大小不会比外部资源文件加可执行文件大。但是增加大小会使加载该程序的时间加长。 是把资源存为外部资源文件,还是把资源放到.exe文件中,这得由编程人员自己定。但要记住的是:这两种方式用哪一种都行(甚至可以在同一个程序中使用两种方式)。 Delphi中的资源(Resources in Delphi) 传统的Windows程序几乎都至少包含一个对话框和一个图标。但是,Delphi应用程序有所不同。首先,Delphi应用程序中没有真正意义上的对话框,实质上也就是没有对话框资源(Delphi中存储的窗体是资源,但它们是RCDATA资源,而不是对话框资源)。 Delphi 应用程序有传统意义的图标资源。创建应用程序时,Delphi负责创建图标资源文件。类似地,在为Speedbutton、Image组件或BitBtn 组件选择位图时,Delphi将所选位图文件包含到窗体资源中(作为窗体资源的一部分)。在建立应用程序时,窗体和它的全部资源一起包括到程序文件中。这 些都是自动处理的。 有时需要在通常的Delphi处理中以外使用资源。例如,要制作动画,必须有一系列的位图,将它们装载进来作为可以最快速度执行的资源。在这种情况下,就需要知道如何把资源捆绑到Delphi应用程序中。 把 资源文件捆绑到可执行文件中是件非常容易的事,实际创建资源却要困难的多。如果有一个好的资源编辑器,创建诸如位图、图标和光标之类的基本资源并不困难, 但创建具有专业化品质的3D位图和图标却是一项艺术性的工作。我们肯定遇到过很多不错的程序,但它们的位图按钮实在难看。我们可以利用Delphi自带的 Image Editor创建位图、图标和光标。 如果要创建字符串资源、用户数据资源、波形文件资源或其他专用资源,则可能需要第三方资源编辑器。 [...]

2012年2月3日08:19 评论关闭

[转载]Delphi编译/链接过程 – 瓢虫Monster – 博客园. 下面展示了Delphi是怎样编译源文件,并且把它们链接起来,最终形成可执行文件。 当Delphi编译项目(Project)时,将编译项目源文件、窗体单元和其他相关单元,在这个过程中将会发生好几件事情: 首 先,Object Pascal编译器把项目单元编译为二进制对象文件,然后资源编辑器将把诸如程序图标、窗体文件等资源编译成二进制资源文件,接着链接开始起作用;链接器 根据编译器产生的二进制文件,依项目需要增加一些库文件,并把这些文件综合在一起产生最终的可执行文件。 编译、创建和链接 每当点击Run按钮时,Delphi都会编译和链接程序,但它只编译改动过的单元。Delphi能知道哪个个文件已改动,哪个文件没有改到。 绝大部分时间中,我们都想看一看改变后的程序运行结果,在这种情况下,就需要点击Run按钮,程序将被编译、链接和执行。但有时候可能不想运行程序,比如只想编译程序,看一看有没有什么错误。 当默认创建一个Application时(工程文件名DRP默认为Project1),在Delphi的主菜单Project下,则有以下几个菜单选项: 1、Syntax check Project1 选项, 它能让Delphi编译工程,并且报出任何错误和警告,这时检查代码错误最快的方法,Delphi只编译工程,而不执行链接,Syntax check选项的目的就是尽快检查代码的语法错误,因为链接阶段需要占额外的时间,Syntax check忽略了这一步。界面如下: 2、Compile Project1 选项,就像Syntax check一样,它用来编译从最近一次编译后改动过的任何单元。它需要执行链接,因此比Syntax check 选项所占的时间稍长一点,当需要只编译和链接程序而不运行时就可以用Compile 选项。界面如下: 默认情况下,该Compile选项不会显示编译状态对话框,通过主菜单【Tools | Environment Option】对话框中打开“Preferences”选项卡,在Compiling and running组合框中勾选“Show compiler progress”选项即可打开编译状态对话框,如下: Delphi编译工程的速度非常快,故一般不需要编译状态对话框,实际上,编译状态对话框增加了编译时间,因为编译状态对话框中显示信息是占用时间的。 3、Build project1 选项,占的时间最长,这个选项编译工程中的每一个单元,不管这个单元是否有改动,当编译完所有单元后,Delphi链接整个工程,并生成Project1.exe可执行文件。 不 管选择哪种方式编译工程,如果发现了错误,Code Editor 将会出现在顶级窗口,并且Code Editor 底部的信息窗口将会显示错误和警告清单。Code Editor 会把第一处出错的代码行加亮,当成功进行语法检查、编译、链接和创建后,就可以通过选择Run按钮来运行程序。 编译并建立其他Delphi程序 在Delphi中,大部分情况都是编写基于VCL的应用程序。但有时也要编写其他类型的应用程序。点击主菜单【File | New | Other..】可以看到Delphi支持的其他类型应用程序,如下: [...]

2012年1月3日09:24 评论关闭

[转载]我所理解的Delphi中的数组类型 – 瓢虫Monster – 博客园. 数组可以使Object Pascal所拥有的任何数据类型,数组是一些数值的简单集合。 ? 1 2 3 4 5 6 7 8 9 10 var MyArray: array[0..4] of Integer; { 声明一个数组包括5个整数数值} begin MyArray[0] := -200; { 通过操作符[]就可以访问每个数组元素} MyArray[1] := -100; MyArray[2] := 0; MyArray[3] := 100; MyArray[4] := 200; MyArray[0] := MyArray[1] + MyArray[4]; { MyArray[0]为-100} end; 其MyArray在内存空间的分布,每个整数需要4个字节,因此整个数组将占20个字节的内存,如下: 1、多维数组 ? 1 [...]

2011年12月15日14:08 评论关闭

最近在做一个Delphi的发货清单的打印程序,其中涉及到需要计算清单的小计和总计的功能,文字难以表达清楚,上图吧: 报表第一页的小计计算当前页面的商品价格总和,总计目前和小计一样是计算截止到当前页面的所有商品的金额和,下图为最后一页: 这下大家明白了吧,就是要实现这样的报表。 废话不多说了,开始讲解我的思路: 1.既然要计算小计,就是每页的金额和了,加入ReportMachine的计算文本框(TRMCalcMemoView),然后设置要汇总的字段值为数据字段“factSum”,然后选择计算文本框的属性面板中的“CalcOptions”选中“统计Brand”为要汇总的主项数据,统计类型为“合计(Sum)”,如图所示: 2.最难的部分就是总计的计算,这不能简单的用计算文本框就能解决的,于是不得不用ReportMachine的代码来处理,也就是在总计的文本框的OnBeforePrint事件中计算之前的小计文本框的值的和,然后赋值给总计文本框显示,先看下设计的报表: 红色文字为两项总计的文本框的Name属性值。下面是ReportMachine中自定义的OnBeforePrint事件函数代码如下: unit Report; var lValue,tValue: Double;//lValue=金额总计 tValue=税额总计 procedure Memo1_OnBeforePrint(Sender: TObject); begin lValue:=lValue+CalcMemo1.CalcValue; //CalcMemo1为金额小计的文本框 TRMMemoView(Sender).Memo.Text := lValue; end; procedure Memo40_OnBeforePrint(Sender: TObject); begin tValue:=tValue+CalcMemo2.CalcValue;//CalcMemo2为税额小计的文本框 TRMMemoView(Sender).Memo.Text := tValue; end; procedure Main; begin Memo1.OnBeforePrint:= Memo1_OnBeforePrint; //指定金额总计的文本框的OnBeforePrint事件的处理函数 Memo40.OnBeforePrint:= Memo40_OnBeforePrint;//指定税额总计的文本框的OnBeforePrint事件的处理函数 end; end. 上面的代码先声明了两个事件函数用于计算两个累加的总计的值,然后赋值给相应的总计文本框;然后再Main中指定给总计文本框的事件,这样当打印总计之前先汇总赋值并打印。

2011年7月2日11:19 评论关闭

[转载]C#编写QQ接口软件–QQ协议篇 – yet – 博客园. 1、找寻支持QQ HTTP协议的服务器。 大家也许会被一些假像所迷惑,也许会认为QQ的HTTP服务器是基于80口进行通信的(如:218.17.209.23:80),其实不然,正真基于HTTP的服务器应该是:http://tqq.tencent.com:8000,它是一个通过8000口进行通讯的服务器。 由于QQ的HTTP服务器并不支持HTTP协议中GET方法,它支持POST方法。所以我们要给QQ的HTTP协议传参数,那么就必需要用POST方式才行。 2、C#和DELPHI是实现HTTP的POST方法的通信。 DELPHI: Delphi里我们利用一个比较流行的第三方VCL,INDY HTTP(这个组件D6,D7里面自带)进行HTTP通信。 使用其的POST方法便可以进行HTTP的POST通信,因为组件比较好用,我就不在其描述具体的过程了。大家 可以参考以下代码: function PostWebPage(url,para:String;TimeOut:Integer):String; var tmpWeb:TIdHTTP; retrun:String; Proxy:String; i:Integer; paralist:TStrings; begin retrun:=”; try paralist:=TStringList.Create; paralist.Text:=_Replacing(para,’&’,#13#10); tmpWeb:=TIdHTTP.Create(nil); tmpWeb.ReadTimeout:=TimeOut; for i:=1 to 3 do begin try retrun:=tmpWeb.Post(url,paralist); except end; if retrun” then break; end; finally tmpWeb.Disconnect; FreeAndNil(tmpWeb); FreeAndNil(paralist); end; Result:=retrun; end; 值在传入、返回时,其是基于UTF-8进行的,C#显示中文是很常,而DELPHI就要进行UTF-8的转换了。大家 可通过Utf8ToAnsi()、AnsiToUtf8()进行转换 C#: [...]

2011年4月13日15:40 评论关闭
备案信息:冀ICP备10007948号