Zdravím,
robím jednu aplikáciu, kde by som rád na pozadie dal primitívnu slideshow. Mám to spravené tak, že každých 7 sekúnd mením pozadie hlavného Form-u.
V čom je problém ? Pri každej zmene obrázku je jednoducho vidno BIELE bliknutie (teraz mi nejde o nejaký prechod, ale samotné prepnutie obrázkov), keď to asi prekresľuje ...
Obrázky sú veľké 900x500 a všetky majú pod 800kb. Sú zložené Resources.
Nedalo by sa toho preblikávania nejako zbaviť ? Nejako tie obrázky prednačítať alebo také niečo ?
Ďakujem za rady
WinForm C# Slide-show pozadie
-
harrison314
Hardcore addict
- Príspevky: 8221
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: WinForm C# Slide-show pozadie
Ja som preblikavanie riesil v RichTextBoxe, podobne by to malo ist aj vo Forme
Predtym ako budes menit obrazok nastavis m_bPaint na false,
ked ho zmenis znovu ho das na true. To zabrani prekresleniu okna, ked sa meni obrazok a malo by toodstranit blikanie.
Kód: Vybrať všetko
bool m_bPaint;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == 0x00f)
{
if (m_bPaint)
base.WndProc(ref m);
else
m.Result = IntPtr.Zero;
}
else
base.WndProc(ref m);
}
ked ho zmenis znovu ho das na true. To zabrani prekresleniu okna, ked sa meni obrazok a malo by toodstranit blikanie.
Re: WinForm C# Slide-show pozadie
Ďakujem za tip. Problém je v tom, že teraz sa to zasekne, ako keby som tej premennej už nedal zase true.
Mám to spravené takto
//EDIT:
Môj fail.. nenastavil som tú premennú úplne na začiatku na true
Takže funguje to. Jediný problém, čo teraz bliká je transparent pozadie pri buttonoch. Ale to už by sa dalo nejako prehrýzť..
Mám to spravené takto
Kód: Vybrať všetko
private void timer1_Tick(object sender, EventArgs e)
{
m_bPaint = false;
if (timer == 1)
{
this.BackgroundImage = TestApp.Properties.Resources._1;
}
else if (timer == 2)
{
this.BackgroundImage = TestApp.Properties.Resources._2;
}
...
m_bPaint = true;
timer++;
}
Môj fail.. nenastavil som tú premennú úplne na začiatku na true
-
manager666
Star
- Príspevky: 642
- Registrovaný: 12 aug 2007, 13:29
Re: WinForm C# Slide-show pozadie
Vo valnej vacsine pripadov staci, ked Formu nastavis vlastnost DoubleBuffered na true.