Nietypowy kształt przycisku w .net

0

Zastanawiam się czy istnieje możliwość stworzenia przycisku o nietypowym kształcie w .net. Mam na myśli sylwetkę człowieka podzieloną na kilka części. Kliknięcie danej partii spowoduje wywołanie określonej funkcji. Zdaje sobie sprawę, że można użyć zwykłych guzików z obrazkiem ale one zawsze będą kanciate (mimo tego, że można przeźroczystości).

0

Nigdy się nie bawiłem czymś takim ale na 100% jest to do zrobienia. Tutaj http://4programmers.net/C_sharp/Rysowanie_po_Windows_Forms masz jak coś "narysować" na winformsie. O ile dobrze myślę musisz każdy element który ma się stać przyciskiem opisać za pomocą osobnej klasy z przeciążona metoda onclick.

0

Wstawiasz kilka PictureBox'ów, w eventach myszki dajesz odpowiednio efekty, a w kliku dajesz wywołanie metody. Tyle, że teraz obszar do kliknięcia to prostokąt. A ty pewnie byś chciał tak jak jest ręka to da się tylko w rękę kliknąć. Tu by trzeba zrobić klasę dziedziczącą po PictureBox i przerobić trochę zdarzenia.

0

Hmm jak dodasz do picturebox to część będzie transparenta, a część nie. W obsłudze kliknięcia sprawdzaj czy kliknięto w część widoczną i tyle.

0

Chodzi właśnie o efekt kliknięcia na wybraną partię ciała a nie cały prostokąt. W jaki sposób sprawdzić czy kliknięto część przeźroczystą czy nie? Gotowej metody nie znalazłem, powinienem to jakoś próbkować czy co? I załóżmy, że mam sylwetkę ciała i co jeśli te prostokąty będą na siebie nachodzić? Musze je odpowiednio warstwami ułożyć? ( Zdaje sobie sprawę, że o nakładanie nie mam się co martwić jeśli faktycznie będzie to działać tak jak chce ale pytam na zapas).

0

Jakoś sobie tego nie wyobrażam, to był by ogrom współrzędnych i w jaki niby sposób to obliczać i sprawdzać (uwzględniając odpowiednią dokładność)?

http://en.wikipedia.org/wiki/Collision_detection
http://www.codeproject.com/Articles/15573/2D-Polygon-Collision-Detection

A gdybym chciał kod umieścić gdzie indziej to musiał bym wszystko zmieniać. Co prawda było by łatwiej bo chodziło by o przesunięcie w pozycji x i y więc wystarczyło by dodać odpowiednie wartości ale bez przesady.

Jeśli jakiś kod nadaje się do użycia w dwóch miejscach, to wydziela się moduł, z którego oba miejsca mogą korzystać.
Będziesz musiał przechować współrzędne wszystkich części ciała, które chcesz wykryć. Będziesz musiał sprawdzać kolizję w oparciu o podane parametry. Parametrami są współrzędne. Nie musisz "wszystkiego zmieniać" musisz wywołać odpowiednie metody z innymi parametrami.

0

Tworzysz drugi obrazek (niewidocznego), w którym każda część będzie miała inny kolor. Następnie sprawdzasz kolor na pozycji kursora w momencie kliknięcia w widoczny obrazek.

0

nie prościej stworzyć region na podstawie maski a potem przyciąć przycisk/obrazek/cokolwiek regionem i ni bawić się w sprawdzanie gdzie user kliknął?

0

Jeden region to za mało. Chodzi o rozpoznanie, w który frgment obrazka kliknięto. Oczywiście można zrobić to w różny sposób. Ja mając identyczny problem zrobiłem tak.

0

każdy fragment - osobny region i co za tym idzie przycisk i po problemie. Jak poświęci się trochę więcej czasu to można zrobić przycisk (cokolwiek) co będzie miało właściwość maska i będzie się do niej dostosowywało - czyli chcesz inny kształt - ustawiasz mu inną maskę i wszystko

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