介绍一下mouse单元的用法。
pascal吧
全部回复
仅看楼主
level 11
blazer♬ 楼主
网上看到这样一个程序,不是很懂,请问能否解释一下。
请问mouse单元有哪些过程与函数,分别该怎样用?
Program Testmouser;
Uses
Crt,Mouse;
Type
TScreenButtons=Array[0..80,0..25] of Integer;
TButtonsActive=Array[1..32767] of Integer;
Var
A:TMouseEvent;
K:TScreenButtons;
O:TButtonsActive;
Procedure Setbuttons(X,Y:Integer;F:String;N:Integer);
Var
I,G:Integer;
Begin
G:=Length(F);
For I:=X to X+G-1 do
Begin
K[I+1,Y+1]:=N;
GotoXY(I+1,Y+1);
Write(F[I+1-X]);
End;
End;
Procedure ClearButtons(N:Integer);
Var
I,J:Integer;
Begin
For I:=1 to 80 do
For J:=1 to 25 do
If K[I,J]=N
Then
Begin
K[I,J]:=0;
GotoXY(I,J);
Write(' ');
End;
End;
Procedure Setbuttonactive(N,D:Integer);
Begin
O[N]:=D;
End;
Procedure Resetbuttons;
Begin
SetButtons(0,0,'<=== ===>',1);
SetButtons(0,1,'>> Exit <<',1);
SetButtons(0,2,'<=== ===>',1);
SetButtonActive(1,1);
SetButtons(0,4,'<=== ===>',2);
SetButtons(0,5,'>> ClSc <<',2);
SetButtons(0,6,'<=== ===>',2);
SetButtonActive(2,2);
SetButtons(0,8,'<=== ===>',3);
SetButtons(0,9,'>> Hide <<',3);
SetButtons(0,10,'<=== ===>',3);
SetButtonActive(3,3);
SetButtons(0,12,'<=== ===>',4);
SetButtons(0,13,'>> Recl <<',4);
SetButtons(0,14,'<=== ===>',4);
SetButtonActive(4,4);
End;
Procedure ProgressiveActive(N:Integer);
Var
I,J,D:Integer;
Begin
D:=O[N];
If D=1
Then
Halt;
If D=2
Then
For I:=1 to 80 do
For J:=1 to 25 do
If (K[I,J]=0) And (I*J<>2000)
Then
Begin
GotoXY(I,J);
Write(' ');
End;
If D=3
Then
Clearbuttons(N);
If D=4
Then
Begin
TextBackGround(Random(32));
TextColor(Random(32));
ProgressiveActive(9999);
ProgressiveActive(1000);
End;
If D=5
Then
Resetbuttons;
End;
Begin
Randomize;
Fillchar(K,Sizeof(K),0);
InitMouse;
CursorBig;
SetButtonActive(9999,2);
ProgressiveActive(9999);
SetButtonActive(1000,5);
ProgressiveActive(1000);
SetButtonActive(10000,4);
ProgressiveActive(10000);
Repeat
GetMouseEvent(A);
GotoXY(A.X+1,A.Y+1);
If K[A.X+1,A.Y+1]=0
Then
Begin
If A.Buttons=1
Then
Write('*');
If A.Buttons=2
Then
Write(' ');
End
Else
Begin
If A.Buttons=1
Then
ProgressiveActive(K[A.X+1,A.Y+1]);
If A.Buttons=2
Then
Clearbuttons(K[A.X+1,A.Y+1]);
End;
Until Keypressed;
Readln;
End.
2012年03月25日 07点03分 1
level 11
blazer♬ 楼主
我很想知道,如何设计一个程序,是自己用鼠标在窗口某处按了一个键,就能够作出相应的反应,执行相应的命令。
2012年03月25日 07点03分 3
level 11
blazer♬ 楼主
请高手介绍一下mouse单元有哪些过程与函数,分别该怎样用?也让众多读者有所收获。
2012年03月25日 07点03分 4
level 10
从来没有用过这么高端的东西……与其用pascal不如用c++
2012年03月25日 23点03分 5
level 12
我记得以前有贴介绍的 自己搜搜 吧
2012年03月28日 11点03分 6
level 11
blazer♬ 楼主
就我目前了解到的,getmousex、getmousey分别表示鼠标所在的坐标,getmousebuttons表示按键情况。getmousebuttons=1表示左击。
Tmouseevent的用法我不明白,至于那个按了哪里,哪里就出现“*”;靠着哪里,哪里就有相应的颜色的功能,也暂时弄不会。
2012年04月02日 13点04分 8
Tmouseevent不是Windows的库函数吗? 找delphi教程 fp调用windows一样用
2013年01月02日 16点01分
Tmouseevenet的用法有一些复杂,主要是返回鼠标的所有信息。比如说M:Tmouseevent;m.y是鼠标所在行;m.x是鼠标所在列;m.buttons是鼠标按键情况
2018年08月21日 13点08分
level 9
貌似收集过这方面的东西
Mouse单元
过程
InitMouse 启用鼠标
DoneMouse 停用鼠标
HideMouse 隐藏鼠标指针
ShowMouse 显示鼠标指针
SetMouseXY(X,Y)X,Y:Integer将鼠标指针移动至(X,Y)
GetMouseEvent(MouseEvent:TMouseEvent)
得到鼠标数据并将其存入MouseEvent中
PutMouseEvent(MouseEvent:TMouseEvent)
用MouseEvent代替当前鼠标数据
函数
DetectMouse Integer 返回值为0时代表没有鼠标,否则返回鼠标按键数
GetMouseButtons Integer 0代表没有按键,1代表左键,2代表右键,4代表中间键(非滚轮)
GetMouseX Integer 返回鼠标所在位置列数
GetMouseY Integer 返回鼠标所在位置行数
PollMouseEvent(MouseEvent:TMouseEvent) Boolean
返回鼠标信息是否被更新(True为未更新)
GetMouseDriver 用途不明
SetMouseDriver 用途不明
常数
MouseLeftButton Integer 代表左键,值为1
MouseRightButton Integer 代表右键,值为2
MouseMiddleButton Integer 代表中间键(非滚轮),值为4
MouseEventBufSize Integer 鼠标缓冲,值为16
MouseActionDown Integer 代表按下鼠标,值为1
MouseActionUp Integer 代表松开鼠标,值为2
MouseActionMove Integer 代表移动鼠标,值为4
errMouseBase Integer 基本鼠标错误,值为1030
errMouseInitError Integer 鼠标使用错误,errMouseBase+0
errMouseNotImplemented Integer
功能无法实现,errMouseBase+1
注:
对TMouseEvent的解释:
记录类型,表示鼠标的综合数据。
域 Buttons:Integer 按键信息,等于GetMouseButtons
X,Y:Integer 指针位置信息,等于GetMouseX/GetMouseY
Action:Integer 移动信息,4代表移动,0代表未移动,1代表鼠标按键按下,2代表鼠标按键抬起
(如144442就是按着鼠标拖动3格)
2012年04月03日 07点04分 9
level 9
还有dos crt 的
lz
要不...
2012年04月03日 07点04分 10
level 11
blazer♬ 楼主
Ye,good job!
2012年04月15日 06点04分 11
level 9
2012年04月15日 07点04分 12
level 11
blazer♬ 楼主
我的无聊设计。
program press;
uses crt,graph,mouse,windows;
procedure recover;
var i2:integer;
k:string;
begin
clrscr;
for i2:=1 to 5 do begin
case i2 of
1:k:=' exit ';
2:K:='projectile';
3:k:=' hide ';
4:K:=' play ';
5:k:=' return ';
end;
writeln('<<','':12,'>>');
writeln('<<','':1,k,'':1,'>>');
writeln('<<','':12,'>>');
end;
end;
var
i,j:integer;
A:tmouseevent;
begin
randomize;
textcolor(11);
textbackground(20);
recover;
initmouse;
repeat
getmouseevent(a);
gotoxy(a.x+1,a.y+1);
if A.buttons=2 then
delline;
if A.action=144442 then begin
gotoxy(20,20);
write('ppp');
end;
if (-1<getmousex) and (16>getmousex) and (-1<getmousey) and (2>=getmousey)
and (A.buttons=1) then
exit;
if (-1<getmousex) and (16>getmousex) and (2<getmousey) and (5>=getmousey)
and (A.buttons=1) then begin
textbackground(random(30)+1);
for i:=1 to 25 do begin
gotoxy(17,i);
write('':63);
end;
end;
if (-1<getmousex) and (16>getmousex) and (5<getmousey) and (8>=getmousey)
and (A.buttons=1) then begin
textbackground(black);
gotoxy(1,7);
for i:=1 to 3 do
writeln('':16);
end;
if (-1<getmousex) and (16>getmousex) and (8<getmousey) and (11>=getmousey)
and (A.buttons=1) then
windows.messagebox(0,pchar('Now let"s play the game,are you ready?'),'game information',mb_okcancel);
if (-1<getmousex) and (16>getmousex) and (11<getmousey) and (14>=getmousey)
and (A.buttons=1) then
recover;
until 1+1=3;
end.
2012年04月22日 02点04分 13
level 1
我都看不懂啊
2013年01月02日 12点01分 14
1