- Код: Выделить всё
- TMainForm.MyPanelClick(Sender: TObject);
 var
 pnl: TPanel;
 begin
 pnl := TPanel(Sender);
 pnl.Color := clRed;
 showmessage(pnl.Name); //для отладки
 end;
В некотором окне диалога имею такую же панель, клик на которой должен быть обработан совершенно аналогично, но уже для своего Sender.
Вызываю из "местного" обработчика "главнооконный"
- Код: Выделить всё
- TDialogForm.MyDialogPanelClick(Sender: TObject);
 begin
 MainForm.MyPanelClick(Sender);
 end;
Запускаю приложение, кликаю на панели в главном окне - цвет панели меняется, выскакивает окно showmessage с именем панели MyPanel. Все гуд.
Кликаю на панели в окне диалога - цвет панели НЕ меняется, выскакивает окно showmessage с именем панели MyDialogPanel. Не все гуд.
Для меня это странно. На какой тогда объект указывает переменная pnl, мне совершенно непонятно. Зуб не дам, но, кажется, такой код (вроде бы) работал в Дельфи (сейчас не могу посмотреть).
Проблема решается добавлением одной строки, которая меня самого немного веселит.
- Код: Выделить всё
- begin
 pnl := TPanel(Sender);
 pnl := TPanel(screen.ActiveForm.FindComponent(pnl.Name)); //вот эта строка
 pnl.Color := clRed;
 showmessage(pnl.Name); //для отладки
 end;
Если не трудно, поясните, пожалуйста, ситуацию.




 
 