aplikacja z wysuwanymi oknami/ramkami

0

staram się napisać aplikację, która będzie składała się z głównego okna, które po kliknięciu w odpowienich miejscach będzie się rozwijało z prawej i z lewej strony odkrywajac odpowiednie opcje tego programu.
Czyli ogólnie okno będzie składało się z 3 części - 1 główne okno i 2 wysuwane po bokach. Mogłby mi ktoś doradzić na jakich komponentach najwygodniej byłoby to zrobić?
Próbowałem zrobić to za pomocą from, ale jeżeli ustawię dla głównego okna TopMost na true, to ono będzie zawsze widoczne, a boczne okna mogą być przysłonięte, co jest niedopuszczalne, ponieważ cała aplikacja ma wyglądac jak jedno okno.
Pomijam kwestie z ramkami okna itp, ponieważ nie trudno je np ukryć.
Można byłoby to zrobić wszystko w jednym oknie, ale wydaje mi się to o wiele trudniejsze :(
Byłbym wdzięczny za wszelkie wskazówki.

0

Mozesz zrobic w jednym oknie, a elementy okna zrobic na panelach. Wtedy wystarczy tylko napisac animacje paneli i juz.

0

A może chcesz gotowy system taki jak ma Visual ?
http://kurakdev.wordpress.com/2008/02/24/dockpanel-suite/
Użytkownik sam sobie rozmieści narzędzia wedle uznania.

0

Możesz zrobić tak, stwórz trzy oddzielne formatki, wybierz jedną na główną, która będzie wywoływać pozostałe:

        private void buttonSettings_CheckedChanged(object sender, EventArgs e)
        {
            if (buttonSettings.Checked)
            {
                //cSettings.ShowDialog();
                int x, y;
                x = this.Location.X - cSettings.Size.Width;
                y = this.Location.Y + (this.Size.Height - cSettings.Size.Height) - 64;
                cSettings.Location = new Point(x, y);
                cSettings.Show();

                settVisible = true;

            }
            else
            {
                cSettings.Hide();
                settVisible = false;
            }
        }

        private void FormMain_Paint(object sender, PaintEventArgs e)
        {
            if (settVisible)
            {
                int x, y;
                x = this.Location.X - cSettings.Size.Width;
                y = this.Location.Y + (this.Size.Height - cSettings.Size.Height) - 64;
                // y = this.Location.Y + ((this.Size.Height / 2) - (cSettings.Size.Height / 2));
                cSettings.Location = new Point(x, y);
                cSettings.Invalidate();
            }
        }

        private void FormMain_LocationChanged(object sender, EventArgs e)
        {
            if (settVisible)
            {
                int x, y;
                x = this.Location.X - cSettings.Size.Width;
                y = this.Location.Y + (this.Size.Height - cSettings.Size.Height) - 64;
                // y = this.Location.Y + ((this.Size.Height / 2) - (cSettings.Size.Height / 2));
                cSettings.Location = new Point(x, y);
                cSettings.Invalidate();
            }
        }

Gdzie FormMain to główna formatka a cSettings to jedna z formatek, którą chcemy "rozwinąć". Button buttonSettings określa czy użytkownik życzy sobie żeby dodatkowe opcje były widoczne. Aby efekt był odpowiedni polecam ustawić FormBorderStyle na None dla formatek dodatkowych.

0

adf88 - dzięki za pomysł, ale piszę to wszystko w IronPythonie więc niestety nie mogę z tego skorzystać :/
koko maroko - właśnie coś takiego już sobie napisałem, tylko natrafiłem na pewien niedopuszczalny problem, z którym nie potrafię sobie poradzić. Chodzi o to, że jeżeli np korzystam w tym momencie z głównego okna tej aplikacji i mam widoczne to drugie okno to jeżeli uruchmię jakiś inny program, np przeglądarkę, ona się wyświetli na pulpicie, a potem wrócę do mojego programu to będzie widoczne tylko główne okno, a te pozostałe będa schowane "za" przeglądarką... Jest jakiś sposób na naprawienie tego?

0

W zdarzeniu Application.Activated poukładaj okna.

0

Jesli przewidujesz, ze Twoja aplikacja bedzie zawsze na wierzchu wystarczy ustawic TopMost na true dla wszystkich formatek.

0

Kilka okien to zly pomysl. Lepiej zrobic 2 panele, ktore mozna ukrywac, przesuwac i pokazywac.

Rozwijanie w prawo/w dół jest jeszcze łatwiej zrobić, bo wystarczy zeby kontrolki byly poza oknem a ty zmieniasz jego rozmiar dynamicznie (tylko że wtedy uzytkownik nie powinien móc zmieniac rozmiaru okna).

0

tak jak othello doszedlem do wniosku, że kilka okien to rzeczywiście nie najlepszy pomysł i rozmieściłem wszystko na panelach. Będę się starał napisać jakąś fajną animację tych paneli, żeby to jakoś estetycznie wyglądało.
Mam teraz pytanie odnośnie wyglądu samej formy. Jeżeli wyłączę ramki i ustawię sobie w tło jakiś obrazek (prostokąt z zaokrąglonymi rogami) i ustawię go na transparency key, to jeżeli zmienię rozmiar okienka to on też zostanie przeskalowany i żadne tryby powiększania nie umożliwiają takiego skalowania, żeby rogi zostały poprawnie zaokrąglone. Jest możliwość aby stworzyć aplikację o wybranym przez siebie kształcie w inny sposób niż ustawienie któregoś koloru jako transparency key?

0

A o regionach nie slyszales? Nie orientuje sie w jakim zakresie istnieje implementacja tego w .NET, ale nawet jak nie ma to mozesz sie uprzec i użyci WinApi.

0
matv napisał(a)

Jest możliwość aby stworzyć aplikację o wybranym przez siebie kształcie w inny sposób niż ustawienie któregoś koloru jako transparency key?

Zobacz na ten artykul.

I mam mala sugestie zebys zainteresowal sie WPF. Bedziesz mial niemial nieograniczone mozliwosci zarzadzania wygladem aplikacji, a wszystko to szybko i przyjemnie.

0

Mendoza - dzięki za linka, zaraz się z tym zapoznam. Co do WPF to próbowałem, ale nie potrafię tego użyć w pythonie :/ Próbowałem już kilka razy tego używać ale ciągle coś mi nie wychodziło :/ jeżeli miałby ktoś jakiś dobry opis jak korzystać z XAML w IronPythonie to byłoby miło jak by podrzucił jakiegoś linka, bo wszystko co do tej pory znalazłem (a było tego trochę) nie działało poprawnie :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1