Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.04 c
1-1091729194
Hyperspeed
2004-08-05 22:06
2004.08.22
Как сделать поиск и данных и файле типа параметр:значение...


1-1092037671
Salik
2004-08-09 11:47
2004.08.22
Выделение строки в ListBox


6-1088068383
][ncognito
2004-06-24 13:13
2004.08.22
Вкл/вкл LAN


3-1091168902
som
2004-07-30 10:28
2004.08.22
Про SQL запросы


1-1091623105
cvg
2004-08-04 16:38
2004.08.22
Длина массива записей -- как???