• Domingo 22 de Diciembre de 2024, 11:18

Autor Tema:  [peticion] Asignar Valores A Propiedades  (Leído 1287 veces)

wakowarner

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
[peticion] Asignar Valores A Propiedades
« en: Jueves 6 de Enero de 2005, 23:57 »
0
Estoy desesperado!!!
Necesito de su ayuda para asignar las propiedades a un control que estoy haciendo.
tengo un control llamado VSG, este control tiene como trompecientas propiedades, muchas muy semejantes que se diferencia solo por un numero, hasta aqui todo bien, ahora tambien tengo un timer que refresca el valor de dichas propiedades para cada control (este control es un array), el problema es que esta funcion hace un ciclo for para actualizar cada propiedad y segun el nombre de una etiqueta el programa decide a que propiedad se asigna el valor, pero como hay varias parecidas quisiera que con una sentencia IF instr("nombre parcial de la tag", decida a que propiedad se asigne el valor, les pongo parte de la rutina resumida para que vean de que hablo

Código: Text
  1.  
  2.     For i = 1 To OPCGroupItemsCls.Count
  3.         Set OPCItemToUpdate = OPCGroupItemsCls.Item(Str(i))
  4.        
  5.         ItemValue = OPCItemToUpdate.GetItemValue(1)
  6.         ItemID = OPCItemToUpdate.GetItemID
  7.        
  8.         Call FindRoute(ItemID, IDChannel, IDDevice, IDTag)
  9.         For j = 1 To VSGIndex
  10.             If VSG(j).Channel = IDChannel And VSG(j).Device = IDDevice Then
  11.                 Select Case IDTag
  12.                 Case "Mach"
  13.                     VSG(j).Mach = ItemValue
  14.                 Case "LampGreen"
  15.                     VSG(j).Lampgreen = ItemValue
  16.                 Case "LampRed"
  17.                     VSG(j).LampRed = ItemValue
  18.                 Case "LampAmber"
  19.                     VSG(j).LampAmber = ItemValue
  20.                 Case "DT1000"
  21.                     VSG(j).DT1000 = ItemValue
  22.                 Case "DT1001"
  23.                     VSG(j).DT1001 = ItemValue
  24.                 Case "DT1002"
  25.                     VSG(j).DT1002 = ItemValue
  26.                 Case "DT1003"
  27.                     VSG(j).DT1003 = ItemValue
  28.                 Case "DT1004"
  29.                     VSG(j).DT1004 = ItemValue
  30.                 Case "DT1005"
  31.                     VSG(j).DT1005 = ItemValue
  32.                 Case "BadWeld"
  33.                     VSG(j).Badweld = ItemValue
  34.                 Case "DropedParts"
  35.                     VSG(j).DropedParts = ItemValue
  36.                 Case "EpoxyLosses"
  37.                     VSG(j).EpoxyLosses = ItemValue
  38.                 Case "TwistedAnodes"
  39.                     VSG(j).TwistedAnodes = ItemValue
  40.                 Case "EmptyPockets"
  41.                     VSG(j).EmptyPockets = ItemValue
  42.                 Case "Case"
  43.                     Select Case ItemValue
  44.                     Case 1
  45.                         VSG(j).Size = "D"
  46.                     Case 2
  47.                         VSG(j).Size = "B"
  48.                     Case 4
  49.                         VSG(j).Size = "A"
  50.                     Case 8
  51.                         VSG(j).Size = "C"
  52.                     Case 16
  53.                         VSG(j).Size = "X"
  54.                     End Select
  55.                 Case "StopBit"
  56.                     If VSG(j).Lampgreen = False And VSG(j).ErrorCode = "" And ItemValue = True Then
  57.                         VSG(j).ErrorCode = "R166"
  58.                         VSG(j).ErrorDescription = "Stop Button Pressed"
  59.                     End If
  60.                 Case "BitLdframe"
  61.                     If Monitor = False Then
  62.                         Dim Direccion As String
  63.                         Direccion = IDChannel & "." & IDDevice
  64.                         If ItemValue = True And VSG(j).LdfrmFlag = 0 Then
  65.                             VSG(j).Leadframe = ""
  66.                             Call UpdateItem(Direccion & ".ErrLdframe", 1)
  67.                         ElseIf ItemValue = True And VSG(j).LdfrmFlag = 1 Then
  68.                             Call UpdateItem(Direccion & ".ErrLdframe", 0)
  69.                             Call UpdateItem(Direccion & ".BitLdframe", 0)
  70.                         ElseIf ItemValue = False Then
  71.                             VSG(j).LdfrmFlag = 0
  72.                         End If
  73.                     End If
  74.                 Case "Batchreset"
  75.                     If ItemValue = True Then
  76.                         Call UpdateItem(IDChannel & "." & IDDevice & ".Batchreset", 0)
  77.                     End If
  78.                 Case "BatchLoaded"
  79.                     If Monitor = False Then
  80.                         Dim Direccion1 As String
  81.                         Direccion1 = IDChannel & "." & IDDevice & ".BatchLoaded"
  82.                         If Len(VSG(j).Batch) = 0 And VSG(j).DT1002 > 0 Then
  83.                             Call UpdateItem(Direccion1, 1)
  84.                         Else
  85.                             Call UpdateItem(Direccion1, 0)
  86.                     End If
  87.                     End If
  88.                 Case "LdframeYield"
  89.                     If ItemValue < 1001 Then
  90.                         'Para no guardar un valor falso del inicio
  91.                         VSG(j).LeadFrameYield = ItemValue / 10
  92.                     End If
  93.                
  94.                 End Select
  95.  
  96.  

hay una parte donde las propiedades van desde .Welder01 hasta .Welder20 y como no quiero hacer un select quisiera hacer algo como...

[CODE]
If Instr(TAG,"Welder") then
   VSG(j).<aqui va algo> = itemvalue
endif
Citar

lo que quiero saber es si es posible hacer una coleccion con las propiedades del objeto o una especie de puntero de tal manera que el codigo sepa a que de los welder debe asignarsele el valor, no se si me explico, si quieren puedo adjuntar el archivo, aunque dudo que lo puedan hacer correr sin una API que necesita

Saludos!!

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: [peticion] Asignar Valores A Propiedades
« Respuesta #1 en: Martes 11 de Enero de 2005, 15:13 »
0
Hola wakowarner.

Así por las buenas se me ocurre que puedes definir en tu control VSG la propiedad WELDER como si de una matriz se tratase. Suponiendo, por ejemplo que el tipo de WELDER fuese long, en el control:

Código: Text
  1.  
  2. Private lWelder(20)  As Long
  3.  
  4. Public Property Let Welder(Byval Index As Integer, Byval Valor As Long)
  5.    If Index &#62;= 0 and Index &#60; 20 Then lWelder(Index) = Valor
  6. End Property
  7.  
  8. Public Property Get Welder(Byval Index As Integer) As Long
  9.    If Index &#62;= 0 and Index &#60; 20 Then Welder = lWelder(Index)
  10. End Property
  11.  
  12.  

Y ya luego, algo así:
Código: Text
  1.  
  2.    if Left(TAG, 6) = &#34;Welder&#34; Then  _
  3.    VSG(j).Welder(Val(Mid(TAG, 7))) = itemValue
  4.  
  5.  

Espero que te sirva.

Chao.

wakowarner

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: [peticion] Asignar Valores A Propiedades
« Respuesta #2 en: Martes 11 de Enero de 2005, 21:07 »
0
Funciona!!! :rolleyes:
Muchas gracias!  B)