ĐIỀU KHIỂN CHUỘT TRONG CHẾ ĐỘ ĐỒ HOẠ 256 MÀU Hữu Chính Trong nhiều trường hợp bạn cần thiết phải tạo giao diện (Interface) thật bắt mắt cho dự án (Project) lập trình bạn Chính bạn phải thực PASCAL việc khởi tạo sử dụng chế độ đồ hoạ 256 màu việc tránh khỏi Tất nhiên bạn phải viết modul chương trình để điều khiển chuột chế độ đồ hoạ thường (16 màu) viết thư viện điều khiển chuột bạn sử dụng hàm chuẩn chuột DOS (Ngắt 33h) Thế chế độ màu SVGA 256 bạn dùng phương pháp này, hình ảnh chuột lên Để khắc phục bạn phải tự viết chương trình quản lý chuột chuột Dưới chương trình để bạn tham khảo Trong khuôn khổ viết đề cập tất vấn đề Để hiểu rõ bạn tham khảo sách lập trình hệ thống cho thiết bị ngoại vi Chương trình sau bạn dịch File Mlib.tpu bạn sử dụng sau: - Khởi động chuột: mInit; - Đặt toạ độ chuột: mSet(x,y); - Lấy tình trạng chuột: mGet; - Lấy toạ độ chuột: MWhereX, MWhereY; - Lấy tình trạng phím bấm: Biến PressButton Nếu Bít bằng: Nút trái bấm Nếu Bít bằng: Nút phải bấm Nếu Bít bằng: Nút bấm - Hiện, ẩn chuột: mHide, mShow; {$A+,B+,D+,E+,F+,G+,I+,L+,N+,O+,P+,Q+,R-,S+,T+,V+,X+} {$M 16384,0,655360} Unit MLib; Interface Procedure mInit; Procedure mGet; Procedure mSet(x,y:word); Var PressButton:Word; MWhereX,MWhereY: Word; mShow,MHide:Procedure; OldMWhereX,OldMWhereY:Word; Implementation Uses Graph; Type MAreaSvga256=Array[0 15,0 15] of byte; Const Off:Boolean=True; MousePatern:MAreaSvga256=(01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,0 0), (01,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00), (01,02,01,00,00,00,00,00,00,00,00,00,00,00,00,00), (01,10,02,01,00,00,00,00,00,00,00,00,00,00,00,00), (01,10,02,02,01,00,00,00,00,00,00,00,00,00,00,00), (01,10,10,02,02,01,00,00,00,00,00,00,00,00,00,00), (01,10,10,02,02,02,01,00,00,00,00,00,00,00,00,00), (01,10,10,10,02,02,02,01,00,00,00,00,00,00,00,00), (01,10,10,10,02,02,02,02,01,00,00,00,00,00,00,00), (01,10,10,10,10,02,02,02,02,01,00,00,00,00,00,00), (01,10,10,10,10,02,02,02,02,02,01,00,00,00,00,00), (01,10,10,10,01,01,01,01,01,01,01,01,00,00,00,00), (01,10,10,01,00,00,00,00,00,00,00,00,00,00,00,00), (01,10,01,00,00,00,00,00,00,00,00,00,00,00,00,00), (01,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00), (01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) ); {Du lieu hinh anh chuot} Var OldMAreaSvga256:MAreaSvga256; MousePaint:Procedure(x,y:Word); mHandlerP:Procedure; MaxX,MaxY:Word; Procedure Wait(i:Byte); Var x: Byte; Begin x:=5; While i>0 Begin If (i mod 2) = then Inc(x) else Dec(x); Dec(i); End; End; Procedure SaveMAreaSvga256; Var Mi,Mj:word; Begin For Mi:=0 to 15 For Mj:=0 to 15 OldMAreaSvga256[Mi,Mj]:=GetPixel(MWhereX+Mi,MWhereY+Mj); End; Procedure RestoreMAreaSvga256; Var mi,mj:word; Begin For mi:=0 to 15 For mj:=0 to 15 if(OldMWhereX+mi ... int 33h End; Procedure mShowSvga256; Begin If not off then Exit; Off:=False; SaveMAreaSvga256; MousePaintSvga256(mWhereX,mWhereY); mIns; End; Procedure mHideSvga256; Begin If Off then Exit; mUnins;Off:=True;... Procedure SaveMAreaSvga256; Var Mi,Mj:word; Begin For Mi:=0 to 15 For Mj:=0 to 15 OldMAreaSvga256[Mi,Mj]:=GetPixel(MWhereX+Mi,MWhereY+Mj); End; Procedure RestoreMAreaSvga256; Var mi,mj:word; Begin... 1;mWhereY:=MaxY shr 1; OldMWhereX:=MWhereX;OldMWhereY:=MWhereY; MousePaint:=MousePaintSvga256; mShow:=mShowSvga256;mHide:=mHideSvga256; Asm xor ax,ax int 33h mov ax,000Fh mov cx,1 mov dx,1 int 33h mov ax,0007h