Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "KOL";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.096 c
1-1091753019
ASoft
2004-08-06 04:43
2004.08.22
Переменная по STEPу


3-1090847537
vlad_ri
2004-07-26 17:12
2004.08.22
Добавление lookup-поля в ClientDataSet в runtime


1-1091639532
bloodman
2004-08-04 21:12
2004.08.22
Вызов функции главной программы из dll.


4-1088947994
beetlehead
2004-07-04 17:33
2004.08.22
Как в XP выключить комп???


3-1090903887
AntiBot
2004-07-27 08:51
2004.08.22
Счетчик





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский