Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/46: Рейтинг темы: голосов - 46, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 23.07.2009
Сообщений: 10

Закрашивание ячейки StringGrid

26.07.2009, 22:11. Показов 9096. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Функция-обработчик закрашивания ячейки в черный цвет левой кнопкой мыши:

C++
1
2
3
4
5
6
7
8
9
void __fastcall gridDrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
        TStringGrid *p=(TStringGrid *)Sender;
 
        p->Canvas->Brush->Color = clBlack;
        if (p->Cells[ACol][ARow] != ' ')
                p->Canvas->FillRect(Rect);
}
Как создать обработчик, который бы закрашивал в красный цвет при двойном щелчке мыши или правом нажатии?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.07.2009, 22:11
Ответы с готовыми решениями:

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

StringGrid - закрашивание
Подсчитать количество локальных максимумов в массиве целых чисел. Локальный максимум — такой элемент массива, который больше своих соседей....

Закрашивание ячеек в StringGrid
В событии BottonOnClick -вычисление ячеек двумерной матрицы, но мне нужно еще и закрасить ячейки в зависимости от результата. У меня вышло...

34
 Аватар для V.V.P.Net
11 / 11 / 1
Регистрация: 14.04.2010
Сообщений: 73
06.08.2012, 10:43
Студворк — интернет-сервис помощи студентам
Я и так делал
C++
1
2
3
4
5
6
7
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
    void paint_cell(int coll,int roww);
    void __fastcall DoIt(); // Вот тут я его объявил
 
};
C++
1
2
3
4
5
6
7
void TForm1::paint_cell(int coll,int roww)
{
draw_it=true;
Form1->StringGrid2DrawCell(this,coll,roww,Form1->StringGrid2->CellRect(coll,roww),TGridDrawState()<<gdFixed);
draw_it=false;
return;
}
C++
1
2
3
4
5
6
[BCC32 Error] Unit1.cpp(418): E2357 Reference initialized with 'TRect', needs lvalue of type 'TRect'
  Full parser context
    Unit1.cpp(416): parsing: void TForm1::paint_cell(int,int)
[BCC32 Error] Unit1.cpp(418): E2342 Type mismatch in parameter 'Rect' (wanted 'TRect &', got 'TRect')
  Full parser context
    Unit1.cpp(416): parsing: void TForm1::paint_cell(int,int)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33479 / 21577 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
06.08.2012, 11:04
Компилятор же тебе сказал, в чем дело:

C++
1
2
3
4
5
6
7
8
void TForm1::paint_cell(int coll,int roww)
{
    draw_it=true;
    TRect r = Form1->StringGrid2->CellRect(coll,roww); // <--- !!!
    Form1->StringGrid2DrawCell(this,coll,roww,r,TGridDrawState()<<gdFixed);
    draw_it=false;
    return;
}
ошибки не будет. Правда?
1
 Аватар для V.V.P.Net
11 / 11 / 1
Регистрация: 14.04.2010
Сообщений: 73
09.08.2012, 07:41
Цитата Сообщение от UI Посмотреть сообщение
Компилятор же тебе сказал, в чем дело:

C++
1
2
3
4
5
6
7
8
void TForm1::paint_cell(int coll,int roww)
{
    draw_it=true;
    TRect r = Form1->StringGrid2->CellRect(coll,roww); // <--- !!!
    Form1->StringGrid2DrawCell(this,coll,roww,r,TGridDrawState()<<gdFixed);
    draw_it=false;
    return;
}
ошибки не будет. Правда?
Ну если бы я понял что он имел виду то бы скорей всего догадался. Ошибок нет, тока почему то таблица сразу закрашивается вся, минуя вызова функции
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
09.08.2012, 08:19
флаг draw_it где-нибудь в начале программы надо сбросить
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
09.08.2012, 09:46
Попробовал способ с paint_cell, но цвет ячейки не фиксируется.

Добавлено через 1 час 26 минут
Как я понял, состояние gdFixed соответствует ячейкам фиксированных столбцов(FixedCols) и строк(FixedRows).
И как я понял, StringGrid не умеет запоминать то, что было нарисовано в какой-либо ячейке.
Остается только старый способ с событием OnDrawCell с ручным закрашиваем (и с использованием собственного двухмерного массива).
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
09.08.2012, 09:55
так оно и есть.
способ с paint_cell для временного подсвечивания
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
09.08.2012, 09:57
Цитата Сообщение от AntonChik Посмотреть сообщение
способ с paint_cell для временного подсвечивания
а смысл? после двойного ALT+TAB все исчезнет.
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
09.08.2012, 10:02
я использовал чтоб по нажатию кнопки подсветить красным ячейки с некорректными данными,
можно по надобности подсвечивать результаты поиска...
мне не нужна была фиксация
я кстати только сейчас это понял
0
 Аватар для V.V.P.Net
11 / 11 / 1
Регистрация: 14.04.2010
Сообщений: 73
09.08.2012, 12:43
Не знаю в чём дело.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
............
#undef UNICODE
TForm1 *Form1;
T_Parser parser;
//---------------------------------------------------------------------------
//Глобальные переменные
int post = 4, post1 = 5;            //Количесто знаков после и до запятой
int i;                              //Количество элементов
double a, b;
double mashtab;
double razmax, smeshenie;
double gammaf;
double math;
double variance;
double sko;
double mediana;
double moda;
double R2;
double NDPmax, NDPmin, TMPmax, TMPmin;
float pro;
bool draw_it=false;
extern int icout;
..........
C++
1
2
3
4
5
6
7
8
void TForm1::paint_cell(int coll,int roww)
{
draw_it=true;
TRect r = Form1->StringGrid2->CellRect(coll,roww); // <--- !!!
Form1->StringGrid2DrawCell(this,coll,roww,r,TGridDrawState()<<gdFixed);
draw_it=false;
return;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm1::Chart2Zoom(TObject *Sender)
{
 double *ModFy = new double [i-1];
 double *ModFx = new double [i-1];
 double *ModFy1 = new double [i-1];
 double *ModFx1 = new double [i-1];
 //
 int j, k=1;
 
    for (j = 1; j < i; j++) {
       ModFy[j] = StrToFloat(StringGrid2->Cells[0][j]);
       ModFx[j] = StrToFloat(StringGrid2->Cells[1][j]);
       if ((Chart2->BottomAxis->Minimum < ModFx[j]) && (Chart2->BottomAxis->Maximum > ModFx[j]) &&
       (Chart2->LeftAxis->Minimum < ModFy[j]) && (Chart2->LeftAxis->Maximum > ModFy[j]))
        {
         paint_cell(2,j);
         ModFy1[k] = ModFy[j];
         ModFx1[k] = ModFx[j];
         k++;
        }
    }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm1::StringGrid2DrawCell(TObject *Sender, int ACol, int ARow,
      TRect &Rect, TGridDrawState State)
{
 
AnsiString s;
s=StringGrid2->Cells[ACol][ARow];
StringGrid2->Canvas->Brush->Color=clRed; //закрасим красным например
StringGrid2->Canvas->FillRect(Rect);
//s=StringGrid2->Cells[ACol][ARow];
StringGrid2->Canvas->Font->Color=clBlack; //текст черный
StringGrid2->Canvas->TextOut(Rect.Left+2,Rect.Top+2,s);
return;
}
При запуске
Миниатюры
Закрашивание ячейки StringGrid  
0
8 / 8 / 2
Регистрация: 30.01.2015
Сообщений: 157
16.06.2016, 11:21
подскажите когда я кликаю мышкой на закрашенной ячейки, ячейка становится не закрашенной, можно ли это как то избежать?
0
8 / 8 / 2
Регистрация: 30.01.2015
Сообщений: 157
21.07.2016, 07:36
Можете подсказать способ с фиксацией цвета?
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
21.07.2016, 08:26
Цитата Сообщение от Mudrec Посмотреть сообщение
Можете подсказать способ с фиксацией цвета?
Что вы имеете ввиду ? Чтобы цвет закраски оставался ?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33479 / 21577 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
21.07.2016, 08:39
Цитата Сообщение от Mudrec Посмотреть сообщение
когда я кликаю мышкой на закрашенной ячейки, ячейка становится не закрашенной
Это смотря что происходит по клику. Если в опциях грида goAlwaysShowEditor включена, то при клике на ячейку она переходит в режим редактирования, и для того, чтобы она осталась того же красного цвета, нужно наследоваться от InlineEditor-а, и переопределять его поведение.

Вот пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// перед классом формы, в файле Unit1.h 
namespace SG_RedGrid
{
    class TMyInplaceEdit : public TInplaceEdit
    {
    public:
        __fastcall virtual TMyInplaceEdit(TComponent* AOwner)
            : TInplaceEdit(AOwner)
        {
            Color = clRed;
        }
    };
 
    class TStringGrid : public Grids::TStringGrid
    {
    protected:
        virtual TInplaceEdit* __fastcall CreateEditor(void)
        {
            return new TMyInplaceEdit(this);
        }
 
        virtual void __fastcall DrawCell(int ACol, int ARow,
            const System::Types::TRect &ARect, TGridDrawState AState)
        {
            String s = Cells[ACol][ARow];
            Canvas->Brush->Color = clRed;
            Canvas->FillRect(ARect);
            Canvas->Font->Color = clBlack;
            Canvas->TextOut(ARect.Left + 2, ARect.Top + 2, s);
        }
    };
}
#define TStringGrid SG_RedGrid::TStringGrid
 
class TForm1 : public TForm // это класс формы, тут уже не нужно ничего менять
0
8 / 8 / 2
Регистрация: 30.01.2015
Сообщений: 157
24.07.2016, 23:28
Вот такую ошибку выдает
Миниатюры
Закрашивание ячейки StringGrid  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33479 / 21577 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
24.07.2016, 23:47
Ну значит посмотри, какой тип у параметра ARect в обработчике OnDrawCell на твоей версии Билдера, и поставь этот тип вместо System::Types::TRect. У меня ошибок не выдает, код работающий. XE2, если что...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.07.2016, 23:47

Закрашивание строки в Stringgrid
Задача такова: считать с базы данные, проверить все данные столбца &quot;Легенда&quot;, если true, то зарисовать всю строку желтым, если нет, то...

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

Возможность вручную писать данные в ячейки StringGrid и заполнение ячеек StringGrid данными из файла после нажатия кнопки
Здравствуйте! Помогите, пожалуйста. Мне необходимо сделать следующее: реализовать возможность вручную писать данные в ячейки StringGrid...

Редактирование ячейки StringGrid
Значит нужно при нажатии button по ячейке стринггрида сделать возможность ее редактирование, тоесть менять данные. Я так понимаю, что это...

Цвет ячейки StringGrid
Есть СтрингГрид (матрица, заполнен целыми числами). По нажатию на кнопку в нем ищутся, допустим, нечетные числа. Как покрасить ячейку с...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru