1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
При нажатии левой мышки, точка с координатами курсора мыши должна закрасится определенным цветом, правой - выход. Вот есть код:
uses vesa2,graph; var b,x,y:word; begin SetVesa; SetGraphMode(2); initmouse; showcursor; repeat GetMouseXY(b,x,y); if b=1 then putpixel(x,y,5); until b=2; vesadone; end.
. Почему точка закрашивается не всегда там где побывала мышка? Как исправить?
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
Почему точка закрашивается не всегда там где побывала мышка?
Потому, что ты отрисовываешь точку там, где находится указатель мыши, и как следствие этого - при неподвижной мыши у тебя вообще не рисуется точка. Рисуются иногда - если ты нажал левую кнопку и "тянешь" мышь, правда? Я так думаю, что пиксель просто попадает на маску курсора мыши и при перемещении ее - затирается цветом фона
Цитата(Bokul @ 31.07.2006 23:08)
Как исправить?
Вообще-то в таких случаях желательно гасить курсор мыши, отрисовывать точку, и снова показывать курсор:
if b = 1 then begin hidecursor; putpixel(x, y, 5); showcursor; end;
, но в твоем случае ты при "перетягивании" мыши с нажатой кнопкой получишь ее "след" на экране (я не знаю, почему это происходит, возможно, не совсем корректная работа с мышью, возможно - особенность VESA), так что попробуй:
if b = 1 then begin putpixel(x-1,y-1,5);
(отрисовываешь пиксел чуть в стороне, и он не затирается)...
Сейчас отрисовывает, но если мышку повести чуть быстрее нормальной скорости, то остаются не закрашенные пиксели. Можно добится идеала?
Еще в местах где мышкой и не пахло иногда появляются пиксели тако же цвета, почему?
--------------------
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
Рисуй не отдельные пикселы, а линию от старой точки до новой.
Спасибо , помогло. Вот, если кому надо, реализация:
Код
uses graph, vesa2; var b,x,y,tempx,tempy:word; put_bol:boolean; begin SetVesa; SetGraphMode(2); initmouse; showcursor; put_bol:=false; repeat GetMouseXY(b,x,y); if b=1 then begin if put_bol=true then begin line(tempx,tempy,x-1,y-1); tempx:=x; tempy:=y; end else begin tempx:=x; tempy:=y; put_bol:=true; end; end else put_bol:=false; until b=2; vesadone; end.
А как регулировать толщину линии?
Сообщение отредактировано: Bokul -
--------------------
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.