自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SUNSTONE的Delphi笔记

计算机知识浩如烟海,记性不好,找个地方保存学习体会(转载需注明出处)

  • 博客(45)
  • 收藏
  • 关注

原创 pgdac和unidac插入效率究竟差多少?

pgdac和unidac都是http://www.devart.com公司出品的优秀控件。unidac对各种数据库通吃,pgdac是专用于postgreSQL数据库。既然都能用于pg数据库,那么他们究竟在效率上有什么差别呢。我的测试:同一台机器,同样的内容。插入10万条,每条语句

2011-07-26 06:50:30 3775 4

原创 postgreSQL数据库关于事务的几个要点

postgreSQL数据库 事务:1.postgreSQL数据库不支持事务嵌套,但是支持在当前事务里定义新保存点,用保存点来解决需要事务嵌套的地方。保存点可以嵌套。2.ROLLBACK TO SAVEPOINT 1)回滚所有指定保存点建立之后执行的命令(包括这之后还有保存点的命令

2011-07-25 16:36:02 2115

转载 ClientDataSet加上TDataSetProvider的数据保存问题

ClientDataSet加上TDataSetProvider的数据保存问题前台:D7或D2005; DBExpress连接组件:TSqlConnection,TSqlQuery ,TDataSetProvider,TClientDataSet;后台:SQL Server 200

2011-07-24 12:08:15 11512

原创 详解Variant 的相关函数

1.VarArrayCreate()和VarArrayOf()这两个常用就不说了2.VarArrayRedim()函数能修改variant数组的最高限。3.VarArrayDimCount()函数返回Variant数组的维数,4.VarArrayLowBound()和VarArr

2011-07-22 23:20:52 2529

原创 delphi修改默认打印机

uses WinSpool, ... ;procedure ChangeDefaultPrinter(const Name: string) ;var    W2KSDP: function(pszPrinter: PChar): Boolean; stdcall;    H: THandle;    Size, Dummy: Cardinal; PI:

2011-06-10 20:59:00 4098

转载 用Delphi打印各类文档

ShellExecute(Handle, print, PChar(c:/document.doc), nil, nil, SW_HIDE) ;Drop a TComboBox on a form. Name it "cboPrinter". Set Style to csDropDownLidtPut the next two lines in the fo

2011-06-10 20:57:00 2385

原创 UNIGUI如何禁止关闭新窗口

<br />1.取消新窗体的systemmenu,目的是去掉窗体的关闭按钮X<br /> <br />2.在窗体加上新按钮,点击事件为<br />close;<br /> <br />3.在窗体的onclose实践中添加如下代码<br /> <br />action:=canone;//这句一定要放在messagedlg前面<br />messagedlg(xxxxxxx);<br /> 

2011-01-29 23:01:00 2773

原创 UNIGUI中如果获得Session情况

<br />在ServerModule单元中有如下属性,可以使用<br /> <br />ServerModule.UniServerModule.ServerStats.ActiveSessions<br />ServerModule.UniServerModule.ServerStats.MaxSessions<br />ServerModule.UniServerModule.ServerStats.BytesSent<br />ServerModule.UniServerModule.ServerS

2011-01-29 22:57:00 4058

原创 UNIGUI中控件类名的变化

<br />今天一个朋友在使用UNIGUI碰到了问题,他要遍历窗体上的控件,然后根据类名进行相应控制。<br /> <br />原来的程序为:<br />procedure TMainForm.Fj_component;<br />var<br />  i: Integer;<br />begin<br />  for i := 0 to MainForm.ComponentCount - 1 do<br />  begin<br />    UniMemo1.Lines.Add(MainForm.Comp

2011-01-29 22:54:00 2499 1

翻译 FieldByName速度优化

调用FieldByName主要是调用FindField,会在主循环引进n个新子循环下面优化比较好var  AField : TField;  begin  Assert(AdoQuery1.Active, 'Dataset is not active!');  try    AdoQuery1.DisableControls;    AField := AdoQuery1.FieldByName('MyFieldName');     AdoQuery1.First;    while not AdoQue

2011-01-23 08:13:00 3156

翻译 把字节数显示成kb或gb的函数

<br />经常用到把字节数显示成kb或gb,函数如下<br /> <br />function FormatByteSize(const bytes: Longint): string;<br /> const<br />   B = 1; //byte<br />   KB = 1024 * B; //kilobyte<br />   MB = 1024 * KB; //megabyte<br />   GB = 1024 * MB; //gigabyte<br /> begin<br />   if

2010-12-22 13:31:00 1916

原创 Delphi2010中DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明

Lifecycle 三种属性: Session、Invocation、Server这三种属性都用在什么情况,有什么要注意的事项,Delphi2010中罕有说明。如果乱用这三种属性,你的服务程序有可能崩溃,数据混乱,内存占用大,效率低等问题!下面我对这三种属性的使用环境逐一介绍: 1. Session说明:这是delphi2010中默认属性,也是delphi推荐设置。Sess

2010-02-02 21:11:00 6543 11

翻译 让Windows2003为Firebird数据库保留3050端口

在某些的情况下您可能希望保留的端口的范围,以便程序或进程的请求随机端口将不会分配保留范围内的端口。当保留的端口范围时,仅在程序或特别请求保留范围内的端口的进程可以使用该端口。 Windows Server 2003 或 Windows XP 专业版启动注册表编辑器 (Regedit.exe)。 找到并单击以下注册表子项:HKEY_LOCAL_MACHINE/SY

2010-01-24 20:21:00 3229

原创 Delphi2010中DataSnap高级技术(6)—加强服务程序对访问者的控制能力

1)作为一个服务程序,如果不限制客户端访问数量,后果将是很可怕的。如果有人恶搞,服务器不堪重负,内存将耗尽,最终服务器将宕机。如何限制访问者的数量呢? 我们可以设置一个变量,来记录来访者的数量,如果超过我们既定的数字,那么后续的连接服务器请求,都将被断掉。 2)限制了访问数量,但是如果不做密码身份认证,无关的人员也将能登陆服务器!解决办法是客户端传入用户名和密码,如果用户名和密码不

2010-01-06 20:36:00 6461 5

原创 Delphi2010中DataSnap高级技术(5)—建立稳定服务程序之TCP心跳包的使用

为了能让我们的服务程序更加稳定,有些细节问题必须解决。就如上一讲中提到的客户端拔掉网线,造成服务器上TCP变成死连接,如果死连接数量过多,对服务器能长期稳定运行是一个巨大的威胁。 另外,经过测试,如果服务器上有TCP死连接,那么服务程序连接数据库,也会产生那个一个死连接。这样的话,给数据库服务器也造成威胁。所以,服务器程序编写的好坏,直接影响系统的稳定性! 如何解决TCP死连接的问

2009-12-17 10:33:00 9048 6

原创 Delphi2010中DataSnap高级技术(4)—TCP keepAlive和KeepAliveInterval参数详解

Delphi2010中DataSnap,如果客户端异常掉线或拔掉网线,那么在服务端会留下一个TCP连接,这个连接会变成死连接(经过测试,如果windows的TCP保持连接禁用的话,三个小时该死连接还不消失)。如果大量客户端并发,出现的死TCP连接过多,服务器内存和端口将会增加,直到占满服务器的端口和耗尽内存为止。如果这样的话,服务器无法健壮稳定的运行。 大家可以另开线程来监控客户端连接,但

2009-12-16 07:17:00 11588 4

原创 宝贝女儿快9个月了

宝贝女儿快9个月了,每天看到女儿的笑脸,内心充满了无比的幸福。女儿,父亲可以溺爱;男孩,父亲只能是深沉的爱!将我的溺爱毫无保留的表现出来,家有女儿,真是幸福!

2009-12-13 20:28:00 1952 2

原创 Delphi2010中DataSnap高级技术(3)—DataSnap服务器如何得到客户端的IP和端口

作为一个服务器软件,必须做到对客户端强有力的控制,想要控制,就必须得到客户端的网络基本信息,比如客户端IP和端口。有了客户端IP就能随心所欲操控客户端,比如终止某些客户端的连接、限制功能等等。 在delphi2010中的datasnap服务器如何获得客户端ip,的确花了我点时间,奇怪为什么这个功能不做的更人性化点呢,功能总是藏着掖着。还得让程序员像寻宝一样摸索,浪费时间。现在把我整理的结果

2009-12-12 10:03:00 8458 6

原创 Delphi2010中DataSnap高级技术(2)—DataSnap服务端和客户端发布分发方法

这几天继续研究DataSnap技术。针对服务器和客户端软件,如何发布呢?经过研究发现,分发方法非常简单! 服务器发布方法:1.在unit ServerMethodsUnit1单元中,添加uses MidasLib;(添加MidasLib的目的是省去发布Midas.dll)2.我用的是火鸟数据库,只需拷贝dbxfb.dll和fbclient.dll 分发的服务器软件只需三

2009-12-09 11:14:00 8843 2

原创 Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述

这几天一直在研究Delphi 2010的DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7该下岗了。DataSnap有三种服务模式,其中Service Application方式建立的windows服务没有描述,描述部分是空的,感觉总是欠缺点什么。现找到办法添加描述: procedure TServerContainer2.ServiceAfterInstall(

2009-12-05 10:40:00 6297 1

原创 delphi2010中DElphi class explorer妙用

 delphi2010中view -> Delphi class explorer ,将显示所有类,包括全局变量,而且右键菜单还可以在已有类中新增 字段、属性、方法。但是没找到如何新建类,不行的话,就手工吧!

2009-11-19 22:13:00 1747

原创 Delphi2010中TResourceStream流使用

Resource可以是任意文件(图像、声音、office都可以),直接打包到编译的exe文件中,调用也非常方便 打开一个新的或已有的delphi工程 1.先在 Project->resources..添加一个图片,并更改名字为myfirst,类型为RT_RCDATA2.在窗体上方一个image和button3.button代码如下 procedure TForm

2009-11-19 22:01:00 6421 4

翻译 Firebird数据库版本差别

 http://www.firebirdsql.org/index.php?op=guide&id=techspec Firebird Technical SpecificationsUpdated 2007-07-16 and subject to reviewDatabase Limits ItemFirebird 2.xFirebi

2009-11-19 19:18:00 2375

转载 将memo转化为JPG输出

unit s1;interfaceuses  Windows, Messages, SysUtils, Graphics, Controls, Forms, StdCtrls,  Classes;type  TForm1 = class(TForm)    Button1: TButton;    Memo1: TMemo;    procedure Button1Click(Sender: TO

2009-11-17 20:11:00 920

原创 ini文件还有64K的限制么?

今天用delphi2010和Delphi7测试了一下ini读写,已经没有64k的限制了,估计限制这事已经是老黄历了!

2009-11-17 16:50:00 1291 1

原创 2009年11月17日,宝贝女儿8个月了,我的最爱!

 宝贝女儿好比一颗珍珠,爸爸妈妈就是那一对保护你的贝壳。永远呵护在自己的怀里!

2009-11-17 09:16:00 752

原创 关于Record类型RTTI反射的用途和方法

  问题的引入:准备做一个多国语言软件,发现信息变量(都是字符串)数量庞大,如果简单的通过 “变量=readstring”从ini文件中获取的话,几百个变量就是几百行,这个工作量非常大,而且也不易维护。如果使用RTTI反射机制,未来变量变化时,赋值程序不用修改,只需修改变量结构,这是一劳永逸的做法。 注意:本例程使用delphi2010,delphi老版本不支持record类型

2009-11-17 01:01:00 3512 1

原创 statusbar学习(2)—在statusbar上显示图标和自动以颜色

procedure TForm2.FormCreate(Sender: TObject);begin  StatusBar1.Panels[0].Style := psOwnerDraw;  StatusBar1.Panels[1].Style := psOwnerDraw;end; procedure TForm2.StatusBar1DrawPanel(StatusBar: TStat

2009-11-13 22:18:00 3848

原创 编译变量$REGION用法

今天新学习了一个 编译变量$REGION,用于在delphi2006以后版本的折叠代码显示,非常方便。 procedure TForm2.Button1Click(Sender: TObject);var  uStr: UnicodeString;begin{$REGION 显示uStr变量内容}  uStr := ok;  ShowMessage(uStr);{$ENDREGIO

2009-11-13 21:49:00 3777 1

转载 合并动态数组

procedure TForm2.btn1Click(Sender: TObject);var  arr1, arr2: TBytes;  len: Integer;begin  SetLength(arr1, 3);  SetLength(arr2, 3);  arr1[0] := 65;  arr1[1] := 66;  arr1[2] := 67;  arr2[0] := 68;  ar

2009-11-13 20:09:00 2256

原创 关于delphi2010读取MySQL数据库TEXT类型乱码的解决方案

今天在测试delphi2010的DBExpress读取mysql数据库功能的时候,发现了一个问题: 我的mysql是5.1版本,字符集全部设置为utf8,使用delphi2010读取intger、tinyint、char、varchar等类型,中文显示正常。但是当读取text类型字段时候,出现乱码。如果将该字段更换为varchar,内容显示正常。这就奇怪了,我百思不得其解。 接着,

2009-11-11 15:48:00 5758 7

翻译 使用TWebBrowser组件保存网页为html和mht文件

 一、保存为HTML文件uses ActiveX;...procedure WB_SaveAs_HTML(WB : TWebBrowser; const FileName : string) ;var  PersistStream: IPersistStreamInit;  Stream: IStream;  FileStream: TFileStream;begin  if not As

2009-11-09 10:44:00 3937

原创 URL 文件格式

 URL文件实际上就是一个INI文件,结构也非常简单。大家可以打开记事本,建立一个txt文件,然后把扩展名改为*.url [InternetShortcut]URL=http://www.uufax.comWorkingDirectory=C:/WINDOWS/ShowCommand=7IconIndex=1IconFile=C:/WINDOWS/SYSTEM/url.dllModif

2009-11-09 10:00:00 5408 1

原创 如何知道鼠标点击的statusbar的位置

procedure TForm2.StatusBar1Click(Sender: TObject);var  mpt: TPoint;  x: integer;  j: integer;  panel: integer;begin  if (StatusBar1.SimplePanel) OR (StatusBar1.Panels.Count = 0) then  begin    Memo1.L

2009-11-07 17:11:00 1265

原创 如何让BitBtn按钮显示icon图标

BitBtn按钮的Glyph属性只能使用bmp图片,如果想用icon做图片可以使用下面语句。在窗体上添加imagelist,然后在form的create函数中添加  ImageList1.GetBitmap(0, BitBtn1.Glyph);

2009-11-07 16:26:00 4393

原创 delphi执行一个外部程序,当外部程序结束后,delphi程序立即响应(续)

今天发现前一篇文章的例程多少有些毛病,在主程序中使用repeat循环来等待外部程序的关闭,这样这个程序占用cpu会是100%,所以加上一句sleep语句来释放cpu。但是这样做我也不太满意,毕竟用了repeat循环,显得程序很不专业。今天试了另一种方法,使用WaitForSingleObject函数,而不用repeat过程。但是也发现了一些问题。等我有时间在优化一下。  function

2009-11-06 20:32:00 1637

原创 让delphi2010操作界面回到delphi7模式

 在使用delphi2010的过程中,很不习惯它的窗口在一个框框内,感觉很不方便,可能是因为使用delphi7很多年了,已经习惯了delphi7的版面。如何让delphi2010能有delphi7的版面布局呢?答案是肯定的,方法如下:1)在工具栏点右键,选择components 会看到delphi7中的组件显示面板2)tools > options > environment op

2009-11-06 19:22:00 5360 1

原创 delphi 2010 fastMM 内存泄露使用方法

Delphi2010集成了fastMM,这回大家调试程序是的时候可以方便地检查内存泄露了。使用方法如下:在project中,添加一行 ReportMemoryLeaksOnShutdown := DebugHookDebugHookprogram Project1;uses  Forms,  Unit1 in Unit1.pas { Form1 } ;{$R *.res}

2009-11-06 19:20:00 5881

原创 delphi2010打开后显示"displayNotification: 内存不够"解决办法

今天打开delphi 2010,提示"displayNotification: 内存不够",以前从来没碰到,经过研究发现时welcome page 产生的问题,正好对这个 welcome page页很反感,每次启动都出现。这次就干脆干掉它,禁止这个页面的办法如下:打开桌面或启动组中的 delphi2010图标的属性,在命令行后面加一个 -np"C:/Program Files/Embarc

2009-11-06 19:13:00 4948 2

原创 delphi执行一个外部程序,当外部程序结束后,delphi程序立即响应

我们经常能看到360安全卫士进行windows系统升级时,执行windows升级程序,当升级程序执行完成后,360马上弹出提示框。这样的程序是如何做到的呢?下述代码就能完成! procedure TForm1.Button1Click(Sender: TObject);var  SEInfo: TShellExecuteInfo;  ExitCode: DWORD;  ExecuteF

2009-10-27 20:48:00 1315

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除