Câu hỏi

26/04/2013 21:34
Tôi phải làm thế nào để ngăn hoặc bắt phím ngắt (break key) trong Turbo Pascal để chương trình của tôi không bị ngắt?
Danh sách câu trả lời (2)

khung

Có một biến CheckBreak trong unit Crt, luôn được đặt mặc định là true. Muốn tắt nó ta dùng lệnh
uses Crt;
:
CheckBreak := false;
:
Ngoài ra việc tắt kiểm tra ngắt cho phép bạn bắt phím mỗi khi phím ngắt được bấm xuống như là tổ hợp phím Ctrl-C
Cách khác bạn có thế dùng chương trình bắt phím sau:
procedure TEST;
var key : char;
begin
repeat
if KeyPressed then
begin
key := ReadKey;
if key=#3 then
begin {ctrl-c or break}
writeln ('Break');
halt(1);
end; { Terminate the program, or whatever }
end; {if}
until false;
end; (* test *)
Một cách khác, bạn có thể ngăn cấm Ctrl-Break và Ctrl-C bằng ngắt. Sau đây là một ví dụ:
uses Dos;
var OldIntr1B : pointer; { Ctrl-Break ađress }
OldIntr23 : pointer; { Ctrl-C interrupt handler }
answer : string; { For readln test }
{$F+}
procedure NewIntr1B (flags,cs,ip,ax,bx,cx,dx,si,di,ds,es,bp : word);
Interrupt;
{$F-} begin end;
{$F+}
procedure NewIntr23 (flags,cs,ip,ax,bx,cx,dx,si,di,ds,es,bp : word);
Interrupt;
{$F-} begin end;
begin
GetIntVec ($1B, OldIntr1B);
SetIntVec ($1B, @NewIntr1B); { Cấm Ctrl-Break }
GetIntVec ($23, OldIntr23);
SetIntVec ($23, @NewIntr23); { Cấm Ctrl-C }
writeln ('Try breaking, disabled');
readln (answer);
SetIntVec ($1B, OldIntr1B); { Cho phép Ctrl-Break }
SetIntVec ($23, OldIntr23); { Cho phép Ctrl-C }
writeln ('Try breaking, enabled');
readln (answer);
writeln ('Doné);
end.
uses Crt;
:
CheckBreak := false;
:
Ngoài ra việc tắt kiểm tra ngắt cho phép bạn bắt phím mỗi khi phím ngắt được bấm xuống như là tổ hợp phím Ctrl-C
Cách khác bạn có thế dùng chương trình bắt phím sau:
procedure TEST;
var key : char;
begin
repeat
if KeyPressed then
begin
key := ReadKey;
if key=#3 then
begin {ctrl-c or break}
writeln ('Break');
halt(1);
end; { Terminate the program, or whatever }
end; {if}
until false;
end; (* test *)
Một cách khác, bạn có thể ngăn cấm Ctrl-Break và Ctrl-C bằng ngắt. Sau đây là một ví dụ:
uses Dos;
var OldIntr1B : pointer; { Ctrl-Break ađress }
OldIntr23 : pointer; { Ctrl-C interrupt handler }
answer : string; { For readln test }
{$F+}
procedure NewIntr1B (flags,cs,ip,ax,bx,cx,dx,si,di,ds,es,bp : word);
Interrupt;
{$F-} begin end;
{$F+}
procedure NewIntr23 (flags,cs,ip,ax,bx,cx,dx,si,di,ds,es,bp : word);
Interrupt;
{$F-} begin end;
begin
GetIntVec ($1B, OldIntr1B);
SetIntVec ($1B, @NewIntr1B); { Cấm Ctrl-Break }
GetIntVec ($23, OldIntr23);
SetIntVec ($23, @NewIntr23); { Cấm Ctrl-C }
writeln ('Try breaking, disabled');
readln (answer);
SetIntVec ($1B, OldIntr1B); { Cho phép Ctrl-Break }
SetIntVec ($23, OldIntr23); { Cho phép Ctrl-C }
writeln ('Try breaking, enabled');
readln (answer);
writeln ('Doné);
end.
Trả lời câu hỏi
Câu hỏi lĩnh vực Lập trình
Rao vặt Siêu Vip