Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/14: Рейтинг темы: голосов - 14, средняя оценка - 5.00
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141

DrawGrid - как убрать выделенную ячейку?

14.06.2011, 13:56. Показов 2917. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сделал DrawGrid 5х5, нужно рандомно по таймеру зажигать ячейки белым цветом (впоследствии гасить черным).

Мой код:

C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TMainForm::TimerTimer(TObject *Sender)
{
        if (cycle)
        {
                cells = random(25);
                DrawGrid->Col = cells / 5;
                DrawGrid->Row = cells % 5;
                DrawGrid->Color = RGB(255, 255, 255);
        }
}
cycle - флаг включения миганий.

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

что я не так сделал?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.06.2011, 13:56
Ответы с готовыми решениями:

Убрать выделенную ячейку в StringGrid
Добрый день, как по умолчанию убрать выбранную ячейку,что бы она не появлялась вновь, после потери фокуса компонента?

Как в Stringgrid переместить выделенную ячейку в видимую область?
При реализации поиска в Stringgrid столкнулся с тем, что выделенная ячейка (результат поиска) часто оказывается вне видимой области...

Закрасить выделенную ячейку StringGrid
выделенный якейку надо закрашить? void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect...

4
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
14.06.2011, 14:04
Заведи глобальный массив 5x5, там надо будет хранить состояние ячеек (цвет).
По таймеру надо будет заполнять массив и вызывать DrawGrid->Repaint();

В OnDrawCell надо будет закрашивать ячейки, используя этот массив:
C++
1
2
3
4
if (array[ACol][ARow])
{
 // закрасить
}
0
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
14.06.2011, 14:59  [ТС]
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Заведи глобальный массив 5x5, там надо будет хранить состояние ячеек (цвет).
По таймеру надо будет заполнять массив и вызывать DrawGrid->Repaint();

В OnDrawCell надо будет закрашивать ячейки, используя этот массив:
C++
1
2
3
4
if (array[ACol][ARow])
{
 // закрасить
}
так сделал, теперь при запуске сразу все мигает очень очень быстро, что даже не видно цветов, "полувисячий" режим.
А имена ACol и ARow имеют какой-то определенный смысл или это могут быть любые переменные?

вот кусок из таймера:

C++
1
2
3
4
5
6
7
8
9
void __fastcall TMainForm::TimerTimer(TObject *Sender)
{
        if (cycle)
        {
                cells = random(25);
                cells_colours[cells / 25][cells % 25] = 1;
                DrawGrid->Repaint();
        }
}
И OnDrawCell:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TMainForm::DrawGridDrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
int i, j;
 
        for (i = 0; i < 5; i++)
                for (j = 0; j < 5; j++)
                {
                        DrawGrid->Col = i;
                        DrawGrid->Row = j;
                        if (cells_colours[i][j])
                                DrawGrid->Color = RGB(255, 255, 255);
                        else DrawGrid->Color = RGB(0, 0, 0);
                }
}
Массив описан глобально приватно:
C++
1
bool cells_colours [5][5];
Добавлено через 2 минуты
А,все, понял с ACol и ARow, пока перечитывал ответ.

Но все равно при запуске он целиком заливается белым и теперь даже выделенная синяя ячейка не двигается.

Добавлено через 28 минут
кстати даже если изначально задать какие нибудь любые цвета массива и просто по таймеру выводить одно и то же, он не рисует клетки разных цветов...
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
14.06.2011, 15:07
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TForm1::DrawGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
        if (cells_colours[ACol][ARow] == 1)
        {
                DrawGrid1->Canvas->Brush->Color = clWhite;
        }
        else if (cells_colours[ACol][ARow] == 2)
        {
                DrawGrid1->Canvas->Brush->Color = clBlue;
        }
        else
        {
                DrawGrid1->Canvas->Brush->Color = clBlack;
        }
        DrawGrid1->Canvas->FillRect(DrawGrid1->CellRect(ACol, ARow));
}
1
4 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 141
14.06.2011, 15:35  [ТС]
так заработало все как надо!
kzru_hunter, огромное спасибо!!!!!!!!!!!!!!!!!!

дочитаю потом что такое Canvas и Brush.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.06.2011, 15:35
Помогаю со студенческими работами здесь

Убрать первую выделенную ячейку синего цвета
Собственно весь вопрос в этом, я уже все перепробовал, но боюсь что я делаю что-то неправильно и не понимаю что. Я уже пробовал и ...

Как прочитать выделенную ячейку GridView?
Срочно, ПОЖАЛУЙСТА Как прочитать выделенную ячейку, строку:umnik:

Как сохранить содержимое в выделенную ячейку?
Здравствуйте! Есть форма с ComboBox.Как сохранить содержимое в выделенную ячейку Excel?_Как программно объединить выделенные ячейки?

Уменьшить размер BitMap'a перед помещением в ячейку DrawGrid?
Как уменьшить размер BitMap'a перед помещением в ячейку DrawGrid? Только уменьшить размер именно, а не обрезать! Может быть какая-нибудь...

Получить выделенную ячейку StringGrid
Привет всем. У меня такая проблема. Незнаю как получить содержимое выделенной ячейки в StringGrid. То есть при выделении ячейки её...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru