Здраствуйте. Не первый день пытаюсь подключить мышь к проге. Результат: Нажмите для просмотра прикрепленного файла. Пожалуйста, помогите разобраться с ошибкой. Заранее благодарен.
andriano
2.01.2008 17:36
1. Для начала неплохо бы указать версию TMT Pascal. 2. В поставке нет модуля images (и, кстати, компилятор ругается именно на него - или предупреждения мы принципиально игнормруем?).
Ты всерьез считаешь, что модуль на Паскале можно подключить к скриншоту текста программы в GIF-файле?
Арсений
3.01.2008 0:49
На скрине сообщение и текст проги с глюком.
Добавлено через 1 мин. Мне нужно узнать как подключить мышку БЕЗ глюка.
andriano
3.01.2008 1:29
Ты считаешь, что я буду набивать прогу с этого скрина? Если уж задаешь вопросы, постарайся не создавать лишних трудностей тем, кто на эти вопросы может ответить.
Арсений
3.01.2008 1:43
Вот программа.
andriano
3.01.2008 2:57
Результат аналогичный. Но, похоже, глюк не в ТМТ, а в способе использования VESA-режимов. Дело в том, что отображение мыши в VESA модах не гарантируется, поэтому прикладная программа должна заботиться об этом сама. Другими словами, если хочешь, чтобы у тебя были функции ShowMouse и HideMouse, то писать их придется самому и без использования 33h прерывания. И, в любом случае, рисовать мышь также придется самому. Для демонстрации показываю лишь рисование точки по координатам мыши. Естественно, рисовать в этом месте можно что угодно, например, спрайт.
program test; {images БГЪРН Я http://forum.sources.ru/index.php?showtopic=64755} uses crt,images,graph,mous_ves,debug; var s:sprite; w,h:word; x,y:smallint; gb,gm:integer; r:char; MouX,MouY,MouC : integer; begin SetGraphMode($101); InitMouse; s:=loadbmp('test.bmp'); w:=spritewidth(s); h:=SpriteHeight(s); drawsprite(x,y,s); repeat MousePosition(MouX,MouY); MouC := GetPixel(MouX,MouY); putpixel(MouX,MouY,MouC xor 15); delay(55); putpixel(MouX,MouY,MouC); until keypressed; end.
Кроме того, стандартный модуль, кажется, переопределяет прерывание мыши, в результате чего в WinXP может быть конфликт. По крайней мере, у меня программа со стандартным модулем почему-то не реагировала на нажатия клавиш. Я лично всегда при работе с VESA режимами пользовался следующим мышиным модулем:
Unit Mous_VES;
Interface
Uses DOS;
const CURPOS = 1; { not used yet in this version } LEFTPRESS = 2; LEFTREL = 4; RIGHTPRESS = 8; RIGHTREL = 16; MouKoef = 1; { уменьш-е чувст-ти мыши, для работы при шаге 8 }
function InitMouse : Word; { Function 0 - Initialize mouse software and hardware }
function MousePosition(var MouseX,MouseY : integer) : Word; { function 3 - return mouse position and button status }
procedure setmouseposition(mousex, mousey: Word); { function 4 - sets mouse position }
function mousepress(button: Word; var count, lastx, lasty: Word): Word; { function 5 - gets button press information }
function mouserelease(button: Word; var count, lastx, lasty: Word): Word; { function 6 - gets button release information }
procedure setmousexy(x1,y1,x2,y2: Word); { functions 7 and 8 - sets min/max values for horizontal/vertical }
procedure SetPixeltoMickey(Horiz,Verti : Word); { function 15 - sets the mickey to pixel ratio }
procedure SetMouseSensitivity(Horiz,Verti,Bound : Word); { function 1a - sets the mickey to pixel ratio }
procedure GetMouseSensitivity(var Horiz,Verti,Bound : Word); { function 1b - gets the mickey to pixel ratio }
implementation
function InitMouse : Word; { Function 0 - Initialize mouse software and hardware } begin with Mouse_Reg do Ax := 0; Intr($33,Mouse_Reg); InitMouse := Mouse_Reg.Ax; end;
function MousePosition(var MouseX,MouseY : integer) : Word; { function 3 - return mouse position and button status } begin Mouse_Reg.Ax := 3; Intr($33,Mouse_Reg); with Mouse_Reg do begin MouseX := Cx div MouKoef; MouseY := Dx div MouKoef; MousePosition := Bx; end; end;
procedure setmouseposition(mousex, mousey: word); { function 4 - sets mouse position } begin Mouse_Reg.ax:=4; Mouse_Reg.cx:=mousex * MouKoef; Mouse_Reg.dx:=mousey * MouKoef; intr($33,Mouse_Reg); end;
function mousepress(button: Word; var count, lastx, lasty: Word): Word; { function 5 - gets button press information } begin Mouse_Reg.ax:=5; Mouse_Reg.bx:=button; intr($33,Mouse_Reg);; mousepress:=Mouse_Reg.ax; count:=Mouse_Reg.bx; lastx:=Mouse_Reg.cx div MouKoef; lasty:=Mouse_Reg.dx div MouKoef; end;
function mouserelease(button: Word; var count, lastx, lasty: Word): Word; { function 6 - gets button release information } begin Mouse_Reg.ax:=6; Mouse_Reg.bx:=button; intr($33,Mouse_Reg);; mouserelease:=Mouse_Reg.ax; count:=Mouse_Reg.bx; lastx:=Mouse_Reg.cx div MouKoef; lasty:=Mouse_Reg.dx div MouKoef; end;
procedure SetPixeltoMickey(Horiz,Verti : Word); { function 15 - sets the mickey to pixel ratio }
begin with Mouse_Reg do begin Ax := 15; Cx := Horiz; Dx := Verti; end; Intr($33,Mouse_Reg) end;
procedure SetMouseSensitivity(Horiz,Verti,Bound : Word); { function 1a - sets the mickey to pixel ratio }
begin with Mouse_Reg do begin Ax := $1a; Bx := Horiz; Cx := Verti; Dx := Bound; end; Intr($33,Mouse_Reg); end;
procedure GetMouseSensitivity(var Horiz,Verti,Bound : Word); { function 1b - gets the mickey to pixel ratio }
begin Mouse_Reg.Ax := $1b; Intr($33,Mouse_Reg); with Mouse_Reg do begin Horiz := Bx; Verti := Cx; Bound := Dx; end; end;
var h,v,b,b1:word; OldHoriz, OldVerti,OldBound : word; { f:text;} ExitSave:pointer;
procedure MyExit; { дополнительная процедура при выходе в DOS } begin SetMouseSensitivity(OldHoriz,OldVerti,OldBound); ExitProc:=ExitSave; writeln('Деициализация модуля Mous_ves X - ',OldHoriz,', Y - ',OldVerti,', Bound - ',OldBound); end;