elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Variables tipo objeto
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Variables tipo objeto  (Leído 4,808 veces)
Javilondo

Desconectado Desconectado

Mensajes: 15


dfghftyn fthawpri+ok5t+'9i4 v0934u34+0953vn5


Ver Perfil
Variables tipo objeto
« en: 21 Septiembre 2010, 21:43 pm »

Hola amigos!

Estoy desarrollando un programa en el cual tengo un TextBox(TextBox1) un CommandButton(Command1) y un PictureBox(Picture1).
El objetivo es introducir en Text1 una lista de vectores y que al presionar Command1 sean graficados en Picture1.
Podría hacer que dentro de Command1 se ejecute el algoritmo de graficación, pero necesito declarar una función que haga esto y llamarla desde el Command1 porque posteriormente utilizaré la misma función desde varios formularios y me desharé del Text1 ya que incluiré la opción de leer archivos.vec donde se almacenaran los vectores.
No quiero que la función antes mencionada actue sobre el Picture1, sino que trabaje con otro objeto tipo PictureBox. Entonces se me ocurrió que podría declarar esta función como un objeto PictureBox y retornar el resultado del proceso mediante la invocación de la función en una asignación. Ejemplo:
Código
  1. Private Sub Command1_Click()
  2.    Picture1 = funcion(Text1)
  3. End Sub
  4. Private Function funcion(parametro string) As PictureBox
  5.  
  6.    'Codigo de interpretacion de vectores (tokenizer)
  7.    'Bla, bla, bla, etc.
  8.  
  9.    'Codigo de graficado de vectores
  10.    'ejemplo hipotetico de un vector graficado con el metodo line sobre la misma funcion:
  11.    funcion.Line (50, 40)-(100, 150), vbRed
  12.    'De esta manera la funcion devuelve el resultado en forma de un objeto tipo PictureBox
  13.  
  14. End Function
  15.  
El código que interpreta los vectores ya lo tengo resuelto con un tokenizer que separa el string entrante en un array multidimensional tipo long.
Declaré una función tipo objeto (PictureBox) que tiene un parámetro(string) por donde ingresa la lista de vectores para que posterirmente sean procesados individualmente y que los grafique en la función de tipo PictureBox. En teoria el código me parecía correcto, pero en la práctica me sale un error:
Error '91' en tiempo de ejecucuón :
Variable de tipo Object o la variable del bloque With no está establecida

Nunca me había pasado esto antes con una función, pero el hecho es que es la primera vez que declaro una función como una variable de tipo objeto y no se que pueda estar mal.
Para descartar que fuese un error al declarar la función elaboré un nuevo programa pero ésta vez sólo con un PictureBox(Picture1) y un CommandButton(Command1).
Declaré una variable de nombre pic y como tipo PictureBox para trabajar con ella y posteriormente asignarla a Picture1. En el código puse lo siguiente:
Código
  1. Dim pic As PictureBox
  2.  
  3. Private Sub Command1_Click()
  4.    pic.BackColor = vbRed 'Esta vez cambie el metodo para descartar que fuera un error de sintaxis del metodo anterior
  5.    Picture1 = pic
  6. End Sub
  7.  
Ejecuté el programa y al presionar Command1... ¡Crash! volvió a salir el mismo error. fue cuando me di cuenta de que no era ni un error de declaración de función ni de sintaxis del método line, entonces deduje que es un error de asignación ó declaración de variables tipo Object (Tal como aparecía en el error emergente).

¿Alguien sabe en qué estoy mal, o si estoy omitiendo algo obvio?
Si alguien me puede ayudar le estaré muy agradecido y además quedará como referencia futura por si alguien llega a tener el mismo problema.

Gracias.



En línea

He dicho.
ignorantev1.1


Desconectado Desconectado

Mensajes: 617


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Variables tipo objeto
« Respuesta #1 en: 22 Septiembre 2010, 04:19 am »

Y por que no pasar el apuntador de "picture1" como parametro a "funcion"?


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Variables tipo objeto
« Respuesta #2 en: 22 Septiembre 2010, 06:33 am »

