Re: Problemas con GDI+

27/01/2006 - 21:35 por Mara | Informe spam
Necesito ambas cosas. Cómo sería en los dos casos?, gracias

Mara

Ver este tema: http://www.softwaremix.net/viewtopic-478932.htm

Enviado desde http://www.softwaremix.net

Preguntas similare

Leer las respuestas

#1 Ch0rY
29/01/2006 - 12:20 | Informe spam
Quiza tendrias q guardar las coordenadas validas en las q has pulsado,
en un array o similar, y luego repintarlo en la funcion PintarCirculo.

Podrias hacer el array de tres dimensiones (x,y,Ver_o_NoVer) o quiza un
listview con los CheckBox para q puedas elejir cual se dibuja y cual no,
depende de la interface q tengas.

Chory
Respuesta Responder a este mensaje
#2 Ch0rY
29/01/2006 - 13:55 | Informe spam
He usado esto
1 PictureBox (PictureBox1)
2 ListView (ListView1 y LstVwClickados)
ListView1
Tiene tres Columnas, la primera contiene un texto
las otras dos, las coordenadas x e
Puedes ocultarla si quieres
Cuando la llenes de valores, pon el atributo Checked=TRUE en
a uno de los items y te quitas la linea del codigo
lvwitem.Checked = True antes de añadirlo a LstVwClickados
LstVwClickados
= q ListView1
ChexkBoxes=TRUE

'-- INICIO DEL CODIGO --

Private Sub PictureBox1_BackgroundImageChanged(ByVal sender As Object,
ByVal e As System.EventArgs) Handles PictureBox1.BackgroundImageChanged
PictureBox1.Size = PictureBox1.Image.Size
End Sub

Public xi, yi, radio, x, y As Integer
Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseClick
Dim coordx, coordy As Integer
x = e.X
y = e.Y
radio = 10
Dim lvwitem, lvwitem2 As ListViewItem
'Esta variable nos sirve para indicar si Ya hemos pulsado
anteriormente en ese "OBJETIVO"
Dim YaEsta As Boolean
'Recorremos TODOS los items de ListView1, donde tenemos los
posibles OBJETIVOS
For Each lvwitem In ListView1.Items
coordx = lvwitem.SubItems(1).Text
coordy = lvwitem.SubItems(2).Text
YaEsta = False
' Comprobamos si las coordenadas donde hemos pulsado, son de un
OBJETIVO o no
If (x >= coordx - radio And x <= coordx + radio) And (y >=
coordy - radio And y <= coordy + radio) Then
'Recorremos TODOS los items de LstVwClickados, donde
tenemos OBJETIVOS pulsados anteriormente
For Each lvwitem2 In LstVwClickados.Items
' Si ya ha sido pulsado
If lvwitem.Text = lvwitem2.Text Then
' Indicamos que si existe
YaEsta = True
' Salimos del bucle
Exit For
End If
Next
'Si no ha sido pulsado
If Not YaEsta Then
' Marcamos el Item para q luego lo pinte de otro color
lvwitem.Checked = True
' Lo Añadimos a la lista de Objeticos pulsados
LstVwClickados.Items.Add(lvwitem.Clone)
' Refrescamos/Repintamos la Imagen
PictureBox1.Refresh()
End If
End If
Next
End Sub

Private Sub PintarCirculo(ByVal control As Control, ByVal gr As
System.Drawing.Graphics)
Dim coordx, coordy As Integer

Dim lapiz As System.Drawing.Pen
Dim lvwitem As ListViewItem
Dim rectangulo As Rectangle

' Pintamos de color ROJO todos los posibles Objetivos
For Each lvwitem In ListView1.Items
coordx = lvwitem.SubItems(1).Text
coordy = lvwitem.SubItems(2).Text
'Rectángulo en el que está definida la figura a pintar
rectangulo = New Rectangle(coordx, coordy, radio * 2, radio *
2)
With gr
' Color y Anchura del Lapiz a usar
lapiz = New System.Drawing.Pen(System.Drawing.Color.Red, 1)
' Los Pintamos
gr.DrawEllipse(lapiz, rectangulo)
End With
Next
' Repintamos de color AZUL todos los Objetivos pulsados
For Each lvwitem In LstVwClickados.Items
If lvwitem.Checked = True Then
coordx = lvwitem.SubItems(1).Text
coordy = lvwitem.SubItems(2).Text
'Rectángulo en el que está definida la figura a pintar
rectangulo = New Rectangle(coordx, coordy, radio * 2, radio
* 2)
With gr
' Color y Anchura del Lapiz a usar
lapiz = New System.Drawing.Pen
(System.Drawing.Color.Blue, 5)
' Los Repintamos
gr.DrawEllipse(lapiz, rectangulo)
End With
End If
Next

'Creo q de esta manera pintando unos y Repintando otros es mas
rapido
'q ir haciendo las comparaciones para saber si hay q usar un color
u otro
End Sub

Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
PintarCirculo(sender, e.Graphics)
End Sub

' Cuando cambiemos el estado de un item en la lista de Objetivos
Pulsados
Private Sub LstVwClickados_ItemChecked(ByVal sender As Object, ByVal e
As System.Windows.Forms.ItemCheckedEventArgs) Handles
LstVwClickados.ItemChecked
' Refrescamos la Imagen
PictureBox1.Refresh()
End Sub

'-- FIN DEL CODIGO --

Espero q te sirva

Chory
Respuesta Responder a este mensaje
#3 Ch0rY
29/01/2006 - 14:03 | Informe spam
Un pequeño faaaallooo, acuerdate de cambiar
rectangulo = New Rectangle(coordx, coordy, radio * 2, radio * 2)
por
rectangulo = New Rectangle(coordx - radio, coordy - radio, radio * 2,
radio * 2)

o el cuadrante no sera el bueno

chory
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida