Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

StringGrid и Hint

1.2K
18 ноября 2005 года
richel
142 / / 20.01.2005
Мне нужно сделать всплывающую подсказку, но так, чтобы в каждой ячейке столбца был свой текст.
Например,
 
Код:
StringGrid1->Cells[2][1] Hint="hhhh"
StringGrid1->Cells[2][2] Hint="aaaa"
StringGrid1->Cells[2][3] Hint="ffff"

По этой теме я нашла код на Делпфях, перевела его. Но в ячейках выводится номер столбца и строки. А меня это не интересует.
Вот код:
Код:
void __fastcall TForm1::StringGrid1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
   int r;
   int c;

     StringGrid1->MouseToCell(X, Y, c, r);
  if ((Row != r) ||
      (Col != c)) {
          Row = r;
          Col = c;
    Application->CancelHint();
    StringGrid1->Hint = IntToStr(r) +  IntToStr(c);
}

Пока не соображается, что нужно делать...
2.4K
18 ноября 2005 года
Lexogen
70 / / 18.05.2004
Цитата:
Originally posted by richel

StringGrid1->Hint = IntToStr(r) + IntToStr(c
Пока не соображается, что нужно делать...




Вариант:
Занести в двумерный строковый массив все подсказки, при чем индексация массива привязана к ячейкам грида.
Тогда:
...
StringGrid1->Hint = hintArray[r][c];

1.2K
21 ноября 2005 года
richel
142 / / 20.01.2005
Цитата:
Originally posted by Lexogen
Вариант:
Занести в двумерный строковый массив все подсказки, при чем индексация массива привязана к ячейкам грида.
Тогда:
...
StringGrid1->Hint = hintArray[r][c];


А как привязать индексацию массива к ячейкам Грида? Что-то у меня не получилось...:{

2.2K
21 ноября 2005 года
123tk
57 / / 28.06.2003
Цитата:
Originally posted by richel
А как привязать индексацию массива к ячейкам Грида? Что-то у меня не получилось...:{

StringGrid имеет размерность 3*3. Тогда напр. где-то,

 
Код:
String a_hints[3][3] = {
  "", "",                   "",
  "", "Hint for Cell 1, 1", "Hint for Cell 1, 2",
  "", "Hint for Cell 2, 1", "Hint for Cell 2, 2"
  };
и обработчик
Код:
void __fastcall TForm1::StringGrid1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
   int r, c;
   StringGrid1->MouseToCell(X, Y, c, r);
   int sgn = (c<<12) + r;
   if(StringGrid1->Tag!=sgn)
   {
     StringGrid1->Tag = sgn;
     StringGrid1->Hint = a_hint[r][c];
   }
}
1.2K
22 ноября 2005 года
richel
142 / / 20.01.2005
Здорово. Огромное спасибо за помощь. У меня все получилось, но с маленькими недочетами. Подозреваю, что это из-за строки:
 
Код:
int sgn = (c<<12) + r;

Мне все понятно в коде, кроме того, что означает число 12?
А второй недочет - как только курсор попадает на полосу прокрутки или маленький клочок, где поле свободно от ячеек StringGrid, выскакивает сообщение об ошибке:
Цитата:
Access violation at adress 00778D9C in module '...exe'. White...


и т.д.
Как это убрать?

2.2K
22 ноября 2005 года
123tk
57 / / 28.06.2003
Цитата:
Originally posted by richel
Здорово.

Да, два бага в таком микрокоде... :)

Код:
void __fastcall TForm1::StringGrid1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
   int r, c;
   StringGrid1->MouseToCell(X, Y, c, r);
   if(c<0 || r<0)return;
   int sgn = (c<<12) + r;
   if(StringGrid1->Tag!=sgn)
   {
     StringGrid1->Tag = sgn;
     StringGrid1->Hint = a_hints[r][c];
     Application->CancelHint();
   }
}

12 я взял с потолка. Это чтоб 2 значения можно было хранить в одной переменной.
1.2K
22 ноября 2005 года
richel
142 / / 20.01.2005
Сама не догадалась :( , т.к. разрываюсь между двумя задачами.
Еще раз огромное спасибо. Все работает.:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог