Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 14

Закрашивание ячейки StringGrid при условии

31.01.2015, 15:00. Показов 3642. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Есть StringGrid и кнопка, пользователь вводит значения в StringGrid и нажимает кнопку, если в ячейки неверное значение, она выделяется цветом, если все правильно открывается новая форма. Все готово, но реализовать закрашивание ячейки не получается, вот как примерно я представляю код:

Delphi
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
36
37
38
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
Var
i1,i2,i3: Integer;
begin
     if StrToInt(StringGrid1.Cells[ACol,ARow])=<переменная равная false> then
      begin
       StringGrid1.Canvas.Brush.Color:=clRed;
       StringGrid1.Canvas.FillRect(Rect);
       StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[Acol,Arow]);
      end;
             begin
 if TryStrToInt(StringGrid1.cells[0,1],i1) and ((i1=0) or (i1=1)) and
     TryStrToInt(StringGrid1.cells[1,1],i2) and ((i2=0) or (i2=1)) and
     TryStrToInt(StringGrid1.cells[2,1],i3) and ((i3=0) or (i3=1)) and
      (i1 and i2 = i3) - (та переменная которая должна быть true)  and  
 
   TryStrToInt(StringGrid1.cells[0,2],i1) and ((i1=0) or (i1=1)) and
     TryStrToInt(StringGrid1.cells[1,2],i2) and ((i2=0) or (i2=1)) and
     TryStrToInt(StringGrid1.cells[2,2],i3) and ((i3=0) or (i3=1)) and
       (i1 and i2 = i3) - (та переменная которая должна быть true)   and 
 
     TryStrToInt(StringGrid1.cells[0,3],i1) and ((i1=0) or (i1=1)) and
     TryStrToInt(StringGrid1.cells[1,3],i2) and ((i2=0) or (i2=1)) and
     TryStrToInt(StringGrid1.cells[2,3],i3) and ((i3=0) or (i3=1)) and
        (i1 and i2 = i3) - (та переменная которая должна быть true)  and  
 
     TryStrToInt(StringGrid1.cells[0,4],i1) and ((i1=0) or (i1=1)) and
     TryStrToInt(StringGrid1.cells[1,4],i2) and ((i2=0) or (i2=1)) and
     TryStrToInt(StringGrid1.cells[2,4],i3) and ((i3=0) or (i3=1)) and
     (i1 and i2 = i3) then Form2.Show else <переменная равная false>;
       end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
<переменная равна true>
end.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.01.2015, 15:00
Ответы с готовыми решениями:

Закрашивание ячейки в StringGrid
Возникла такая проблема. Нахожу в StringGrid-е MAX значение записываю его в переменную, затем сравниваю эту переменную со всеми значениями...

Частичное закрашивание ячейки в stringgrid
Добрый день. Подсобите, как закрасить частично ячейку с stringgrid? Картинку приложил. Т.е. в зависимости от значения в ячейке, нужно...

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

9
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
01.02.2015, 08:38
Цитата Сообщение от Brons Посмотреть сообщение
Все готово, но реализовать закрашивание ячейки не получается
Ну у меня вот так нормально красит когда ввожу соответствующие цифры, переделывай код под себя:

1- зеленый
2- синий
3- красный
Delphi
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
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if StringGrid1.Cells[ACol, ARow] = '1' then
  begin
    StringGrid1.Canvas.Brush.Color := clLime;
    StringGrid1.Canvas.TextRect(Rect, Rect.Left + 3, Rect.Top + 2,
      StringGrid1.Cells[ACol, ARow]);
    StringGrid1.Canvas.Brush.Color := StringGrid1.Color;
  end;
 
  if StringGrid1.Cells[ACol, ARow] = '2' then
  begin
    StringGrid1.Canvas.Brush.Color := clAqua;
    StringGrid1.Canvas.TextRect(Rect, Rect.Left + 3, Rect.Top + 2,
      StringGrid1.Cells[ACol, ARow]);
    StringGrid1.Canvas.Brush.Color := StringGrid1.Color;
  end;
 
  if StringGrid1.Cells[ACol, ARow] = '3' then
  begin
    StringGrid1.Canvas.Brush.Color := clFuchsia;
    StringGrid1.Canvas.TextRect(Rect, Rect.Left + 3, Rect.Top + 2,
      StringGrid1.Cells[ACol, ARow]);
    StringGrid1.Canvas.Brush.Color := StringGrid1.Color;
  end;
end;
Миниатюры
Закрашивание ячейки StringGrid при условии  
2
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 14
01.02.2015, 10:10  [ТС]
Вот в этом то и проблема, я знаю как закрасить ячейку с символом
Delphi
1
if StringGrid1.Cells[ACol, ARow] = '1' then
но как сделать, если там не символ а правильное значение, то есть i1 and i2 = i3, и при этом закрашивались по нажатии на кнопку
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
01.02.2015, 15:20
Цитата Сообщение от Brons Посмотреть сообщение
не символ а правильное значение
Так правильное значение это тоже строка.
0
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 14
01.02.2015, 16:43  [ТС]
Так?
Delphi
1
if StringGrid1.Cells[ACol, ARow] = (i1 and i2 = i3) then
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
01.02.2015, 23:27
Цитата Сообщение от Brons Посмотреть сообщение
но как сделать, если там не символ а правильное значение, то есть i1 and i2 = i3, и при этом закрашивались по нажатии на кнопку
В TStringGrid строки TStringGrid.Rows[i] и столбцы TStringGrid.Cols[j] представляют собой экземпляры потомков TStrings. А экземпляр потомка TStrings содержит пары: строка (String) - объект (TObject). Это означает, что каждая ячейка в экземпляре TStringGrid может хранить не только строку, но ещё и объект (указатель на объект). И вот в качестве объекта (или указателя на объект) можно присоединять к ячейке любые данные.
Пример. Для ячейки с координатами Row, Col под видом указателя на объект записываем целочисленное значение, равное 1:
Delphi
1
StringGrid1.Objects[Col, Row] := TObject(1);
Поэтому, можно сделать так. Надо перебрать ячейки, в которых записываются результаты логических выражений. Для каждой такой ячейки определить правильность введённого значения. И в зависимости от правильности записать значение флага. Пускай у нас значения флага будут такими:
0 - проверка не производилась.
1 - "неправильно".
2 - "правильно".
Предположим, таблица организована так:
Столбцы:
Col = 1 -> переменная "а".
Col = 2 -> переменная "b".
Col = 3 -> переменная "y" - результат вычисления по формуле.
Строки с индексами 1..3 предназначены для ввода элементов логических выражений:
Row = 1 -> y = a and b
Row = 2 -> y = a or b
Row = 3 -> y = a xor b
Тогда при нажатии на кнопку "Проверка" надо выполнить следующий код:
Delphi
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
//Проверка.
procedure TForm1.Button1Click(Sender: TObject);
var
  Sg : TStringGrid;
  Row : Integer;
  a, b, y1, y2 : Boolean;
begin
  Sg := StringGrid1;
  for Row := 1 to 3 do
    if (Sg.Cells[1, Row] = '') or (Sg.Cells[2, Row] = '') or (Sg.Cells[3, Row] = '')
    then //Если не все ячейки заполнены - считаем, что это "неправильно".
      Sg.Objects[3, Row] := TObject(1)
    else //Если все ячейки заполнены, то выполняем проверку значений.
    begin
      //Значения, которые ввёл пользователь.
      a := Sg.Cells[1, Row] = '1';
      b := Sg.Cells[2, Row] = '1';
      y1 := Sg.Cells[3, Row] = '1';
      //Значения, согласно формулам.
      case Row of
        1 : y2 := a and b;
        2 : y2 := a or b;
        3 : y2 := a xor b;
        else
          raise Exception.Create('Строка таблицы с индексом ' + IntToStr(Row)
            + ' не предусмотрена.');
      end;
      //Сверяем значение ввода со значением, вычисленным по формуле.
      if y1 = y2 then //Правильно.
        Sg.Objects[3, Row] := TObject(2) //Установка флага = 2.
      else            //Неправильно.
        Sg.Objects[3, Row] := TObject(1); //Установка флага = 1.
    end;
end;
И теперь в обработчике OnDrawCell можно раскрашивать ячейки в зависимости от установленных флагов. Например так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//Обработчик события OnDrawCell. Это событие происходит, когда выполняется перерисовка ячейки.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  Sg : TStringGrid;
  Flag : Integer;
