C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
PopUp Menu на ячейке StringGrid'а, Как сделать?
Aptem
  Отправлено: 26.08.2003, 11:41


Мастер участка

Группа: Участник
Сообщений: 349



Привет, всем !

Скажите, кто может, можно ли и если можно, то как сделать, чтобы кликнув правой кнопкой мыши на любой ячейке StringGid'а вызывалось PopUp Menu. Меню разное, взависимости от данных, находящихся в ячейке, то есть какие-то строки меню Enabled = true, а какие-то Enabled = false.

Надеюсь вопрос понятен !

Спасибо за внимание !!!

Отредактировано Aptem — 26/08/2003, 12:52
Георгий
Отправлено: 26.08.2003, 19:41


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



вопрос не только хорошо понятен, но и не сложен — смотри код:
CODE
void __fastcall TForm1::StringGrid1ContextPopup(TObject *Sender,
     TPoint &MousePos, bool &Handled)
{
AnsiString str;
str.printf("Ùåë÷¸ê ìûøêîé x=%d y=%d",MousePos.x,MousePos.y);
this->Memo1->Lines->Add(str);
int ACol,ARow;
this->StringGrid1->MouseToCell(MousePos.x,MousePos.y,ACol,ARow);
str.printf("ýòî ïîïàäàåò íà ÿ÷åéêó ACol=%d ARow=%d",ACol,ARow);
this->Memo1->Lines->Add(str);
//âêëþ÷àåì âñå ïóíêòû
for (int i=0;i<this->PopupMenu1->Items->Count;i++)
       this->PopupMenu1->Items->Items[i]->Enabled=true;
//îòêëþ÷àåì ïóíêò ìåíþ = # ñòîëáöà
this->PopupMenu1->Items->Items[ACol]->Enabled=false;
}

а для закрепления вот весь проект:

User Attached Image Скачать файл
StringSrigAndPopupMenu.rar


Aptem
Отправлено: 27.08.2003, 04:44


Мастер участка

Группа: Участник
Сообщений: 349



Все конечно понятно, спасибо, но вот примерчик не пошел. Требует дополнительные packages !
Георгий
Отправлено: 27.08.2003, 08:34


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



у меня BCB5 pro. сделана полная установка и никаких дополнительных package не установлено.
Теперь вместе с исходниками лежит нормальный exe.

User Attached Image Скачать файл
StringSrigAndPopupMenu.rar


Aptem
Отправлено: 27.08.2003, 10:17


Мастер участка

Группа: Участник
Сообщений: 349



Огромное спасибочки... разобрался!

Но возникла новая проблема:
Когда всплывает меню над гридом, кнопка мыши как бы остается нажатой и если поводить мышкой по меню, то будут выделяться строки грида. Другими словами, как можно отключить выделение ячеек.
Gedeon
Отправлено: 27.08.2003, 12:47


Ветеран

Группа: Модератор
Сообщений: 1742



Вот это запрещает выделение если свойство Options->goRangeSelect в инспекторе объектов установлено в false, его можно менять и в коде, но сейчас у меня нет времени в этом ковыряться.
CODE

void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
     int ARow, bool &CanSelect)
{
   //StringGrid1->Options.
   CanSelect = false;
}
//---------------------------------------------------------------------------
Георгий
Отправлено: 27.08.2003, 20:15


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



Aptem
А у меня, когда я вожу мышкой по меню, ячейки не выделяются ( при любом Options->goRangeSelect ) возможно где-то что-то другое глючит?

Вернуться в Вопросы программирования в C++Builder