Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
GunSpawn
Tvůrce
Avatar
GunSpawn:31.8.2014 16:41

Zdravím všechny,
potřebuju poradit jak vykreslit logo přes User Control tak, aby tam 1-2 vteřiny byla černá obrazovka, potom by se postupně vykreslilo logo a potom zase zmizelo. Celkem by to trvalo tak 10-12 vteřin.
Dík všem GunSpawn

Odpovědět
31.8.2014 16:41
Save early, save often, save everything, everywhere, everytime.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na GunSpawn
Jan Vargovský:31.8.2014 16:53

Technologie?

 
Nahoru Odpovědět
31.8.2014 16:53
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na Jan Vargovský
GunSpawn:31.8.2014 17:25

co myslíš? Jako Windows Forms Application

Editováno 31.8.2014 17:25
Nahoru Odpovědět
31.8.2014 17:25
Save early, save often, save everything, everywhere, everytime.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na GunSpawn
Jan Vargovský:31.8.2014 18:18
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        Color c = Color.Red;
        int t1 = 2;
        Image im = Image.FromFile("Untitled.png");
        int t2 = 4;
        SplashScreen splashScreen = new SplashScreen(ClientSize, c, t1, im, t2);

        this.ShowSplashScreen(splashScreen);
    }
}

public static class SplashScreenExtenstion
{
    public static void ShowSplashScreen(this ContainerControl control, SplashScreen splashScreen)
    {
        PictureBox pb = new PictureBox() { Size = control.Size };
        int time = 0;
        pb.Paint += (o, e) =>
            {
                splashScreen.Draw(e.Graphics, time);
            };
        control.Controls.Add(pb);
        System.Timers.Timer t = new System.Timers.Timer(1000);
        t.Elapsed += (o, e) =>
            {
                if (time >= splashScreen.TotalTime)
                {
                    t.Dispose();
                    pb.Invoke(new Action(() => control.Controls.Remove(pb)));
                }
                pb.Invoke(new Action(() => pb.Refresh()));
                time++;
                //Debug.WriteLine(time);
            };
        t.Start();
    }
}

public class SplashScreen
{
    private Size size;
    private Color background;
    private Image image;
    private int t1, t2;

    public int TotalTime
    {
        get { return t1 + t2; }
    }

    public SplashScreen(Size size, Color background, int t1, Image image, int t2)
    {
        this.size = size;
        this.background = background;
        this.image = image;
        this.t1 = t1;
        this.t2 = t2;
    }

    public void Draw(Graphics g, int time)
    {
        if (time < t1)
            g.FillRectangle(new SolidBrush(background), 0, 0, size.Width, size.Height);
        else if (time >= t1 && time <= TotalTime)
            g.DrawImage(image, 0, 0, size.Width, size.Height);
    }
}

Asi by to šlo zredukovat na méně řádků a udělat to jednodušeji, kdyžtak ti to dá aspoň nápad jak to realizovat.

Editováno 31.8.2014 18:21
 
Nahoru Odpovědět
31.8.2014 18:18
Avatar
Jan Vargovský
Tvůrce
Avatar
Jan Vargovský:31.8.2014 18:22

Jak na to koukám tak tam to uprav takhle

if (++time >= splashScreen.TotalTime)
{
    t.Dispose();
    pb.Invoke(new Action(() => control.Controls.Remove(pb)));
}
pb.Invoke(new Action(() => pb.Refresh()));
 
Nahoru Odpovědět
31.8.2014 18:22
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na Jan Vargovský
GunSpawn:31.8.2014 18:28

SplashScreen splashScreen = new SplashScreen(Cli­entSize, c, t1, im, t2);

Co tam znamená to "im"

Dobrý už mi to došlo

Editováno 31.8.2014 18:28
Nahoru Odpovědět
31.8.2014 18:28
Save early, save often, save everything, everywhere, everytime.
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na Jan Vargovský
GunSpawn:31.8.2014 18:36

Díky moc, že si mi až takhle pomohl
a mám pár otázek
1)pb.Paint += (o, e) => "a tohle" t.Elapsed += (o, e) => "a tohle" pb.Invoke(new Action);(co to dělá)
2)g.FillRectan­gle(new SolidBrush(bac­kground), 0, 0, size.Width, size.Height); (jakej význam tam ná ten SolidBrush a co to je)

Nahoru Odpovědět
31.8.2014 18:36
Save early, save often, save everything, everywhere, everytime.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na GunSpawn
Jan Vargovský:31.8.2014 19:13
  1. Annonyní metoda, lambda výraz, předání vykonání metody do daného vlákna
  2. Normální vytvoření instance na typ Brush, který po tobě chce ta metoda, nemůžu vytvořit new Brush(...), protože ta třída je abstraktní.
 
Nahoru Odpovědět
31.8.2014 19:13
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na Jan Vargovský
GunSpawn:31.8.2014 19:32

Tak jsem to tam dal, vše nastavil opravil errory, funguje to, ale když chci potom načíst Menu, tak se tam nedostanu. Tady je kód tý třídy, přes kterou to volám.

public partial class HerniOkno : Form
    {
        HlavniNabidka Nabidka;
        Logo Logo;


        public HerniOkno()
        {
            InitializeComponent();
            this.ClientSize = new Size(800, 600);
            Logo = new Logo();
            Logo.Parent = this;
            Logo.Dock = DockStyle.Fill;
            Logo.Show();
            Nabidka = new HlavniNabidka();
            Nabidka.Parent = this;
            Nabidka.Dock = DockStyle.Fill;
            Nabidka.Show();
            Nabidka.PolozkaVybrana += Nabidka_PolozkaVybrana;
        }

        private void Nabidka_PolozkaVybrana(PolozkyNabidky p)
        {
            switch (p)
            {
                case PolozkyNabidky.NovaHra:
                    Nabidka.Dispose();
                    Nabidka = null;
                    HerniSvet hra = new HerniSvet(this);
                    break;
                case PolozkyNabidky.Konec:
                    Application.Exit();
                    break;
            }
        }





    public class HerniSvet
    {
        Image deska = CloveceNezlobSe.Properties.Resources.Clov_Image;
        Image kostka1 = CloveceNezlobSe.Properties.Resources.Kostka1;
        Image kostka2 = CloveceNezlobSe.Properties.Resources.Kostka2;
        Image kostka3 = CloveceNezlobSe.Properties.Resources.Kostka3;
        Image kostka4 = CloveceNezlobSe.Properties.Resources.Kostka4;
        Image kostka5 = CloveceNezlobSe.Properties.Resources.Kostka5;
        Image kostka6 = CloveceNezlobSe.Properties.Resources.Kostka6;

        Random generatorCisel = new Random();
        private int cisloKostky = 0;

        public HerniSvet(Form f)
        {
            HerniOkno = f;
            HerniOkno.Paint += PaintMapa;
        }

        Form HerniOkno;

        private void VykresliHerniPlochu(Graphics g)
        {
            g.DrawImage(deska, 0, 0);

        }

        private void HodKostkou(Graphics g)
        {
            cisloKostky = generatorCisel.Next(1, 7);
            switch (cisloKostky)
            {
                case 1:
                    g.DrawImage(kostka1, 620, 150);
                    break;
                case 2:
                    g.DrawImage(kostka2, 620, 150);
                    break;
                case 3:
                    g.DrawImage(kostka3, 620, 150);
                    break;
                case 4:
                    g.DrawImage(kostka4, 620, 150);
                    break;
                case 5:
                    g.DrawImage(kostka5, 620, 150);
                    break;
                case 6:
                    g.DrawImage(kostka6, 620, 150);
                    break;
                default:
                    MessageBox.Show("Něco se stalo špatně.");
                    Application.Exit();
                    break;
            }
        }

        private void PaintMapa(object sender, PaintEventArgs e)
        {
            VykresliHerniPlochu(e.Graphics);
            HodKostkou(e.Graphics);
        }
    }
    }
}

V menu je akorát Nová hra a konec

Editováno 31.8.2014 19:32
Nahoru Odpovědět
31.8.2014 19:32
Save early, save often, save everything, everywhere, everytime.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na GunSpawn
Jan Vargovský:31.8.2014 19:42

Nechápu co máš za problém...

 
Nahoru Odpovědět
31.8.2014 19:42
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na Jan Vargovský
GunSpawn:31.8.2014 19:51

Po tom vykreslení toho loga se nezobrazí menu, zatím jsem to upravil takhle:
Logo.Show();
Logo.Hide(); //tohle jsem přidal
Nabidka = new HlavniNabidka();

ale teď zas nejde to logo, tak jestli by se nedal přidat ten čas, co se vykresluje to logo do argumentů (to vlastně nejde) nebo někam jinam, nebo nějak jinak upravit

Editováno 31.8.2014 19:52
Nahoru Odpovědět
31.8.2014 19:51
Save early, save often, save everything, everywhere, everytime.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na GunSpawn
Jan Vargovský:31.8.2014 19:56

Nevím co je nějaké tvoje Logo.

 
Nahoru Odpovědět
31.8.2014 19:56
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na Jan Vargovský
GunSpawn:31.8.2014 20:00

