.
解决方案 »
- 请问delphi中有没有将二进制转换成十六进制的函数?
- 在BHO编程中得到网页的源代码后,修改源代码后,如何使浏览器继续调用修改完的代码 在线等待
- 在线等待---panel的caption怎样分行显示??
- 请问关于switch/case是怎么使用的???
- 数据库出错
- 如何将两个表中的数据在同一个报表中输出?急!!!!
- 在数据表中添加了照片以后,再运行程序总是报错:BLOB has been Modified.高分求问
- 新手
- EHgrid控件据说有财务报表功能(就是很多竖线的那种)请问怎么设置
- 困扰已久的数据库问题
- COM对象的问题
- 求救:使用TQUERY的SQL语句无法转换.DBF中的字符串型字段为数值型字段!!
你需要形式上声明一个WINDOWS所要求的函数,然后把函数的地址传给WINDOWS,也就是让
WINDOWS知道你需要执行的指令的地址,当某种特定的情况下,WINDOWS会调用你写的这个函数!
从而使你获得控制权.例如:
HHOOK SetWindowsHookEx(
int idHook, // type of hook to install
HOOKPROC lpfn, // address of hook procedure <--此处就要求给出一个回调函数的地址给OS;
HINSTANCE hMod, // handle of application instance
DWORD dwThreadId // identity of thread to install hook for
);
这个API函数允许程序员监视一些特定的系统事件!
Form1: TForm1;
Counter :Byte;implementation{$R *.DFM}procedure MovingDots(X,Y: Integer; TheCanvas: TCanvas); stdcall;
begin
Counter := Counter shl 1; // Shift the bit left one
if Counter = 0 then Counter := 1; // If it shifts off left, reset it
if (Counter and 224) > 0 then // Are any of the left 3 bits set?
TheCanvas.Pixels[X,Y] :=clBtnFace // Erase the pixel
else
TheCanvas.Pixels[X,Y] :=clBlack; // Draw the pixel
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
LineDDA(30,30,200,30,@MovingDots,LongInt(Canvas));
LineDDA(200,30,200,150,@MovingDots,LongInt(Canvas));
LineDDA(200,150,30,150,@MovingDots,LongInt(Canvas));
LineDDA(30,150,30,30,@MovingDots,LongInt(Canvas));
end;以上的LineDDA就是我们说得内部函数,而它调用的MovingDots就是自己定义的外部函数,
也就是回调函数