Конференция "Media" » не очищать canvas [D6, D7, WinXP]
 
  • Korsv (17.09.11 22:54) [0]
    День добрый. Подскажите пожалуйста, как отменить автоочистку canvas'a формы, при её сворачивании-разворачивании. Т.е. я что-то рисую, сворачиваю форму, разворачиваю, все на месте
    Заранее спасибо!
  • Омлет © (18.09.11 00:03) [1]
    В общем случае необходимо учебник по Delphi почитать.
    В частном - перерисовывать область ClipRect заново в событии OnPaint, либо использовать TImage, который хранит изображение в памяти и сам выполняет перерисовку в нужный момент.
  • Korsv (18.09.11 11:26) [2]
    у меня заранее не известно что и где будет нарисовано. т.е. в зависимости от таймера, расположения мышки и нажатия неких клавиш,  

    рисуются разные объекты. в Onpaint только определенная последовательность
  • Омлет © (18.09.11 15:10) [3]
    Я ещё раз говорю - найди книгу.
    Рисовать надо в памяти, а в OnPaint выводить на экран то, что в данный момент в памяти есть.
  • brother © (19.09.11 06:17) [4]

    > автоочистку canvas'a формы

    это не так.
    создай объект TBitmap, рисуй все в нем а по событию OnPaint отрисовывай на canvas'е формы
  • Плохиш © (21.09.11 17:18) [5]

    > как отменить автоочистку canvas'a формы, при её сворачивании-
    > разворачивании.

    Как можно отменить то, чего нет?
    Найми программиста.
  • БезымянныйСтудент (02.11.11 11:45) [6]
    > Korsv   (18.09.11 11:26) [2]

    Надо ж как раз наоборот...))

    > brother ©   (19.09.11 06:17) [4]

    Если рисуется что-то векторное и динамически, то лучше без битмапа...)
  • Омлет © (02.11.11 12:37) [7]
    > БезымянныйСтудент   (02.11.11 11:45) [6]
    > Если рисуется что-то векторное и динамически, то лучше без битмапа...)


    Если через GDI, то без буферного битмапа не стоит рисовать.
  • upc (16.11.11 03:54) [8]
    А на чем вообще лучше рисовать что-то?
    Вот у меня есть функция, которая возвращает TBitMap. Во время работы программы это делается много раз, каждый раз рисунок разный.
    На что мне его лучше выводить, что бы не было этих морганий?
  • brother © (16.11.11 09:56) [9]
    в основном юзают GDI, и потому советую ВСЕГДА использовать Bitmap

    > На что мне его лучше выводить, что бы не было этих морганий?

    на Canvas формы вестимо функцией BitBlt, таймером с интервалом в 24 попробуй...
    что эа мограния?
  • БезымянныйСтудент (16.11.11 14:52) [10]
    > Если через GDI, то без буферного битмапа не стоит рисовать.

    Просто сделать DoubleBufered==True - и хватит. =)

    > что бы не было этих морганий

    В OnPaint.
  • upc (16.11.11 16:09) [11]
    Я в OnPaint и вывожу:
     buffer := GetBitmap; // моя функция, возвращает TBitMap
     paintbox.Canvas.CopyRect(bounds(0,0,buffer.Width,buffer.Height),
                    buffer.Canvas,bounds(0,0,buffer.Width,buffer.Height));

    А DoubleBufered у чего ставить? У PaintBox'а не нашел..
  • upc (16.11.11 16:50) [12]
    Хмм! На канвас формы выводит всё нормально, без морганий (поставил DoubleBufered у неё), но у PaintBox'а нету DoubleBufered. На что еще можно вывести с DoubleBufered, кроме формы?
  • brother © (17.11.11 09:17) [13]
    > кроме формы?

    тебе чем канва формы не угодила то? имхо наиболее оптимальный вариант СВОЕЙ отрисовки...
  • Омлет © (17.11.11 09:25) [14]
    Зная, как реализован DoubleBufered у TWinControl... лучше уж свой сделать )
  • brother © (17.11.11 20:42) [15]
    > DoubleBufered

    в топку,
    мы зачем в начале рисуем на Bitmap, а ПОТОМ уже готовое изображение на канву формы а?
 
Конференция "Media" » не очищать canvas [D6, D7, WinXP]
Есть новые Нет новых   [134430   +2][b:0][p:0.001]