![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Форумчанин
Регистрация: 26.10.2007
Сообщений: 112
|
![]()
По этому поводу нашла только одну тему на форуме, но там вообще что-то нереальное написано
![]() Заранее спасибо!
If you wanna make the world a better place take a look at yourself and then make a change!
![]() |
![]() |
![]() |
![]() |
#2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Хорошо, попробую.
Раскраску производим по событию OnDrawCell, т.е. StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); Для каждой ячейки StringGrid1.Cells[ACol,ARow] сначала проверяем условие и в зависимости от его выполнения устанавливаем параметры вывода. Например: Код:
http://www.programmersforum.ru/showthread.php?t=8170 Ее устройством можете не заморачиваться. Ее просто нужно добавить в ваш проект. Итак, вопрос - что тут "нереального"? Последний раз редактировалось mihali4; 01.11.2007 в 01:32. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 26.10.2007
Сообщений: 112
|
![]()
Я попробовала раскрасить ячейки, как было описано выше, но возникли трудности с WriteText, поэтому сделала следующим образом:
procedure TForm1.SG1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin with SG1.Canvas do if SG1.Cells[ACol,ARow]='__________3__________' then begin Font.Color:=clRed; Brush.Color:=clYellow; FillRect(Rect); end; with SG1.Canvas do if (SG1.Cells[ACol,ARow]='__________1__________') then begin Font.Color:=clYellow; Brush.Color:=clRed; FillRect(Rect); end; with SG1.Canvas do if (SG1.Cells[ACol,ARow]='__________2__________') then begin Font.Color:=clYellow; Brush.Color:=clRed; FillRect(Rect); end; with SG1.Canvas do if (SG1.Cells[ACol,ARow]='__________4__________') then begin Font.Color:=clYellow; Brush.Color:=clGreen; FillRect(Rect); end; with SG1.Canvas do if (SG1.Cells[ACol,ARow]='__________5__________') then begin Brush.Color:=clGreen; Font.Color:=clYellow; FillRect(Rect); end; end; но видимо без WriteText не обойтись, т.к. в итоге ячейки раскрашиваются, а текста нет. Т.е. он есть, но его не видно под заливкой. Пожалуйста, объясните как создавать эту процедуру и на каком событии. Потому что если просто скопировать, прга выдает кучу непонятных ошибок. Спасибо.
If you wanna make the world a better place take a look at yourself and then make a change!
![]() Последний раз редактировалось monushka; 01.11.2007 в 10:49. |
![]() |
![]() |
![]() |
#4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Пример Михалыча нужно вставить в событие OnDrawCell для СтрингГрида. Ну у тебя тоже пример пойдет, добавь только WriteText(StringGrid1.Canvas, Rect, 2, 2, StringGrid1.Cells[Col,Row], taCenter); В конец процедуры и все путем.
I'm learning to live...
Последний раз редактировалось Stilet; 01.11.2007 в 10:58. |
|
![]() |
![]() |
![]() |
#5 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Причина использования WriteText в том, что TextOut не позволяет вывести текст с нужным Alignment, что нужно для приличного оформления вывода результатов.
Стилет вам все верно подсказал - почему вы упустили вывод WriteText? Какие такие ошибки у вас возникают при его использовании? И еще. Строка with SG1.Canvas do может использоваться только один раз, объединив в своем блоке begin..end все проверки. Далее. Ваши условия. Есть взаимоисключающие, должны идти: Код:
Есть совместные условия: Код:
И последнее. Оператор FillRect(Rect); Зачем его везде дублировать? Он должен использоваться один раз, непосредственно перед WriteText... Последний раз редактировалось mihali4; 01.11.2007 в 12:13. |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 26.10.2007
Сообщений: 112
|
![]()
При вставке строки
WriteText(StringGrid1.Canvas, Rect, 2, 2, StringGrid1.Cells[ACol,ARow], taCenter); выдает ошибку [Error] Unit1.pas(743): Undeclared identifier: 'WriteText' я так понимаю, что именно Write Text необходимо где-то объявить. В примере на странице http://www.programmersforum.ru/showthread.php?t=8170 его объявляли для TForm1, но на какое событие? Я не могу понять...
If you wanna make the world a better place take a look at yourself and then make a change!
![]() |
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
![]()
Ни на какое : прописываете заголовок процедуры/функции в секцию private (к примеру)
затем пишете её текст (с заголовоком, в котором указан родительский класс процедуры) в теле модуля. Пример: type tform1=class(tform) .... private .... procedure test; .... begin ..... procedure tform1.test; begin end; ..... end.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 26.10.2007
Сообщений: 112
|
![]()
Объясните, пожалуйста, как именно добавить? Нужна ведь еще процедура WriteText. Вот в ней проблема... Если просто скопировать с темы, ссылка на которую указана выше, то выдает ошибки. Дело в том, что я не знаю на какое событие для FOrm1 нужно ее писать. Вот. Помогите, пожалуйста!
If you wanna make the world a better place take a look at yourself and then make a change!
![]() |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 26.10.2007
Сообщений: 112
|
![]() Код:
If you wanna make the world a better place take a look at yourself and then make a change!
![]() Последний раз редактировалось Alex21; 04.11.2007 в 15:16. Причина: code |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 06.08.2007
Сообщений: 2,183
|
![]()
Можно таким способом, а по поводу размера и длины текста в Grid`е. То для установления ширины колонок в таблице можно использовать функцию которая изменит размер колонки под самую длинную строку(такие вопросы были в DelphiWorld 6, и тут они могли тоже быть).
Вот код: Установим опции в Grid: [goFixedVertLine,goFixedHorzLine,goV ertLine,goHorzLine,goRangeSelect,go ColMoving,goEditing,goAlwaysShowEdi tor]; Код:
Последний раз редактировалось Alex21; 05.11.2007 в 22:09. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перенос данніх в зависимости от цвета ячейки | gavrylyuk | Microsoft Office Excel | 8 | 08.08.2008 19:11 |
Помогите сцепить ячейки с определенным условием | 7erge | Microsoft Office Excel | 4 | 23.07.2008 09:47 |
Изобразить на экране правильный многоугольник, стороны которого окрашены в разные цвета, совершающий внут | Sashka | Помощь студентам | 3 | 31.01.2008 12:02 |
смена цвета ячейки если... | zetrix | Microsoft Office Excel | 0 | 30.10.2006 19:06 |