begin
  //Ссылка на тот экземпляр TStringGrid, который вызвал этот обработчик.
  Sg := Sender as TStringGrid;
  //Получаем значение флага.
  Flag := Integer(Sg.Objects[ACol, ARow]);
  //Если ячейка не участвует в раскраске, то выходим.
  if Flag = 0 then
    Exit;
 
  //Выполняем установку цветов в зависимости от флага.
  if Flag = 1 then //"Неправильно".
  begin
    ...
  else if Flag = 2 then //"Правильно".
  begin
    ...
  end;
end;
И ещё надо добавить кнопку для сброса флагов в ячейках.
Delphi
1
2
3
4
5
6
7
8
9
10
11
//Сброс.
procedure TForm1.Button2Click(Sender: TObject);
var
  Sg : TStringGrid;
  Col, Row : Integer;
begin
  Sg := StringGrid1;
  for Row := 0 to Sg.RowCount - 1 do
    for Col := 0 to Sg.ColCount - 1 do
      Sg.Objects[Col, Row] := TObject(0);
end;
Здесь для всех ячеек выполняется сброс. Можно сделать только для тех, которые предназначены для ввода значений логических выражений.

Добавлено через 19 минут
Ещё можно ограничить пользовательский ввод. Чтобы пользователь мог записать в ячейку только ноль или единицу либо - очистить ячейку. Код обработчика OnSetEditText:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Обработка текста, который пользователь вводит в ячейку.
//Разрешаем пользователю записывать в ячейки только: '0', '1', ''.
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
  ARow: Integer; const Value: String);
var
  S : String;
begin
  S := Value;
  if S <> '' then
  begin
    S := S[Length(S)];
    if not (S[1] in ['0', '1']) then
      S := '';
  end;
  (Sender as TStringGrid).Cells[ACol, ARow] := S;
end;
1
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 14
02.02.2015, 13:54  [ТС]
Спасибо Вы все подробно объяснили, вопросы с закрашивание ячеек с неверным значением отпали, но хотелось бы узнать как сделать такую проверку, если первые 2 столбца фиксированы и в них уже заполнены значения
0 0
0 1
1 0
1 1
а пользователь вводит значения в 3й столбец, я делал это с помощью
Delphi
1
if TryStrToInt(StringGrid1.cells...
а вот как в Вашем примере это реализовать
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
02.02.2015, 14:55
Цитата Сообщение от Brons Посмотреть сообщение
а вот как в Вашем примере это реализовать
Я вечером сегодня набросаю пример.
1
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
02.02.2015, 23:50
Лучший ответ Сообщение было отмечено Brons как решение

Решение

Вот, что получилось.
Delphi
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  ColorGrd, Grids, StdCtrls;
 
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
      const Value: String);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    //Очистка и разметка таблицы.
    procedure SgReset(aSg : TStringGrid);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
{ TForm1 }
 
//Очистка и разметка таблицы.
procedure TForm1.SgReset(aSg: TStringGrid);
var
  Col : Integer;
begin
  //Установка ширины первого (с индексом = 0) столбца.
  aSg.ColWidths[0] := 80;
 
  //Очистка.
  for Col := 0 to aSg.ColCount - 1 do
    aSg.Cols[Col].Clear;
 
  //Верхняя строка.
  aSg.Cells[1, 0] := 'A';
  aSg.Cells[2, 0] := 'B';
  aSg.Cells[3, 0] := 'Y';
 
  //Y = A AND B.
  aSg.Cells[0, 1] := 'Y = A and B';
  aSg.Cells[1, 1] := '0';
  aSg.Cells[2, 1] := '0';
 
  aSg.Cells[0, 2] := 'Y = A and B';
  aSg.Cells[1, 2] := '0';
  aSg.Cells[2, 2] := '1';
 
  aSg.Cells[0, 3] := 'Y = A and B';
  aSg.Cells[1, 3] := '1';
  aSg.Cells[2, 3] := '0';
 
  aSg.Cells[0, 4] := 'Y = A and B';
  aSg.Cells[1, 4] := '1';
  aSg.Cells[2, 4] := '1';
 
  //Y = A OR B.
  aSg.Cells[0, 5] := 'Y = A or B';
  aSg.Cells[1, 5] := '0';
  aSg.Cells[2, 5] := '0';
 
  aSg.Cells[0, 6] := 'Y = A or B';
  aSg.Cells[1, 6] := '0';
  aSg.Cells[2, 6] := '1';
 
  aSg.Cells[0, 7] := 'Y = A or B';
  aSg.Cells[1, 7] := '1';
  aSg.Cells[2, 7] := '0';
 
  aSg.Cells[0, 8] := 'Y = A or B';
  aSg.Cells[1, 8] := '1';
  aSg.Cells[2, 8] := '1';
 
  //Y = A XOR B.
  aSg.Cells[0, 9] := 'Y = A xor B';
  aSg.Cells[1, 9] := '0';
  aSg.Cells[2, 9] := '0';
 
  aSg.Cells[0, 10] := 'Y = A xor B';
  aSg.Cells[1, 10] := '0';
  aSg.Cells[2, 10] := '1';
 
  aSg.Cells[0, 11] := 'Y = A xor B';
  aSg.Cells[1, 11] := '1';
  aSg.Cells[2, 11] := '0';
 
  aSg.Cells[0, 12] := 'Y = A xor B';
  aSg.Cells[1, 12] := '1';
  aSg.Cells[2, 12] := '1';
