Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - BlackZeroX

#1761
Cita de: F3B14N en 24 Noviembre 2010, 16:39 PM
Hay 2 apis nativas @NTDLL para hacer lo mismo  :-*

Podrias poner aun que sea el nombre de dichas APIS... espero que te refieras a las que permitan multilinea... no lo creo pero bueno xP

Dulces Lunas!¡.
#1762
.
Efecto Matrix

Sangriento Infierno Lunar!¡.
#1763

Las enumeraciones son automaticas...

Código (Vb) [Seleccionar]


option explicit

Enum EOpciones
    [ Enumeración uno ] = 0
    [ Enumeración Dos ]
    [ Enumeración Tres ]
    [ Enumeración Cuatro ]
end Enum

private sub Form_Load()
    msgbox ProcesoN (EOpciones.[ Enumeración Cuatro ])
end sub

Friend/Public/private/property (Get/Let/Set) funtion/Sub ProcesoN (byval opcion  as EOpciones) as long
    '   //  ... N Procesos..
    ProcesoN= 0& + opcion
end Friend/Public/private/property



Las estructuras en ocasiones es nesesitan que hagan mas por ello se usa "Property (Get/Let/Set)" en una clase o en el form X, y si la estructura se usa dentro de la misma se usa el indicador "Friend"

Dulces Lunas!¡.
#1764
GetParent()

Antes de incrustarlo guarda el Origen (Hwnd Origen con GetPArent()).

Dulce Infierno Lunar!¡.
#1765
Cita de: flix21 en 21 Noviembre 2010, 22:20 PM
me sigue dando el mismo error,
error '424' en tiempo de ejecución se requiere un objeto,
If nombrecogido = Text5.Text Then.
gracias

ya vi por donde va todo esto...

Existe el objecto Text5?

Dulces Lunas!¡.
#1766
Programación Visual Basic / Re: una pregunta--
22 Noviembre 2010, 07:15 AM
Cita de: kiragundam en 21 Noviembre 2010, 20:55 PM
Dando n cantidad de productos calcule la suma aplique el iva si este es menor a 260 aplique 5% de descuento si va entre 260 y 500 aplique 8% si es mayor a 500 aplique 10%  de descuento y gana obsequio mostrar ademas cuantos productos hay menors ah a 50  y entre 50 y 120  y mayores q 120  usando un ciclo for las salidas y entradas deben mostrarse en un listbox agregar un boton para desplazar a otro formulario

Odio hacer siempre lo que quiere el profesor a su manera (lo resaltado), siempre salgo con otro metodo mas factible (puntos a mi favor) y defiendo como león herido ( doy Pros y contras ).

P.D.: Nunca he reprovado.




Aprende .NET hay esta el $$$ pero por hobby aprende cualquier otro lenguaje, quien sabe VB6 solo han dicho y dicen que ya no será soportado... pero en vb .net tiene dicho soporte, aun que cambien algunas cosas solo son minimas (Sin contar .NET ojo).

Sangriento Infierno Luanr!¡.
#1767
Aquí va una explicacion de como trabaja VB6, solo lo voy a abreviar, lo voy a extender en la wiki alrato.

ANTES QUE ANDA la evaluación en VB6 trabaja de IZQUIERDA a Derecha...

El overflow ("Error 6 en tiempo de ejecución") del siguiente codigo:

Código (Vb) [Seleccionar]


Private Sub Form_Load()
    Dim aa As Byte, bb As Byte, r As Integer
    aa = 2
    bb = 58
    r = aa - bb
End Sub



Dicho error, se debe a que se crea una variable temporal del mismo tipo del 1er elemento de la expresion matematica en este caso es byte, trabaja similar a C con respecto al casting de tipos, esto tiene un nombre que me parece tenia algo que ver con conversion forzada, este proceso tiene un nombre, pero no recuerdo cual era xP.

Una de las muchas Soluciones, seria la siguiente:
Código (Vb) [Seleccionar]


Private Sub Form_Load()
    Dim aa As Byte, bb As Byte, r As Integer
    aa = 2
    bb = 58
    r = (0% + aa) - bb
End Sub



Donde se empesaria a trabajar de la siguiente manera:
(sabiendo como evaluacia vb6 las expresiones)

