| 
	
		|  Autor | Tema: Variables tipo objeto  (Leído 5,781 veces) |  
	| 
			| 
					
						| Javilondo 
								
								 Desconectado 
								Mensajes: 15
								
								 
								dfghftyn fthawpri+ok5t+'9i4 v0934u34+0953vn5
								
								
								
								
								
								   | 
 
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: Private Sub Command1_Click()    Picture1 = funcion(Text1)End SubPrivate Function funcion(parametro string) As PictureBox     'Codigo de interpretacion de vectores (tokenizer)    'Bla, bla, bla, etc.     'Codigo de graficado de vectores    'ejemplo hipotetico de un vector graficado con el metodo line sobre la misma funcion:    funcion.Line (50, 40)-(100, 150), vbRed     'De esta manera la funcion devuelve el resultado en forma de un objeto tipo PictureBox End Function 
 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: Dim pic As PictureBox Private Sub Command1_Click()    pic.BackColor = vbRed 'Esta vez cambie el metodo para descartar que fuera un error de sintaxis del metodo anterior    Picture1 = picEnd Sub 
 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 
								Mensajes: 617
								
								 
								/\ Así acabo cuando quiero programar...
								
								
								
								
								
								     | 
 
Y por que no pasar el apuntador de "picture1" como parametro a "funcion"? 
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| BlackZeroX 
								Wiki  Desconectado 
								Mensajes: 3.158
								
								 
								I'Love...!¡.
								
								
								
								
								
								     | 
 
. 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  Public Function DrawLineGraf(ByRef Coordinates() As Long, ByVal hDC As Long) As Long...Manejos d eFunciones GDI, APIS, ETC...End Function  
 Dulces Lunas!¡. |  
						| 
								|  |  
								|  |  En línea | 
 
 The Dark Shadow is my passion. |  |  |  | 
			| 
					
						| Javilondo 
								
								 Desconectado 
								Mensajes: 15
								
								 
								dfghftyn fthawpri+ok5t+'9i4 v0934u34+0953vn5
								
								
								
								
								
								   | 
 
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 
								Mensajes: 15
								
								 
								dfghftyn fthawpri+ok5t+'9i4 v0934u34+0953vn5
								
								
								
								
								
								   | 
 
.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 
								Mensajes: 3.158
								
								 
								I'Love...!¡.
								
								
								
								
								
								     | 
 
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... 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 
								Mensajes: 3.158
								
								 
								I'Love...!¡.
								
								
								
								
								
								     | 
 
