WinForm C# Slide-show pozadie

Programovacie jazyky, rady, poradňa...
m_pro_m
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 268
Registrovaný: 05 jún 2009, 20:42

WinForm C# Slide-show pozadie

Príspevok od používateľa m_pro_m »

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
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8219
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: WinForm C# Slide-show pozadie

Príspevok od používateľa harrison314 »

Ja som preblikavanie riesil v RichTextBoxe, podobne by to malo ist aj vo Forme

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);
		}
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.
m_pro_m
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 268
Registrovaný: 05 jún 2009, 20:42

Re: WinForm C# Slide-show pozadie

Príspevok od používateľa m_pro_m »

Ď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

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++;
        }
//EDIT:
Môj fail.. nenastavil som tú premennú úplne na začiatku na true :D Takže funguje to. Jediný problém, čo teraz bliká je transparent pozadie pri buttonoch. Ale to už by sa dalo nejako prehrýzť..
manager666
Star
Star
Používateľov profilový obrázok
Príspevky: 642
Registrovaný: 12 aug 2007, 13:29

Re: WinForm C# Slide-show pozadie

Príspevok od používateľa manager666 »

Vo valnej vacsine pripadov staci, ked Formu nastavis vlastnost DoubleBuffered na true.
Napísať odpoveď