Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Custom/Complex shape control

[es] :: .NET :: .NET Desktop razvoj :: Custom/Complex shape control

[ Pregleda: 2256 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

W.A.Mozart

Član broj: 17279
Poruke: 63
109.175.50.*



Profil

icon Custom/Complex shape control13.12.2011. u 11:07 - pre 149 meseci
Pozdrav,

Trebao bi da napravim shape kontrolu sastavljenu iz 5 dijelova ( http://bit.ly/rWnpl3 ). Svaki dio treba da posjeduje svoj callback / click event. Takodjer, na klik bi segment oblika treba da ima mogucnost mijenjanja boje. Prilicno banalna i po vaznosti minorna stvar koja mi je u projektu zadala prilicno veliku glavobolju. Ima neka dobra dusa da me prosvijetli? :)

Prikačeni fajlovi
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12846



+4783 Profil

icon Re: Custom/Complex shape control13.12.2011. u 12:04 - pre 149 meseci
Hm, kada bi radio u WPF-u, ovo bi bilo jednostavno. U WinForms, ne pada mi nista drugo na pamet osim da na osnovu koordinata klika odredis kojem segmentu pripada mesto klika i shodno tome reagujes.
 
Odgovor na temu

W.A.Mozart

Član broj: 17279
Poruke: 63
109.175.50.*



Profil

icon Re: Custom/Complex shape control13.12.2011. u 12:55 - pre 149 meseci
Fol je sto trebam imati blizu 50 ovakvih kontrola na jednoj formi. Mislim da bi bilo prilicno bolno za svaku raditi takvu proceduru.
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12846



+4783 Profil

icon Re: Custom/Complex shape control13.12.2011. u 14:05 - pre 149 meseci
Pa ne, nego napravis jednu user kontrolu koja ce to da obavlja za sebe. Posle je samo ubacis na 50 mesta :)
 
Odgovor na temu

W.A.Mozart

Član broj: 17279
Poruke: 63
217.197.137.*



Profil

icon Re: Custom/Complex shape control14.12.2011. u 09:57 - pre 149 meseci
Sve su prilike da ce mi to biti jedini izlaz :( Da li neko mozda ima jos neku ideju prije nego se bacim na posao?

 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
212.200.240.*



+104 Profil

icon Re: Custom/Complex shape control14.12.2011. u 21:22 - pre 149 meseci
evo za početak ovako nešto. Ne bi trebalo da bude problem da dodaš click event i šta već treba

Code (vbnet):

 Dim p1() As Point = {New Point(0, 0), New Point(40, 0), New Point(30, 10), New Point(10, 10)}
    Dim p2() As Point = {New Point(0, 0), New Point(10, 10), New Point(10, 30), New Point(0, 40)}
    Dim p3() As Point = {New Point(0, 40), New Point(40, 40), New Point(30, 30), New Point(10, 30)}
    Dim p4() As Point = {New Point(40, 40), New Point(40, 0), New Point(30, 10), New Point(30, 30)}
    Dim p5() As Point = {New Point(10, 10), New Point(30, 10), New Point(30, 30), New Point(10, 30)}
    Dim Pol()() As Point = {p1, p2, p3, p4, p5}
   
    Public Shared Function IsInPolygon(poly As Point(), p As Point) As Boolean
        Dim p1 As Point, p2 As Point

        Dim inside As Boolean = False

        If poly.Length < 3 Then
            Return inside
        End If
       
        Dim oldPoint = New Point(poly(poly.Length - 1).X, poly(poly.Length - 1).Y)
       
        For i As Integer = 0 To poly.Length - 1
            Dim newPoint = New Point(poly(i).X, poly(i).Y)
            If newPoint.X > oldPoint.X Then
                p1 = oldPoint
                p2 = newPoint
            Else
                p1 = newPoint
                p2 = oldPoint
            End If
           
            If (newPoint.X < p.X) = (p.X <= oldPoint.X) AndAlso (p.Y - CLng(p1.Y)) * (p2.X - p1.X) < (p2.Y - CLng(p1.Y)) * (p.X - p1.X) Then
                inside = Not inside
            End If

            oldPoint = newPoint
        Next
        Return inside
    End Function
   
    Private Sub Form1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        Dim g As Graphics = Me.CreateGraphics
        For Each p In Pol
            If IsInPolygon(p, e.Location) Then
                g.FillPolygon(Brushes.Red, p)
            Else
                g.FillPolygon(New SolidBrush(Me.BackColor), p)
            End If
            g.DrawPolygon(Pens.Black, p)

        Next
    End Sub

    Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim g As Graphics = Me.CreateGraphics
        g.DrawPolygon(Pens.Black, p1)
        g.DrawPolygon(Pens.Black, p2)
        g.DrawPolygon(Pens.Black, p3)
        g.DrawPolygon(Pens.Black, p4)
        g.DrawPolygon(Pens.Black, p5)
    End Sub
 

Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12846



+4783 Profil

icon Re: Custom/Complex shape control14.12.2011. u 23:59 - pre 149 meseci
Imas jedan prilicno šabanski nacin ali verovatno najjednostavniji moguci :)
Elem, napravis user control. Napravis sliku koja izgleda kao ta koju si nama pokazao ali svaki segment malo drugacije boje. Dovoljno je da r, g ili b vrednost promenis za 1. Vizuelno se nece primetiti. Na klik proveris koja je boja na mestu klika i na osnovu toga znas koji je segment :)
 
Odgovor na temu

wex-alpha
Sarajevo

Član broj: 7580
Poruke: 845
*.dynamic.telemach.ba.



+13 Profil

icon Re: Custom/Complex shape control16.12.2011. u 23:42 - pre 149 meseci
A ako korisnik promjeni rezoluciju?
 
Odgovor na temu

W.A.Mozart

Član broj: 17279
Poruke: 63
109.175.53.*



Profil

icon Re: Custom/Complex shape control18.12.2011. u 17:47 - pre 149 meseci
Postoje dva zahtjeva:

1. Da svaki segment ima svoja callback, click event
2. Da ima property takav da se moze mijenjati boja svakog od segmenta pojedinacno ( na klik i sl).

Poslije par dana se ponovo vracam na ovaj projekat pa ako imate ideje... :)

Pozdrav
 
Odgovor na temu

W.A.Mozart

Član broj: 17279
Poruke: 63
217.197.137.*



Profil

icon Re: Custom/Complex shape control19.12.2011. u 15:00 - pre 149 meseci
@vujkev Uspio sam prepakovati tvoj kod u C#, napravio custom control-u i za pocetak odlicno radi. Malo je buggy sto nekad ostane aktivan poligon ( crvena boja ) na mouse over ali se da to srediti. Jos sta ce biti potrebno da uradim je da napraviti mogucnost da na mouse click event zadrzi boju i setuje neku public varijablu ( mozda bool array za sve kreirane poligone ) da bi iz main forme mogao imati informaciju o tome sta je aktivno. Mnogo ti hvala na pomoci!
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Custom/Complex shape control

[ Pregleda: 2256 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.