codice:
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Imaging
Imports System.Drawing.Text
Public Class Form1
Inherits System.Windows.Forms.Form
Private Enum e_Colore
Nero
Verde
Giallo
Rosso
Blu
Viola
End Enum
Private Terr As New Territori()
Private X As Integer, Y As Integer
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
X = e.X
Y = e.Y
End Sub
Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click
Terr.MouseOn(X, Y)
Me.Refresh()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
Terr.AggiungiTerritorio("Venezuela", e_Colore.Viola)
Terr.AggiungiTerritorio("Brasile", e_Colore.Giallo)
Terr.AggiungiTerritorio("Peru", e_Colore.Blu)
Terr.AggiungiTerritorio("Argentina", e_Colore.Rosso)
Terr.AggiungiTerritorio("AfricaDelNord", e_Colore.Verde)
Terr.AggiungiTerritorio("Egitto", e_Colore.Viola)
Terr.AggiungiTerritorio("Congo", e_Colore.Verde)
Terr.AggiungiTerritorio("AfricaDelSud", e_Colore.Nero)
Terr.AggiungiTerritorio("Madagascar", e_Colore.Rosso)
Terr.AggiungiTerritorio("AfricaOrientale", e_Colore.Rosso)
Terr.AggiungiTerritorio("EuropaMeridionale", e_Colore.Rosso)
Terr.AggiungiTerritorio("MedioOriente", e_Colore.Giallo)
Terr.AggiungiTerritorio("GranBretagna", e_Colore.Giallo)
Terr.AggiungiTerritorio("EuropaSettentrionale", e_Colore.Blu)
Terr.AggiungiTerritorio("EuropaOccidentale", e_Colore.Blu)
Terr.AggiungiTerritorio("Scandinavia", e_Colore.Rosso)
Terr.AggiungiTerritorio("Ucraina", e_Colore.Blu)
End Sub
Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As PaintEventArgs) Handles MyBase.Paint
Dim gr As Graphics = e.Graphics
Dim bmp As New Bitmap("C:\Documents and Settings\x\Desktop\RISIKO\Immagini\Mare.gif")
gr.SmoothingMode = SmoothingMode.AntiAlias
gr.DrawImage(bmp, 1, 1)
bmp.Dispose()
Terr.gr = gr
Terr.Refresh("Venezuela")
Terr.Refresh("Brasile")
Terr.Refresh("Peru")
Terr.Refresh("Argentina")
Terr.Refresh("AfricaDelNord")
Terr.Refresh("Egitto")
Terr.Refresh("Congo")
Terr.Refresh("AfricaDelSud")
Terr.Refresh("Madagascar")
Terr.Refresh("AfricaOrientale")
Terr.Refresh("EuropaMeridionale")
Terr.Refresh("MedioOriente")
Terr.Refresh("GranBretagna")
Terr.Refresh("EuropaSettentrionale")
Terr.Refresh("EuropaOccidentale")
Terr.Refresh("Scandinavia")
Terr.Refresh("Ucraina")
gr.Dispose()
End Sub
Private Class Territori
Private CollTerritori As New TerritoriCollection()
Public Sub AggiungiTerritorio(ByVal Nome As String, ByVal Colore As e_Colore)
CollTerritori.Add(Nome, New Territorio(Nome, Colore))
End Sub
Public Sub Refresh(ByVal Nome As String)
CollTerritori(Nome).Refresh()
End Sub
Public WriteOnly Property gr() As Graphics
Set(ByVal Value As Graphics)
Dim Item As DictionaryEntry
For Each Item In CollTerritori
CType(Item.Value, Territorio).gr = Value
Next Item
End Set
End Property
Public Sub MouseOn(ByVal X As Integer, ByVal Y As Integer)
Dim Item As DictionaryEntry
Dim terr As Territorio
For Each Item In CollTerritori
terr = CType(Item.Value, Territorio)
If terr.IsIn(X, Y) Then
terr.Seleziona()
Else
terr.Deseleziona()
End If
Next Item
End Sub
Private Class TerritoriCollection
Inherits System.Collections.DictionaryBase
Default Property Item(ByVal Key As String) As Territorio
Get
Return CType(dictionary.Item(Key), Territorio)
End Get
Set(ByVal Value As Territorio)
dictionary.Item(Key) = Value
End Set
End Property
Public Sub Add(ByVal Key As String, ByVal Value As Territorio)
dictionary.Add(Key, Value)
End Sub
End Class
Private Class Territorio
Private bmp As Bitmap
Private Nome As String, Colore As e_Colore
Public gr As Graphics
Private transparency As Single = 0.5
Sub New(ByVal Nome As String, ByVal Colore As e_Colore)
Const PathImmaginiStati As String = "C:\Documents and Settings\x\Desktop\RISIKO\Immagini\"
Me.Nome = Nome
Me.Colore = Colore
bmp = Bitmap.FromFile(PathImmaginiStati & Nome & ".gif")
End Sub
Public Sub Refresh()
Dim R As Single, G As Single, B As Single
Select Case Colore
Case e_Colore.Viola
R = 1
G = 0.1
B = 1
Case e_Colore.Rosso
R = 1
B = 0.1
G = 0.1
Case e_Colore.Blu
R = 0.1
G = 0.1
B = 1
Case e_Colore.Verde
R = 0.1
G = 1
B = 0.1
Case e_Colore.Giallo
R = 1
G = 1
B = 0.1
Case e_Colore.Nero
R = 0.25
G = 0.25
B = 0.25
End Select
Dim values()() As Single = {New Single() {R, 0, 0, 0, 0}, _
New Single() {0, G, 0, 0, 0}, _
New Single() {0, 0, B, 0, 0}, _
New Single() {0, 0, 0, transparency, 0}, _
New Single() {0, 0, 0, 0, 2}}
Dim colMatrix As New ColorMatrix(values)
Dim imageAttr As New ImageAttributes()
imageAttr.SetColorMatrix(colMatrix, ColorMatrixFlag.Default _
, ColorAdjustType.Bitmap)
gr.DrawImage(bmp, New Rectangle(1, 1, bmp.Width, bmp.Height), 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, imageAttr)
End Sub
Public Function IsIn(ByVal X As Integer, ByVal Y As Integer) As Boolean
Try
IsIn = (bmp.GetPixel(X, Y).ToArgb <> Color.Transparent.ToArgb)
Catch
IsIn = False
End Try
End Function
Protected Overrides Sub Finalize()
Dim ex As Exception
Try
bmp.Dispose()
Catch ex
Finally
MyBase.Finalize()
End Try
End Sub
Public Sub Seleziona()
transparency = 1
End Sub
Public Sub Deseleziona()
transparency = 0.5
End Sub
End Class
End Class
End Class