关于TPerlRegEx类使用上的一些经验
最近工作时遇到了一些关于html解析方面的开发,下面说说在使用正则表达式时遇到的一些问题。[@more@]在delphi里可以使用类TPerlRegEx来实现对正则表达式的调用。TPerlRegEx中有几个函数和属性我们在开发中会经常用到,如Subject、RegEx、Match、AgainMatch、SubExpressions、Replacement和ReplaceAll等等。由属性或函数名我们不难推测出他们的功能,这里不详细介绍属性和函数的功能,做几个实例供大家参考。查找指定格式的字符串我们要在字符串中查找类似如下格式的所有字符串,dse_sessionId=6Ee0Y05AkhLUeO4R8nenMvM,做过web开发的朋友
取得gbk编码
在使用indy编程开发时,一般会接触到编码的一些知识,这里我简单说说我在开发时涉及关于取得gbk编码的问题。[@more@]得到字符串GBK编码,简单的说就是一个ansi文本,用ultraEdit打开时使用Hex方式查看时所看到的文本编码。function ToHexString(s: string; encode: TEncoding): string;var TmpStr: string;ByteAy: Tbytes;tmpByte: Byte;beginByteAy := encode.GetBytes(s);TmpStr := '';for tmpByte in ByteAy doTmpStr := Format('%s%.2x', [tmpstr, tmpbyte]);Result := TmpStr;end;var s: String;begin s := edt1.Text; edt1.Text
关于ListView控件使用时的一些心得
最近在使用Delphi过程中发现ListView控件说道不少,列举如下,1.ListView在创建时必须要指定Parent,否则不能正常调用。2.建议不要使用ListView做为局部变量保存数据。 原因占用大量内存,严重影响屏幕刷新,如与DevExpress皮肤一同使用极有可能出现异常。[@more@]
com注册会自动执行的代码段
如果在程序内部使用了initialization(或finalization)来执行初始化(或析构),那么在com注册时他们将会被执行。[@more@]这一点一定要注意,因为delphi2010 IDE目前还无法对com注册时在代码段initialization或finalization自动执行代码的报错提示有帮助的信息。最直接的处理方式是将单元文件中initialization或fianlization中的代码由自己控制,而不是交给initialization或finalization。
delphi中回调函数差异
回调函数有两种形式,用在类里面的和类外的。前者在定义回调函数时需要在声明最后加上of object以区分在类外调用情况。具体举例如下,[@more@]类外情况:TCallBack = procedure(Param1: Integer;Param2: String;...ParamX...);TXClass = class(TObject)FCallBack: TCallBack;property OnCallBack: TCallBack read FCallBack write FCallBack;procedure CallBack(Param1: Integer;Param2: String;...ParamX...);TXClass.CallBack(Param1: Integer;Param2: String;...ParamX...);beginif Assigned(FCallBack) ThenFCallBack(Param1, Param2,
让delphi在调试时不监视指定异常
在调试程序时,可能需要让delphi不拦截某些异常,这时我们可以设置debugger options中的language exceptions来完成。下面举例说明如何让delphi在调试时不拦截EOleError,[@more@]打开Tools|Options|Debugger Options|Language Exceptions在右面的Excetpion types to ignore列表中增加EOleError即可。同样,当你在调试程序时,在delphi弹出的Debugger Exception Notification对话框中选择了“Ignore this exception type”后,又想恢复此种异常拦截时,即可用上述方法的反向来实现了。
COM+组件启动报错问题处理
自定义COM+组件,在启动时报错“错误代码 8000401A - 因为配置类型不正确,系统无法开始服务器进程。请检查用户名和密码。”[@more@]解决办法:运行dcomcnfg打开组件服务, 依次展开"组件服务"->"计算机"->"我的电脑"->"COM+应用程序" 找到对应的应用程序 右键打开属性对话框,点击"标识"选项卡, 点"下列用户",把管理员(Administrator)的用户和密码(登陆服务器的密码)正确填写进去。但一旦重新装系统或者密码变化后需要重新在此处设置密码。
转---让指针不再困扰你
我们先认为内存是一家客栈(看起来这和老掉牙的大楼的比喻没什么区别,但是请你耐心看下去)。[@more@]同大部分的客栈一样,这家客栈有天、地、人等各种档次的房间,用现在的话就是单人间、双人间、四人间等等。来住店的客人也是车水马龙,三教九流都有,我们看看都有哪些人: 快乐单身汉char,还有char的小弟unsigned char,他们只住单人间; short int, unsigned short int都是已婚无孩,他们只住二人间; int, unsigned int, long int, unsigned long int,这些都是四口之家,当然住四人间了;说起来这里面的前两位,int和 uns
Delphi中调试dll方法
就目前所知有两种方法在Delphi中调试DLL文件,分别如下所示:(1)、[Project-->Add Existing Project...]将DLL和宿主程序(就是使用本DLL的程序)添加到一个工程组中,可以同时调试DLL和宿主程序。(2)、 [Run-->Parameters... ]在Host Application中填入宿主程序的完整路径然后选择[ Project|Options.. ]选择Directories/Conditionals页面在Output directory中填入宿主程序所在目录(这是将编译的DLL程序输出到宿主程序所在目录下)[@more@]
转载---Dephi状态模式(State模式)
对于面向对象开发来说,很长的函数和过程是不容易维护的,同样冗长的if else 以及case of的条件判断语句会使得代码不够清晰,特别是当条件判断很多时,比如有几十条甚至十几条条件判断语句,会使得代码难以修改和维护。 在早期windows开发中,程序员经常需要编写巨大的消息判断语句,根据消息的不同调用不同的消息处理函数,后来为了改善消息处理的复杂程度,Delphi引入了message关键字,从编译器一级对消息处理进行了映射,减少了条件判断语句的大量使用,这一案例就是巨大的条件判断语句弊端的典型体现。 通常说来,if else 以及case 语
软件编码阶段遇到问题的处理办法
前提:开发软件编码阶段问题1:遇到新需求,此时应当思考的问题不是怎么解决问题,而是什么呢?而是坐下来思考新需求的来龙去脉,弄清楚需求的本质。你可以自问以下两个问题:一、需求合理吗?二、产生这个需求的前因后果?(重要)其实,弄清楚需求或问题的本质才是关键,为什么会产生这个问题,问题是如何产生的,它会导致什么样的结果,等等一系列问题都要考虑清楚才行。[@more@]最后就是怎么解决问题了,就是要考虑清楚这个需求所涉及的数据流走向。对于刚入门的开发人员,如果时间充足最好写出开发文档。将各个控制及相应数据状态的变化
Delphi5学习笔记之四
142.线程同步问题:可以使用临界区、互斥量、信号量和事件来实现线程同步。 临界区:它就是一次只能由一个线程执行的一段代码。在使用临界区的方法: 第1步:调用过程procedure InitializeCriticalSection(var lpCriticalSection: TRTLCriticalSection);初始化临界区。 第2步:调用过程procedure EnterCriticalSection(var lpCriticalSection: TRTLCriticalSection);进入临界区。 第3步:执行临界区中的代码 第4步:调用过程LeaveCritcalSection(var lpCriticalSection: TRTLC
Oracle驱动
在没有安装Oracle的电脑上访问Oracle的办法:目前我所了解的就是使用Oracle 9i OleDB,它的大小是100M多,不知道还有没有其它的驱动可以达到同样的功能?[@more@]
Delphi5学习笔记之三
126. 在使用Printer.Abort();终止打印后,不能再调用Printer.Canvas或Printer.EndDoc来对打印机进行打印操作。 127.使用Printer对象打印的详细步骤:一、确认要打印的对象。二、确认打印机画布的测量单位。三、确认每个要插入到目标上的对象的测量单位。四、确定一个在整个打印中使用的公共测量单位,通常是打印机的测量单位,即像素。五、把其它各种对象的测量单位转换成公共测量单位。六、用公共测量单位计算出打印对象的尺寸。在Pascal里,要打印的尺寸由TPoint结构来表示。七、根据步骤六得到打印对象的尺寸及打印机画布的坐标系统来计
Oracle学习笔记之二
18.Oracle中的索引分为两大类:B-树索引和位图索引。19.Order by 中的列必须是select 所选中的,如:select id,name from sometab order by sex 这样是不行的正确的是:select id,name from sometab order by id或select id,name from sometab order by name[@more@]20.在某个表(A)上所建立的触发器,如果这个触发器是在该表被修改时触发,那么这个触发器内不能包含对表A本身的查询。如果数据库的其它事务一样,正在对一个表进行修改的同时,不能再对这个表进行查询。21.SQL*Plus中一些常用的命令及使用技巧SQL> show user;显示当前用户(
使用ADO访问Oracle问题汇总
1.应使用微软的驱动来访问Oracle。 2.利用ADO访问数据库(如:Oracle)时,如果想使用数据感知组件DBGrid等编辑数据(编辑记录时,ADO默认会将数据自动提交,如果数据正确则没有关系,可是存在重复记录时,就会引发异常),并且不想让数据在数据集滚动时自动提交,可以设置它的属性LockType值为ltBatchOptimistic,这样做的目的是为了避免“更新多列”异常,不过一般情况下是不会出现该异常的,这样做之后需要自己来控制数据的提交,可以把在数据感知组件DBGrid中编辑过的数据保存到记录数组里,之后再提交。[@more@]1说明:如果使用的是Oracl
Oracle9i中数据移置
移置数据库的方法很多,我使用的方法是使用导入导出用户来实现的。[@more@]在目标机上先建好想要导入的用户,之后就可以使用向导来导入了。注:可以使用工具TOAD进行数据库的导入导出,使用它更加方便快捷。
Oracle9i的OMS使用方法
OMS是Oracle Management Server的缩写,要想登录到OMS首先必须做两件事,一、使用EMCA来配置OMS。二、启动服务:OracleOraHome92ManagementServer。[@more@]说明:在配置OMS前要建立好自己的数据库,其实配置OMS也就是“指定资料档案库”的位置。在启动服务时,可能启动不起来,如果你的机器是通过路由动态分配的IP,那么需要到目录下C:Windows/system32/drivers/etc/找文件hosts,在该文件的最下方添加“路由给你分配的IP 你的机器名”,如:192.168.1.1 abc,之后再到注册表中找HKEY_LOCAL_MACHINEsystemcontrolset001ServicesOracleO