随笔分类 - Delphi
摘要:一、主要场景 a)主程序启动另外一个程序,并传递参数 b)主进程向一个已经运行中的程序传递参数二、代码 1)调用程序:var HWND: DWORD; ApplicationHWND:DWORD;begin HWND:=FindWindow('TFrmMain', '参数接收窗口'); ApplicationHWND:=GetWindow(HWND,GW_OWNER); if HWND <> 0 then begin memo1.Lines.Add('参数接收程序已运行,向参数接收窗口投递消息。。。'); SendMessage(HW
阅读全文
摘要:一、使用向导 1.导入wsdl文件:file--new----other----webservice---WSDLimporter---输入wsdl地址 http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl 完成之后,即可导入wsdl文件。 注:结尾处的'?wsdl'不能少。 2.在导入的wsdl文件中手动添加部分注册代码: InvRegistry.RegisterInterface(TypeInfo(qqOnlineWebServiceSoap), 'http://WebXml.com.cn
阅读全文
摘要:主要特点: 完成同一种任务的一组线程。(一般初始线程数>=64) 原理: 通过“事先创建一堆线程,并且执行完后不销毁”的方式,避免每次任务到来时, 都要创建线程的开销。主要组成部分: 线程池管理器(ThreadPoolManager): 创建线程池 添加新任务 销毁线程池 工作线程(WorkThread): 线程池中的所有线程 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。 任务队列(TaskQueue):用于存放没有处理的任务。提供一种缓冲机制。基本操作: 一般情况下是首先初始化一定数量的工作线程,并把任务提交给空闲的线程,当线 程都处于忙...
阅读全文
摘要:1.names与values的使用var tempStrList:TStringList;begin tempStrList:=TStringList.Create; tempStrList.Add('sid'+'='+'06111'); tempStrList.Add('sname'+'='+'Eric'); ShowMessage(tempStrList[0]+#13#10+ tempStrList.Names[0]+#13#10+ tempStrList.Values['sid'
阅读全文
摘要:一.基本注意点 1.访问公共变量时需要设置临界区 2.不可直接操作界面,需通过向窗口发送消息来处理 PS:下面的测试程序中,为简单起见,在线程中直接对主界面进行了操作,实际开发 项目时是不应该如此操作的。二.主要代码 公共变量与临界区变量unit GlobalVar;interfaceuses Windows;var userCount:Integer; UserInfoRTL:TRTLCriticalSection;implementationend. 线程定义unit UserInfoManage_Thread;interfaceuses Classes, SysUtils, Gl...
阅读全文
摘要:【转自】http://hi.baidu.com/tony060156/blog/item/b4e81528e4080b80023bf644.html关于Class里的成员:1.Public,2.Private,3.Protected,4.Published,以上四个class 的成员指令,它们的功用是什么??要怎么用和什么时候输入?怎样用?和C++是差不多的、可见性不同、比较容易弄混的就是private和protected了、protected是只有自己和子类可见、private是同单元可见 1.private用于声明对象方法和字段具有有限的可见性,在申明类的单元外这个类不能被访问;。2.pr
阅读全文
摘要:转自:http://blog.csdn.net/weide001/article/details/4100481Ctrl+PageUp 将光标移至本屏的第一行,屏幕不滚动。 Ctrl+PageDown 将光标移至本屏的最后一行,屏幕不滚动。 Ctrl+↓ 向下滚动屏幕,光标跟随滚动不出本屏。 Ctrl+↑ 向上滚动屏幕,光标跟随滚动不出本屏。 Ctrl+Shift+NUM 在光标行设置最多九个临时标志号,对临时切换非常有用。 行的左边将出现一本书,封面有NUM,再按一次取消设置。 Ctrl+NUM 直接将光标跳到NUM处,NUM是用Ctrl+Shift+NUM设置的标号。 NU...
阅读全文
摘要:一.基本声明 TOnUserInfoShow = procedure(userName:string;userAge:Integer)of object;//定义事件模型中的回调函数原型 TUserInfo = class private FName:string; FAge:Integer; FOnUserInfoShow: TOnUserInfoShow; procedure FSetAge(theAge:Integer); public property Name:string read FName;//只读属性(私有变量)...
阅读全文
摘要:一.基本概念只是一个“验证推断”的调式工具,而不是程序的一部分。 a)断言作用:顾名思义,开发者用于“验证自己的推断”的工具,调试阶段使用。 简单的参数验证——变量 复杂的条件验证——函数 简而言之, 断言是用来验证我们编码时所做的假设,而不是用来处理 运行时的各种逻辑分支。 b)开启与关闭 整个IDE: Project—>Option—>Compiler—>Assertion 代码中:{$ASSERTIONS ON} ,{$ASSERTIONS OFF} C)何处使用 1)私有函数中进行“参数检查” 2)适当的地方,检查系统中的某些关键变量 对于公共函数,通常不使用asse
阅读全文
摘要:一.原理 通过使用“内存映射文件”,实现内存共享二.主要操作 共享内存结构: PShareMem = ^TShareMem; TShareMem = Record id:string[10]; name:string[20]; age:Integer; end; 基本变量: shareMemName:string; //共享内存名 fileHandle : THandle;//内存映射文件句柄 pUserInfoShareMem : PShareMem;//指向共享内存的指针 a)写入程序 1)创建“内存映射文件”begin //创建“内存映射文...
阅读全文
摘要:一.钩子的基本概念 a) Hook作用:监视windows消息,在“特定消息”没有到达窗口之前捕获它。 b)钩子分类: 线程专用钩子:只监视指定的线程 全局钩子:监视系统中的所有线程 如果Hook过程在应用程序中实现,若应用程序不是当前窗口时,该Hook就不起作用; 如果Hook在DLL中实现,程序在运行中动态调用它,它能实时对整个系统进行监控. c)几种常用类型的钩子: 1)键盘钩子可以监视各种键盘消息。 2)鼠标钩子可以监视各种鼠标消息。 3)外壳钩子可以监视各种Shell事件消息,启动和关闭应用程序等。 4)日志钩子可以记录从系统消息队列中取出的各种事件消息。...
阅读全文
摘要:一.主要代码 a)主窗体type TFrameClass = class of TFrame; TFrmMain = class(TForm) Button1: TButton; Panel1: TPanel; Button2: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private decla...
阅读全文
摘要:参考VCL的代码,结合笔者近两年来的一些经验,可以简单总结出一套Delphi下常用的命名规范。类型定义(type)包括class、record、枚举、procedure/function变量等所有写在type下的类型定义用大写的T开头,例如TList(class)、TPoint(record)、TAlign(枚举)、TNotifyEvent(procedure变量)常量(const)自定义的简单类型常量(如Integer、Pointer等类型)建议用C开头也有不少常量是需要根据单词意思推断的,如MaxDateTime(以Max开头,让人从意思上猜到是常量)字符串常量用S开头(因为字符串常量与简
阅读全文
摘要:两类主要消息处理函数:1)向自身分发消息,由自己的成员函数处理:Dispatch(var message:string);同步2)向指定的类投递消息: a)SendMessage 异步投递 b)PostMessage 同步投递一.自定义消息号和消息结构const WM_5001=WM_USER+5001; WM_5002=WM_USER+5002; WM_5003=WM_USER+5003; WM_6001=WM_USER+6001;type //自定义消息结构 PMsgRec = ^TMsgRec; TMsgRec = record msgNo : Cardinal...
阅读全文
摘要:function NumericPrecCheck(compnentCaption,text:string;numericPrec:integer;maxLimit:Integer):string; var E: extended; begin Result:=''; try text:=Trim(text); E:=StrToFloat(text); if E>maxInt then begin Result:=compnentCaption+'超过范围'+inttostr(maxLimit)+', 请重新输入...
阅读全文
摘要:执行范例: 1 var 2 Qry:TAdoQuery; 3 singleRecord,Response:string; 4 begin 5 Context.Response:='获取合约列表返回数据!'; 6 Qry:=TAdoQuery.Create(nil); 7 try 8 try 9 Qry.Connection:=Context.Cn;10 Qry.Close;11 Qry.SQL.Clear;12 Qry.SQL.Add('select * from wmnow..code');13 ...
阅读全文
摘要:uses math;1.round(四舍六入五留双)1 var2 i, j: Integer;3 begin4 i := Round(1.5); // i等于25 j := Round(2.5); // j等于26 end;2.RoundClassic(传统四舍五入)3.trunc(取得X的整数部分)如:trunc(-123.55)=-123, floor(123.55)=1234.ceil(取得大于等于X的最小的整数)如:ceil(-123.55)=-123, ceil(123.15)=1245.floor(取得小于等于X的最大的整数)如:floor(-123.55)=-124,floor(
阅读全文
摘要:1.重载构造函数overload关键字eg: constructor Create(Name:string;Sex:string;Year:integer;Tall:integer;Weight:integer);overload; constructor Create(Name:string;Sex:string);overload; ps: 重载构造函数,注意一定要使用关键字:overload2.自定义类中是否需要显式定义构造函数: 所有类默认继承自TObject,即使没有声明class(TObject),Create实际是通知编译器为其分配一块堆内存.在自定义类中,即使没有显式的定义构.
阅读全文