powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перехватить щелчок мышью?
22 сообщений из 22, страница 1 из 1
Как перехватить щелчок мышью?
    #32137899
V.L.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На форме несколько десятков компонентов.
Как перехватить щелчок мышью, чтобы не анализировать события мыши
каждого компонента?
Т.е. что-то похожее на Form.KeyPreview, только не для клавиатуры, а
для мыши.

Спасибо.
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32137903
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как перехватить щелчок мышью, чтобы не анализировать события мыши
каждого компонента?


Интересно, я то же не знаю как. Акромя как пробежаться по всем компонентам и назначить им обработчик мыши как у формы. А зачем это надо, если не севрет?
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32137930
Фотография Ден
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я делал когда то..
нужно перехватывать событие OnMessage для объекта Application. Но я делал для клавиатуры, но помоему без разницы что перехватывать.
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32138078
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Memo1: TMemo;
    Label1: TLabel;
  private
    { Private declarations }
    procedure WndProc(var Message: TMessage); override;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WndProc(var Message: TMessage);
begin

  if (Message.Msg = WM_LBUTTONDOWN) then
    begin
      Label1.Caption := 'LButtonDown'
    end;
  if (Message.Msg = WM_RBUTTONDOWN) then
    begin
      Label1.Caption := 'RButtonDown'
    end;
  inherited;
end;

end.

...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32138321
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 V.L.

А зачем его перехватывать? Есть стандартный метод OnClick у контролов - там все и делай. Чего извращаться то?
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32138665
VitL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вижу, только один человек понял суть.

Объясню, зачем мне это нужно. Надо сделать, чтобы при щелчке мышью на любом компоненте произошло определенное действие.
Чем вписывать одинаковый код в тридцать обработчиков для каждого компонента, ведь проще обработать это событие один раз. Тем более, что
можно случайно пропустить какой-то компонент. Кроме того, на форме могут появляться новые компоненты...
А если перехватить - то не будет лишней головной боли.

Спасибо LexusR. Решение очень простое, не знаю, почему сам не додумался...
Сейчас проверю...
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32138702
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 V.L.

Надо сделать, чтобы при щелчке мышью на любом компоненте произошло определенное действие.

Ну уж раз начал, расказывай до конца, что ж это за действие такое, которое надо обработать на клик мышки, да еще для всех контролов?
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32138708
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> pkarklin
присоединяюсь к вопросу!
че делать то собираешься со всеми контролами сразу....?
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32138758
VitL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Плавающая панель интрументов должна исчезнуть при любом щелчке мышью. Вот и все, что мне нужно.
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32138766
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
См. >>Ден

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TfMain.FormCreate(Sender: TObject);
begin
  Application.OnMessage := onMess;
end;

procedure TfMain.onMess(var Msg: TMsg; var Handled: Boolean);
begin
  if(Msg.message=WM_LBUTTONDOWN)then begin
    Panel1.Caption := IntToStr(Msg.hwnd);
  end;
  Handled := False;
end;
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32138776
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Плавающая панель интрументов должна исчезнуть при любом щелчке мышью. Вот и все, что мне нужно.

А на событие OnActivate для формы не получится это сделать?
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32138793
VitL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А форма и так активна, ведь панель ей принадлежит.
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32138810
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>А форма и так активна, ведь панель ей принадлежит.

Ой ли, если панель плавающая?
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32138815
VitL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да-да, именно так. Delphi 3, самодельный компонент.
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32139086
VitL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обращаюсь к
LexusR
ZrenBy

Есть сомнения, что ваши методы сработают для щелчка по пустой области
строки меню.
Хотя метод ZrenBy, по идее, должен сработать. К сожалению, смогу это проверить только завтра, сейчас нет Дельфы под рукой.
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32139170
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+
WM_NCLBUTTONDOWN
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32139273
Фотография Белов Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я ошибаюсь, но имхо
для этого есть сообщение OnMouseUp

пишешь обработчик на событие OnMouseUp
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32139302
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<<Есть сомнения, что ваши методы сработают для щелчка по пустой области

оба способа почти идентичны и работают при шелчке мыши в пределах
формы в которой определена процедура перехвата сообщения
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32139307
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и событие обрабатывай как написал ZrenBy
WM_NCLBUTTONDOWN
оно срабатывает везде в пределах формы
а если нужно щелкать за пределами формы (что скорее всего вряд ли нужно)
то нужно
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32139309
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
)))
в Rx -ах есть компонент TRxWindowHook
который перехватывает все сообщения винды
и тогда можешь щелкать где угодно
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32139374
VitL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем.
Метод ZrenBy почти подошел.
А с учетом WM_NCLBUTTONDOWN, я думаю, будет на 100%.
...
Рейтинг: 0 / 0
Как перехватить щелчок мышью?
    #32139427
Фотография ScableR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понял, нафига изврашаться, надо просто пробежаться (мышью) по свойствам компонентов, прежде создав всего один обработчик, и присвоить этот обработчик всем кнопкам на реакцию нажатия.
Код будет ~ такой:
Код: plaintext
1.
2.
3.
Procedure TForm1.xxx();
begin
f.enabled := false;
end;
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перехватить щелчок мышью?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]