powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Назначить всем визуальным компонентам один и тот же обработчик OnMouseDown
3 сообщений из 3, страница 1 из 1
Назначить всем визуальным компонентам один и тот же обработчик OnMouseDown
    #39927381
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь сделать сабж но не получается.

Пробовал так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
TSomeForm = class(TForm)
...
  procedure My_OnMouseDown_Proc(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
...
end;

procedure TSomeForm.My_OnMouseDown_Proc(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  // здесь нужный функционал
end;

procedure TSomeForm.EnumAllComponents;
var
  i: Integer;
begin
  for i := 0 to ComponentCount-1 do
  begin
    if (Components[i] is TWinControl) then
      try TWinControl(Components[i]).OnMouseDown := My_OnMouseDown_Proc; except end;
  end;
end;

Не дает скомпилироваться, ругается:

Код: plaintext
Cannot access protected symbol TControl.OnMouseDown


Ну, ок, тогда попробовал изменить на вот такое:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
procedure TSomeForm.EnumAllComponents;
var
  i: Integer;
  PropInfo: PPropInfo;
  MyMethod: TMethod;
begin
  for i := 0 to ComponentCount-1 do
  begin
    PropInfo := GetPropInfo(Components[i].ClassInfo, 'OnMouseDown');
    if (Components[i] is TWinControl) then
    begin
      MyMethod.Data := Components[i];
      MyMethod.Code := MethodAddress('My_OnMouseDown_Proc');
      SetMethodProp(Components[i], PropInfo, MyMethod);
      end;
    end;
  end;
end;

В этом случае вываливается AV (access violation)

Подскажите, в чем ошибка?
...
Рейтинг: 0 / 0
Назначить всем визуальным компонентам один и тот же обработчик OnMouseDown
    #39927385
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
if IsPublishedProp(Components[i], 'OnMouseDown') then


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Назначить всем визуальным компонентам один и тот же обработчик OnMouseDown
    #39927458
SQL-Talker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Супер! Спасибо
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Назначить всем визуальным компонентам один и тот же обработчик OnMouseDown
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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