Visual Basic para Aplicaciones - Dibujar LINEAS mediante código VBA

Life is soft - evento anual de software empresarial
 
Vista:

Dibujar LINEAS mediante código VBA

Publicado por Percy Cano (20 intervenciones) el 26/03/2008 17:39:14
Como puedo hacer para dibujar lineas o flechas en un formulario de excel, mediante código de Visual Basic para Aplicaciones, con la finalidad de representar un vector y poder darle una orientacion (girarlo) como si fuese un norte, he revisado que se puede hacer mediante el control picture1.line(...... , pero no encuentro ese control en visual basic para aplicaciones.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Dibujar LINEAS mediante código VBA

Publicado por JuanC (243 intervenciones) el 27/03/2008 13:44:17
una solución es usar la API de Windows...

(en un módulo estándar)
Option Explicit

Public Const PS_SOLID As Long = 0
Public Type PointAPI
x As Long
y As Long
End Type

Declare Function apiLineTo Lib "gdi32" Alias "LineTo" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Declare Function apiFindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Declare Function apiCreatePen Lib "gdi32" Alias "CreatePen" (ByVal nPenStyle As Long, ByVal _
nWidth As Long, ByVal crColor As Long) As Long
Declare Function apiDeleteObject Lib "gdi32" Alias "DeleteObject" (ByVal hObject As Long) As Long
Declare Function apiSelectObject Lib "gdi32" Alias "SelectObject" (ByVal hdc As Long, _
ByVal hObject As Long) As Long
Declare Function apiGetDC Lib "user32" Alias "GetDC" (ByVal hWnd As Long) As Long
Declare Function apiMoveTo Lib "gdi32" Alias "MoveToEx" (ByVal hdc As Long, _
ByVal x As Long, ByVal y As Long, lpPoint As PointAPI) As Long

Declare Function apiPolyline Lib "gdi32" Alias "Polyline" (ByVal hdc As Long, lpPoint As PointAPI, ByVal nCount As Long) As Long

(en módulo del UserForm)
Option Explicit

Private Sub CommandButton1_Click()
Dim hWnd&, hdc&
Dim hPen&, hOldPen&, lpP As PointAPI
Dim x%, y%

hWnd = apiFindWindow(vbNullString, Me.Caption)
hdc = apiGetDC(hWnd)
hPen = apiCreatePen(PS_SOLID, 1, RGB(255, 0, 0))
hOldPen = apiSelectObject(hdc, hPen)

x = 50
y = 50

apiMoveTo hdc, x, y, lpP

apiLineTo hdc, x, y + 50
apiLineTo hdc, x + 50, y + 50
apiLineTo hdc, x, y

apiSelectObject hdc, hOldPen
apiDeleteObject hPen
End Sub

Private Sub CommandButton2_Click()
Dim hWnd&, hdc&
Dim hPen&, hOldPen&, lpP As PointAPI
Dim a(3) As PointAPI

hWnd = apiFindWindow(vbNullString, Me.Caption)
hdc = apiGetDC(hWnd)
hPen = apiCreatePen(PS_SOLID, 1, RGB(255, 0, 0))
hOldPen = apiSelectObject(hdc, hPen)

With a(0)
.x = 50
.y = 50
End With
With a(1)
.x = 50
.y = 100
End With
With a(2)
.x = 100
.y = 100
End With
With a(3)
.x = 50
.y = 50
End With

apiPolyline hdc, a(0), UBound(a) + 1

apiSelectObject hdc, hOldPen
apiDeleteObject hPen
End Sub

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dibujar LINEAS mediante código VBA

Publicado por Percy (20 intervenciones) el 27/03/2008 18:02:23
Funcina muy bien, pero ahora como hago para borrar estas lineas????,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dibujar LINEAS mediante código VBA

Publicado por JuanC (243 intervenciones) el 27/03/2008 20:48:46
jua jua jua!!
ese es otro asunto!!
una forma es redibujarla con el color de fondo o pintar todo el fondo
de un mismo color
investigá sobre el tema en los sitios de VB

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dibujar LINEAS mediante código VBA

Publicado por Percy Cano (20 intervenciones) el 03/04/2008 16:53:17
Una muy buena solucion para borrar las lineas dibujadas es poniendo un recuadro (podria ser un label), con propiedades visible = false (pa que no se vea ps) y quitarlo (moverlo) claro esta usando las propiedades left y top. Al hacer esto se borran las lineas.

Funciona excelente!!!!.

Pero tengo una consulta Juan. Estoy haciendo estas lineas, en realidad muchas de ellas y las mismas en diferentes puntos del formulario, y para no repetir el codigo en cada punto seria de utilidad ponerlas en un MODULO, para ser llamadas cada ves que quiera dibujarlas en diferentes lados del form. Pero aparece un error todo el tiempo. Podrias ayudarme???. Desde ya muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dibujar LINEAS mediante código VBA

Publicado por JuanC (243 intervenciones) el 03/04/2008 19:12:22
enviame las cosas y alguna explicación... no hay problemas

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dibujar LINEAS mediante código VBA

Publicado por Percy Cano (20 intervenciones) el 07/04/2008 22:00:55
TE HE ENVIADO EL CODIGO A TU CORREO. GRACIAS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dibujar LINEAS mediante código VBA

Publicado por Percy Cano (20 intervenciones) el 08/04/2008 01:15:16
TE ENVIE EL ARCHIVO COMPLETO, OJALA AYA ALGUNA IDEA BRILLANTE. GRACIAS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dibujar LINEAS mediante código VBA

Publicado por Zorany (1 intervención) el 25/01/2011 23:51:16
Hola, trato de correr tu macro pero aparece que No se permiten constantes , cademas de longitud, y matrices declare como miembros public de modulos de objetos en la instruccion Public Const PS_SOLID As Long = 0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dibujar LINEAS mediante código VBA

Publicado por Javier Orellana (1 intervención) el 24/10/2021 06:49:49
Buenas noches gracias por la explicación para hacer las líneas, son muy buenas opciones. Yo personalmente estoy interesado en hacer una aplicación que sea capaz de ponerle los valores de los lados al triángulo y también ponerle las coordenadas a cada punto del triángulo y con la ayuda de las propiedades left y top lo puedo hacer. Pero me doy cuenta que al querer ubicar el control label, no coinciden las cordenadas de las líneas con las del label, saben de alguna manera para que se pueda ubicar bien los labels para que tenga una buena apariencia, es decir que se puedan ubicar en dónde se necesite con relación al dibujo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar