[ VerbatimBOT @ 13.05.2006. 14:20 ] @
Pozdrav!
Imam problem pri pravljenju "fade" efekta startUp forme koja se pokreće. Napravio sam klasu:

Code:

class FadeEfekat
    {
        Form forma;
        Timer tajmer;
        public void main(Form frmForma)
        {
            tajmer = new Timer();
            tajmer = new Timer();
            forma = frmForma;
            forma.Opacity = 0;
            tajmer.Interval = 100;
            tajmer.Tick += new EventHandler(tajmer_Tick);
            tajmer.Enabled = true;
        }

        private void tajmer_Tick(object sender, EventArgs e)
        {
            if (forma.Opacity == 100)
                tajmer.Enabled = false;
            else
                forma.Opacity += 5;
        }
    }


A u FormLoad metodi sam postavio sledeće:

Code:

private void Form1_Load(object sender, EventArgs e)
{
            FadeEfekat f = new FadeEfekat();
            f.main(this);
}


I to jednostavno ne radi! Ne primećuje se nikakav fade efekat. Jednostavno malo sačeka i onda odjednom postavi celu formu.

Jel ima neko neki predlog kako bi ovo moglo da se odradi?
[ Oliver Klaćik @ 13.05.2006. 15:58 ] @
Ne možeš ništa raditi sa UI-jem dok se FormLoad event handler ne završi, jer forma nije ni prikazana do tada. Stavi lepo u main proceduri Opacity na nula, zatim Form.Show i potom tu odradi fade in.
[ VerbatimBOT @ 13.05.2006. 17:25 ] @
Ae ću probam!
Hvala!
[ VerbatimBOT @ 13.05.2006. 17:55 ] @
Neće da mi radi tako. Uradim kao što si rekao i neće da tera dalje posle forma.Show() metode.
Jel imaš neku alternativu?
[ hakiro @ 13.05.2006. 18:41 ] @
cudno
to bi trebalo da radi
da li si svestan da tvoja forma stigne do Opacity 100 za dve sekunde?
[ Oliver Klaćik @ 14.05.2006. 02:12 ] @
Code:

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form1 myForm = new Form1();
            myForm.Opacity = 0;
            myForm.Show();
            double i = 0;
            while (i < 1)
            {
                myForm.Opacity = i;
                i += 0.01;
                System.Threading.Thread.Sleep(10);
            }
            Application.Run();
        }
[ Deep|Blue @ 17.05.2006. 10:30 ] @
tebi se fade izvrsava samo ga ti ne primecujes :)

U biti, kod ti je ok, ali problem je u tome sto je procesor suvise okupiran podizanjem frejmvorka i aplikacije da ne stize da iscrta promene na tvojoj startup formi (koja bi u biti trebalo da predstavlja splash zar ne?)
resenje da forsitras iscrtacanje posle svake promene opacity svojstva, ili da startujes splash u odvojenoj niti sa visokim prioritetom, tako ce ona da odradi svoj fade bez obzira na ostale procese. ovo jeste direktnije resenje, al ti usporava podizanje aplikacije za taj fade efekat, a 2 sekunde nije malo kad startujes taj program non stop