У меня есть простая реализация события OnPaint
в моей программе Borland C ++ (Delphi).В OnPaint
в MDI-потомке рисуется сетка, и внутри сетки я показываю несколько растровых изображений.
Когда я открываю / создаю новое окно, происходит следующее:
Отображается окно.
Существует событие OnPaint
, в котором я рисую сетку и растровые изображения, но некоторые из растровых изображений не отображаются полностью, в окне, где частьрастровое изображение не отображается.
Затем происходит следующее событие OnPaint
, вызывается тот же код, и теперь все растровые изображения отображаются полностью.
Другие пользователи программы сообщают о более чем 2 OnPaint
событиях с похожими сбоями в растровых изображениях.
Я включил счетчик, счетчик показывает, что OnPaint
, в моем случае,всегда вызывается дважды, когда я создаю новое окно, когда окно перерисовывается в результате перемещения, OnPaint
вызывается только один раз.Я отключил некоторые коды рисования, чтобы увидеть, что что-то здесь вызывает второй вызов, но это не так.
Есть ли объяснение этому поведению, а лучше - лекарство?
void __fastcall TfrmSpoor::FormPaint(TObject *Sender)
{
... do some calculations
HorzScrollBar->Increment = PixelsPerHokX;
HorzScrollBar->Range = PixelsPerHokX * Railplan->xGrootte;
VertScrollBar->Increment = PixelsPerHokY;
VertScrollBar->Range = PixelsPerHokY * Railplan->yGrootte;
CanvasOffsetX = (int)-HorzScrollBar->Position % PixelsPerHokX;
CanvasOffsetY = (int)-VertScrollBar->Position % PixelsPerHokY;
Canvas->Lock(); // reserveert de Canvas voor deze thread
OnPaintTeller++;
Color = temp.GeefSymboolKleur(Vormgeving->SymboolGrootte);
... do some more calculations
{
TekenRaster(Canvas, Deelplan);
TekenRailplan(Canvas, Deelplan, true);
}
// Set some Buttons to visible:
ToonESTWRegels(Vormgeving->SymboolGrootte == SG_ESTW && Vormgeving->ESTWButtons);
Canvas->Unlock(); // release Canvas
}