.
Trabaja con un DC... es mas General asi puedes pintar en DONDE SE TE DE LA REGALADA GANA.

en si se me ocurren solo dos parametros

Código
  1.  
  2. Public Function DrawLineGraf(ByRef Coordinates() As Long, ByVal hDC As Long) As Long
  3. ...
  4. Manejos d eFunciones GDI, APIS, ETC
  5. ...
  6. End Function
  7.  
  8.  

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
Javilondo

Desconectado Desconectado

Mensajes: 15


dfghftyn fthawpri+ok5t+'9i4 v0934u34+0953vn5


Ver Perfil
Re: Variables tipo objeto
« Respuesta #3 en: 22 Septiembre 2010, 06:35 am »

Y por que no pasar el apuntador de "Picture1" como parametro a "funcion"?

  • ¿a que te refieres con pasar el apuntaddor?
  • De ser así ¿Que caso tendría si paso un picture1 como parámetro? si lo nececito como salida y que yo sepa los parámetros son de entrada (o tal vez estoy equivocado).
  • Además cómo si utilizo a Picture1 en la función cómo ésta será independiente de cada futuro formulario (necesito imparcialidad para cada formulario)

Disculpa si mis preguntas son atrevidas pero así es la ignorancia y deseo reducirla.
En línea

He dicho.
Javilondo

Desconectado Desconectado

Mensajes: 15


dfghftyn fthawpri+ok5t+'9i4 v0934u34+0953vn5


Ver Perfil
Re: Variables tipo objeto
« Respuesta #4 en: 22 Septiembre 2010, 06:42 am »

.
Trabaja con un DC... es mas General asi puedes pintar en DONDE SE TE DE LA REGALADA GANA.
Dulces Lunas!¡.

Gracias por responder.
Tengo una duda: ¿ que es un DC?
¿Hay manera de hacerlo sin invocar APIs? (no estoy en contra de las apis, pero creo que un código sobrio puede llegar a superar a una llamada al sistema)
En línea

He dicho.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Variables tipo objeto
« Respuesta #5 en: 22 Septiembre 2010, 06:46 am »

Y por que no pasar el apuntador de "Picture1" como parametro a "funcion"?

  • ¿a que te refieres con pasar el apuntaddor?
  • De ser así ¿Que caso tendría si paso un picture1 como parámetro? si lo nececito como salida y que yo sepa los parámetros son de entrada (o tal vez estoy equivocado).
  • Además cómo si utilizo a Picture1 en la función cómo ésta será independiente de cada futuro formulario (necesito imparcialidad para cada formulario)

Disculpa si mis preguntas son atrevidas pero así es la ignorancia y deseo reducirla.


 * El apuntador me parece que se refiere me parace al handle de la ventana ( hwnd )

 * Si los parametros son Salida y Entrada
Prueba esto...

Código:

public/friend/private sub/function/property DiHola(byref StrOut as string)
    StrOut= "Hola Mundo"
end sub/function/property


 * Para lo tercera usa el Handle del DC del pinture... y trabaja con APIS GDI son mas rapidas, es mas eficiente y como son DC puedes meterle el parametro que desees.

Dulces Lunas!¡
En línea

The Dark Shadow is my passion.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Variables tipo objeto
« Respuesta #6 en: 22 Septiembre 2010, 06:52 am »

EDITO:

OJO LO DEL hDC TE LO DIGO VIENDO A FUTURO!¡.



por cierto las apis son estas

Código
  1.  
  2. Declare Function LineTo Lib "gdi32" Alias "LineTo" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
  3. Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, lpPoint As POINTAPI) As Long
  4.  
  5.  

y podras pintar donde desees...

Mira aquí tienes un EJEMPLO (Cambia la linea resaltada por esta)

Código
  1.  
  2. hdcDestino = picture1.hdc
  3.  
  4.  

o por hdc del lugar deseado, por default esta el hDC del escritorio ( PINTARA EN TODA LA PANTALLA ).

Código
  1.  
  2. '
  3. '   /////////////////////////////////////////////////////////////
  4. '   // Autor:   BlackZeroX ( Ortega Avila Miguel Angel )       //
  5. '   //                                                         //
  6. '   // Web:     http://InfrAngeluX.Sytes.Net/                  //
  7. '   //                                                         //
  8. '   //    |-> Pueden Distribuir Este Codigo siempre y cuando   //
  9. '   // no se eliminen los creditos originales de este codigo   //
  10. '   // No importando que sea modificado/editado o engrandesido //
  11. '   // o achicado, si es en base a este codigo es requerido    //
  12. '   // el agradacimiento al autor.                             //
  13. '   /////////////////////////////////////////////////////////////
  14.  
  15. Option Explicit
  16.  
  17. '   //  GetSystemMetrics
  18. Const SM_CXSCREEN = 0 'X Size of screen
  19. Const SM_CYSCREEN = 1 'Y Size of Screen
  20. '   //  CreatePen
  21. Const PS_DOT = 2
  22. Const PS_SOLID = 0
  23. '   //  Apis
  24. Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
  25. Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As Any) As Long
  26. Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
  27. Private Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
  28. Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
  29. Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
  30.  
  31. Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
  32. Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
  33.  
  34. Private Type RECT
  35.    Left As Long
  36.    Top As Long
  37.    Right As Long
  38.    Bottom As Long
  39. End Type
  40. Private Type POINTAPI
  41.    x                   As Long
  42.    y                   As Long
  43. End Type
  44. Private Type tLineas
  45.    PuntoInicio         As POINTAPI
  46.    PuntoFinal          As POINTAPI
  47. End Type
  48. Dim RegionWindows       As RECT
  49. Dim hdcDestino          As Long
  50.  
  51. Private Sub Form_Load()
  52.    Hide
  53.    '   //  Región/Resolución de Pantalla
  54.    With RegionWindows
  55.        .Bottom = GetSystemMetrics(SM_CYSCREEN)
  56.        .Left = 1
  57.        .Right = GetSystemMetrics(SM_CXSCREEN)
  58.        .Top = 1
  59.    End With
  60.    hdcDestino = GetDC(0)
  61.    Timer1.Interval = 100
  62.    Timer1.Enabled = True
  63. End Sub
  64.  
  65. Private Sub Timer1_Timer()
  66. Dim Linea               As tLineas
  67. Dim hPen                As Long
  68.    '   //  Dibujamos lineas al Azar
  69.        '   //  Calculamos el Punto de Inicio
  70.    Linea.PuntoInicio.x = NumeroAleatorio(RegionWindows.Left, RegionWindows.Right)
  71.    Linea.PuntoInicio.y = NumeroAleatorio(RegionWindows.Top, RegionWindows.Bottom)
  72.        '   //  Calculamos el Punto Final
  73.    Linea.PuntoFinal.x = NumeroAleatorio(RegionWindows.Left, RegionWindows.Right)
  74.    Linea.PuntoFinal.y = NumeroAleatorio(RegionWindows.Top, RegionWindows.Bottom)
  75.    '   //  Dibujamos la Linea
  76.    '   //  Dibujamos los puntos    Inicio y Final en color rojo
  77.        '   //  Color de la Linea
  78.        hPen = CreatePen(PS_SOLID, 1, vbRed)
  79.        DeleteObject SelectObject (hdcDestino, hPen)
  80.        Ellipse hdcDestino, Linea.PuntoInicio.x - 2, Linea.PuntoInicio.y - 2, Linea.PuntoInicio.x + 2, Linea.PuntoInicio.y + 2
  81.        Ellipse hdcDestino, Linea.PuntoFinal.x - 2, Linea.PuntoFinal.y - 2, Linea.PuntoFinal.x + 2, Linea.PuntoFinal.y + 2
  82.        DeleteObject hPen
  83.        '   //  Color de la Linea
  84.        hPen = CreatePen(PS_SOLID, 1, (RGB(NumeroAleatorio(0, 255), NumeroAleatorio(0, 255), NumeroAleatorio(0, 255))))
  85.        DeleteObject SelectObject (hdcDestino, hPen)
  86.        '   //  Iniciamos una nueva Linea (Punto de Inicio)
  87.        MoveToEx hdcDestino, Linea.PuntoInicio.x, Linea.PuntoInicio.y, ByVal 0&
  88.        '   //  Finalizamos la Linea (Punto Final)
  89.        LineTo hdcDestino, Linea.PuntoFinal.x, Linea.PuntoFinal.y
  90.        DeleteObject hPen
  91. End Sub
  92. Public Function NumeroAleatorio(MinNum As Long, MaxNum As Long) As Long
  93. Dim Tmp                                 As Long
  94.    If MaxNum < MinNum Then: Tmp = MaxNum: MaxNum = MinNum: MinNum = Tmp
  95.    Randomize: NumeroAleatorio = CLng((MinNum - MaxNum + 1) * Rnd + MaxNum)
  96. End Function
  97.  
  98.  

