Hector:
Recorta el código que te mando a continuación y pegalo en un formulario con
un PictureBox de nombre Picture1 y prueba a ver si es lo que necesitas. Te
lo envío de esta manera porque no se con que version de VB estas trabajando.
Espero que te sirva.
Suerte.
Peky.
********** Inicio del Código ************
Option Explicit
Private Type TPenStatus
DrawStyle As Integer
DrawMode As Integer
DrawWidth As Integer
ForeColor As Long
MousePointer As Integer
End Type
Private Type TControlBox
X1 As Long
Y1 As Long
X2 As Long
Y2 As Long
PenStatus As TPenStatus
End Type
Dim CtrlBox As TControlBox
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If (Button And vbLeftButton) = vbLeftButton Then
' Salva el estado inicial
With CtrlBox
.X1 = X
.Y1 = Y
.X2 = X
.Y2 = Y
.PenStatus.DrawStyle = Picture1.DrawStyle
.PenStatus.DrawMode = Picture1.DrawMode
.PenStatus.DrawWidth = Picture1.DrawWidth
.PenStatus.ForeColor = Picture1.ForeColor
.PenStatus.MousePointer = Picture1.MousePointer
End With
With CtrlBox.PenStatus
Picture1.DrawStyle = vbDot
Picture1.DrawMode = vbInvert
Picture1.DrawWidth = 1
Picture1.ForeColor = 0
Picture1.MousePointer = vbCrosshair
End With
Picture1.Line (CtrlBox.X1, CtrlBox.Y1)-(CtrlBox.X2, CtrlBox.Y2), , B
End If
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If (Button And vbLeftButton) = vbLeftButton Then
Picture1.Line (CtrlBox.X1, CtrlBox.Y1)-(CtrlBox.X2, CtrlBox.Y2), , B
CtrlBox.X2 = X
CtrlBox.Y2 = Y
Picture1.Line (CtrlBox.X1, CtrlBox.Y1)-(CtrlBox.X2, CtrlBox.Y2), , B
End If
End Sub
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If (Button And vbLeftButton) = vbLeftButton Then
Picture1.Line (CtrlBox.X1, CtrlBox.Y1)-(CtrlBox.X2, CtrlBox.Y2), , B
CtrlBox.X2 = X
CtrlBox.Y2 = Y
' restaura el estado del picture
With CtrlBox.PenStatus
Picture1.DrawStyle = .DrawStyle
Picture1.DrawMode = .DrawMode
Picture1.DrawWidth = .DrawWidth
Picture1.ForeColor = .ForeColor
Picture1.MousePointer = .MousePointer
End With
' Desde aquí tienes el valor del rectángulo en CtrlBox.X1, .Y1, .X2
y .Y2
End If
End Sub
********** Fin del Código ************
------------------------------------------------
e-mail <peky@satlink.com>
>-----Original Message-----
>De: hector (HeDa) <hcormen@delta.cti.unav.es>
>Para: vb-esp@ccc.uba.ar <vb-esp@ccc.uba.ar>
>Fecha: Martes 23 de Diciembre de 1997 10:10
>Asunto: (VB-ESP) Rectangulo de arrastre
>
>Hola. Necesito un poco de ayuda.
>Antes de nada.. muchas gracias por leerme... :)
>
>
>Tengo VB5. Tengo una aplicación en la que sale una imagen con unos
graficos. Quiero hacer un zoom. La >rutina ya esta hecha. Solo me falta
hacer que al hacer la ventana del zoom me salga un rectangulo desde >donde
le di el primer clic hasta el cursor a medida que muevo el raton. me explico
? tiene que ser facil . >pero me pierdo... hay que llamar a alguna API
supongo.
>
>También me interesaría que alguien publicase sus links favoritos de Visual
Basic en esta lista. je je :) Sitios >donde haya ejemplos, tutoriales. etc.
>
>GRACIAS
>________________________________ _ _ _ _ _ _ _ _
>Héctor D. Corcín
>hcormen@arq.cti.unav.es
>http://www.yi.com/home/CorcinHector
>
En cuanto a lo de los enlaces, prueba con éste:
http://www.wcostasol.es/guille/indice
El Las páginas del "Guille" encontrarás de todo (entre otras cosas, más
enlaces).
Antes que se me olvide: Gracias, Guille, si me lees, por tu esfuerzo.
En cuanto a lo del rectángulo del Zoom:
Yo probaría a hacerlo así (sin funciones API):
Pare hacer el rectángulo, puedes usar un control Shape (que se haría
visible o no), o mejor aún, la función Line (en MiPicture_Paint).
Tienes que usar los eventos MouseDown, MouseMove y MouseUp, y tres
variables a nivel de módulo:
Private bMMostrar as Boolean
Private lnMX as Long
Private lnMY as Long
Luego:
En MiPicture_MouseDown:
If Button = 1 Then
bMMostrar = True
lnMX = X
lnMY = Y
End If
En MiPicture_MouseUp:
bMMostrar = False
MiZoom 'Incluye MiPicture_Paint
En MiPicture_MouseMove:
If bMMostrar Then MiPicture_Paint
En MiPicture_Paint
If bMMostrar Then
MiPicture.Line (lnMX, lnMY)-(X, lnMY)
MiPicture.Line (lnMX, lnMY)-(lnMX, Y)
MiPicture.Line (X, lnMY)-(lnMX, lnMY)
MiPicture.Line (lnMX, Y)-(lnMX, lnMY)
End If
Con algo así supongo que funcionaría más o menos, aunque puede hacerlo a
saltos.
Otra posibilidad sería simular el rectángulo con Drag and Drop, pero ahí ya
me pierdo, lo tendría que probar antes.
Si usas un control Image, debes incluírlo en un control Picture y poner
MiImage.Enabled = False, para poder usar el método Line.
Espero que te sirva de algo. Un saludo y Feliz Navidad.
Luis Sanz
HOSPITAL REINA SOFIA DE TUDELA
31500 TUDELA
NAVARRA
Teléfono: 948-827500
Fax: 948- 825906
E-Mail: hrst@ctv.es
----------
> De: hector (HeDa) <hcormen@delta.cti.unav.es>
> A: vb-esp@ccc.uba.ar
> Asunto: (VB-ESP) Rectangulo de arrastre
> Fecha: martes 23 de diciembre de 1997 7:03
>
> Hola. Necesito un poco de ayuda.
> Antes de nada.. muchas gracias por leerme... :)
>
>
> Tengo VB5. Tengo una aplicación en la que sale una imagen con unos
graficos. Quiero hacer un zoom. La rutina ya esta hecha. Solo me falta
hacer que al hacer la ventana del zoom me salga un rectangulo desde donde
le di el primer clic hasta el cursor a medida que muevo el raton. me
explico ? tiene que ser facil . pero me pierdo... hay que llamar a alguna
API supongo.
>
> También me interesaría que alguien publicase sus links favoritos de
Visual Basic en esta lista. je je :) Sitios donde haya ejemplos,
tutoriales. etc.
>
> GRACIAS
> ________________________________ _ _ _ _ _ _ _ _
> Héctor D. Corcín
> hcormen@arq.cti.unav.es
> http://www.yi.com/home/CorcinHector
Héctor escribió:
> Tengo VB5. Tengo una aplicación en la que sale una imagen con unos
graficos. Quiero hacer un zoom. La rutina ya esta hecha. Solo me falta
hacer que al hacer la ventana del zoom me salga un rectangulo desde donde
le di el primer clic hasta el cursor a medida que muevo el raton. me
explico ? tiene que ser facil . pero me pierdo...
Mira. Hice mi tarea B-) y se me ocurió algo como esto, espero que te sea
útil. Para que funcione, debes colocar en un formulario una figura (shape)
con las siguientes propiedades: BorderStyle = 3-Dot, Shape = 0 - Rectangle y
el nombre predeterminado (Shape1).
********************************************
Option Explicit
Private Sub Form_Load()
' Establezca los valores iniciales de la figura.
Shape1.Tag = ""
Shape1.Visible = False
Shape1.Move 0, 0, 0, 0
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single,
Y As Single)
With Shape1
' Verifique si la opresión del botón está dentro o fuera
' de los límites de la figura. Si está fuera, iníciese,
' entonces, el dibujo de una nueva figura. Si está dentro
' entonces no lo haga y avísele al procedimiento acorde que
' no haga ningún movimiento.
If (X < .Left Or X > .Left + .Width) Or (Y < .Top Or Y > .Top + .Height)
And .Visible Then
.Visible = False
.Tag = ""
Else
.Tag = "Trasladar"
End If
End With
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single,
Y As Single)
If Button And vbLeftButton Then
With Shape1
' ¿Está visible la figura?
If Not .Visible Then
.Visible = True
.Move X, Y, 0, 0
End If
' ¿Debe realizar el efecto de dimensionamiento?
If .Tag = "" Then
If (X - .Left) >= 0 And (Y - .Top) >= 0 Then
.Width = (X - .Left)
.Height = (Y - .Top)
End If
End If
End With
End If
End Sub
******************************************
Creo que hará bien el trabajo...
+¡Saludos desde México!+
| |
| .+'~~'+. |
| * Tron * David.BAS |
| `+,__,+' |
| |
+-adgarza@spin.com.mx--+
Resumen