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!