end;
 
//После создания формы.
procedure TForm1.FormCreate(Sender: TObject);
begin
  SgReset(StringGrid1);
end;
 
//Обработка текста, который пользователь вводит в ячейку.
//Разрешение на ввод в ячейку только одного символа: '0' или '1'.
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
  ARow: Integer; const Value: String);
var
  S : String;
begin
  S := Value;
  if S <> '' then
  begin
    S := S[Length(S)];
    if not (S[1] in ['0', '1']) then
      S := '';
  end;
  (Sender as TStringGrid).Cells[ACol, ARow] := S;
end;
 
//Обработчик события OnDrawCell. Это событие происходит, когда выполняется перерисовка ячейки.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  Sg : TStringGrid;
  Cnv : TCanvas;
  Flag : Integer;
begin
  //Ссылка на тот экземпляр TStringGrid, который вызвал этот обработчик.
  Sg := Sender as TStringGrid;
  //Ссылка на канву таблицы.
  Cnv := Sg.Canvas;
  //Получаем значение флага из столбца Y.
  Flag := Integer(Sg.Objects[3, ARow]);
  //Если ячейка не участвует в раскраске, то выходим.
  if Flag = 0 then
    Exit;
 
  //Выбираем цвет в зависимости от флага и состояния ячейки.
  if Flag = 2 then //Если "правильно".
  begin
    if gdFocused in State then //Если ячейка находится в фокусе.
    begin
      Cnv.Font.Color := RGB(255, 255, 255); //Цвет шрифта.
      Cnv.Font.Style := Cnv.Font.Style + [fsBold]; //Стиль шрифта.
      Cnv.Brush.Color := RGB(0, $DD, 0); //RGB($33, $EE, $33); //Цвет кисти.
    end
    else if gdSelected in State then //Иначе, если ячейка выделена.
    begin
      Cnv.Font.Color := RGB(255, 255, 255); //Цвет шрифта.
      Cnv.Font.Style := Cnv.Font.Style + [fsBold];  //Стиль шрифта.
      Cnv.Brush.Color := RGB(0, $66, 0); //Цвет кисти.
    end
    else
    begin
      Cnv.Font.Color := RGB(255, 255, 255); //Цвет шрифта.
      Cnv.Font.Style := Cnv.Font.Style - [fsBold]; //Стиль шрифта.
      Cnv.Brush.Color := RGB($66, $99, $33); //Цвет кисти.
    end;
  end
  else //Иначе - если "неправильно".
  begin
    if gdFocused in State then //Если ячейка находится в фокусе.
    begin
      Cnv.Font.Color := RGB(255, 255, 255); //Цвет шрифта.
      Cnv.Font.Style := Cnv.Font.Style + [fsBold]; //Стиль шрифта.
      Cnv.Brush.Color := RGB($FF, 0, 0); //RGB($FF, $66, $CC); //Цвет кисти.
    end
    else if gdSelected in State then //Иначе, если ячейка выделена.
    begin
      Cnv.Font.Color := RGB(255, 255, 255); //Цвет шрифта.
      Cnv.Font.Style := Cnv.Font.Style + [fsBold]; //Стиль шрифта.
      Cnv.Brush.Color := RGB($DD, 0, 0); //Цвет кисти.
    end
    else
    begin
      Cnv.Font.Color := RGB(255, 255, 255); //Цвет шрифта
      Cnv.Font.Style := Cnv.Font.Style - [fsBold]; //Стиль шрифта.
      Cnv.Brush.Color := RGB($FF, $66, 0); //Цвет кисти.
    end;
  end;
  //Цвет пера сделаем инверсией цвета кисти.
  Cnv.Pen.Color := Cnv.Brush.Color xor $FFFFFF;
 
  //Заливка ячейки цветом кисти (Sg.Canvas.Brush.Color).
  Cnv.FillRect(Rect);
  //Прорисовка краёв ячейки цветом пера (Sg.Canvas.Pen.Color).
  Cnv.Rectangle(Rect);
  //Текст ячейки прорисовываем цветом шрифта (Sg.Canvas.Font.Color).
  //Здесь (+ 2) - так мы учитываем отступы слева и сверху.
  Cnv.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Sg.Cells[ACol, ARow]);
