Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.07.2011, 14:09
Pcrepair
 
Сообщения: n/a
По умолчанию Мышь drag-drop в аналоге RAdmin

Добрый день!
потихоньку идет разработка аналога РАдмин, в рамках одного проекта в среде D2010 ИНДИ10
на текущий день есть код переноса отжатия кнопок мыши с клиента на сервер в компоненте ИМЕДЖ1, в котором отображается скрин экрана сервера, все работает

КЛИЕНТ
Код:
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button=mbLeft then
  begin
   IdTCPClient1.Host:=HOST.Text;
   IdTCPClient1.Port:=StrToInt(PortNumber.Text);
   IdTCPClient1.Connect;
   IdTCPClient1.IOHandler.WriteLn('mouse_left ');
   IdTCPClient1.Disconnect;
  end;
 if Button=mbRight then
 begin
   IdTCPClient1.Host:=HOST.Text;
   IdTCPClient1.Port:=StrToInt(PortNumber.Text);
   IdTCPClient1.Connect;
   IdTCPClient1.IOHandler.WriteLn('mouse_right ');
   IdTCPClient1.Disconnect;
 end;
end;
СЕРВЕР
Код:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
  z: string;
  X,Y:integer;
  K:TPoint;

   if SameText(Copy(z, 1, 11), 'mouse_move ') then
   begin
    z := AContext.Connection.IOHandler.ReadLn;
    if SameText(Copy(z, 1, 8), 'mouse_x ') then
    X:=StrToInt(Copy(z,9,4));

    z := AContext.Connection.IOHandler.ReadLn;
    if SameText(Copy(z, 1, 8), 'mouse_y ') then
    Y:=StrToInt(Copy(z,9,4));
    SetCursorPos(X,Y);
  end;

  if SameText(Copy(z, 1, 11), 'mouse_left ') then
   begin
    GetCursorPos(K);
    mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN,K.X,K.Y,0,0);
    mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP,K.X,K.Y,0,0);
   end;

   if SameText(Copy(z, 1, 12), 'mouse_right ') then
   begin
    GetCursorPos(K);
    mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_RIGHTDOWN,K.X,K.Y,0,0);
    mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_RIGHTUP,K.X,K.Y,0,0);
   end;

  AContext.Connection.Disconnect;
 end;
end;
ВОПРОСЫ:
1. можно ли реализовать функцию перетаскивания объектов, как приблизительно код может выглядеть?
2. можно ли реализовать прокрутку с использованием колесика мыши (мышь - два баттона и колесо, стандартная), в событиях компонента ИМЕДЖ1 нет обработки колеса
3. в принципе, нужно ли делать обработку событий типа клик, двойной клик и что там может быть еще связянное с мышью, чтобы приблизиться к функционалу MSRDP?
Ответить с цитированием
  #2  
Старый 12.07.2011, 07:42
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

1) Ты делаешь по событию MouseUp. Добавь на событие MouseDown, и по DOWN отправляешь одну команду, а по UP - другую, и делаешь соответствующие события.
2) Колесо никогда не обрабатывал, так что не знаю.
3) mouse_event сам все это должен отрабатывать нормально.

З.Ы. не пойму, зачем такие длинные строки: 'mouse_left ' или 'mouse_x X'. Проще было бы сделать типа такого:
'mX Y' - перемещение в X и Y
'ld', 'lu' - соотв. опущена левая клавиша и нажата левая клавиша
'rd', 'ru' - правая
Чем длиннее строка - тем медленней она передается (ну это бог с ним), и тем медленнее она сравнивается с другой. А так можно вообще сравнивать 1-2 символа, то есть байта.
А лучше бы вообще не через строки. Ну это надо в индейце копатсья.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 12.07.2011 в 07:44.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:18.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025