Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 10
1

Раскраска ячеек

09.06.2013, 21:36. Просмотров 1820. Ответов 22
Метки нет (Все метки)

У меня не работает раскраска последнего столбца Stringgrid'a. Точнее, вообще ничего не закрашивается)
делаю через процедуру:

Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.SGDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
const
clPaleGreen = TColor($CCFFCC);
  clPaleRed = TColor($CCCCFF);
  begin
if (ACol=SG.ColCount-1) then
SG.canvas.brush.Color := clPaleRed;
end;
что не так?...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2013, 21:36
Ответы с готовыми решениями:

Раскраска ячеек в stringgrid
Есть stringgrid заполненный данными. Пользователь может изменить какое-либо данное. Как только это...

Раскраска
Здравствуйте. Существует ли способ как-нибудь узнать/записать в переменную цвет определённого...

StringGrid Цвет фона пустых ячеек и ячеек с текстом
Доброго дня.. Задачка следующая: Ячейки в StringGrid'e заполняются по блоку из Timer. В...

Раскраска в StringGrid
Всем привет! Срочно нужно дорешать задачу. Я её почти сделал. А вот и она сама Дана...

22
117 / 117 / 2
Регистрация: 29.01.2013
Сообщений: 437
09.06.2013, 22:00 2
нарисуй прямоугольник и будет тебе счастье. SG.canvas.brush.Color := - присвоить кисти определенный цвет. А рисовать кто будет?!
0
Заблокирован
09.06.2013, 22:01 3
Ага, и текст выводить... Это то тоже при оверрайде делать лучше руками, или брать Inherited после, но никто не гарантирует что оно не затрёт твою заливку потом.
0
117 / 117 / 2
Регистрация: 29.01.2013
Сообщений: 437
09.06.2013, 22:03 4
Цитата Сообщение от Dr_Quake Посмотреть сообщение
Ага, и текст выводить... Это то тоже при оверрайде делать лучше руками, или брать Inherited после, но никто не гарантирует что оно не затрёт твою заливку потом.

Не по теме:

боюсь Katari до таких вещей еще далеко...

0
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 10
09.06.2013, 22:18  [ТС] 5
цвет кисти присвоила и раскрасила
а как вывести текст - не знаю.

да, очень далеко...но я учусь)
0
Заблокирован
09.06.2013, 22:20 6
Нафиг форум то засирать? Вопрос чуть ли не с 96 года в FAQ.

http://www.delphi-manual.ru/griddrawing.php
0
117 / 117 / 2
Регистрация: 29.01.2013
Сообщений: 437
09.06.2013, 22:27 7
TextOut в руки
0
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 10
09.06.2013, 22:32  [ТС] 8
текст вывести не получилось.

ещё мне нужно, чтобы эта процедура выполнялась в теле другой процедуры.
0
117 / 117 / 2
Регистрация: 29.01.2013
Сообщений: 437
09.06.2013, 22:33 9
Цитата Сообщение от Katari Посмотреть сообщение
текст вывести не получилось.
где и как прописан TextOut?
0
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 10
09.06.2013, 22:33  [ТС] 10
@Fenix_dragon, видимо, пока я не выполню эту процедуру в другой, я не смогу вывести текст...
0
Заблокирован
09.06.2013, 22:38 11
Ты не понимаешь сути. Ты ЗАМЕНЯЕШЬ процедуру рисования ячейки по координатам. То есть есть ячейка - блок AxB, всё в ней надо нарисовать руками имея свои доппараметры и текст ячейки в stringgrid.cells[x,y]
0
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 10
09.06.2013, 22:46  [ТС] 12
http://s3.uploads.ru/HZImh.png

вот это я пока вымучила...текст куда-то за таблицу полез...

выглядит так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.SGDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
const
clPaleGreen = TColor($CCFFCC);
  clPaleRed = TColor($CCCCFF);
  begin
if (ACol=SG.ColCount-1) then
begin
SG.canvas.brush.Color := clPaleRed;
SG.Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Right, Rect.Bottom, SG.Cells[ACol, ARow]);
end;
end;
0
Заблокирован
09.06.2013, 22:50 13
Canvas.brush.color то поменяй - текст того же цвета сейчас.

И вообще -

Delphi
1
2
3
4
if (ACol=SG.ColCount-1) then
begin
//
end else inherited;
0
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 10
09.06.2013, 23:00  [ТС] 14
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.SGDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
const
clPaleGreen = TColor($CCFFCC);
  clPaleRed = TColor($CCCCFF);
  begin
if (ACol=SG.ColCount-1) then
begin
SG.canvas.brush.Color := clPaleRed;
SG.Canvas.FillRect(Rect);
SG.Canvas.Brush.Color:=RGB(00,00,00);
Canvas.TextOut(Rect.Right, Rect.Bottom, SG.Cells[ACol, ARow]);
end
else
inherited;
end;
теперь это выглядит так, но картина не изменилась...
0
Пишу на Delphi...иногда
1417 / 1275 / 285
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
09.06.2013, 23:03 15
Цитата Сообщение от Katari Посмотреть сообщение
Delphi
1
Canvas.TextOut(Rect.Right, Rect.Bottom, SG.Cells[ACol, ARow]);
зачем право низ? по идее лево верх
Delphi
1
Canvas.TextOut(Rect.Left, Rect.Top, SG.Cells[ACol, ARow]);
и за цвет текста отвечает ну никак не цвет кисти, а Canvas.Font.Color или цвет пера
0
Заблокирован
09.06.2013, 23:05 16
Логично, правила то выучи - с левого верхнего угла рисование идёт, у тебя текст за ячейкой в никуда рисуется.

За сим я вас покину в этой теме - это маразм, всё по ссылке расписано.
0
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 10
09.06.2013, 23:10  [ТС] 17
Цитата Сообщение от cotseec Посмотреть сообщение
зачем право низ? по идее лево верх
Delphi
1
2
Canvas.Font.Color:=RGB(00,00,00);
Canvas.TextOut(Rect.Left+50, Rect.Top+50, SG.Cells[ACol, ARow]);
похоже, я его подвинула на нужную колонку. только текст всё равно не видно...
за кадром-то он чёрный.
0
117 / 117 / 2
Регистрация: 29.01.2013
Сообщений: 437
09.06.2013, 23:12 18
Katari, Rect.Left+50, Rect.Top+50
+50 Здесь явно ни к чему

Добавлено через 59 секунд
достаточно Rect.Left + 2, Rect.Top + 2
0
Пишу на Delphi...иногда
1417 / 1275 / 285
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
09.06.2013, 23:13 19
а если без + 50 в указании координат вывода?
0
2474 / 1850 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
09.06.2013, 23:16 20
Не нужно так много добавлять к координатам TRect, его параметры даны только для данной ячейки.

Добавлено через 2 минуты
Посмотри метод вывода текста TextRect, он автоматически выведет в указанный TRect.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2013, 23:16

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Раскраска графа
Для раскраски графа используем заданную матрицу инцидентности(лежит в массиве mes). type ...

DBGrid раскраска
http://www.delphikingdom.ru/images/cg1.gif Как раскрасить строки в DBGrid через один. Хочу...

Раскраска stringgrid
как можно раскрасить stringgrid, к примеру 1 строчку светло-зеленым, а другую зеленым?

Задать разную ширину ячеек и избавиться от стандартного синего выделения ячеек, заменив его на белый цвет
Всем доброго времени суток! Сейчас в срочном порядке разбираюсь с таким интересным компонентом как...


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

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

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