Hogyan lehet megszabadulni a rémisztő villódzástól

Hogyan lehet megszabadulni a megszállott villódzástól?

Jó napot! Navayal komponense BitBtn leszármazottja, amelyben a kép különböző egér eseményekkel változik. Például rámutatok rá, aztán eltávolítom - a kép megváltozik. Végrehajtotta az ingatlant
FImageList: TImageList;. és a képváltás eljárása így néz ki:
eljárás TAFVActiveButton.SetImage (index: egész szám);
kezdődik
ha nincs hozzárendelve (FImageList), akkor lépjen ki;
ha Index = -1, akkor kilép;
ha Index> FImageList.Count-1 majd kilép;
a Glyph megkezdődik
Szélesség: = FImageList.Width;
Magasság: = FImageList.Height;
Canvas.FillRect (Rect (0,0, szélesség, magasság));
FImageList.GetBitmap (Index, Glyph);
végén;
végén;
Amikor befejezte az eseményt, az egész gomb villog. Nem tudom, hogy lehetséges-e csökkenteni a villódzást, vagy legalábbis villogni csak a Glyph. Köszönöm előre.

Próbálja meg elolvasni a wm_erasebkgnd üzenetet.

A tervező, fel
DoubleBuffered: = Igaz

Nem ez az.
Itt például a sor
>> Canvas.FillRect (Rect (0,0, szélesség, magasság));

Szuggesztív. Vagyis, ahogy én megértem, a TAFVActiveButton.SetImage metódus a .Paint módszerben hívódik meg.
Ez azt jelenti, hogy minden alkalommal, amikor az összetevőt redisztálják (a rendszer kényszeríti vagy hívja), ez megtörténik (ahogy értem):

1. Vászon tisztítása (itt villog)
2. Kép ​​átvitele az ImageListből ", stb.

Röviden szólva, így történik:

Először is, az egészet az ideiglenes bitkép vászonjára rajzolják, majd (a végén) a bitképből származó kép átkerül a vászonra.


.
var TempBmp: TBitmap;
.
megpróbál
TempBmp: = TBitmap.Create;
A TempBmp.Canvas do
kezdődik

/ / / Minden itt van, amit a vászonra kell rajzolni
/// lehetséges, és a módszernél a paraméter átvitelének beillesztése
/ / / a vászon rajzolására és átadására vászonra
/// TempBmp.Canvas

végén;
// És most végre rajzolunk a vászonra
Self.Canvas.Draw (0.0, TempBmp)
végül
TempBmp.Free;
végén;

Adtam a kódot a .Paint módszernek

Köszönöm Dimka Maslovnak.
Úgy tűnik, hogy működött!

Kapcsolódó cikkek