PDA

View Full Version : [Q] câu hỏi nhỏ về hàm readkey



namtuocbongtoi
14-12-2002, 18:01
giả sử khi có 2 lệnh readkey liên tiếp
i:=readkey;
j:=readkey;
nếu nhập vào các phím mũi tên hoặc F1,F2,...thì cả i và j đều được nhận giá trị đó nhưng các phím khác thì chỉ cói được nhận.tại sao vậy?có thể điều khiển việc đó không?

LuXuBu
16-12-2002, 12:59
Chào namtuocbongtoi !
(Tôi cũng chưa hiểu kỹ bạn muốn hỏi gì nữa)

Sao bạn không dùng thử lệnh:
Port[$60] va Port[$61] thu coi.

real_time
17-12-2002, 09:02
mình cũng thấy trường hợp này xảy ra! nhưng bạn nên nhớ rằng đó đó là những phím đặc biệt mà!
Mình ko rõ lắm nhưng hình như là những phím đặc biệt như là F1,F2 .... mũi tên thì đều là phím kép. Bởi khi in phím lên màn hình thì đểu mất 2 ký tự để in lên. Còn những phím khác thì chỉ được có 1 thôi!

namtuocbongtoi
17-12-2002, 15:47
port[$60],port[$61] là gì?

LuXuBu
18-12-2002, 15:34
Mình gửi đoạn chương trình này bạn chạy thử xem:

uses crt;
var i,j:char;
Begin
clrscr;
i:=readkey;
if ord(i)=0 then i:=readkey;
j:=readkey;
if ord(j)=0 then j:=readkey;
writeln(ord(i));
writeln(ord(j));
readln;
end.

LuXuBu
18-12-2002, 16:08
Port[$60] và port[$61] vừa là lệnh vừa là hàm. Dùng để truy xuất trực tiếp cổng bàn phím đó.

Nhưng tôi nghĩ đoạn chương trình tôi vừa gủi đã giúp bạn giải quyết được trường hợp của bạn rồi, phải không.

namtuocbongtoi
24-12-2002, 15:03
cảm ơn,để mình thử coi

langtucodon
26-12-2002, 14:35
Chào bạn namtuocbongtoi:
Thực ra, khi bạn viết đoạn chương trình:
i:=readkey;
j:=readkey;
thì nếu lúc bạn nhập vào một phím,"a" chẳng hạn. Sau đó thông thường bạn sẽ nhấn Enter đúng không, và do đó j sẽ nhận giá trị của Enter nhưng không hiện ra, mà chỉ co tác dung xuống dòng thôi.
Vì thế, có thể sửa lại bằn cách nhập 2 lần j bằng readkey, giá trị đầu sẽ bị loại va nó chỉ giữ giá trị sau thôi.
Tức là:
i:=readkey;
j:=readkey;
j:=readkey;
Khi đó nếu nhập a+Enter+b thì i='a',j='b'

namtuocbongtoi
06-01-2003, 19:44
khi có hàm readkey thì đâu cần enter,cái đó mình biết,nhưng chỉ có vài phím bị thôi còn các kí tự chữ số thì vẫn bình thường

btkiet
15-01-2003, 10:32
Các phím điều khiển (F1,F2,... và các phím mũi tên,...) có đến 2 mã ASCII lận, các ký tự này gọi là ký tự mở rộng, mã đầu tiên (được nhận bởi i) luôn luôn mang giá trị 0, mã thứ 2 (được nhận bởi j) mới xác định được đó là phím nào.
Còn các phím chữ và số cũng như phím enter thì chỉ có một mã duy nhất nên đã bị nhận bởi i.

Thành Luân
24-03-2008, 01:06
chào mọi người.mọi người cho minh hỏi cách sử dụng hàm readkey; hàm keyprssed và hàm getkey trong pascal .Mong mọi người giúp đỡ.Mình xin cảm ơn

vtnphong
27-03-2008, 14:55
giả sử khi có 2 lệnh readkey liên tiếp
i:=readkey;
j:=readkey;
nếu nhập vào các phím mũi tên hoặc F1,F2,...thì cả i và j đều được nhận giá trị đó nhưng các phím khác thì chỉ cói được nhận.tại sao vậy?có thể điều khiển việc đó không?

cái này là do các phím bình thường chỉ trả về i là giá trị ascii của kí tự đó thôi. Còn các phím đặc biệt thì lại trả về 2 byte. Nếu đọc byte đầu mà bằng 0 (ko chắc mình có nhớ đúng ko :D) thì biết nó là phím chức năng, đọc tiếp byte thứ 2 để biết nó là phím gì.