Текущий архив: 2004.08.22;
Скачать: CL | DM;
Вниз
PaintBox - bugs Найти похожие ветки
← →
Raki (2004-03-12 19:44) [0]
procedure Draw(resource:string);
var
bm:Pbitmap;
begin
bm:=Newbitmap(0,0);
bm.loadfromfile(resource);
bm.draw(Paintbox1.canvas.handle,0,0);
end;
Это максимально упрощенный код из моей программы. Проблема такова: нарисовал в PaintBox картинку, затем над формой провел другим окном- все нарисованное исчезает. Я попробовал создать таймер, который каждые 100 милисекунд делает bm000.draw(Paintbox1.canvas.handle,0,0);.
Толку никакого. Что не так делаю?
← →
Ал (2004-03-12 21:34) [1]Прорисовку нужно делать в событии OnPaint.
← →
Gandalf © (2004-03-12 21:38) [2]Мда и память надо освобождать
bm.Free;
← →
Raki (2004-03-12 22:03) [3]Понимаешь, не в этом фишка. И память в коде освобождается и on paint процедура тоже есть. Но у меня код навороченный: он занимется красивым (без погрешностей) сжатием изображений размерами 800х600-1280х1024 до 166х128(типа preview). Так вот, там несколько pbitmap ов, один-исходный, другой-после конвертирования. Если конвертировать каждый раз по OnPaint-то все нормально, вот только при проце в 1.8 Ghz(AMD 2400+) это 5 секунд, когда винда замирает. Соответственно, bitmap-ы я подготавливаю еще при загрузке программы. А на OnPaint-е, грубо говоря, оставил лишь
bm1.StretchDraw(form1.PaintBox1.Canvas.Handle,PaintBox1.clientRect);
И вот таким макаром у меня перерисовка не происходит (как будто переменная bm1 сама очистилась)-почему не пойму.
P.S. NewBitmap(0,0) происходит по созданию окна
bm.free - по уничтожению.
← →
Gandalf © (2004-03-13 08:22) [4]может с ClientRect беда? Попробуй задать Rect жестко - попробубуй в файл сохранить - и посмотри - если там "не то" - то у тебя где идет очистка...
← →
Raki (2004-03-18 22:09) [5]Решение нашел довольно простое, не знаю почему сразу не допер.
Создал буферную переменную типа Pbitmap (p.x. bmt), которая хранит изображение,рассчитанное в самом начале программы.
А на On-Paint поставил:
bm1.assign(bmt);
bm1.StretchDraw(form1.PaintBox1.Canvas.Handle,PaintBox1.clientRect);
Кстати говоря, когда делал
bm1:=bmt;
вылетала ошибка Access violation...
А если
bm1.assign(bmt);
то все нормально.
← →
Raki (2004-03-18 22:09) [6]Решение нашел довольно простое, не знаю почему сразу не допер.
Создал буферную переменную типа Pbitmap (p.x. bmt), которая хранит изображение,рассчитанное в самом начале программы.
А на On-Paint поставил:
bm1.assign(bmt);
bm1.StretchDraw(form1.PaintBox1.Canvas.Handle,PaintBox1.clientRect);
Кстати говоря, когда делал
bm1:=bmt;
вылетала ошибка Access violation...
А если
bm1.assign(bmt);
то все нормально.
← →
Gandalf © (2004-03-19 10:25) [7]>Кстати говоря, когда делал
>bm1:=bmt;
>вылетала ошибка Access violation...
>А если
>bm1.assign(bmt);
Так думать надо, это ведь совсем разные вещи...
← →
SPeller © (2004-03-20 00:46) [8]LMD :-))
Страницы: 1 вся ветка
Текущий архив: 2004.08.22;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.023 c