Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Единый онклик для всего что есть на форме-как сдел


Автор: zogman 5.2.2005, 13:37
Если на форме много всего - то онклик для каждого надо писать,
свой - что несколько не красиво - как сделать чтобы по клику
в любом месте формы - напрмер на любом имедже который лежит на ней - вызывалась одна и таже функция.

(Кроме того эта форма не одна - а динамически я создаяю много таких форм).

Есть ли простой способ сделать такое ?
( Корявый способ у меня есть - через перехвант Message L_Button,
потом проход по циклу for (int i = 0; i < Screen->FormCount; ++i)
и поиск форму нужного типа
if( (
(Msg.hwnd==Screen->Forms[i]->Handle)
||(Screen->Forms[i]->Handle==GetParent(Msg.hwnd))
)
&& ( ! strcmp( Obrezanoe imya formy Form[i],"Form4Show2") )
)

i t.d.

нет ли чего по проще

Код

void __fastcall TForm4Show2::MessageEvent(tagMSG &Msg, bool &Handled)
{
if(  WM_LBUTTONUP==Msg.message)
for (int i = 0; i < Screen->FormCount; ++i)
{
   //char s[100];
   AnsiString s;
   s=Screen->Forms[i]->Name;
   char s2[100];
   strncpy(s2,s.c_str(),10);
   s2[10]=0;
// u vsex sgenerennyx form posle pervoi budut imena:Form4Show2_1, Form4Show2_2, ...
   // na etom i osnovan etot kusok
   // ClassType ne pabotaet
  if(     (
     (Msg.hwnd==Screen->Forms[i]->Handle)
     ||(Screen->Forms[i]->Handle==GetParent(Msg.hwnd))
           )
           &&  ( ! strcmp(s2,"Form4Show2") )
     )
{
  {

  TForm4Show2 *tmp=dynamic_cast<TForm4Show2 *>(Screen->Forms[i]);
        showsManager->SetActiveShow(tmp->showParent);

  MessageBeep(-1);
        }
   break;
}
//ShowMessage("jkkjkjkjk");
}
   
};

?


Автор: Конструктор 5.2.2005, 22:20
Можно создать один обработчик OnClick, а потом на вкладке Events в Object Inspector выбирать в выпадающем списке этот единственный обработчик.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)