Jak zrobić okno z nietypowym krztałtem w C#

Ciekawe artykuły dotyczące C#

Moderator: xxSlayeRxx

Jak zrobić okno z nietypowym krztałtem w C#

Sponsor

Sponsor
 

Jak zrobić okno z nietypowym krztałtem w C#

Postprzez Kalnor » Pn paź 26, 2009 8:08 pm

Dostawałem już wiele pytań od kumpli i członków na innych forach jak robię takie fajne okna w C#.

Obrazek

Więc postanowiłem napisać tutorial jak to się robi.

Najprostrzym sposobem jest użycie opcji TransparencyKey która jest w właściwościach formy. TransparencyKey określa kolor którego program nie będzie rysował na ekranie (będzie on przezroczysty.)

Najpierw robimy formę którą chcemy zmodyfikować. Ja użuję prostej formy do której później dodam pare buttonów itp.

Klikamy na formę i w BackgroundImage klikamy na mały Button po prawej text box'u. Otworzy nam się okno wyboru obrazka na tło. Zaznaczamy Local Resource i klimay na Import a potem ok:

Obrazek

Wybieramy swój obrazek na tło i klikamy ok.

Zanim przejdziemy dalej obrazek na tło musi mieć jedno kolorowe tło które będzie przezroczyste. Ja użyje tego obrazka:

Obrazek

Tło jest jedno kolorowe (0; 255; 0 (Lime));

Ustawiamy TransparencyKey na kolor tła i uruchamiamy aplikacje. Kolor tła powinien być przezroczysty ale to nie koniec. FormBorderStyle ustawiamy na None. Dodajemy jakiś Button z tekstem "x". Wpisujemy do niego ten kod:

Kod: Zaznacz cały
Application.Exit();


Albo coś w tym rodzaju co zamknie formę albo całą aplikacje.

To jest bardzo prosty i szybki sposób na uzyskanie tego efektu w formach:

Screen z mojego kalkulatora:
Obrazek

Minusy tego procesu:

    1. Trzeba bardzo precyzyjnie ustawić kolor bo jak będzie się różnij chociaż o jeden klik to program nie nienarysuje koloru którego chciałeś jako przezroczysty.
    2. Na niektórych monitorach może to nie chodzić bo będzie inna jakość koloru lub coś takiego.
    3. Kolor tła nie może się powtarzać w obrazku bo także będzie przezroczysty.

Plusy tego procesu:

    1. Jest szybki i optymalny.

Niedługo dodam tutorial do procesu który jest niezawodny ale wymaga dużej ilości obliczeń co może spowolnić komputer ale na większoci komputerów efekt jest znakomity.

Miłego używania. Mam nadzieje że się wam to przyda.
ऋऍकईऋऍकईऋऍकईऋऍकईऋऍकईऋऍकईऋऍकईऋऍकईऋऍऋऍकईऋऍकईऋऍकईऋऍकई

Jeśli ktoś chce małej pomocy z jakimś programem to dać znać na gg (4875993). Przyjmuję także zlecenia na programy, strony internetowe itp. Bawie się też w XNA 3.1 itp.

Znam VB6, Java, C#, CSS, HTML, XHTML, XML, RSS.
Avatar użytkownika
Kalnor
Member
 
Posty: 60
Dołączył(a): N paź 25, 2009 3:13 pm

Re: Jak zrobić okno z nietypowym krztałtem w C#

Postprzez Yoxino » Pn mar 01, 2010 3:09 pm

No dobrze wszystko ładnie pięknie ale jak zrobic aby za jakis pasek dało się zmieniac lokalizacje tej formy. Jest na to jakis szybki sposób czy trzeba ręcznie przez MouseMove ustalac lokalizacje??
http://tsk.webege.com/ - Najleprzy portal motoryzacyjny!
Yoxino
Member
 
Posty: 146
Dołączył(a): N lis 15, 2009 7:46 pm

Re: Jak zrobić okno z nietypowym krztałtem w C#

Postprzez `DrumZy » Śr mar 03, 2010 6:00 am

Da się da się :P

Dodajesz:
Kod: Zaznacz cały
using System.Runtime.InteropServices;


Potem zmienne pomocnicze:
Kod: Zaznacz cały
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;

[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd,
                 int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();


I potem na zdarzeniu MouseDown Formy:
Kod: Zaznacz cały
if (e.Button == MouseButtons.Left)
    {
        ReleaseCapture();
        SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
    }



Możesz do przystowować do paska, i tylko nim będziesz poruszać formę.
`DrumZy
Member
 
Posty: 93
Dołączył(a): Pt maja 22, 2009 6:56 pm
Lokalizacja: Piotrków Trybunalski

Re: Jak zrobić okno z nietypowym krztałtem w C#

Sponsors

Sponsor
 


Powrót do Artykuły

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości