Следующая статья: Отключение клавиш <Ctrl>+<Alt>+<Del>, <Alt>+<Tab>, <Ctrl>+<Esc> из приложения.
// global
const BigM = 1000000;
function Pend(Pi, Pf: TPoint): Real;
begin
if (Pf.X = Pi.X) then
Result := BigM // for a vertical line
else
Result := (Pf.Y - Pi.Y) / (Pf.X - Pi.X);
end;
function Dist(Pi, Pf: TPoint): Real;
begin
Result:=sqrt(sqr(Pi.Y - Pf.Y) + sqr(Pi.X - Pf.X));
end;
function CalcPoint(Pi, Pf: TPoint; d: Word): TPoint;
var k, m: Real;
begin
m:=Pend(Pi,Pf);
k:=d/(Sqrt(1+Sqr(m)));
if ((Pf.X - Pi.X) < 0) then
begin
Result.X := Pi.X - Round(k);
Result.Y := Pi.Y - Round(m * k);
end
else
begin
Result.X := Pi.X + Round(k);
Result.Y := Pi.Y + Round(m * k);
end;
end;
function ExploreLine(Srch, Fst, Lst: TPoint): Boolean;
var
p: Word;
Any: TPoint;
lim, dis: Real;
begin
lim:=Dist(Lst,Fst);
p:=1;
Any := Fst;
repeat
Result := TestPoint(Srch, Any);
dis := Dist(Any, Fst);
Any := CalcPoint(Fst, Lst, Rad * p);
Inc(p);
until (Result)rr(dis >= lim);
end;