Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странное поведение OnDrawCell 
V
    Опции темы
maximjhon
Дата 16.8.2011, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 12.8.2009

Репутация: нет
Всего: нет



Здравствуйте.
Мне нужно, чтобы в StrigGrid выделились другим цветом ячейки, в которых значение больше 0. Не получается. Ниже код.

Код

procedure TForm4.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 with Sender as TStringGrid, Canvas do
          begin
  If( ACol>0) and (Arow>0) then
    begin
  If StrToInt(StringGrid1.Cells[ACol,ARow])>0 then
  Brush.Color:=clRed;;

   end;
end;
  end;
 
PM MAIL   Вверх
northener
Дата 16.8.2011, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



А где FillRect?

Вот кстати для примера Разноцветный D B G R I D

Это сообщение отредактировал(а) northener - 16.8.2011, 19:31


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Snowy
Дата 16.8.2011, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Просто поменять цвет кисти - мало. Нужно еще самому рисовать ячейку.
Есть же готовые примеры в том же DRKB.
PM MAIL   Вверх
maximjhon
Дата 17.8.2011, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 12.8.2009

Репутация: нет
Всего: нет



Изменил код. В результате, ячейки таблицы раскрашиваются и виден текст в них, но текст почему то мигает. Привожу
фрагмент кода:
Код

procedure TForm4.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 If( ACol>0) and (Arow>0) then 
  begin
 with Sender as TStringGrid, Canvas do
          begin
   If StrToInt(StringGrid1.Cells[ACol,ARow])>0 then
Begin
  Brush.Color:=clRed;;
Font.Color:=clBlack;
FillRect(Rect);
StringGrid1.Cells[ACol,ARow]:=StringGrid1.Cells[ACol,ARow];
   end
else
FillRect(Rect);
StringGrid1.Cells[ACol,ARow]:=StringGrid1.Cells[ACol,ARow];
end;
end;
  end;


PM MAIL   Вверх
northener
Дата 17.8.2011, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(maximjhon @  17.8.2011,  16:36 Найти цитируемый пост)
но текст почему то мигает

Странно, что не зацикливается.
Нужно не только закрашивать ячейку руками, но и выводить текст тоже руками. TCanvas.TextOut.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Keeper89
Дата 17.8.2011, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



А судя по всему и зацикливается, раз мигает


--------------------
PM MAIL WWW   Вверх
northener
Дата 18.8.2011, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(Keeper89 @  17.8.2011,  19:06 Найти цитируемый пост)
А судя по всему и зацикливается, раз мигает 

Вообще-то такой код должен приводить, по меньшей мере, к "замораживанию" (Freeze  по аглицки), когда мышь и клавиатура вроде и реагируют на действия пользователя, но с опозданием (порой очень большим).
Тогда почему автор этого не заметил?

P.S.

Цитата(maximjhon @  17.8.2011,  16:36 Найти цитируемый пост)
Изменил код.

Объясняю два предыдущие поста. 
Ну нельзя в обработчике OnDrawCell задавать значение ячейке этого грида!
Ведь это задание вызывает заново обработчик OnDrawCell.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
bagos
Дата 18.8.2011, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 17.6.2006

Репутация: нет
Всего: 1



Код

var
  S: string;
begin
  S := StringGrid1.Cells[ACol, ARow];
...
    with StringGrid1 do
     if (ACol = 2) and (ARow >= 1) then
        begin
          Canvas.Brush.Color := clblack;
          Canvas.Font.Color := clRed;
          Canvas.Font.Size := 8;
          Canvas.Font.Style := [fsBold];
          Canvas.FillRect(Rect);
          Canvas.TextOut(rect.left + 3, rect.top + 3, S);
        end;

PM MAIL   Вверх
maximjhon
  Дата 20.8.2011, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 12.8.2009

Репутация: нет
Всего: нет



Все получилось Спасибо большое!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0626 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.