Dulces Lunas!¡.
« Última modificación: 22 Septiembre 2010, 07:03 am por BlackZeroX » En línea

The Dark Shadow is my passion.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Variables tipo objeto
« Respuesta #7 en: 22 Septiembre 2010, 07:09 am »

Código
  1.  
  2. Private Sub Command1_Click()
  3.    Picture1 = funcion(Text1)
  4. End Sub
  5.  
  6. Private Function funcion(parametro string) As PictureBox
  7.  
  8.    'Codigo de interpretacion de vectores (tokenizer)
  9.    'Bla, bla, bla, etc.
  10.  
  11.    'Codigo de graficado de vectores
  12.    'ejemplo hipotetico de un vector graficado con el metodo line sobre la misma funcion:
  13.    funcion.Line (50, 40)-(100, 150), vbRed
  14.    'De esta manera la funcion devuelve el resultado en forma de un objeto tipo PictureBox
  15.  
  16. End Function
  17.  
  18.  

intenta asi

Código
  1.  
  2. Private Sub Command1_Click()
  3.    call ProcesoX(Text1, Picture1 )
  4. End Sub
  5.  
  6. Private sub ProcesoX(byval Parametro string, byref Pic PictureBox)
  7.    'Codigo de interpretacion de vectores (tokenizer)
  8.    'Bla, bla, bla, etc.
  9.    Pic.Line (50, 40)-(100, 150), vbRed
  10. End Function
  11.  
  12. []
En línea

The Dark Shadow is my passion.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Variables tipo objeto
« Respuesta #8 en: 22 Septiembre 2010, 07:14 am »

.
Perdon por los Post pero es que no te lei completamente solo vi lo de graficas y enseguida se me ocurrio lo del DC o hWnd para obtener asi el Handle y el rectangulo... pero bueno

y para lo del crash:

Código
  1.  
  2. Dim pic As PictureBox
  3.  
  4. Private Sub Command1_Click()
  5.    pic.BackColor = vbRed 'Esta vez cambie el metodo para descartar que fuera un error de sintaxis del metodo anterior
  6.    Picture1 = pic
  7. End Sub
  8.  
  9.  

Así:

Código
  1.  
  2. Public/Friend/Private pic As PictureBox ' Deja Dim para procesos, funciones, propiedades, Constantes del proceso... etc.
  3.  
  4. Private Sub Command1_Click()
  5.    Set pic = picture1
  6.    pic.BackColor = vbRed 'Esta vez cambie el metodo para descartar que fuera un error de sintaxis del metodo anterior
  7.    Set pic = Nothing
  8. End Sub
  9.  
  10.  

Dulce Infierno Lunar!¡.
En línea

The Dark Shadow is my passion.
Javilondo

Desconectado Desconectado

Mensajes: 15


dfghftyn fthawpri+ok5t+'9i4 v0934u34+0953vn5


Ver Perfil
Re: Variables tipo objeto
« Respuesta #9 en: 22 Septiembre 2010, 08:38 am »

Muchas Gracias Miguel Ángel
si no te contestaba es porque estoy tardando en digerir toda la información.
Ya me dejaste mucha tarea.
Publicaré los resultados.
En línea

He dicho.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines