1. Trang chủ
  2. » Công Nghệ Thông Tin

ĐIỀU KHIỂN CHUỘT TRONG CHẾ độ đồ HOẠ 256 màu

6 218 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 8,75 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

ĐIỀU KHIỂN CHUỘT TRONG CHẾ ĐỘ ĐỒ HOẠ 256 MÀUHữ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ì

Trang 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;

MWhereX,MWhereY: Word;

mShow,MHide:Procedure;

OldMWhereX,OldMWhereY:Word;

Implementation

Trang 2

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 do

Begin

If (i mod 2) = 0 then Inc(x) else Dec(x);

Dec(i);

End;

End;

Trang 3

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<=MaxX)then

PutPixel(OldMWhereX+mi,OldMWhereY+mj,OldMAreaSvga256[mi,mj]); End;

Procedure MousePaintSvga256(col,row:word);

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<=MaxX)then

PutPixel(col+mj,row+mi,MousePatern[mi,mj]);

End;

Procedure MouseHandler;Assembler;

Trang 4

mov ax,seg OldMAreaSvga256

mov ds,ax

mov ax,cx

mov cl,3

shr ax,cl

shr dx,cl

push ax

push dx

call mousepaint

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

Trang 5

If Off then Exit;

mUnins;Off:=True;

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

int 33h

mov ax,000Fh

mov cx,1

mov dx,1

int 33h

Trang 6

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;

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

Ngày đăng: 04/12/2015, 15:09

TỪ KHÓA LIÊN QUAN

w