intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Điều khiển chuột trong chế độ 256 màu

Chia sẻ: Mr CuongChip | Ngày: | Loại File: DOC | Số trang:8

199
lượt xem
45
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Trong nhiều trường hợp bạn cần thiết phải tạo ra một giao di ện (Interface) th ật bắt mắt cho dự án (Project) lập trình của bạn. Chính vì vậy nếu bạn phải thực hiện trong PASCAL thì việc khởi tạo và sử dụng chế độ đồ họa 256 màu là việc không thể tránh khỏi

Chủ đề:
Lưu

Nội dung Text: Điều khiển chuột trong chế độ 256 màu

  1. Đ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 ra một giao di ện (Interface) th ật bắt mắt cho dự án (Project) lập trình của bạn. Chính vì vậy nếu b ạn ph ải th ực hiện trong PASCAL thì việc khởi tạo và sử dụng chế độ đồ hoạ 256 màu là vi ệc không thể tránh khỏi. Tất nhiên khi đó bạn cũng phải vi ết các modul ch ương trình để điều khiển chuột. ở chế độ đồ hoạ thường (16 màu) thì vi ết th ư viện điều khiển chuột bạn có thể sử dụng các hàm chuẩn về chuột của DOS (Ng ắt 33h). Thế nhưng trong chế độ màu SVGA 256 thì bạn không thể dùng ph ương pháp này, bởi vì khi đó sẽ hình ảnh của chuột không th ể hi ện lên đ ược. Đ ể kh ắc phục bạn phải tự viết chương trình quản lý chuột và hiện chuột. D ưới đây là m ột chương trình như vậy để bạn tham khảo. Trong khuôn khổ bài vi ết không thể đề cập tất cả vấn đề. Để hiểu rõ bạn có thể tham khảo ở các sách về lập trình hệ thống cho các thiết bị ngoại vi. Chương trình này sau khi bạn dịch File Mlib.tpu bạn có thể sử d ụng nh ư 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. 1. Nếu Bít 0 bằng: Nút trái đang bấm. 2. Nếu Bít 1 bằng: Nút phải đang bấm. 3. Nếu Bít 2 bằng: Nút giữa đang 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;
  2. 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);
  3. mHandlerP:Procedure; MaxX,MaxY:Word; Procedure Wait(i:Byte); Var x: Byte; Begin x:=5; While i>0 do Begin If (i mod 2) = 0 then Inc(x) else Dec(x); Dec(i); End; End; Procedure SaveMAreaSvga256; Var Mi,Mj:word; Begin For Mi:=0 to 15 do For Mj:=0 to 15 do OldMAreaSvga256[Mi,Mj]:=GetPixel(MWhereX+Mi,MWhereY+Mj); End; Procedure RestoreMAreaSvga256; Var mi,mj:word; Begin For mi:=0 to 15 do For mj:=0 to 15 do if(OldMWhereX+mi
  4. Var mi,mj:word; Begin If Off then Begin MWhereX:=col;MWhereY:=row; OldMWhereX:=MWhereX;OldMWhereY:=MWhereY; Exit; End; RestoreMAreaSvga256; MWhereX:=col;MWhereY:=row; OldMWhereX:=MWhereX;OldMWhereY:=MWhereY; SaveMAreaSvga256; For mi:=0 to 15 do For mj:=0 to 15 do If(MousePatern[mi,mj]0)and(col+mj
  5. retf End; Procedure mIns;assembler; Asm les dx,mhandlerp mov ax,0Ch mov cx,01h int 33h End; Procedure mUnins;assembler; Asm les dx,mhandlerp mov ax,0Ch mov cx,00h 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;
  6. Wait(10); RestoreMAreaSvga256; End; Procedure mSet(x,y:word); Begin mHide; asm mov ax,0004 mov cx,x mov dx,y shl cx,2 shl dx,2 int 33h end; mWhereX:=X shr 1;mWhereY:=Y shr 1; OldMWhereX:=MWhereX;OldMWhereY:=MWhereY; mShow; End; Procedure mInit; Begin mHandlerP:=MouseHandler; mWhereX:=MaxX shr 1;mWhereY:=MaxY shr 1; OldMWhereX:=MWhereX;OldMWhereY:=MWhereY; MousePaint:=MousePaintSvga256; mShow:=mShowSvga256;mHide:=mHideSvga256; Asm xor ax,ax
  7. int 33h mov ax,000Fh mov cx,1 mov dx,1 int 33h mov ax,0007h xor cx,cx mov dx,MaxX shl dx,3 int 33h mov ax,0008h xor cx,cx mov dx,MaxY shl dx,3 int 33h mov ax,0004h mov cx,MaxX shl cx,2 mov dx,Maxy shl dx,2 int 33h mov ax, 001ch mov bx, 2h int 33h call mIns; End; End;
  8. Procedure mGet;Assembler; Asm mov ax,3 int 33h mov PressButton,bx End; Begin MaxX:=640; MaxY:=480; {Ban co the thay doi gioi han vi tri chuot o day} End.
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0