- Код: Выделить всё
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;
Если не трудно, поясните, пожалуйста, ситуацию.