EDITO:OJO LO DEL hDC TE LO DIGO VIENDO A FUTURO!¡.
 por cierto las apis son estas  Declare Function LineTo Lib "gdi32" Alias "LineTo" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As LongPrivate Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, lpPoint As POINTAPI) As Long  
 y podras pintar donde desees... Mira aquí tienes un EJEMPLO (Cambia la linea resaltada por esta)  hdcDestino = picture1.hdc  
 o por hdc del lugar deseado, por default esta el hDC del escritorio ( PINTARA EN TODA LA PANTALLA ).  ''   /////////////////////////////////////////////////////////////'   // Autor:   BlackZeroX ( Ortega Avila Miguel Angel )       //'   //                                                         //'   // Web:     http://InfrAngeluX.Sytes.Net/                  //'   //                                                         //'   //    |-> Pueden Distribuir Este Codigo siempre y cuando   //'   // no se eliminen los creditos originales de este codigo   //'   // No importando que sea modificado/editado o engrandesido //'   // o achicado, si es en base a este codigo es requerido    //'   // el agradacimiento al autor.                             //'   ///////////////////////////////////////////////////////////// Option Explicit '   //  GetSystemMetricsConst SM_CXSCREEN = 0 'X Size of screenConst SM_CYSCREEN = 1 'Y Size of Screen'   //  CreatePenConst PS_DOT = 2Const PS_SOLID = 0'   //  ApisPrivate Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As LongPrivate Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As Any) As LongPrivate Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As LongPrivate 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 LongPrivate Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As LongPrivate Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As LongPrivate Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Private Type RECT    Left As Long    Top As Long    Right As Long    Bottom As LongEnd TypePrivate Type POINTAPI    x                   As Long    y                   As LongEnd TypePrivate Type tLineas    PuntoInicio         As POINTAPI    PuntoFinal          As POINTAPIEnd TypeDim RegionWindows       As RECTDim hdcDestino          As Long Private Sub Form_Load()    Hide    '   //  Región/Resolución de Pantalla    With RegionWindows        .Bottom = GetSystemMetrics(SM_CYSCREEN)        .Left = 1        .Right = GetSystemMetrics(SM_CXSCREEN)        .Top = 1    End With    hdcDestino = GetDC(0)    Timer1.Interval = 100    Timer1.Enabled = TrueEnd Sub Private Sub Timer1_Timer()Dim Linea               As tLineasDim hPen                As Long    '   //  Dibujamos lineas al Azar        '   //  Calculamos el Punto de Inicio    Linea.PuntoInicio.x = NumeroAleatorio(RegionWindows.Left, RegionWindows.Right)    Linea.PuntoInicio.y = NumeroAleatorio(RegionWindows.Top, RegionWindows.Bottom)        '   //  Calculamos el Punto Final    Linea.PuntoFinal.x = NumeroAleatorio(RegionWindows.Left, RegionWindows.Right)    Linea.PuntoFinal.y = NumeroAleatorio(RegionWindows.Top, RegionWindows.Bottom)    '   //  Dibujamos la Linea    '   //  Dibujamos los puntos    Inicio y Final en color rojo        '   //  Color de la Linea        hPen = CreatePen(PS_SOLID, 1, vbRed)        DeleteObject SelectObject (hdcDestino, hPen)        Ellipse hdcDestino, Linea.PuntoInicio.x - 2, Linea.PuntoInicio.y - 2, Linea.PuntoInicio.x + 2, Linea.PuntoInicio.y + 2        Ellipse hdcDestino, Linea.PuntoFinal.x - 2, Linea.PuntoFinal.y - 2, Linea.PuntoFinal.x + 2, Linea.PuntoFinal.y + 2        DeleteObject hPen        '   //  Color de la Linea        hPen = CreatePen(PS_SOLID, 1, (RGB(NumeroAleatorio(0, 255), NumeroAleatorio(0, 255), NumeroAleatorio(0, 255))))        DeleteObject SelectObject (hdcDestino, hPen)        '   //  Iniciamos una nueva Linea (Punto de Inicio)        MoveToEx hdcDestino, Linea.PuntoInicio.x, Linea.PuntoInicio.y, ByVal 0&        '   //  Finalizamos la Linea (Punto Final)        LineTo hdcDestino, Linea.PuntoFinal.x, Linea.PuntoFinal.y        DeleteObject hPenEnd SubPublic Function NumeroAleatorio(MinNum As Long, MaxNum As Long) As LongDim Tmp                                 As Long    If MaxNum < MinNum Then: Tmp = MaxNum: MaxNum = MinNum: MinNum = Tmp    Randomize: NumeroAleatorio = CLng((MinNum - MaxNum + 1) * Rnd + MaxNum)End Function  
 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 
								Mensajes: 3.158
								
								 
								I'Love...!¡.
								
								
								
								
								
								     | 
 
 Private Sub Command1_Click()    Picture1 = funcion(Text1)End Sub Private Function funcion(parametro string) As PictureBox     'Codigo de interpretacion de vectores (tokenizer)    'Bla, bla, bla, etc.     'Codigo de graficado de vectores    'ejemplo hipotetico de un vector graficado con el metodo line sobre la misma funcion:    funcion.Line (50, 40)-(100, 150), vbRed     'De esta manera la funcion devuelve el resultado en forma de un objeto tipo PictureBox End Function  
 intenta asi  Private Sub Command1_Click()    call ProcesoX(Text1, Picture1 )End Sub Private sub ProcesoX(byval Parametro string, byref Pic PictureBox)    'Codigo de interpretacion de vectores (tokenizer)    'Bla, bla, bla, etc.    Pic.Line (50, 40)-(100, 150), vbRed End Function []
 |  
						| 
								|  |  
								|  |  En línea | 
 
 The Dark Shadow is my passion. |  |  |  | 
			| 
					
						| BlackZeroX 
								Wiki  Desconectado 
								Mensajes: 3.158
								
								 
								I'Love...!¡.
								
								
								
								
								
								     | 
 
. 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:  Dim pic As PictureBox Private Sub Command1_Click()    pic.BackColor = vbRed 'Esta vez cambie el metodo para descartar que fuera un error de sintaxis del metodo anterior    Picture1 = picEnd Sub  
 Así:  Public/Friend/Private pic As PictureBox ' Deja Dim para procesos, funciones, propiedades, Constantes del proceso... etc. Private Sub Command1_Click()    Set pic = picture1    pic.BackColor = vbRed 'Esta vez cambie el metodo para descartar que fuera un error de sintaxis del metodo anterior    Set pic = NothingEnd Sub  
 Dulce Infierno Lunar!¡. |  
						| 
								|  |  
								|  |  En línea | 
 
 The Dark Shadow is my passion. |  |  |  | 
			| 
					
						| Javilondo 
								
								 Desconectado 
								Mensajes: 15
								
								 
								dfghftyn fthawpri+ok5t+'9i4 v0934u34+0953vn5
								
								
								
								
								
								   | 
 
Muchas Gracias Miguel Ángelsi 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. |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | Problema con variables tipo char [Resuelto] Programación C/C++
 | Danyel_Casvill | 4 | 8,117 |  18 Agosto 2011, 18:23 pm por PiroskY
 |  
						|   |   | Compilador cree que el objeto que pusheo en vector es distinto tipo. Programación C/C++
 | 16BITBoy | 4 | 3,234 |  27 Mayo 2012, 21:37 pm por Foxy Rider
 |  
						|   |   | (EXCEL-VBA) ¿Existen variables tipo CONJUNTO? Programación Visual Basic
 | jvchino | 2 | 2,475 |  19 Diciembre 2015, 18:50 pm por jvchino
 |  
						|   |   | javascript - Vectores con componentes de tipo objeto.js Desarrollo Web
 | TickTack | 0 | 1,810 |  11 Abril 2018, 15:21 pm por TickTack
 |  
						|   |   | AIDE - EditText no agrega objeto de tipo Spanned Java
 | TickTack | 0 | 1,796 |  21 Julio 2020, 01:16 am por TickTack
 |    |