Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.021 c
1-1091639532
bloodman
2004-08-04 21:12
2004.08.22
Вызов функции главной программы из dll.


1-1092090365
mouse_web
2004-08-10 02:26
2004.08.22
Заставка перед загрузкой программы


14-1091201800
Igor_thief
2004-07-30 19:36
2004.08.22
Excel


1-1092130305
TUser
2004-08-10 13:31
2004.08.22
raise в потоке


1-1092125540
Mitrofan
2004-08-10 12:12
2004.08.22
Конфигуратор для приложения




   Наверх