Помогите. Мне нужно мышью рисовать линии на экране (т.е. нажал на одно место экрана, потом потащил (мышь) и линия рисуется за ней). Пробовал по разному, но при перетаскивании постоянно остаются какие-нибудь следы. Думаю, что нужно ставить свои обработчики (процедуры) на действия мыши, но не знаю как. Помогите кто может.
P.S. может есть другие способы рисования линий таким способом.
GLuk
23.10.2003 9:01
Конечно можно, ты знаком с ассемблером? Но это для написания своего обработчика. Впрочем, можно обойтись и паскалем. А следы остаются от того, что указатель мыши нужно скрывать при каждом прямом доступе к видеопамяти
Nightmare
24.10.2003 22:28
Я очень надеюсь, что это применяется в графическом режиме... (режим?, драйвер?)
GLuk
25.10.2003 1:48
Вряд ли он рисует их в режиме 0-3.. ;) Хотя принципиально - это возможно
Nightmare
25.10.2003 16:51
Вообще-то действительно вряд ли... Извиняюсь, стормозил... ( просто у меня где-то валялся пакет для изменения указателя мыши для текстового режима /вид и движения получались как в графическом режиме/)
Тогда очень интересно как, и с помощью чего выводится указатель мыши? У меня, например, таких проблем с мышью не наблюдалось.
GLuk
25.10.2003 21:45
Дык с помощью дров ессесно. Существует два части в стандартном драйвере от микрософта: монитор мыши и монитор экрана. Первый считает кол-во шагов, а второй следит за перемещением указателя и если чо, увеличивает скорость перемещения. На физическом уровне это осуществляется путем сохранения части экрана, затем туда накладывается изображение курсора, после восстанавливается действительное изображение. Как следствие перед прямым доступом к видеопамяти следует скрывать указатель. И ишшо бывает телега по типу почему указатель не появляется в VESA-режимах, дык это значит драйвер старенький и не поддерживает вывод курсора в этих режимах (100h-101h-...), но можно поставить свой обработчик и, следственно, выводить свой курсор... типа того
Nightmare
31.10.2003 1:32
Я делаю так:
MOUSE.INC
Procedure SetMouse( Shape: Word ); Far; External; {$L SETMOUSE.OBJ}
Procedure GetMousePosition( Var X, Y: Word); Var R: Registers; begin With R do begin ax := 3; Intr( $33, R ); X := cx; Y := dx; end; end;
Function GetMouseStatus: Byte; assembler; asm mov ax, 3 int 33h mov ax, bx end;
Function GetMouse: Byte; Var Status: Byte; ST: Boolean; begin ST := False; Repeat Status := GetMouseStatus; If( Status and 1 = 0 ) and ( Status and 2 = 0 ) and ( Status and 4 = 0 ) then ST := True; Until ST; ST := False; Repeat Status := GetMouseStatus; If( Status and 1 = 1 ) or ( Status and 2 = 2 ) or ( Status and 4 = 4 ) then ST := True; Until ST; GetMouse := Status; end;
Repeat GetEvents( Ev ); If( Ev.What and evMouse <> 0 ) then begin Case Ev.What of evMouseUp : begin { отпустили клавишу мыши } end; evMouseDown: begin { нажали клавишу мыши } end; evMouseAuto: begin { нажали и удерживаем клавишу мыши } end; else ClearEvents( Ev ); end; end; Until ( Ev.What <> evNothing );
На время прорисовки и обработки мышу лучше прятать, а то она помнит, что было под указателем. Иногда мыша вообще отказывается показываться, хотя и работает - это зависит от .BGI драйвера. Для стандартных, типа EGAVGA.BGI всё пашет отлично.
Glin
1.12.2003 19:07
Здравия всем. Надо написать свой модуль для мышки, а ассемблера не знаю. Помогите пожалуйста. Скажите с чего начать или ссылки на какие-нибудь доки подкинте. В общем, от каждого по возможностям. Поймите проблему лаймера. ???
Сори граждане за повтор вопроса, но не как с мышой не разберусь.
Вобщем так : как написть след. вешь:
1) при движении мышки вправо на пиксель - x := x -1; при движении мышки влево на пиксель - x := x+1; при движении мышки вниз на пиксель - y := y+1; при движении мышки вверх на пиксель - y := y -1;
2) ограничить перемещения мышки в прямоугольнике с диагональю (x1,y1,x2,y2);
GoodWind
4.11.2004 0:00
Nightmare, недурно..
to admins: предлагаю плюсик для Nightmare
Altair
4.11.2004 13:20
Сделал. Кстати все это есть в FAQ'е. Так что по вопросам мышачим смотрите там, наверняка найдете ответ
APAL
4.11.2004 15:02
???? На дату создания топика смотрели?
Altair
4.11.2004 18:32
APAL, честно говоря нет. Но разве это имеет значение? ;)
Тюняга
6.07.2008 2:25
ПАМАГИТЕ!!!!! Я чайник , дурак и ламер, случайно удалил в DOS`е драйвер мыши , а именно mouse.com . Комп настолько старый для этого времени (1988г.!!!) И для того что бы на комп записать что-либо , тоже проблема-флоппи диск тож старый 5.4 помойму. И без мыши ну ПРОСТО НИКАК Паскаль на этом компе установлен. Может как-нибудь написать этот драйвер???? HELP!!!
andriano
27.07.2008 1:46
Написать драйвер мыши можно, но гораздо дешевле купить новый комп.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.