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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2015, 14:04   #11
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну если вдруг понадобится мультивыбор? Т.е. закраска и сброс нескольких? Массив надежнее получается. Костыльов меньше буит
Я привёл работающий код. Ну чё воздух-то сотрясать? Приведи рабочий код с массивами, а там сравним. Лучше один раз уваидеть, чем 100 раз услышать. И потом, зачем в меню - мультивыбор? Много ты видел меню с мультивыбором?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 11.09.2015 в 14:07.
Smitt&Wesson вне форума Ответить с цитированием
Старый 11.09.2015, 14:21   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Много ты видел меню с мультивыбором?
Когда работал в КБ много. Не будем спорить - пусть автор решает как ему будет лучше. Я не против твоего варианта, ты не подумай )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.09.2015, 14:46   #13
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Когда работал в КБ много.
А если не секрет, что можно делать в меню мультивыбором? Чё-т на ум ничего не приходит.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 11.09.2015, 15:07   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну у нас например было так: Есть грид. В нем извещения. Создается контекстное меню (не TPopUpMenu стандартное а свое) в котором выбирается путь прохождения извещения - узлы типа КБ, Цех, Мастер, Металлург... И так на разные извещения можно было пометить разные узлы обработки документации. Эт не совсем меню конечно, но работало оно именно как меню.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.09.2015, 17:33   #15
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Если от TPanel берётся только её внешнее отображение, то лучше берите обычный TListBox и рисуйте на нём типа панели, всё будет из коробки.
Если нужны всё же именно панели, то создавайте хоть на базе TFrame. А лучше делайте кошерно свой контрол, унаследовав хоть от TPanel, в который уже пихайте нужные вам панели, лепите нужные обработчики,... Тогда уже в дизайнере никто случайно ничего не поломает, не подпишется на ненужное событие и в коде не будет всяких разных костылей. Всё, относящееся к контролу будет в этом самом контроле. Есть же, например, TLabeledEdit. Там тупо в недрах создан TLabel и TEdit, но наружу ничего лишнего не торчит и никакого колхоза нет.
pu4koff вне форума Ответить с цитированием
Старый 11.09.2015, 23:38   #16
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Ну, вот сварганил такую менюшку работающую со списком объектов формы.
Код:
void __fastcall TForm1::PanelFileClick(TObject *Sender)
{
  AnsiString panel[3] = {"PanelFile", "PanelOptions", "PanelHelp"};
  for(int j=0; j<3; j++)
   for(int i=0; i < Form1->ComponentCount; i++)
   {
    if(Form1->Components[i]->ClassNameIs("TPanel"))
    {
     if(((TPanel *)Form1->Components[i])->Name == panel[j])
     {
      ((TPanel *) Form1->Components[i])->Color = clRed;
      ((TPanel *) Form1->Components[i])->PopupMenu->AutoPopup = false;
      break;
     }
    }
   }
  ((TPanel *)Sender)->Color = clLime;
  ((TPanel *)Sender)->PopupMenu->AutoPopup = true;
}
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 12.09.2015 в 08:02.
Smitt&Wesson вне форума Ответить с цитированием
Старый 11.09.2015, 23:48   #17
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Всем спасибо за такую активную помощь ))
Но как говорится, послушай всех, но сделай по своему (ну или что то в этом роде))))

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Код:
void __fastcall TForm1::PanelFileClick(TObject *Sender)
{
  PanelFile->Color = clRed;
  PanelOptions->Color = clRed;
  PanelHelp->Color = clRed;
  PanelFile->PopupMenu->AutoPopup = false;
  PanelOptions->PopupMenu->AutoPopup = false;
  PanelHelp->PopupMenu->AutoPopup = false;
  ((TPanel *)Sender)->Color = clLime;
  ((TPanel *)Sender)->PopupMenu->AutoPopup = true;
}
Всё бы ничего, но у меня все элементы меню создаются динамически и обработчик OnClick уже прописан в классе этой кнопки


Цитата:
Сообщение от Stilet Посмотреть сообщение
Сделай массив TPanel *but=new TPanel[6];
И в цикле поназначай при создании им один и тот же обработчик - метод этого класса.
Не плохая идея, но уже пробовал подтянуть весь класс TPanelButGroup в конструктор кнопки, но где то запоролся и получилась масло масленое ...

В итоге, как я сделал ... В самом классе TPanelButGroup при создании каждой кнопки продублировал дополнительное событие OnClick и уже через Sender и массив кнопок сделал обработчик)))
-Jack- вне форума Ответить с цитированием
Старый 12.09.2015, 10:38   #18
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

К стати, сама по себе тема интересная, поэтому продолжу, хотя ТС уже свою проблему решил.
В дополнение к посту #16 сделал выпадающее меню при активации кнопки.
Код:
// Выпадающее меню при наведении мышки на активную панель
void __fastcall TForm1::PanelFileMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
  if(((TPanel *)Sender)->Color == clLime)
  {
    TPoint pt;
    pt = Point(((TPanel *)Sender)->Left, ((TPanel *)Sender)->Top + ((TPanel *)Sender)->Height);
    pt = ClientToScreen(pt);
    ((TPanel *)Sender)->PopupMenu->Popup(pt.x, pt.y);
  }
}
Вложения
Тип файла: rar PanelColor.rar (154.8 Кб, 5 просмотров)
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление графическими объектами Fluffy123 Помощь студентам 1 16.11.2010 19:31
Управление объектами через сеть с помошью сокетов: ritm Работа с сетью в Delphi 2 24.02.2010 09:35
Управление динамическими объектами по Handle SibBear Общие вопросы Delphi 3 17.03.2009 19:12
задачка с объектами LyaLyaLya Помощь студентам 9 09.01.2009 02:02
Управление Программно созданными объектами dars73 Помощь студентам 14 19.11.2007 01:42