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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Событие OnDrawColumnCell, Помогите оптимизировать 
:(
    Опции темы
BeKToP
Дата 19.5.2010, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



у меня на форме есть DBGrid, в зависимости значения одного поля я закрашиваю всю строку соответствующим цветом, который берётся из БД но обрисовывается ооочень  медленно, буквально 5-7 строк около 1-2сек... подскажите что можно придумать
Код

procedure TMain.DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
  var col:Variant;
      s:string;
begin
    with  DBGrid2.Canvas do
    begin
                Q1.Close;
                if DBGrid2.DataSource.DataSet.FieldByName('stat').AsString<>'' then
                  Q1.SQL.Text:='select color from stat where stat.name='''+DBGrid2.DataSource.DataSet.FieldByName('stat').AsString+''''
                else   Q1.SQL.Text:='select color from stat where stat.name=''NULL''';
                Q1.Open;
                if Q1color.AsString <>'' then
                  Brush.Color:=StringToColor(trim(Q1color.AsString))
                else Brush.Color:=clwhite;
                FillRect(Rect);
                TextOut(Rect.Left+2,Rect.Top+2,Column.Field.Text);
                DBGrid2.Font.Color:=clBlack;
          end;
end;



Это сообщение отредактировал(а) BeKToP - 19.5.2010, 21:59
PM MAIL WWW ICQ   Вверх
~FoX~
Дата 20.5.2010, 05:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

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



BeKToP, Ты на каждую отрисовку каждой ячейки делаешь выборку.. Садюги....))))) А если бы у тебя стоял SQL сервер, да в другой стране, да связь с ним по диалапу?.. Заведи глобальный рекордсет или хотя бы стринглист, загрузи в него свои цвета  и уже из него выбирай что тебе нужно....

И вообще выбирать то что и так известно...это как то не оптимально чтоли ))))
Код

procedure TMain.DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
  var col:Variant;
      s:string;
begin
    with  DBGrid2.Canvas do
    begin
           if DBGrid2.DataSource.DataSet.FieldByName('stat').AsString<>'' then
                Brush.Color:=StringToColor(trim(DBGrid2.DataSource.DataSet.FieldByName('stat').AsString))
           else Brush.Color:=clwhite;
 

           FillRect(Rect);
           TextOut(Rect.Left+2,Rect.Top+2,Column.Field.Text);
           DBGrid2.Font.Color:=clBlack;
     end;
end;


Это сообщение отредактировал(а) ~FoX~ - 20.5.2010, 05:30


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
BeKToP
Дата 21.5.2010, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

                Brush.Color:=StringToColor(trim(DBGrid2.DataSource.DataSet.FieldByName('stat').AsString))

ты наверно хотел написать
Код

                Brush.Color:=StringToColor(trim(DBGrid2.DataSource.DataSet.FieldByName('Color').AsString))


но ты же всем полям присвоишь текущий цвет...

в общем я сделал так
Код

   with  DBGrid2.Canvas do
    begin
      Q1.First;
      for i:=1 to Q1.RecordCount do begin
        if DBGrid2.DataSource.DataSet.FieldByName('stat').AsString=Q1name.AsString then
          Brush.Color:=StringToColor(trim(Q1color.AsString));
        Q1.Next;
      end;
      FillRect(Rect);
      TextOut(Rect.Left+2,Rect.Top+2,Column.Field.Text);
      DBGrid2.Font.Color:=clBlack;
   end;


тоже не фонтан но впринципе работает нормально, задержки при записях 20-30 нету... ну а мне впринципе больше не надо... 
спс что помог smile  
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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