Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2014, 13:48   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию Программа для залипания кнопки мыши в Linux (Lazarus)

В общем, нужна программа для залипания кнопки мыши в Kubuntu. Чтобы держишь кнопку N-секунд, отпускаешь, а она осталась нажатой.
Поискал в инете - не нашел и решил, что придется писать самому.
Принцип программы прост:
1) перехватить нажатие кнопки мыши и включить таймер.
2) перехватить отпускание той же кнопки. Если таймер тикал более N секунд, отменить отпускание кнопки, оставив ее нажатой.
3) при следующем нажатии кнопки, отменить ее залипание (сэмулировать отпускание)
Проблема в том, что я не знаю линуксовый аналог хука на мышь и какие события будут приходить при нажатии/отпускании кнопок мыши.
Удалось нагуглить функцию XGrabButton, но что делать после ее вызова мне не понятно.
Прошу помощи. Желательно под Lazarus.
p.s. Если такая программа уже существует и кто-нибудь скажет название, буду только рад поюзать.

Последний раз редактировалось BLACK_RAIN; 09.10.2014 в 14:07.
BLACK_RAIN вне форума Ответить с цитированием
Старый 10.10.2014, 11:03   #2
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

сделал так:
Код:
xGrabPointer(d, DefaultRootWindow(d), true, PointerMotionMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime);
события от мыши приходят, но все окна виснут.
никто не поможет?
Точнее, окна не виснут, а перестают реагировать на мышь. Им сообщения не доходят.

Последний раз редактировалось BLACK_RAIN; 11.10.2014 в 10:52.
BLACK_RAIN вне форума Ответить с цитированием
Старый 11.10.2014, 14:01   #3
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

накидал код
Код:
program project1;

{$mode objfpc}{$H+}

uses
  xlib, x, ctypes, sysutils;

procedure run;
var
  d: PDisplay;
  w,root: TWindow;
  e: TXEvent;
  msg: PChar;
  s: cint;
  mx , my : integer;
  t : string;
begin
  t := 'gg';
  msg := PChar(t);

  d := XOpenDisplay(nil);
  if (d = nil) then
  begin
    WriteLn('[ModalShowX11Window] Cannot open display');
    exit;
  end;

  s := DefaultScreen(d);

  w := XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 200, 200, 1,
                           BlackPixel(d, s), WhitePixel(d, s));

  XSelectInput(d, w, ExposureMask or KeyPressMask or pointermotionmask or
                  buttonpressmask or buttonreleasemask);

  XMapWindow(d, w);


  root := DefaultRootWindow(d);

  XGrabPointer(d, root, False, ButtonPressMask or ButtonReleaseMask or
               PointerMotionMask, GrabModeAsync, GrabModeAsync, None,
               None, CurrentTime);

  while (True) do
  begin
    XNextEvent(d, @e);
    case e._type of
      expose:
       begin
         XFillRectangle(d, w, DefaultGC(d, s), 20, 20, 10, 10);
         XDrawString(d, w, DefaultGC(d, s), 50, 50, msg, strlen(msg));
       end;
      KeyPress:
       begin
         break;
       end;

      motionnotify:
        begin
          mx := e.xmotion.x;
          my := e.xmotion.y;
          t := inttostr(mx)+','+inttostr(my);
          XDrawstring(d, w, DefaultGC(d, s), 50, 50, pchar(t), strlen(pchar(t)));

         end;

      buttonpress:
       begin
          mx := e.xmotion.x;
          my := e.xmotion.y;
        case e.xbutton.button of
          button1:
            t := 'left';
        end;
      end;
    end;
  end;

  xungrabpointer( d,currenttime);
  XCloseDisplay(d);
end;

begin
  run;
end.
Почему окна перестают реагировать на мышь?
BLACK_RAIN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
событие отпускания левой кнопки мыши для button Niyaz.cpp Visual C++ 0 24.04.2012 01:22
Программа для отображения состояния мыши Potapenko Dmytry Помощь студентам 0 02.11.2011 21:28
Событие onClick для правой кнопки мыши delphi JK0 Помощь студентам 0 09.06.2011 22:36
Событие для правой кнопки мыши MyLastHit Общие вопросы Delphi 4 30.08.2010 17:04
Программа для снятия видео с экрана в Linux Яр|/||< (^_^) Софт 1 14.03.2010 15:42