Я использую BCB6, но она должна быть такой же, как Delphi, если я просто добавить обработчик, как это моя форма:Delphi/Builder/VCL, переопределить WM_PAINT формы без потери двойной буферизации?
void __fastcall TForm1::WndProc(TMessage &Message)
И обрабатывать WM_PAINT, я не получаю выгоду DoubleBuffered что TWinControl обеспечивает. Есть ли способ сделать некоторую пользовательскую картину в форме, которая соответствует настройке DoubleBuffered (aka-пишет в растровое изображение памяти, созданное TWinControl)?
Эта функция в controls.pas то, где DoubleBuffered будет применяться:
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
Это создает битовую карту памяти, а затем снова называет себя. Поэтому мне нужен способ вызвать эту функцию, когда Message.DC равно 0, поэтому он будет создавать растровое изображение, а затем я не буду называть его снова после этого ... но WMPaint не является виртуальным, и ни один из них не является PaintHandler, поэтому я «Не вижу способа зацепиться за это.
Я знаю, что могу создать свою собственную двойную буферизацию, но я предпочел бы использовать то, что уже есть, если это возможно. Я планирую переносить этот дизайн на другие элементы управления, а не только на мою форму.
Формы в Delphi7 (не уверены в BCB) имеют событие OnPaint, но оно не буферизировано, вам все равно придется делать это с помощью простого TBitmap. – Dampsquid