OJO: En el Paso 1 se hace una prevension al OverFlow, Los parentesis son solo de forma preventiva y/o entendible

1ero:
* Se suma (0% + aa) ---> [/b] Se hace un casting ( Conversion al tipo de datos ).

2do:
* Se evalua el resultado del anterior (1er Paso) con la siguiente expresion es decir - bb y se almacena finalmente el resultado

En forma entendieble trabaria haci:

Código (Vb) [Seleccionar]

vartmp1 = (0% + aa)  ' // Aqui se hace la prevencion del OverFlow es decir se convierte a Integer (0%)
vartmp2 = vartmp1 - bb
r = vartmp2



P.D.: Para saber que significa "%" en el 0 ( 0% ) lee lo que he escrito en la wiki.
4 - [Nociones básicas]
* Es decir que si fuera la variable r de tipo Long hubera usado % en lugar de %, (Aun que no afecta mucho que digamos...).

NOTA: De forma predeterminada se pone el 0 del tipo % ( Integer; Por lo cuel el IDE de vb6 lo elimina, caso omiso ante los demás tipos de variables que no hace lo mismo ), solo lo he agregado aquí para la redaccion logica del mismo.

Sangriento Infierno Lunar!¡.
#1768
Indenta tu codigo, pegalo con las etiquetas geshi en "vb"

[code=vb][/code]

Despues revisa atentamente tu estructura y plantea adecuadamente el problema, esto lo digo por que da peresa leer este codigo asi.

Dulces Lunas!¡.
#1769
Cita de: Mr. Frog © en 20 Noviembre 2010, 16:21 PM
.
Vhn puedes utilizar mi clase cCollectionEx.cls; te puede ser útil para comprobar elementos repetidos y demás... (si es que lo necesitas)
Black, creo que ahora te gano ::)


Mi codigo verifica elementos repetidos sin tu clase... ¬¬" que no te has fijado en eso?... ademas tiene la optativa de ordenar el arreglo. ¬¬", lo bueno te tu funcion es que hace corrovoracion de muchos a muchos con este problema, lo malo de la mia es que no lo hace asi, es decir esta secuencia  2,2,2,3,2,2

Corregido ahora si lo hacepta solo era agregar Or Lng_ResNumber& < 0 en:


Código (vb,20) [Seleccionar]


Public Function GetSimplificNumbers(ByRef ArrayOfNumbers() As Variant) As String()
If (Not ArrayOfNumbers) = -1 Then Exit Function     '   //  Array entrante, inicializado?.
Dim Lng_ArrayTmp$()                                 '   //  Colección de Números Simplificados!¡.
Dim Lng_Ini&, Lng_End&, Lng_Index&                  '   //  Variables para el Bucle.
Dim Lng_AntPosNumber&                               '   //  Indice del Numero anterior (Numero del Array entrante).
Dim Lng_ResNumber&                                  '   //  residuo de Lng_Index& - Lng_AntPosNumber&.
Dim Lng_ArrayCount&                                 '   //  Contador de las dimensiones de Lng_ArrayTmp$.
Dim Bool_Swith                  As Boolean          '   //  swith para saber si se debe simplificar!¡.

    'Call Start_QuickSort(ArrayOfNumbers(), AcendetOrder)    '   //  http://infrangelux.sytes.net/Blog/index.php?option=com_content&view=article&id=14:artquicksortybublesort&catid=2:catprocmanager&Itemid=8
   
    Lng_Ini = LBound(ArrayOfNumbers):   Lng_End = UBound(ArrayOfNumbers)
    If Not isnumber(ArrayOfNumbers(Lng_Ini)) Then Exit Function
    ReDim Lng_ArrayTmp$(Lng_ArrayCount&)
    Lng_ArrayTmp$(Lng_ArrayCount&) = ArrayOfNumbers(Lng_Index&)

    For Lng_Index& = Lng_Ini + 1 To Lng_End
        Lng_ResNumber& = ArrayOfNumbers(Lng_Index&) - ArrayOfNumbers(Lng_Index& - 1)
        If Lng_ResNumber& > 1 Then








CitaGetSimplificNumbers



