С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 57

Не виден текст в выделенной ячейке компонента TStringGrid

06.01.2026, 18:32. Показов 327. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветсвтую!
Хочу в StringGrid изменить цвет выделенной ячейки, пишу в onDrawCell:

C++
1
2
3
4
5
6
7
8
9
10
void __fastcall DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) {
 
    TStringGrid *Grid = dynamic_cast<TStringGrid *>(Sender);
    if (State.Contains(gdSelected)) {
        Grid->Canvas->Brush->Color = clBlue;
        Grid->Canvas->Font->Color  = clRed;
        Grid->Canvas->FillRect(Rect);
        Grid->Canvas->TextRect(Rect, Rect.Left, Rect.Top, Grid->Cells[ACol][ARow]);
    }
}
Цвет прямоугольника меняется, а вот текст под ним не виден. Если кликнуть на другую ячейку, то
текст появляется.

Пробовал сохранять текст и затем вывести так:
C++
1
2
3
AnsiString Str;
Str = Grid->Cells[ACol][ARow];
Grid->Canvas->TextRect(Rect, Rect.Left, Rect.Top, Str);
Тот же результат...
Если явно указать номер ячейки Str = Grid->Cells[1][1];
В этом случае текст виден.

Проверил, ACol и ARow не дают номер столбца и строки, но ведь при условии:
if (State.Contains(gdSelected)) (проверка на выделенную ячеку) они должны давать координаты этой ячейки?

Прошу помощи!

Добавлено через 2 часа 49 минут
Добавил в коде пару строк, чтобы в таблицу выводились номера строки и колонки:
C++
1
2
Grid->Cells[3][3] = ACol;
Grid->Cells[3][4] = ARow;
Так вот кликаю по ячейкам таблицы, а мне ACol почему-то всегда дает такую цифру: 108619632, а вот
ARow выдает верную информацию, т.е. кликнул по ячейке во второй колонке - 2, третьей - 3.

Почему же ACol так шалит?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.01.2026, 18:32
Ответы с готовыми решениями:

Заблокировать горизонтальную прокрутку при смене выделенной строки в TStringGrid
Добрый день! Имеется TStringGrid, у которого установлен ScrollBars в ssBoth, а также выбор...

StringGrid: текст не виден при раскрашивании ячейки
Здравствуйте. Подскажите , пожалуйста, при закрашивании отдельных столбцов или ячеек, новый цвет...

Сделать компонент Memo невидимым, но текст от него, чтобы был виден
Как сделать так чтобы Компонент Memo не был видим, при этом его текст должен быть видим! Типо текст...

5
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
06.01.2026, 19:02
Доброго.
Сделайте новый проект, закиньте на него таблицу, ну и там что то вроде:
C++
1
2
3
    for(int i = 0; i < StringGrid1->RowCount; ++i)
        for(int j = 0; j < StringGrid1->ColCount; ++j)
            StringGrid1->Cells[j][i] = "AAA";
и тоже самое в событии DrawCell.
Проблема повторится?
0
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 57
06.01.2026, 20:02  [ТС]
Доброго, спасибо за ответ.

Присланный Вами код по заполнению ячеек работает. Если явно указываю строку и колонку все нормально отрабатывает. Проблема именно в ACol

Создаю сетку динамически, обработчик DrawCell вешаю так:

C++
1
2
3
4
TMethod Method;                                                       
Method.Code = DrawCell;                                             
Method.Data = Grid;                                                   
Grid->OnDrawCell = *(TDrawCellEvent*)&Method;                         //событие OnDrawCell
Вы мне уже как то отвечали, что этот TMethod может работать не корректно, особенно если несколько параметров.
Вот в
C++
1
void __fastcall DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State)
Все корректно, а int ACol выдает не те значения, будто он Handle грида получает, а не номер строки.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
06.01.2026, 20:06
Как мы поняли что события где больше одного параметра в методы могут криво присвоится. Делайте чере костыль, киньте на форму таблицу, возьмите с нее событие, а таблицу удалите.
0
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 57
06.01.2026, 20:14  [ТС]
Попробую.

Добавлено через 7 минут
К сожалению тоже самое.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,145
Записей в блоге: 3
06.01.2026, 20:15
Что то ни так делаете, все указывает что где то в коде проблемы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.01.2026, 20:15
Помогаю со студенческими работами здесь

TStringGrid: получить содержимое ячейки
В общем название темы говорит само за себя. Я не очень хочу рассчитывать по координатам что там...

Переключение между ячейками TStringGrid по нажатию Enter
Здравствуйте. Есть динамически создаваемые таблицы. Нужно сделать так, чтобы при вводе данных в...

Изменить отступ текста в ячейках TStringGrid
Всем привет! Есть таблица TStringGrid, нужно уменьшить отступ текста от края ячейки. В событии...

Выравнивание текста в TStringGrid: как выравнять содержимое ячейки во время режима редактирования?
Доброго времени суток. Я могу выравнять текст по центру внутри ячейки путём её перерисовки, но что...

Корректное отображение кириллицы в ячейках TStringGrid
В начале запуска программа загружает данные из текстового файла. Для этого создается объект класса...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru