При нажатии левой мышки, точка с координатами курсора мыши должна закрасится определенным цветом, правой - выход. Вот есть код:
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.
. Почему точка закрашивается не всегда там где побывала мышка? Как исправить?
volvo
1.08.2006 3:23
Цитата(Bokul @ 31.07.2006 23:08)
Почему точка закрашивается не всегда там где побывала мышка?
Потому, что ты отрисовываешь точку там, где находится указатель мыши, и как следствие этого - при неподвижной мыши у тебя вообще не рисуется точка. Рисуются иногда - если ты нажал левую кнопку и "тянешь" мышь, правда? Я так думаю, что пиксель просто попадает на маску курсора мыши и при перемещении ее - затирается цветом фона
Цитата(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);
(отрисовываешь пиксел чуть в стороне, и он не затирается)...
Bokul
1.08.2006 3:40
Ого , спасибо большое , сам бы не понял.
Сейчас отрисовывает, но если мышку повести чуть быстрее нормальной скорости, то остаются не закрашенные пиксели. Можно добится идеала?
Еще в местах где мышкой и не пахло иногда появляются пиксели тако же цвета, почему?
Archon
1.08.2006 13:23
Цитата
Сейчас отрисовывает, но если мышку повести чуть быстрее нормальной скорости, то остаются не закрашенные пиксели. Можно добится идеала?
Рисуй не отдельные пикселы, а линию от старой точки до новой.
Bokul
1.08.2006 21:08
Цитата(Archon @ 1.08.2006 2:23)
Рисуй не отдельные пикселы, а линию от старой точки до новой.
Спасибо , помогло. Вот, если кому надо, реализация:
Код
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.
А как регулировать толщину линии?
volvo
1.08.2006 21:18
Цитата(Bokul @ 1.08.2006 17:08)
А как регулировать толщину линии?
Ну, "регулировать" это слишком сильно сказано . Можно сделать только более толстую и более тонкую линии (я имею в виду, стандартными средствами BGI):
SetLineStyle(SolidLn, 0, ThickWidth); { <-- или NormalWidth, для нормальной толщины } Repeat { цикл отрисовки } Until b = 2;
Bokul
1.08.2006 21:23
Цитата
SetLineStyle(SolidLn, 0, ThickWidth);
А, точно Я забыл, что теперь имею дело с линиями.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.