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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2015, 04:26   #1
IvaniuS
Форумчанин
 
Аватар для IvaniuS
 
Регистрация: 16.04.2007
Сообщений: 225
По умолчанию Обработка кликов окна

Доброго времени суток!
У меня есть достаточно простое приложение, в котором есть TListView, с полной перерисовкой (возможно влияет), мне нужно:
Обрабатывать одинарное нажатие правой кнопки мыши, для выделения элементов в списке, при этом пропускать "сквозь него" все другие нажатия, на других элементах вызывать SC_DRAGMOVE при нажатии правой кнопки мыши, не реагировать на потерю фокуса (или наоборот WS_EX_NOACTIVATE не получать его)..

Сейчас сделал костыль, который меня совсем не устраивает:
Код:
const
  SC_DRAGMOVE = $F012;
begin
  if (Button = mbRight) then
  begin
   ...
  end;
  SetForegroundWindow(WindowHandle);//окно под приложеием
  inherited;
end;
В таком виде наше окно не бывает в фокусе и приходится клацать 2-3 раза, чтобы выделить итем в списке.

Есть идея
Сделать форму: WS_EX_TRANSPARENT;
точнее ту часть где все клики можно пропускать, сверху создать еще одну форму только со списком, но это опять-же не решение данной проблемы.

Чисто теоретически мне нужно перехватить сообщения WM_LBUTTONDOWN и WM_LBUTTONUP и передавать их форме только тогда когда это нужно, но не знаю решит-ли это вопрос с кликами "сквозь".

Всем заранее благодарен за ответы и обсуждения моего вопроса и его решения.

П.С. прочитал достаточно много решений в интернете, но пока не нашел подходящего.

Оказывается решение и крылось в WS_EX_NOACTIVATE в стилях, добиваю того результата что нужно, почти теперь нужно понять как перехватывать нажатия правой кнопкой мыши над моим приложением WM_LBUTTONDOWN?

Последний раз редактировалось IvaniuS; 27.08.2015 в 04:49.
IvaniuS вне форума Ответить с цитированием
Старый 11.09.2015, 14:08   #2
Fatov
Новичок
Джуниор
 
Регистрация: 11.05.2015
Сообщений: 1
По умолчанию

тоже возился с WS_EX_TRANSPARENT, а оказалось всего то нужно было добавить WS_EX_NOACTIVATE.
у меня правый клик так обрабарывается:
Код:
procedure TEvents.OnMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  ItemIndex1: integer;
begin
  if (Sender=LB) and (Button=mbRight) then begin
    ItemIndex1:=LB.ItemAtPos(Point(x,y), true);
    if (ItemIndex1>-1) then begin
      //таргетинг
      LB.ItemIndex := ItemIndex1;
    end;
  end;
end;
Fatov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка события создания окна Clacer Общие вопросы .NET 2 04.03.2010 09:20
Обработка прерывания и рисование окна Sparky Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 16.12.2009 13:56
Обработка кликов TСooltrayicon Shouldercannon Компоненты Delphi 2 04.06.2009 21:58
обработка кликов в treeview CraZZy RabbIt Общие вопросы Delphi 2 28.03.2009 22:28
Обработка события закрытия окна в С# Kriziun Общие вопросы .NET 2 14.04.2008 14:06