Solo es un simple algoritmo para simplificación de números en un array!¡.



la idea es ingresar números y qué los Simplifique, es decir 1,2,3,4,5,9,10,15,16,17,18,555,342,423,422 los ordena de la siguiente manera:

1~5,9,10,15~18,555,342,423,422

Código (Vb) [Seleccionar]


Private Sub Form_Load()
Dim arr()               As Variant
Dim Element             As Variant
    arr() = Array(1, 2, 2, 2, 3, 3, 3, 5, 5, 3, 3, 9, 10, 10, 10, 10, 11, 12, 12, 13, 15, 16, 17, 18, 555, 342, 423, 422, 415, 416, 417)
    For Each Element In GetSimplificNumbers(arr())
        Debug.Print Element
    Next
End Sub



Código (vb,32) [Seleccionar]

'
'   /////////////////////////////////////////////////////////////
'   // Autor:   BlackZeroX ( Ortega Avila Miguel Angel )       //
'   //                                                         //
'   // Web:     http://InfrAngeluX.Sytes.Net/                  //
'   //                                                         //
'   //    |-> Pueden Distribuir Este Código siempre y cuando   //
'   // no se eliminen los créditos originales de este código   //
'   // No importando qué sea modificado/editado o engrandecido //
'   // o achicado, si es en base a este código                 //
'   /////////////////////////////////////////////////////////////
Option Explicit

Public Function GetSimplificNumbers(ByRef ArrayOfNumbers() As Variant) As String()
If (Not ArrayOfNumbers) = -1 Then Exit Function     '   //  Array entrante, inicializado?.
Dim Lng_ArrayTmp$()                                 '   //  Colección de Números Simplificados!¡.
Dim Lng_Ini&, Lng_End&, Lng_Index&                  '   //  Variables para el Bucle.
Dim Lng_AntPosNumber&                               '   //  Indice del Numero anterior (Numero del Array entrante).
Dim Lng_ResNumber&                                  '   //  residuo de Lng_Index& - Lng_AntPosNumber&.
Dim Lng_ArrayCount&                                 '   //  Contador de las dimensiones de Lng_ArrayTmp$.
Dim Bool_Swith                  As Boolean          '   //  swith para saber si se debe simplificar!¡.

    'Call Start_QuickSort(ArrayOfNumbers(), AcendetOrder)    '   //  http://infrangelux.sytes.net/Blog/index.php?option=com_content&view=article&id=14:artquicksortybublesort&catid=2:catprocmanager&Itemid=8
   
    Lng_Ini = LBound(ArrayOfNumbers):   Lng_End = UBound(ArrayOfNumbers)
    If Not isnumber(ArrayOfNumbers(Lng_Ini)) Then Exit Function
    ReDim Lng_ArrayTmp$(Lng_ArrayCount&)
    Lng_ArrayTmp$(Lng_ArrayCount&) = ArrayOfNumbers(Lng_Index&)

    For Lng_Index& = Lng_Ini + 1 To Lng_End
        Lng_ResNumber& = ArrayOfNumbers(Lng_Index&) - ArrayOfNumbers(Lng_Index& - 1)
        If Lng_ResNumber& > 1 Or Lng_ResNumber& < 0 Then
            If Bool_Swith Then
                If Lng_AntPosNumber& > 2 Then
                    Lng_ArrayTmp$(Lng_ArrayCount&) = Lng_ArrayTmp$(Lng_ArrayCount&) & "~" & ArrayOfNumbers(Lng_Index& - 1)
                Else
                    Lng_ArrayCount& = Lng_ArrayCount& + 1
                    ReDim Preserve Lng_ArrayTmp$(Lng_ArrayCount&)
                    Lng_ArrayTmp$(Lng_ArrayCount&) = ArrayOfNumbers(Lng_Index& - 1)
                End If
            End If
            Lng_ArrayCount& = Lng_ArrayCount& + 1
            ReDim Preserve Lng_ArrayTmp$(Lng_ArrayCount&)
            Lng_ArrayTmp$(Lng_ArrayCount&) = ArrayOfNumbers(Lng_Index&)
            Bool_Swith = False
        ElseIf Lng_ResNumber& = 1 Then
            If Not Bool_Swith Then Lng_AntPosNumber& = 0
            Bool_Swith = True
            If Lng_Index& = Lng_End Then
                If Conversion.CBool(InStr(1, Lng_ArrayTmp$(Lng_ArrayCount& - 1), "~")) Then
                    Lng_ArrayCount& = Lng_ArrayCount& + 1
                    ReDim Preserve Lng_ArrayTmp$(Lng_ArrayCount&)
                    Lng_ArrayTmp$(Lng_ArrayCount&) = ArrayOfNumbers(Lng_Index&)
                Else
                    Lng_ArrayTmp$(Lng_ArrayCount&) = Lng_ArrayTmp$(Lng_ArrayCount&) & "~" & ArrayOfNumbers(Lng_Index&)
                End If
            Else
                Lng_AntPosNumber& = Lng_AntPosNumber& + 1
            End If
        ElseIf Lng_ResNumber& = 0 Then
            If Lng_AntPosNumber& > 0 Then
                Lng_AntPosNumber& = Lng_AntPosNumber& + 1
            Else
                Lng_AntPosNumber& = 0
            End If
        End If
    Next
    GetSimplificNumbers = Lng_ArrayTmp$