end;
 
//Проверка и установка флагов.
procedure TForm1.Button1Click(Sender: TObject);
var
  Sg : TStringGrid;
  Row : Integer;
  a, b, y1, y2 : Boolean;
begin
  Sg := StringGrid1;
  for Row := Sg.FixedRows to Sg.RowCount - 1 do
    if (Sg.Cells[1, Row] = '') or (Sg.Cells[2, Row] = '') or (Sg.Cells[3, Row] = '')
    then //Если не все ячейки заполнены - считаем, что это "неправильно".
      Sg.Objects[3, Row] := TObject(1)
    else //Если все ячейки заполнены, то выполняем проверку значений.
    begin
      //Определяем, значения переменных по содержимому ячеек.
      a  := Sg.Cells[1, Row] = '1';
      b  := Sg.Cells[2, Row] = '1';
      y1 := Sg.Cells[3, Row] = '1';
      //Вычисляем значения выражений.
      case Row of
        1..4  : y2 := a and b;
        5..8  : y2 := a or b;
        9..12 : y2 := a xor b;
        else
          raise Exception.Create('Строка таблицы с индексом ' + IntToStr(Row)
            + ' не предусмотрена.');
      end;
      //Определяем флаг правильности - сравниваем значение, заданное пользователем
      //со значением, рассчитанным по формуле. Значение флага прикрепляем
      //к ячейке под видом указателя на объект.
      if y1 = y2 then //Правильно.
        Sg.Objects[3, Row] := TObject(2)
      else            //Неправильно.
        Sg.Objects[3, Row] := TObject(1);
    end;
end;
 
//Сброс флагов.
procedure TForm1.Button2Click(Sender: TObject);
var
  Sg : TStringGrid;
  Row : Integer;
begin
  Sg := StringGrid1;
  for Row := Sg.FixedRows to Sg.RowCount - 1 do
    Sg.Objects[3, Row] := TObject(0);
end;
 
//Очистка таблицы.
procedure TForm1.Button3Click(Sender: TObject);
begin
  SgReset(StringGrid1);
end;
 
end.
Миниатюры
Закрашивание ячейки StringGrid при условии  
Вложения
Тип файла: 7z StringGridColoringByFlags-01.7z (178.6 Кб, 11 просмотров)
1
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 14
03.02.2015, 13:52  [ТС]
Цитата Сообщение от Mawrat Посмотреть сообщение
Вот, что получилось.
как раз то что нужно, спасибо Вам большое, очень помогли!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.02.2015, 13:52
Помогаю со студенческими работами здесь

Закрашивание ячейки stringgrid-а по клику
Т.е. у нас есть stringgrid мы щелкаем кнопкой мыши по какой-нибудь ячейки и она закрашивается

Stringgrid закрашивание
Есть 1 стока и 3 стобца. Нужно чтобы если в 3 столбце слово 'on' то тогда вся строка закрашивалась бы зеленым цветом. Как это сделать?...

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

Закрашивание ячеек StringGrid
Доброго времени суток. Есть форма. столбцы-имена людей, 0 строка - числа месяца с 1 по последнее. Должно быть что-то вроде таблицы с...

StringGrid: Выделение и закрашивание
Вот задачка появилась на мою голову. Как сделать чтобы при выделении ячеек на Stringgrid и нажатии например кнопки &quot;Button&quot;, то...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru