Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Уменьшить мерцание DBGrid'a при перемещении курсора


Страницы:   1 2

DelphiLexx ©   (2006-08-08 09:01:00) 

DBGrid у меня отображает некоторые строки разными цветами. При перемещении курсора у меня в AfterScroll'e вызывается Refresh DBGrid'a (так нужно), что приводит к мерцанию.
Как уменьшить мерцание DBGrid'a при перемещении курсора?


evvcom   (2006-08-08 11:17:00) [21]

> [14] Desdechado ©   (08.08.06 11:10)

Лучше все же, думаю, свой MyRefresh написать без популярной в данном случае полной очистки фона.


Desdechado   (2006-08-08 11:10:00) [22]

Вызывать refresh не каждый раз, как переходишь со строки на строку.
А, например, при выполнении условия, которое требует перерисовки (т.е. когда надо подкрасить или снять подкраску). Еслитаких случаев мало, мерцать будет меньше.


Плохиш   (2006-08-08 11:03:00) [23]


> PEAKTOP ©   (08.08.06 10:58) [12]

Ты вопрос-то внимательно читал? Особенно слова " При установки курсора на опреденные строки у меня в DBGrid'e выделяются зеленым цветом группы строк"

> DelphiLexx ©   (08.08.06 09:25) [6]

Рекомендую использовать компьютер самой последней модели, тогда мерцания перестанешь замечать.


PEAKTOP   (2006-08-08 10:58:00) [24]

не путаю, просто DBGrid-oм пользовался последний раз 300 лет назад. Я лично предпочитаю DBGridEh, там есть DBGridEh.OnGetCellParams, причем в одном проекте у меня вообще все строчки разноцветные, где цвет фона и шрифта возвращается набором данных. И нечего, соотвественно, не моргает.

 procedure TForm1.dbgJrnlGetCellParams(Sender: TObject; Column: TColumnEh;
             AFont: TFont; var Background: TColor; State: TGridDrawState);
 begin
   if(not(Column.Field.DataSet.Active)or(Column.Field.DataSet.RecordCount=0))then exit;  
   if    (Column.Field.DataSet.FieldByName('FLAG_COMMIT').AsInteger=0)then aFont.Style:= aFont.Style + [fsBold     ];
   Background := Column.Field.DataSet.FieldByName('DOCTYPE_COLOR_BGR').AsInteger;
   aFont.Color:= Column.Field.DataSet.FieldByName('DOCTYPE_COLOR_FRG').AsInteger;
   if Background =clWhite then Background := Amunhotep_MainForm_StyleManager.Colors.Window;
 end;


evvcom   (2006-08-08 10:51:00) [25]

> [10] PEAKTOP ©   (08.08.06 10:39)

Очень часто бывает, что DBGrid1DrawColumnCell срабатывает только на ячейки записей, с которой ушли и на которую пришли, потому как грид/система считает, что только они изменились, что только их и надо перерисовывать. Кстати, ты путаешь обработчики событий и перекрытие стандартных методов. Это очень разные понятия.


PEAKTOP   (2006-08-08 10:39:00) [26]

Непонятно только зачем в AfterScroll вызывать метод Refresh.
Перекрытие стандартоного метода прорисовки, как правило, хватает выше крыши, если требуется выделить какие-то там условные данные (например, просроченные накладные), а в противном случае - вызываем родительский метод прорисовки.

procedureTForm1.DBGrid1DrawColumnCell(Sender: TObject; constRect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if({условие}) then
    begin
   ........
    end
  else
    inherited
end;


ANB   (2006-08-08 09:43:00) [27]


> Ты вопрос прочитай.

Я прочитал. :)
Совет прежний.

А если серьезно - неудачная идея с таким интерфейсом (при перемещении по гриду его весь рефрешить постоянно).


evvcom   (2006-08-08 09:34:00) [28]

> [3] DelphiLexx ©   (08.08.06 09:16)

Напиши свой Refresh (унаследуйся от DBGrid)


MsGuns   (2006-08-08 09:29:00) [29]

>DelphiLexx ©   (08.08.06 09:16) [3]
>При установки курсора на опреденные строки у меня в DBGrid'e выделяются зеленым цветом группы строк, при уходе с этих выделение соответственно пропадают.

Для того, чтобы запоминать "выделенные" записи, одного грида недостаточно


DelphiLexx   (2006-08-08 09:25:00) [30]


> При этом ты ставишь противоречивые условия - говоришь обновись,
>  

Ну есть же способы:
например, у многих компонентов от данного гемороя спасает DoubleBuffered = true. Правда DBGrid'у он не помагает.


Sergey13   (2006-08-08 09:20:00) [31]

> [3] DelphiLexx ©   (08.08.06 09:16)

Ты слишком многого хочешь, ИМХО. При этом ты ставишь противоречивые условия - говоришь обновись, но не мерцая.
Тебе наверное надо переделать это дело на М-Д связку в двух датасетах (и гридах соответственно).


DelphiLexx   (2006-08-08 09:17:00) [32]


> > Как уменьшить мерцание DBGrid'a при перемещении курсора?
>
>
> Убрать рефреш в AfterScroll

Ты вопрос прочитай.


DelphiLexx   (2006-08-08 09:16:00) [33]


> > (так нужно)
> Зачем, если не секрет?

Не секрет. При установки курсора на опреденные строки у меня в DBGrid'e выделяются зеленым цветом группы строк, при уходе с этих выделение соответственно пропадают.


ANB   (2006-08-08 09:15:00) [34]


> Как уменьшить мерцание DBGrid'a при перемещении курсора?

Убрать рефреш в AfterScroll


Sergey13   (2006-08-08 09:05:00) [35]

> (так нужно)
Зачем, если не секрет?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо