文章关键字 ‘delphi’
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···