název uživatelského prvku, který si mi naprogramoval (ještě jednou děkuju)

Nahoru Odpovědět
31.8.2014 20:00
Save early, save often, save everything, everywhere, everytime.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na GunSpawn
Jan Vargovský:31.8.2014 20:20

To logo je právě děláno tak, že na to nepotřebuješ žádný vlastní usercontrol. Trošku jsem koukal na hierarchii těch controlů a můžeš si tam změnit http://pastebin.com/nAY6JQcs.

Pak si můžeš kdekoliv zavolat, aby se ti tam zobrazilo to logo, i kdyby to mělo být na textboxu nebo i labelu. Ty to asi budeš používat na nějaký ten Form.

Btw, k té tvojí chybě, to se ti nezobrazí nějaké tvoje věci nebo co je špatně, co ti tam chybí?

Editováno 31.8.2014 20:22
 
Nahoru Odpovědět
31.8.2014 20:20
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na Jan Vargovský
GunSpawn:31.8.2014 20:28

jo používám to jako Form, jde o to, že se buď zobrazí logo, a pak je jen černé pozadí a nebo to jede normálně, ale bez loga

Nahoru Odpovědět
31.8.2014 20:28
Save early, save often, save everything, everywhere, everytime.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na GunSpawn
Jan Vargovský:31.8.2014 20:32

Můžeš ukázat tu třídu Logo? Já to dělal tak, že to nemusíš maskovat za nějaký usercontrol. Jen bys udělal

public HerniOkno()
         {
             InitializeComponent();
             this.ClientSize = new Size(800, 600);
             Nabidka = new HlavniNabidka();
             Nabidka.Parent = this;
             Nabidka.Dock = DockStyle.Fill;
             Nabidka.Show();
             Nabidka.PolozkaVybrana += Nabidka_PolozkaVybrana;
             SplashScren sc = new SplashScreen(...);
             this.ShowSplashScreen(sc);
         }
Editováno 31.8.2014 20:34
 
Nahoru Odpovědět
31.8.2014 20:32
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na Jan Vargovský
GunSpawn:31.8.2014 20:39
public partial class Logo : UserControl
    {
        public Logo()
        {
            InitializeComponent();
            this.ClientSize = new Size(800, 600);
            Color c = Color.Black;
            int t1 = 2;
            this.BackColor = Color.Black;
            int t2 = 4;
            Image logo = CloveceNezlobSe.Properties.Resources.Logo;
            SplashScreen splashScreen = new SplashScreen(ClientSize, c, t1, logo, t2);

            this.ShowSplashScreen(splashScreen);
        }

    }
    public static class SplashScreenExtenstion
    {
        public static void ShowSplashScreen(this ContainerControl control, SplashScreen splashScreen)
        {
            PictureBox pb = new PictureBox() { Size = control.Size };
            int time = 0;
            pb.Paint += (o, e) =>
            {
                splashScreen.Draw(e.Graphics, time);
            };
            control.Controls.Add(pb);
            System.Timers.Timer t = new System.Timers.Timer(1000);
            t.Elapsed += (o, e) =>
            {
                if (++time >= splashScreen.TotalTime)
                {
                    t.Dispose();
                    pb.Invoke(new Action(() => control.Controls.Remove(pb)));
                }
                pb.Invoke(new Action(() => pb.Refresh()));
                time++;
                //Debug.WriteLine(time);
            };
            t.Start();
        }
    }

    public class SplashScreen
    {
        private Size size;
        private Color background;
        private Image image;
        private int t1, t2;

        public int TotalTime
        {
            get { return t1 + t2; }
        }

        public SplashScreen(Size size, Color background, int t1, Image image, int t2)
        {
            this.size = size;
            this.background = background;
            this.image = image;
            this.t1 = t1;
            this.t2 = t2;
        }

        public void Draw(Graphics g, int time)
        {
            if (time < t1)
                g.FillRectangle(new SolidBrush(background), 0, 0, 800, 300);
            else if (time >= t1 && time <= TotalTime)
                g.DrawImage(image, 0, 150, 800, 300);
        }
    }
}
Nahoru Odpovědět
31.8.2014 20:39
Save early, save often, save everything, everywhere, everytime.
Avatar
GunSpawn
Tvůrce
Avatar
Odpovídá na Jan Vargovský
GunSpawn:31.8.2014 20:50

Už to funguje, konečně. Dík za pomoc.

Nahoru Odpovědět
31.8.2014 20:50
Save early, save often, save everything, everywhere, everytime.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 18 zpráv z 18.