Помощь - Поиск - Пользователи - Календарь
Полная версия: Графический редактор
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Bokul
При нажатии левой мышки, точка с координатами курсора мыши должна закрасится определенным цветом, правой - выход.
Вот есть код:
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
Цитата(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
Ого blink.gif , спасибо большое good.gif , сам бы не понял.

Сейчас отрисовывает, но если мышку повести чуть быстрее нормальной скорости, то остаются не закрашенные пиксели. Можно добится идеала?

Еще в местах где мышкой и не пахло иногда появляются пиксели тако же цвета, почему? blink.gif
Archon
Цитата
Сейчас отрисовывает, но если мышку повести чуть быстрее нормальной скорости, то остаются не закрашенные пиксели. Можно добится идеала?
Рисуй не отдельные пикселы, а линию от старой точки до новой.
Bokul
Цитата(Archon @ 1.08.2006 2:23) *

Рисуй не отдельные пикселы, а линию от старой точки до новой.

Спасибо good.gif , помогло.
Вот, если кому надо, реализация:
Код
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
Цитата(Bokul @ 1.08.2006 17:08)
А как регулировать толщину линии?
Ну, "регулировать" это слишком сильно сказано smile.gif . Можно сделать только более толстую и более тонкую линии (я имею в виду, стандартными средствами BGI):

SetLineStyle(SolidLn, 0, ThickWidth); { <-- или NormalWidth, для нормальной толщины }
Repeat
{ цикл отрисовки }
Until b = 2;
Bokul
Цитата
SetLineStyle(SolidLn, 0, ThickWidth);

А, точно good.gif Я забыл, что теперь имею дело с линиями. ypriamii.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.