Autor Téma: PaintBox - zrušení ClipRect  (Přečteno 1090 krát)

Offline age.new

  • Hrdina
  • ****
  • Příspěvků: 316
  • Karma: 0
PaintBox - zrušení ClipRect
« kdy: 15-07-2015, 07:44:16 »
Zdravím programátory Delphi,

poslední dobou mě trápí problém s PaintBoxem (umístěném ve ScrollBoxu). V OnPaint volám proceduru, která smaže kreslící obrazovku a začne načisto kreslit obrázek. To se děje v pořádku pouze v případě, že akci provedu na tlačítko a nebo překryju CELÝ paintbox jiným formulářem. Problém nastane, když se překryje jen ČÁST paintboxu. OnPaint se správně zavolá, ale nedojde ke smazání kreslící obrazovky a provede se překreslení jen překryté části.

Zkoušel jsem používat InvalidateRect, měnit ClipRect přes SelectClipRgn - nic nepomohlo. Je nějaká možnost, jak zrušit částečné překreslení a vždy vyvolat kompletní repaint?

Děkuji.

Offline Sender

  • Plnoletý
  • ***
  • Příspěvků: 184
  • Karma: 5
    • Verze Delphi: Delphi 7 Prof.
Re:PaintBox - zrušení ClipRect
« Odpověď #1 kdy: 15-07-2015, 08:34:00 »
Obvykle funguje PaintBox1.Repaint;
Nedochází v OnPaint opětovného vykreslení Paintboxu ?

Offline age.new

  • Hrdina
  • ****
  • Příspěvků: 316
  • Karma: 0
Re:PaintBox - zrušení ClipRect
« Odpověď #2 kdy: 15-07-2015, 08:54:08 »
Kdbych použil Repaint / Invalidate a podobné, došlo by ke dvěma vykreslením - čemuž se snažím předejít. PaintBox automaticky sám provede OnPaint v případě, že se objeví/zmizí cizí objekt v kreslícím regionu. V tu chvíli bych ale rád potlačil překreslení pouze části PaintBoxu a vynutil překreslení celé (v rámci jednoho volání OnPaint).