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

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

14.06.2011, 13:56. Показов 2889. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru