当前位置:首页 > Windows程序 > 正文

delphi 日常注意点

2021-03-27 Windows程序

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  

             万一博客:

       类方法作用:

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

       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中关于互斥量与信号量运用

理解互斥量与信号量

动作\系统   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. 互斥量用于线程的互斥,信号线用于线程的同步。

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

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68232.html