delphi 日常注意点

一:关于类

TfrmFAModule = class;

TfrmFAModuleClass = class of TfrmFAModule;   关于此申明的作用,可以传递一个类参数,比如

function ShowModule(AModuleClass: TfrmFAModuleClass;AnModuleNo: integer; const AsName: string = ‘‘;

const bAutoCreate: boolean = True; const bBrintToFront: boolean = True): TfrmFAModule; //显示界面

二:关于try

try    。。。。finally  。。。end;  语句  对象在try语句之前创建,不然finally中的对象释放可能不存在。

三:直接操作数据库的sql不要在界面单元写,而要在obj中写

四:关于过程指针

//指向显示明细模块过程的指针。Params 传入参数     此函数作用:在基类中申明与执行过程,在子类中给定指针的值,有利于基类的设计统一

PShowDetail: procedure (Sender: TObject; Params: TPKValueList);

PShowDetail := LoadLSSalesMan;  //给指针过程赋值

if Assigned(PShowDetail) then       //执行指针过程

begin

ValueList := TPKValueList.Create;

try

FetchParamsForShowDetail(ValueList);

PShowDetail(self, ValueList);

finally

ValueList.Free;

end;

end;

五:关于方法继承

父类方法有abstract标识,子类没声明且没实现,如果子类的子类要实例化的话,则子类的子类必须声明以及实现该方法

如果子类与父类指向同一个对象,当释放掉父类对象后,不能再释放掉子类对象

JSON之SuperObject

万一博客:http://www.cnblogs.com/del/category/215158.html

类方法作用:

不用创建对象就能用,避免内存泄露

delphi关闭应用程序

function KillTask(ExeFileName:string):boolean;

const

PROCESS_TERMINATE = $0001;

var

ContinueLoop: BOOLean;

FSnapshotHandle: THandle;

FProcessEntry32: TProcessEntry32;

begin

Result := False;

FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);  通过获取进程信息为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照。0:表示当前进程

FProcessEntry32.dwSize := SizeOf(FProcessEntry32);

ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

while Integer(ContinueLoop) <> 0 do

begin

if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then

Result := TerminateProcess(

OpenProcess(PROCESS_TERMINATE,

BOOL(0),

FProcessEntry32.th32ProcessID),

0);

ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);     //进程的依次循环来找正确的进程关闭

end;

CloseHandle(FSnapshotHandle);

end;

异常问题

数据类型转型时可能要抛出异常,比如字符串转型成浮点型等,必须要抛出异常

截取字符串 Trunc在有必要的情况下也要抛出异常

对于异常处理要特别注意

杂录

initialization ------ 在单元中放在文件结尾前,包含用来初始化单元的代码,它在主程序运行前运行并且只运行一次。

finalization ------ 在单元中放在 initialization 和 end. 之间,包含了单元退出时的代码。在程序退出时运行并且只运行一次。

前台程序尽量用FreeAndNil来释放资源

前台InitDevice中关于互斥量与信号量运用

理解互斥量与信号量

http://blog.chinaunix.net/uid-10008293-id-2972285.html

动作\系统 Win32 Linyx Solaris
创建 CreateMutex pthread_mutex_init mutex_init
加锁 WaitForSingleObject pthread_mutex_lock mutex_lock
解锁 ReleaseMutex pthread_mutex_unlock mutex_unlock
销毁 CloseHandle pthread_mutex_destroy mutex_destroy

摘要:

1. 互斥量用于线程的互斥,信号线用于线程的同步。

这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。

互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允                许多个访问者同时访问资源

 互斥量值只能为0/1

时间: 2024-11-12 09:13:47

delphi 日常注意点的相关文章

DELPHI编写服务程序总结

一.服务程序和桌面程序的区别 Windows 2000/XP/2003等支持一种叫做“系统服务程序”的进程,系统服务和桌面程序的区别是:系统服务不用登陆系统即可运行:系统服务是运行在System Idle Process/System/smss/winlogon/services下的,而桌面程序是运行在Explorer下的:系统服务拥有更高的权限,系统服务拥有Sytem的权限,而桌面程序只有Administrator权限:在Delphi中系统服务是对桌面程序进行了再一次的封装,既系统服务继承于桌

转:Delphi中使用比较少的一些语法

http://www.cnblogs.com/Murphieston/p/5577836.html 本文是为了加强记忆而写,这里写的大多数内容都是在编程的日常工作中使用频率不高的东西,但是又十分重要. ---Murphy 1,构造和析构函数: a,构造函数: 一般基于TComponent组件的派生类,都应该使用overload关键字进行继承,Delphi中的对象没有什么复合的概念,在设计时,从简便的角度出发 一般都设计为耦合性较强,但是使用简单的派生类即可.构造函数不是必写的,除非“复合”这样的

《zw版&#183;delphi与halcon系列原创教程》zw版_THImagex控件函数列表

<zw版·delphi与halcon系列原创教程>zw版_THImagex控件函数列表 Halcon虽然庞大,光HALCONXLib_TLB.pas文件,源码就要7w多行,但核心控件就是两个: THImagex,图像数据控件,v11版,包括488个函数和子程序 THOperatorSetX,操作主接口控件,v11版,包括1929个子程序 以上两大核心控件,已经删除个别delphi内部属性函数,不影响日常使用. 其他控件,基本上,都是为配合两个控件,提供数据类型支持.辅助功能.已经一些特殊应用(

Delphi中使用比较少的一些语法

本文是为了加强记忆而写,大多数内容都是在编程的日常工作中使用频率不高的东西,但是又十分重要. 1,构造和析构函数: a,构造函数: 一般基于TComponent组件的派生类,都应该使用overload关键字进行继承,Delphi中的对象没有什么复合的概念,在设计时,从简便的角度出发 一般都设计为耦合性较强,但是使用简单的派生类即可.构造函数不是必写的,除非“复合”这样的对象实现,当省略构造函数时,会由其父类来实现 新对象的建立.下面是几个常用的写法: constructor TfmBaseScr

delphi 注册表操作(读取、添加、删除、修改)完全手册

DELPHI VS PASCAL(87)  32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息. 一.创建和释放TRegistry对象 1.创建TRegistry对象.为了操作注册表,要创建一个TRegistry对象:ARegistry := TRegistry.Create: 2.释放TRegistry对象.对注册表操作结束后,应释放TRegistry对象所占内存:ARegistry.Destroy. 二.指定要操作的键 操作注册表时,首先应指定操作的主键:先给属性R

给大家推荐几款个人觉得特别好用的编程及日常用的软件(持续更新!)

原文:给大家推荐几款个人觉得特别好用的编程及日常用的软件(持续更新!) 子曾经曰过:"工欲善其事,必先利其器!",呵呵,好用的软件必然会对工作和生活提高很多效率,下面我就把我个人觉得不错的软件整理出来,这里可能之前提到过几个,不过没关系,以后我再发现好用的东西会在这里持续更新! 宝典总数:[27个]  更新时间:[2015年1月29日09:04:21] ※宝典1:源代码管理软件-"CODEHELP" CodeHelp是专门为我们程序员设计的一款源代码管理软件.它能方

奖学金评分系统(系统分析与设计版与Delphi实现代码)

一.系统规划 1.1 项目背景介绍 在奖学金评比过程中,学生综合测评是学校普遍采用的评比手段.对学生实施综合素质测评的目的在于正确评价学生的综合素质,为评奖学金提供依据,实现学生教育管理工作的标准化.制度化和科学化,引导和促进学生德.智.体.美全面发展. 1.2 现存问题及系统目标 目前我国普遍高校学生奖学金评比还停留在纸质的阶段,许多工作需要传统的手工操作,这不仅浪费了大量的人力物力资源,而且由于人工管理存在着许多不可控因素,导致学生奖学金评比操作不规范,测评结果不全面,不能客观准确地反应学生

Delphi常用系统函数总结

字符串处理函数 Unit System 函数原型 function Concat(s1 [, s2,..., sn]: string): string; 说明 与 S := S1 + S2 + S3 ...; 相同. 将字符串相加. 函数原型 function Copy(S: string; Index, Count: Integer): string;说明 S : 字符串. Indexd : 从第几位开始拷贝. Count : 总共要拷贝几位. 从母字符串拷贝至另一个字符串. 函数原型 pro

最新的Delphi版本号对照

The CompilerVersion constant identifies the internal version number of the Delphi compiler. It is defined in the System unit and may be referenced either in code just as any other constant: if CompilerVersion = 20 then sCompilerName := 'Delphi 2009';