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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2020, 13:24   #1
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию Обработчик событий для компонентов формы

Доброго времени суток. Я тут помышляю написать виджетов для форм ввода данных.
Например TSomeWidget - класс отвечающий за несколько компонентами на форме и обрабатывающий их события. И вот хочу спросить совета как лучше обрабатывать события.
Базовый вариант конечно написать в TSomeWidget всех обработчиков для мыши, клавиатуры, фокуса, активации, перетаскивания и прочих.
Но меня привлекает идея о том, чтобы поставить 1 обработчик событий мыши и 1 клавиатуры.

Допустим какой-нить TAbstractWidget принимает набор компонентов и устанавливает им два типа событий OnMouseEvent, OnKeyboardEevent. А все наследуемые от него TSomeWidgtet просто их переопределяют.

Понятно, что можно определить все события, а из них вызывать два заветных эвента,
но может через какой-нить WndProc?
Я назначил TEdit свой WindowProc - он вылетел в эксепшн "A call to an OS function failed".
Как быть, посоветуйте.
пыжок
maloun вне форума Ответить с цитированием
Старый 21.08.2020, 14:14   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Разделяй и властей.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 21.08.2020, 14:27   #3
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

А если всё же попробовать как-то объединять.
Можно как-то слушать сообщения TControl'ов не наследуясь от них?

Допустим у меня только WndProc на форме и я слушаю все события
приходящие на форму предназначенные и для формы и для компонентов на ней.
Можно из TMessage вычислить компонент которому пойдет событие?
Обновление: (Быстрый гуглинг говорит, что нельзя)
пыжок

Последний раз редактировалось maloun; 21.08.2020 в 14:47.
maloun вне форума Ответить с цитированием
Старый 21.08.2020, 15:46   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Можно из TMessage вычислить компонент которому пойдет событие?
события предназнчены какому-то ОКНУ(ActiveWindow: Hwnd), а компоненты WinContriol знают СВОЁ (property handle: HWND)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 23.08.2020, 14:27   #5
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

Кстати слушать TWinControl.WindowProc можно так:
Код:
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    EditWnd:TWndMethod;
  public
    { Public declarations }
    procedure WndProc(var Msg:TMessage);
  end;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  EditWnd:=Edit1.WindowProc;
  Edit1.WindowProc:=WndProc;
end;

procedure TForm1.WndProc(var Msg:TMessage);
begin
  case Msg.Msg of
    CM_MOUSEWHEEL:
    	ShowMessage('it works');
  end;
  EditWnd(Msg);
end;
пыжок
maloun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработчик событий. VC++ MFC Girei Помощь студентам 0 22.04.2016 23:58
Обработчик событий strangegirlXX JavaScript, Ajax 7 06.04.2013 00:38
Обработчик событий kostolomeo Помощь студентам 1 22.05.2012 07:49
обработчик событий IIaJIbI4 БД в Delphi 2 07.06.2011 15:09
обработчик событий ben95 Помощь студентам 5 28.01.2008 17:46