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

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

отрисовка на канве грида


петрович07 ©   (2007-11-11 15:44:00) 

мастера подскажите что делаю не так и направьте в нужное русло)))
рисую на канве stringgrid'a линии(границы клеток). Рисуется все норм.,но как только я начинаю двигать ползунок вниз грид начинает перерисовываться и тут происходит моргание мерцание,вообщем долго перерисовывается,мне кажется я не правильно делаю:

 table_2.Canvas.Pen.Color := clBlack;
 table_2.Canvas.Pen.Width := 1;
 rect := table_2.CellRect(ACOl, Arow);
       if ARow >= 0 then
 begin
   table_2.Canvas.MoveTo(Rect.Left,Rect.Bottom);
   table_2.Canvas.LineTo(Rect.Right, Rect.Bottom);
 end;

 if ACol >= 0 then
 begin
   table_2.Canvas.MoveTo(Rect.Right, rect.Top);
   table_2.Canvas.LineTo(Rect.Right, Rect.Bottom);
 end;

 table_2.Canvas.Pen.Color := clred;
//Рамка
 table_2.Canvas.MoveTo(0, 0);
 table_2.Canvas.LineTo(0, table_2.Height);

 table_2.Canvas.MoveTo(0, table_2.Height-1);
 table_2.Canvas.LineTo(table_2.Width, table_2.Height-1);

 table_2.Canvas.MoveTo(table_2.VisibleColCount*table_2.DefaultColWidth+table_2.VisibleColCount-1, 0);
 table_2.Canvas.LineTo(table_2.VisibleColCount*table_2.DefaultColWidth+table_2.VisibleColCount-1, table_2.Height-1);

и т.д.


Германн   (2007-11-13 01:52:00) [1]


> KilkennyCat ©   (11.11.07 22:33) [4]
>
>

Было уже такое. И тот же совет я давал тому автору. Похоже сей топик нужно адресовать LVT. Пусть и его учтёт в своём нынешнем (и очень полезном начинании).


KilkennyCat   (2007-11-13 00:56:00) [2]

Добавлю, на всяк пожарный :)
В стрингриде отрисовываются все ячейки! Т.е. ондроуцелл сработает для всех ячеек, а не только для избранных.


Amoeba   (2007-11-13 00:38:00) [3]


> петрович07   (13.11.07 00:27) [11]
>
> но ondrawcell для одной ячейки

Прямо как об стену горох...

Так и код отрисовки должен быть именно для одной ячейки. И нечего при отрисовке залезать с MoveTo и LineTo за ее пределы. И рисовать именно в OnDrawCell.


петрович07   (2007-11-13 00:27:00) [4]

но ondrawcell для одной ячейки


Virgo_Style   (2007-11-12 23:48:00) [5]

> петрович07   (12.11.07 13:52) [8]


Таки в OnDrawCell


петрович07   (2007-11-12 23:23:00) [6]

скажите плиз, а то не реал так работать когда такая перерисовка дурацкая..:(


петрович07   (2007-11-12 13:52:00) [7]

мда..и где рисовать тогда?


ЮЮ   (2007-11-12 04:33:00) [8]

> сделал в TopLeftChanged,все оч даже хорошо

Ничего хорошего в рисовании в TopLeftChanged нет. Проведи над гридом форму чужого приложения. И как теперь?


петрович07   (2007-11-12 00:12:00) [9]

спасибо вам большое,как сам не догадался..знал же))))

сделал в TopLeftChanged,все оч даже хорошо


Amoeba   (2007-11-11 22:41:00) [10]


> table_2.Canvas.MoveTo(table_2.VisibleColCount*table_2.DefaultColWidth+table_2.
> VisibleColCount-1, 0);
>  table_2.Canvas.LineTo(table_2.VisibleColCount*table_2.DefaultColWidth+table_2.
> VisibleColCount-1, table_2.Height-1);

Вот здесь собака и зарыта. Далее читаем
> KilkennyCat ©   (11.11.07 22:33) [4]

OnDrawCell действительно относится только к одной текущей ячейке, и вылезать за ее границы нельзя.


KilkennyCat   (2007-11-11 22:33:00) [11]

ondrawcell - что-то мне кажется, что сие относится к одной текущей ячейке. Попытка перерисовки всей таблицы, вместо одной ячейки - это нехорошо. Перерисовывайте только нужное. Тогда количество перерисовок всей таблицы уменьшится в количество раз, равное количеству ячеек.


петрович07   (2007-11-11 17:49:00) [12]

>и где сей код обрабатывается?  ondraw


bagos   (2007-11-11 17:48:00) [13]

в ondrawcell грида


KilkennyCat   (2007-11-11 16:51:00) [14]

и где сей код обрабатывается?


Наверх

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