Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
steam3d
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 35
1

StringGrid: сменить цвет ячейки при нажатии на кнопку

11.10.2014, 18:00. Просмотров 2663. Ответов 5
Метки нет (Все метки)

Есть stringgrid и кнопка. При нажатии на кнопку происходит поиск одинаковых значений в ячейках. Если одинаковые значения есть, то необходимо окрасить эти 2 ячейки( или более) в любой цвет.
StringGrid1DrawCell при запуске программы окрашивает.
А как сделать что бы при нажатии на кнопку заливал ячейки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2014, 18:00
Ответы с готовыми решениями:

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

При нажатии на кнопку цвет формы изменится на желтый
При отпускании - на зеленый. При движении мышки по форме должна появится...

StringGrid, продолжение поиска при повторном нажатии на кнопку
Проблема такая, вот мой поиск. Как сделать так что бы при нажатие еще раз на...

Как убрать выделение ячейки StringGrid-а при нажатии на нее
Всем привет у меня есть стрингрид в каждой ячейки прорисованы картинки, и когда...

При нажатии на кнопку, из edit-ов должна переноситься информация в столбцы StringGrid
procedure TForm1.Button1Click(Sender: TObject); begin StringGrid1.RowCount :=...

5
droider
Universal
Эксперт Pascal/Delphi
4398 / 2446 / 763
Регистрация: 04.10.2012
Сообщений: 8,890
11.10.2014, 18:06 2
Цитата Сообщение от steam3d Посмотреть сообщение
как сделать что бы при нажатии на кнопку заливал ячейки?
Только в событии OnDrawCell.
Закрасить ячейку в Stringgrid по клику
0
steam3d
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 35
12.10.2014, 01:58  [ТС] 3
Получается нужно передать значения нужных мне ячеек процедуре StringGrid1DrawCell?

В основном везде используют условие
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.strngrd1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
 CanSelect:=true;
 if strngrd1.Cells [Acol, Arow] = '-1' then begin
   form1.strngrd1.Canvas.Brush.Color:=clBlack;
 end
 else  form1.strngrd1.Canvas.Brush.Color:=clred;
 form1.strngrd1.Canvas.FillRect(strngrd1.CellRect(ACol, ARow));
end;
Не могу сообразить как передать мои номера ячеек процедуре, что бы она перекрасила их. (без условий)

Добавлено через 7 часов 34 минуты
Например я хочу закрасить ячейку 2,1, вызываю
Delphi
1
2
rasp.Canvas.Brush.Color:=clRed;
raspDrawCell(Sender,2,1,Rect,state);
Delphi
1
2
3
4
5
6
procedure TForm1.raspDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
 
begin
rasp.Canvas.FillRect(rasp.CellRect(ACol, ARow));
end;
Он мне красит помимо ячейки 2,1 еще и ячейку 0,0 ( скорее всего потому что она автоматически выделяется), и слетает цвет при нажатии на ячейку.

Объясните кто нибудь как правильно написать.
0
northener
пофигист широкого профиля
3423 / 2323 / 630
Регистрация: 15.07.2013
Сообщений: 13,749
12.10.2014, 02:36 4
Цитата Сообщение от steam3d Посмотреть сообщение
Объясните кто нибудь как правильно написать.
В событии OnDrawCell нужно проверять некое свойство ячейки, для которой это событие вызвано. И в зависимости от значения этого свойства рисовать эту ячейку. Можно для этого использовать свойство TStringGrid.Objects.

Не по теме:

Уж сколько лет Дельфи, а вопросы всё те же. :(

0
steam3d
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 35
13.10.2014, 18:56  [ТС] 5
Так вроде разобрался, StringGrid.Objects[1,2]:=TObject(1); и в OnDrawCell проверяю значение TObject. Только теперь проблема с цветом. Только одним цветом заливает.
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
var
cl:TColor
 
 
procedure TForm1.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  Save : TSave;
  Flag : Integer;
begin
  Flag := Integer(StringGrid.Objects[ACol,Arow]);
  if Flag <> 1 then Exit;
  with  StringGrid.Canvas, Save do begin
  Font.Color := RGB(255, 255, 255);
  Brush.Color := cl;
  FillRect(Rect);
  TextOut(Rect.Left + 2, Rect.Top + 2, StringGrid.Cells[ACol, ARow]);
end;
 
 
procedure TForm1.btn1Click(Sender: TObject);
  cl:=clred;
  StringGrid.Objects[1,1]:=TObject(1);
  cl:=clgreen;
  StringGrid.Objects[1,2]:=TObject(1);
end;
0
northener
пофигист широкого профиля
3423 / 2323 / 630
Регистрация: 15.07.2013
Сообщений: 13,749
13.10.2014, 20:34 6
А если подумать?
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.btn1Click(Sender: TObject);
  //cl:=clred;
  StringGrid.Objects[1,1]:=TObject(clred);
  //cl:=clgreen;
  StringGrid.Objects[1,2]:=TObject(clgreen);
end;
 
....
 
  Brush.Color := TColor(StringGrid.Objects[ACol,Arow]);
  FillRect(Rect);
0
13.10.2014, 20:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2014, 20:34

Как при нажатии на кнопку добавлять каждый раз новые строчки в StringGrid
Всем привет) у меня такая проблема, не знаю как сделать, чтобы добавлялись...

Программа должна при нажатии на кнопку выводить в метку площадь, а орнамент - менять цвет
На счёт площади вопросов нет, но как сделать чтобы орнамент цвет менял(там 12...

Как сделать так, чтобы при нажатии на кнопку в StringGrid создавалась еще 1 строка снизу
Есть StringGrid и с 1 строкой, вводятся данные в стандартные компоненты и после...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru