S0mbre, это не будет работать. По двум причинам:
1. По клику на форме (WControl == 0) ты сам приказал выйти из обработчика, этот случай тоже нужен ТС-у...
2. Совсем не так просто заставить ComboBox, в котором что-то выбрано (ItemIndex != 1) исчезнуть... Попробуй, тебе понравится Я вчера пробовал через Application->OnMessage, так и не понял в чем засада... Пока ничего не выбрал - работает, только выбор сделан - облом... Хотя через кнопку, которая тупо берет и сбрасывает Visible - прекрасно работает, в любом состоянии...
Не работает не (совсем) из-за этого, а из-за того, что:
1) TLabel не фокусируется, т.к. не является потомком TWinControl (это потомок TGraphicControl).
2) Форма (как и панель) не фокусируется при клике, соответственно ActiveControl не изменяется.
Модификация:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Screen->OnActiveControlChange = &ActiveControlChangeEvent;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ActiveControlChangeEvent(TObject *Sender)
{
TWinControl* wControl = Screen->ActiveControl;
ComboBox1->Visible = ( wControl &&
((wControl->Name == Edit1->Name) ||
(wControl->Name == ComboBox1->Name)) );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClick(TObject *Sender)
{
ComboBox1->Visible = false; // это же вешать на Label1->OnClick
}
И кстати, у меня проблем с выбранными айтемами в ComboBox нет...