![]() |
![]() |
Dr Alex 03.05.2004 - 21:52 |
вопрос от начинающего программиста... вот предположим рисую линию, после того как над этой линией провожу другим окном (н-мер about) линия стирается... что я не так делаю??? Не обессудьте, если вопрос некорректный... |
archimag 1 - 03.05.2004 - 22:39 | Я не дельфист, но всё же... Если ты хочешь рисовать на произвольном окне (не знаю насчёт специальных компоненто, в дельфи не работаю) то необходимо обрабатывать сообщение WM_PAINT, в Delphi это событие OnPaint. При вызове обработчика рисуешь всё что угодно. Если неоходимо обновить изображение на окне, то вызываешь метод Invalidate. Windows так и делает: если над твоим окном провести другим, то она посылает окну сообщение о необходимости перерисовать себя и твоё изображение стирается. |
Grigoriy 2 - 04.05.2004 - 01:09 | И еще в дополнение - если график отнимает много машинного времени, то рисуй в битмап, а уже его кидай на событие OnPaint |
Dr Alex 3 - 04.05.2004 - 14:17 | 1,2 большое спасибо! Вроде ясно, щас попробую сделать... |
ShiFu Reflex 4 - 10.05.2004 - 20:34 | Како |
ShiFu Reflex 5 - 10.05.2004 - 20:37 |
Какое сообщение перекрывать зависит от того, на какой части окна рисуешь. Если в клиентской области - перекрывай WM_PAINT, если на служебной части - WM_NCPAINT. Для ускорения работы используй ASM или хотя бы Bitmap.ScanLine(см ман, описан нормально). |
x77 6 - 10.05.2004 - 21:44 | Grigoriy, можно просто выставить Form1.DoubleBuffered := TRUE, тогда она сама будет сначала рисовать в виртуальный битмап, а потом одниим махом отображать его на форме. |
steppler 7 - 11.05.2004 - 09:42 | Если использовать TImage , прорисовка тоже будет автоматом. |