2012年12月30日,星期日
unit CPU; interface uses SysUtils; type TCPUID = array[1..4] of Longint; TVendor = array[0..11] of char; function GetCPUID: TCPUID; assembler; register; function GetCPUVendor: TVendor; assembler; register; function GetCPUInfo: string; implementation function GetCPUID: TCPUID; assembler; register; asm PUSH    EBX         {Save affected register} PUSH    EDI MOV     EDI,EAX      {@Resukt} MOV     EAX,1 DW      $A20F        {CPUID Command} STOSD                {CPUID[1]} MOV     EAX,EBX STOSD                {CPUID[2]} MOV     EAX,ECX STOSD                {CPUID[3]} MOV     EAX,EDX STOSD                {CPUID[4]} POP     EDI          {Restore registers} POP     EBX end; function GetCPUVendor: TVendor; assembler; register; asm PUSH    EBX          {Save affected register} PUSH    EDI MOV    ···
2012年12月30日,星期日
转贴于 华夏黑客同盟 http://www.77169.org Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对 TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchronize的用法就完了。然而这并不是多线程编 程的全部,我写此文的目的在于对此作一个补充。 线程本质上是进程中一段并发运行的代码。一个进程至少有一个线程,即所谓的主线程。同时还可以有多个子线程。 当一个进程中用到超过一个线程时,就是所谓的“多线程”。 那么这个所谓的“一段代码”是如何定义的呢?其实就是一个函数或过程(对Delphi而言)。 如果用Windows API来创建线程的话,是通过一个叫做CreateThread的API函数来实现的,它的定义为: HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadI···
2012年12月28日,星期五
foxpro 最近做程序的时候需要用到delphi和foxpro的dbf表,想通过delphi来操作dbf表! delphi操作foxpro的表有好多的办法, 如用datasorce连接tquery组件把查询结果显示在dbgrid表格里 这样没有办法导出查询的结果! 可是想把查询dbf表的结果给导出为dbf文件就比较麻烦了! 经过一番努力找到了一个好办法! 在foxpro中完成这些工作简直太容易了, 但很多功能必须用delphi实现。 虽然可以用foxpro做个小程序, 然后再用delphi调用,可是比较麻烦。 这就 让我想到了可以用Delphi通过调用Com组件的方式 直接执行foxpro命令来实现,代码如下: foxPro:=CreateOleObject(‘VisualFoxPro.Application’); foxPro.DoCmd(‘USE F:\zhuchong\练习\ckc.dbf’); foxPro.DoCmd(‘select *form ckc.dbf where bmddm=’1221′  into table bmddm.dbf’);//导出dbf文件 foxPro.DoCmd(‘copy to F:\zhuchong\练习\student.txt d···
2012年12月27日,星期四
delphi中得到文件的大小 var vSearchRec: TSearchRec; begin FindFirst(‘<文件名>’, faAnyFile, vSearchRec); Caption := IntToStr(vSearchRec.Size); // vSearchRec.FindData.ftCreationTime//创建时间 // vSearchRec.FindData.ftLastAccessTime//访问时间 // vSearchRec.FindData.ftLastWriteTime//修改时间 FindClose(vSearchRec); end;   计算目录大小的函数,获得目录文件列表,计算文件的大 这个函数可以获得指定目录下所有的文件路径+名称,能够递归搜索: procedure FindAllFile(const Dir: string;List: TStringlist); var   hFindFile: THandle;   FindFileData: WIN32_FIND_DATA;   FullName,FName,s:string; begin   s:=IncludeTrailingPathDelimiter(Dir);   hFindFile := FindFirstFile(pchar(s+’*.*’), FindFileData);  if hFindFile <> 0 then begin     repeat       FName:=FindFileData.cFileN···
2012年12月27日,星期四
如何在delphi里面控制Edit只能输入数字 ━━━━━━━━━━━━━━━━━━━━━━━━━━ if not (key in [‘0’..’9′,#8]) then key := #0; 只能输入汉字,而不能输入数字或其他字符 ━━━━━━━━━━━━━━━━━━━━━━━━━━ 在Edit的OnKeyPress事件中 procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if (Ord(Key)<127) or (Ord(Edit1.Text[1])>127) then Key:=#0; end; 要使一文本框中只可输入数字,而且当输入的数字错误时还可以通过Backspace键来修改. ━━━━━━━━━━━━━━━━━━━━━━━━━━ 由于BackSpace的ASCII值是8,所以像以下这样即可 if (key<>#46) and ((key < #48) or (key > #57)) and (key <> #8) then //如果输入不是数字或小数点(#46代表小数点) begin key:=#0; //取消输入的内容(#0代表空值) showmessage(‘输入错误!请输入数字!’); //发出提示信息 end; 方法二: if not (key in [‘0&#···