End Function



Dulces Lunas!¡.
#1770
Agrega otro campo que relacione por categorias es decir

Para que quede asi:

Codigo | Producto |      Fecha        | Observacion
     1         Prod.1       25/09/2010        Ninguna
     2         Prod.2       25/09/2010        Ninguna   
     3         Prod.3       25/09/2010        Reservado
     5       =======   25/09/2010       ========
     4         Prod.4       26/09/2010        Ninguna

Deberas agregar otro campo en tu BDD  como es: Agrupacion

Codigo | Producto |      Fecha        | Observacion    |  Agrupacion
     1         Prod.1       25/09/2010        Ninguna                1
     2         Prod.2       25/09/2010        Ninguna                1
     3         Prod.3       25/09/2010        Reservado             1
     5       =======   25/09/2010       ========               0
     4         Prod.4       26/09/2010        Ninguna                 2

Obviamente en agrupacion pones numeros para que te sea factible lo que pides, y en el ListView o DataGrid o sepa Chachito donde los imprimas, No imprimes hay dicho campo solo te ayudaria a ti en lo que deseas.

Es una forma basica y simple, en mi caso no agregaria dicha linea separador por espacio en la BDD aun que hay otra obtativa y es esta:

Creas una tabla de configuracion

ID   |   Range
0         1-5,8
1         6,7,10-20
...
N        {N,N2,Nx-Nn}

* Es decir que los registro desde 1 hasta 5 y 8,  son un grupo
* El siguiente registro es decir 6,7,10 hasta el 20 es otro grupo

Es decir: Cada registro es un grupo y estaria delimitado por tu linea que deberas programar por codigo mas no registrar en la BDD por que seria BASURA, en una BDD gorda de datos este metodo es mas factible que el 1ero, por su simplicidad y reduccion de datos en la misma.

OJO PRECAUCIÓN: Este metodo de relacion de uno a muchos o muchos a muchos, asi que tu codigo de registro debera ser de precision de lo contrario crearas relaciones de muchos a muchos si es que no tienes delimitado tus bases, la ventaja que es Maniobrable /Dinamico la Desventaja que si usas PL/SQL seria mejor usar la 1ra optativa...

* Donde el campo Range es un campo tipo string que dice de forma simplificada un rango dicho:

Puedes usar esta funcion para generar dichos rangos;

GetSimplificNumbers

[SRC] Abbreviate_Numeric_Array [by *PsYkE1] <-- Trae la funcion para desabreviar = sirve para mi funcion ya que lo rete a hacer dicha funcion de simplificación.

Ojo si usas este 2da alternativa entonces el campo Agrupacion de la 1ra solucion se desecharia...

Cabe mencionar que esta segunda forma es mas liviana para la BDD y no ocuparia tanto espacio y eso es lo que se busca en una BDD la primera tiene patrones que se pueden omitir con este 2do metodo.

P.D.: lo siento por las faltas de ortografia xP.

Sangriento Infierno Lunar!¡.