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"
};
StringGrid и Hint
Например,
Код:
StringGrid1->Cells[2][1] Hint="hhhh"
StringGrid1->Cells[2][2] Hint="aaaa"
StringGrid1->Cells[2][3] Hint="ffff"
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);
}
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);
}
Пока не соображается, что нужно делать...
Цитата:
Originally posted by richel
StringGrid1->Hint = IntToStr(r) + IntToStr(c
Пока не соображается, что нужно делать...
StringGrid1->Hint = IntToStr(r) + IntToStr(c
Пока не соображается, что нужно делать...
Вариант:
Занести в двумерный строковый массив все подсказки, при чем индексация массива привязана к ячейкам грида.
Тогда:
...
StringGrid1->Hint = hintArray[r][c];
Цитата:
Originally posted by Lexogen
Вариант:
Занести в двумерный строковый массив все подсказки, при чем индексация массива привязана к ячейкам грида.
Тогда:
...
StringGrid1->Hint = hintArray[r][c];
Вариант:
Занести в двумерный строковый массив все подсказки, при чем индексация массива привязана к ячейкам грида.
Тогда:
...
StringGrid1->Hint = hintArray[r][c];
А как привязать индексацию массива к ячейкам Грида? Что-то у меня не получилось...:{
Цитата:
Originally posted by richel
А как привязать индексацию массива к ячейкам Грида? Что-то у меня не получилось...:{
А как привязать индексацию массива к ячейкам Грида? Что-то у меня не получилось...:{
StringGrid имеет размерность 3*3. Тогда напр. где-то,
Код:
Код:
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];
}
}
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];
}
}
Код:
int sgn = (c<<12) + r;
Мне все понятно в коде, кроме того, что означает число 12?
А второй недочет - как только курсор попадает на полосу прокрутки или маленький клочок, где поле свободно от ячеек StringGrid, выскакивает сообщение об ошибке:
Цитата:
Access violation at adress 00778D9C in module '...exe'. White...
и т.д.
Как это убрать?
Цитата:
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();
}
}
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 значения можно было хранить в одной переменной.
Еще раз огромное спасибо. Все работает.:)