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

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

О прорисовке на битмапе


DmiSb ©   (2005-01-12 09:18:00) 

Уважаемые местера, дайте совет. Если я в отдельно процедуре рисую на битмапе текст, приходится вызывать её  какждый раз при onPaint (перерисовавыть все заново).  На медленной машине видно, как идет прорисовка, это не очень приятно. Да и в процедуре идут некоторые вычисления, что тоже подтормаживает. Может кто подскажет как это исправить ?


Kerk   (2005-01-13 15:03:00) [1]

DmiSb   (13.01.05 13:46) [8]
покажи код рисования. не тот пример. а твою реализацию


DmiSb   (2005-01-13 13:46:00) [2]

Дык я так и делаю. На форме лежит ScrollBox, на нем PaintBox заведомо больших чем он размеров. На него я накладываю временный рисунок. И тут возникает бяка :(
А примера нету ?


Kerk   (2005-01-13 12:37:00) [3]

DmiSb   (13.01.05 11:18) [6]
используй ScrollBox


DmiSb   (2005-01-13 11:18:00) [4]

Точнее сказать, он прорисовывается, но после того как отпускаешь скроллер. В время скроллирования вообще ничего нет.


DmiSb   (2005-01-13 11:03:00) [5]

Kerk
перерисовывай при скролинге


В этом случае не перерисовывается вообще.


Kerk   (2005-01-13 06:32:00) [6]

DmiSb   (13.01.05 6:22) [3]
перерисовывай при скролинге


DmiSb   (2005-01-13 06:22:00) [7]

Чёт не получается у меня. Нашел пример рисования через BitBlt/

var
 MemDc : hdc;
 dc : hdc;
 MemBitmap : hBitmap;
 OldMemBitmap : hBitmap;

При открытии формы
 dc := GetDc(0);
 MemDc := CreateCompatibleDc(dc);
 MemBitmap := CreateCompatibleBitmap(dc, 100, 100);
 ReleaseDc(0, dc);

В процедуре рисую
 OldMemBitmap := SelectObject(MemDc, MemBitmap);
 PatBlt(MemDc, 0, 0, 100, 100, WHITENESS);
 Ellipse(MemDc, 0, 0, 100, 100);

 BitBlt(PB.Canvas.Handle, 100, 100, 100, 100,
   MemDc, 0, 0, SRCCOPY);
 SelectObject(MemDc, OldMemBitmap);

В onPaint
 BitBlt(PB.Canvas.Handle, 100, 100, 100, 100,
   MemDc, 0, 0, SRCCOPY);

Освобождаю объекты только при закрытии формы
 DeleteObject(MemBitmap);
 DeleteDc(MemDc);

Рисоваться, то рисуется, но при скроллинге размазывается.
Может у кого есть примерчик ?


DmiSb   (2005-01-12 11:36:00) [8]

2 tesseract

Немного поясню как у меня : На ScrollBox кладу PaintBox (размер А4), затем на нем cоздаю BitMap и на нем рисую текст и пр. Если я буду рисовать на отдельной канве нужно ли для этого дополнительный BitMaр и не сильно ли это будет отедать память, все таки два больших BitMaр`а?


tesseract   (2005-01-12 10:50:00) [9]

рисуё на отдельной канве потом BitBlt


Наверх

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