‘Delphi’ 分类的存档

[转载]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中指定给总计文本框的事件,这样当打印总计之前先汇总赋值并打印。 /*728*90,创建于2011-1-13*/ var cpro_id = ‘u350373′;

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 评论关闭

[转载]最终用户在线设计和修改Web报表 – Web打印 – 博客园. 我在最近主持开发的人力资源管理系统中遇到一个新的问题:就是最终用户要能够设计和编辑报表。在人力资源管理系统中有一个基本的功能,就是编辑和打印员工 的工作证,不同职务的员工的工作证可能不一样,同一个员工不同工作时期(比如实习员工、正式员工)的工作证也可能不一样。项目方要求我们一定要做到操作员 可以在线设计和修改工作证的格式(实际上就是报表),否则就一切免谈。客户是上帝!呵呵,努力做吧。于是大家搜罗了所有的Web打印软件,结果包括大名鼎 鼎的水晶报表也没有这个功能。 好在天无绝人之路,我在以前所设计的一个基于FastReport的Web打印控件之上进行了大量的修改,终于实现了最终用户的在线设计和编辑报表的功能,用户也比较满意。 报表的预览窗口如下图: 报表的最终用户在线设计和编辑窗口如下图: 当然报表的在线编辑窗口有一点专业,操作员需要经过一点培训才会使用,不过一般情况是我们先帮用户设计好了模板,操作员平时只是要做一些微调,比如改个字或改个格式等。报表编辑好后,点击就可以自动把报表保存到服务器,且提示 。 下面详细的讲解一下怎样利用我设计的Web打印控件实现最终用户的在线设计和修改报表,且自动把报表保存至服务器。讲解以ASP.NET为例,当然其它语 言也可以举一反三,很容易实现。因为调用打印控件统一是JavaScirpt,提交服务器的数据是Http协议的Post方式,这些都是通用的。 最终用户在线设计和修改Web报表的部分代码如下: 调用Web打印控件 protected void BtnDepsitAmtDesignPost_Click(object sender, EventArgs e) { string FileValue, PrintValue, ParaName, ParaValue; FileValue = FileToString(“.\\Frp\\DepositAmt.fr3″); ParaName = “ShopName`~PrintDepositAdd`~PrintPaperNo`~Title”; //`~为各参数的分隔符 ParaValue = “测试酒楼” + “`~说明:本单据为贵客押金收取凭证,盖章有效。退房时请出示,遗失者自负,请妥善保存。退房时间为12:00时,延时退房18:00时以前按半天房费收取,18:00时以后算全天房价。押金单有效期为一个月,过期作废。 贵重物品请交前台寄存,未寄存丢失自负。 谢谢!” + “`~身份证:4325011980639512″ + “`~押金单”; SQLConnection ConPrintTest = new SQLConnection(ConfigurationManager.ConnectionStrings["PrintTestConnectionString"].ToString()); ConPrintTest.Open(); DataSet [...]

2011年3月1日16:58 评论关闭
备案信息:冀ICP备10007948号