存档

文章标签 ‘delphi’

找到一个读cpu串号的代码,delphi的,记录一下(申明是人家的代码)

2012年12月30日
找到一个读cpu串号的代码,delphi的,记录一下(申明是人家的代码)已关闭评论

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     EDI,EAX      {@Result (TVendor)} MOV     EAX,0 DW      $A20F        {CPUID Command} MOV     EAX,EBX XCHG    EBX,ECX      {save ECX result} MOV     ECX,4 @1: STOSB SHR     EAX,8 LOOP    @1 MOV     EAX,EDX MOV     ECX,4 @2: STOSB SHR     EAX,8 LOOP    @2 MOV     EAX,EBX MOV     ECX,4 @3: STOSB SHR     EAX,8 LOOP    @3 POP     EDI          {Restore registers} POP     EBX end; function GetCPUInfo: string; var CPUID: TCPUID; I: Integer; S: TVendor; begin for I := L

more...

程序设计

Delphi中的线程类的解释

2012年12月30日
Delphi中的线程类的解释已关闭评论

转贴于 华夏黑客同盟 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 lpThreadId ); 其各参数如它们的名称所说,分别是:线程属性(用于在NT下进行线程的安全属性设置,在9X下无效),堆栈大小, 起始地址,参数,创建标志(用于设置线程创建时的状态),线程ID,最后返回线程Handle。其中的起始地址就是线 程函数的入口,直至线程函数结束,线程也就结束了。 因为CreateThread参数很多,而且是Windows的API,所

more...

程序设计

Delphi实现操作Foxpro的dbf文件,并导出整合实现txt和dbf互相转换

2012年12月28日
Delphi实现操作Foxpro的dbf文件,并导出整合实现txt和dbf互相转换已关闭评论

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 delimited with tab’);//导出txt文件 foxPro.Quit; foxPro:=  Unassigned; 上面的代码是将ckc.db文件导出到student.txt文件。 如果想导入,可以使用append命令 这样就完美的解决了这个问题

more...

程序设计 ,

delphi中得到文件的大小

2012年12月27日
delphi中得到文件的大小已关闭评论

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.cFileName;       FullName:=s+FName;      if (FName=’.’) or (FName=’..’) then continue;      if (FindFileData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY then         FindAllFile(FullName,List)      else         begin           List.Add(FullName);        end;     until FindNextFile(hFindFile, FindFileData) = false;     windows.FindClose(hFindFile);  end; end; 这个函数可以获得指定文件的大小: function GetFileSizeByName(AFileName: string): Int64; var   h: THandle;   dwHig

more...

程序设计

delphi里面控制Edit只能输入数字

2012年12月27日
delphi里面控制Edit只能输入数字已关闭评论

如何在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’..’9′,#13,#8 ,#46]) then key := #0; 这样就可以了 只能输入数字,而不能输入其他字符 ━━━━━━━━━━━━━

more...

程序设计