Не знаю проблемы у меня или в модуле Wingraph или еще в чем-то, но не всегда получается отловить нажатие кнопки мыши, а после readkey графическое окно вообще перестает реагировать на другие события.
Как я пытаюсь работать с мышой:
repeat if PollMouseEvent(MEvent) then begin GetMouseEvent(MEvent); MouseX:=MEvent.x; MouseY:=MEvent.y; if (MouseX <> x0) or (MouseY <> y0) then begin x0:=MouseX; y0:=MouseY; if (MEvent.action=MouseActionDown) or (keypressed) then Arrow.StartNew else Arrow.ChangePosition(round(MouseX/step)*step, round(MouseY/step)*step); end; Delay(1); end; until CloseGraphRequest; CloseGraph;
Полный исходник: PolDevelop.rar ( 1.06 килобайт )
Кол-во скачиваний: 639
При каждом нажатии любой кнопки мыши шарик, который постоянно бегает за курсором, должен оставаться на том месте, где была нажата клавиша, но это происходит далеко не всегда . Если проблемы в коде укажите, пожалуйста, ошибку, в противном случае - подскажите другие модуле с такими же функциями или другие способы работы с мышой в граф. режиме. Отдельно интересует такая возможность используя WinApi.
--------------------
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
Да, наверно никакой, так назвалось. И последний и предпоследний пример в 2.0.2 версии у меня запустились. Спешил, не было времени другую демку делать. Версий причин неполадок у меня 3: 1 Пример выводит на экран картинку BMP. Программа могла не найти в текущем каталоге графический файл указанного разрешения и имени файла. 2
Последний параметр в функции, сумма констант, маска. Она определяет многое, можно убирать лишние и прибавлять дополнительные константы. Если убрать SDL_FULLSCREEN, окно будет не полноэкранным. SDL_SWSURFACE - тип используемой видеорежимом памяти, можно использовать другой, прибавить константы - двойная буферизация, опенгл. Но с последней константой у меня не работало. Попробуй использовать другой тип памяти. 3 У тебя железо тянет глубину цветности 32 бита? Можно и 16 и 8 поставить.
Пример с пояснениями, без картинок. Кодировка перепуталась, но в иде норм видно.
program demo;
uses SDL, SDL_Video, SDL_Events, SDL_Mouse, crt;
const width = 800; height = 600;
{Ј«гЎЁ 梥в®бвЁ} colordepth = 32;
var screen: PSDL_Surface; event: PSDL_Event; done: Boolean; XX,YY,q,w : word;
{Ґб«Ё Ј«гЎЁ 梥в®бвЁ 16 ЎЁв, ЁбЇ®«м§®ў вм вЁЇ word, 8 - byte} Type Pixel = cardinal ; { Must have colordepth bits }
Type {ЎгдҐа ў Є®в®а®¬ Ўг¤Ґ¬ аЁб®ў вм Ја дЁЄг} { This type mimics the pixel surface srtucture: 'height' sequential rows of 'width' pixels each. } TpixelBuf = Array [0..height-1, 0..width-1] of Pixel ;
if q=1 then writeln('x Ї®§ЁжЁп Єгаб®а ', xx,', y Ї®§ЁжЁп Єгаб®а ',yy); if w=1 then writeln('Ўл« ¦ в Є« ў , Ґс бЄ Є®¤ ',xx);
delay(5000);
writeln('rfrjq tynj dsvjhf;bdf.obq vfhfpv nsrfnm d dbylt vbrhjcrjgbxtcrbt cbvdjks');
end.
Ни одного гото не используется, почти подвиг В принципе, поправить кодировочку и можно на хранение в фак, в рунете с примерами к SDL - совсем не густо.