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

#831
Vb6 trabaja de un modo Horroroso... pero ten encuenta esto...

Array (De cual quier tipo) y String sin longitud inicial seran considerados como punteros internos (en la memoria claro)...

Dulces Lunas!¡.
#832
las estructuras de C/C++ es la misma teoria que la de VB6... si las variables NO TIENEN LONGITUD por ejemplo una string... se convertira en un apuntador... me da un poco de pereza volver a explicarlo... busca un tema similar (lo explique a detalle) donde explico que onda y el por que de cada cosa...

Dulces Lunas!¡.
#833
que te dice ese error?... De manera habitual uno puede solucionar un error LEYENDO el error...
tu codigo es?...

Dulces Lunas!¡.
#834
Cita de: adastra en  9 Noviembre 2011, 19:21 PM
prefiero seguir dedicado en mis estudios (que estan enfocados en algo mucho más serio que vb6).

:xD eso espero :silbar: hare lo mismo y me ire a estudiar otros lenguajes, que como dijo WHK esto tiene pinta de FlameWar...

Dulces Lunas!¡.
#835
Cita de: adastra en  9 Noviembre 2011, 16:36 PM
Vamos a ver, lo que han preguntado es muy claro "Como se hacen los programas los profesionales?"
No han pedido clases de VB6.

Desde cuando argumentar, diferir y/o aclarar un comentario es dar una clase?... yo sabia que era defender un aspecto... si no sabes como se hace eso es TIPICO que saltes con este tipo de comentarios. Los ejemplos los pude haber puesto en C y NO IMPLICA QUE ESTE DANDO UNA CLASE ni defendiendo un lenguaje o me equivoco?.



#include <stdio.h>
#include <windows.h>
#include <WinDef.h>
#include <WinBase.h>

int main()
{
    const char FileName[] = "c:\\file.txt";
    DWORD   dwRet = 0;

    dwRet = GetFileAttributesA((LPCSTR)FileName);

    if (( dwRet & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN) {    //  se puede obviar == FILE_ATTRIBUTE_HIDDEN
        printf ("Es un archivo Invisible atributos: %d\n", dwRet);
    } else {
        printf ("Es un archivo visible atributos: %d\n", dwRet);
    }

    SetFileAttributesA ((LPCSTR)FileName, (dwRet | FILE_ATTRIBUTE_HIDDEN));
    dwRet = GetFileAttributesA((LPCSTR)FileName);

    if (( dwRet & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN) {    //  se puede obviar == FILE_ATTRIBUTE_HIDDEN
        printf ("Es un archivo Invisible atributos: %d\n", dwRet);
    } else {
        printf ("Es un archivo visible atributos: %d\n", dwRet);
    }

    SetFileAttributesA ((LPCSTR)FileName, (dwRet ^ FILE_ATTRIBUTE_HIDDEN));
    dwRet = GetFileAttributesA((LPCSTR)FileName);

    printf ("El archivo se quedo con los atributos: %d\n", dwRet);

    return EXIT_SUCCESS;
}



Si te molesta que ARGUMENTE sobre UN PUNTO ERRADO de alguien mas dando y fundamentando mi aclaracion pues ya es alguna cosa SICOTICA tuya.

Dulces Lunas!¡.
#836
con GetWindowTextW  lo estas obteniendo correctamente... seguramente tu problema es que no se imprimen... para eso DEBES SETEAR los strings como unicode... asi como en el ejemplo de seba123neo...

Lo que nesesitas es solo la funcion Unicode del ejemplo de seba123neo... pero solo sirve (al parecer) para los RichTextBox.

Dulces Lunas!¡.
#837
Cita de: WHK en  8 Noviembre 2011, 16:42 PM
Hola,

Si han cambiado bastante y por lo mismo a veces he tenido problemas con muchas funciones y he tenido que crear una especie de framework en un bas para compatibilizar funciones con xp y 7 como por ejemplo:

Código (vb) [Seleccionar]
Public Function Is_Dir(Ruta As String) As Boolean
On Error GoTo error
' El atributo en Windows XP es
' 16: Archivo normal
' 22: Unidad de almacenamiento
' El atributo en Windows 7 es
' 17: Archivo normal
' 65558: Unidad de almacenamiento
If _
  GetAttr(Ruta) = 16 Or _
  GetAttr(Ruta) = 17 Or _
  GetAttr(Ruta) = 22 Or _
  GetAttr(Ruta) = 65558 _
Then
  Is_Dir = True
Else
  Is_Dir = False
End If
Exit Function
error:
Is_Dir = False
End Function


Ahora anda a saber que valores tendrán en windows 8.

OSO OSO MENTIROSO

lo que te retorna GetAttr() y GetFileAttributes function() es lo mismo, un LONG donde albergan los atributos y para consultar dichos atributos debes hacer mascaras de bits...

UN LONG PUEDE ALBERGAR 32 ESTADOS O FLAGS y COMO ES LOGICO CONBINARLOS ENTRE SI PARA OBTENER NUEVOS ESTADOS ( hablo de un long de 32 bits... en uno de 64 puede meter 64 estados/flags y es la misma marrana solo que en otro cochinero ).

17 = FILE_ATTRIBUTE_DIRECTORY or FILE_ATTRIBUTE_READONLY
17 = 16 or 1

es decir un directorio sera FILE_ATTRIBUTE_DIRECTORY... y como es logico un directorio solo se lee... no se escribe... es por ello que es 17 ( FILE_ATTRIBUTE_DIRECTORY or FILE_ATTRIBUTE_READONLY ) un gran acierto para W$ 7...

En si lo que debes hacer CORRECTAMENTE es esto para verificar si es una carpeta (Ignorando cualquier otro atributo):

Código (vb) [Seleccionar]


Public Function exitsPath(ByRef sRuta As String) As Boolean
On Error Resume Next
    exitsPath = GetAttr(sRuta)
    Err.Clear
End Function

Public Function isDir(ByRef sRuta As String) As Boolean '// Funciona en cualquier W$
    If (exitsPath(sRuta)) Then
        isDir = ((GetAttr(sRuta) And vbDirectory) = vbDirectory)
    End If
End Function



Revisa ATENTAMENTE cada valor de las CONSTANTES y veras que CADA VALOR es un bit de un long DISTINTO... en la MSDN lo dice claramente...

Es por ello que con SetAttr() puedes pasarle combinaciones de attributos a un archivo y ademas de que ya tiene por deault el atributo de FILE_ATTRIBUTE_ARCHIVE le puedo setear tambien FILE_ATTRIBUTE_SYSTEM, FILE_ATTRIBUTE_READONLY y FILE_ATTRIBUTE_HIDDEN

de esta manera:

Código (vb) [Seleccionar]


SetAttr sRuta, FILE_ATTRIBUTE_ARCHIVE or FILE_ATTRIBUTE_SYSTEM or FILE_ATTRIBUTE_READONLY or FILE_ATTRIBUTE_HIDDEN



y GetAttr() me RETORNARA ESAS CONSTENTES EN UN SOLO valor tipo LONG y PARA COLSULTARLAS SOLO TENGO QUE APLICAR MASCARAS como ya lo he dicho anterior mente...

un ejemplo (Puedes cambiar la ruta por una carpeta o lo que quieras funciona de la misma manera):

Código (vb) [Seleccionar]


Private Sub Form_Load()
Dim sRuta       As String
    sRuta = "c:\file.txt"
    MsgBox IIf(((GetAttr(sRuta) And FILE_ATTRIBUTE_HIDDEN) = FILE_ATTRIBUTE_HIDDEN), "Es un archivo visible", "Es una rchivo Oculto")
    SetAttr sRuta, (GetAttr(sRuta) Or FILE_ATTRIBUTE_HIDDEN)     '   //  Le dejamos los atributos que ya tenia pero le agregamos el atributo oculto.
    MsgBox IIf(((GetAttr(sRuta) And FILE_ATTRIBUTE_HIDDEN) = FILE_ATTRIBUTE_HIDDEN), "Es un archivo visible", "Es una rchivo Oculto")
    SetAttr sRuta, (GetAttr(sRuta) Xor FILE_ATTRIBUTE_HIDDEN)    '   //  Le dejamos los atributos que ya tenia pero le quitamos el atributo oculto.
End Sub



y es los mismo que

Código (vb) [Seleccionar]


Private Sub Form_Load()
Dim sRuta       As String
    sRuta = "c:\file.txt"
    MsgBox IIf(((GetFileAttributes(sRuta) And vbHidden) = FILE_ATTRIBUTE_HIDDEN), "Es un archivo visible", "Es una rchivo Oculto")
    SetFileAttributes functionsRuta, (GetFileAttributes(sRuta) Or FILE_ATTRIBUTE_HIDDEN)     '   //  Le dejamos los atributos que ya tenia pero le agregamos el atributo oculto.
    MsgBox IIf(((GetFileAttributes(sRuta) And vbHidden) = FILE_ATTRIBUTE_HIDDEN), "Es un archivo visible", "Es una rchivo Oculto")
    SetFileAttributes sRuta, (GetFileAttributes(sRuta) Xor FILE_ATTRIBUTE_HIDDEN)    '   //  Le dejamos los atributos que ya tenia pero le quitamos el atributo oculto.
End Sub



y como es de esperarse FUnCIONA EN WIN XP, VISTA; 7 y FUNCIONARA EN W$ 8 (y si no me cotro un webo).

Un dato Or de VB6 no maneja un Or de sentencia... es un OR de Operacion BINARIA... es decir el resultado que retorne uno se le hace una operacion binaria a nivel bit por ende TODA la premisa es evaluada aun que solo ya haya salido alguna verdadera... en pocas palabras NO es el or normal (como en C)... es un or de operaciones binarias...

Mirate esto...
http://foro.elhacker.net/programacion_visual_basic/vb6_es_tonto-t340559.0.html;msg1669513#msg1669513

Como dije solo se HAN AGREGADO no he visto ninguna constante DOCUMENTADA que se haya cambiado... aun asi No importa ya te di una solucion a un problema que ignorabas!¡.

---------------------------

Lo de la Escalabilidad esta a discucion y nunca llegaremos a un acuerdo o tu que crees?, sea VB6, C/C++, Cobol (No hay muchos programadores de este lenguaje... y aun asi es usado), Foltran, etc... cada uno tiene PROS y CONTRAS.

Dulces Lunas!¡.
#838
Ignoro su On Resume Next funcione en vbs

solo has las evaluaciones pertinentes.

Dulces Lunas!¡.
#839
.
Si esactamente, es una de las mayores Estupidedes en youtube (Con respecto a como grabar un video o la realizacion de uno)!¡.

Dulces Lunas!¡.
#840
Cita de: Elemental Code en  8 Noviembre 2011, 10:20 AM
El problema que yo experimente con el doevents es que otros softwares tienen instrucciones muy complejas y no ceden el procesador. Entonces un doevents podria hacer esperar tu app por 30 seg o mas :S

Posiblemente pero tambien tiene que ver la prioridad con la que estan dichos PROGRAMAS ajenos al nuestro, solo tendriamos que cambiar la prioridad de la clase de nosotros para que asi el scheduler nos atienda mas frecuentemente...

Mira te doy un ejemplo muy facil de entender que te acabo de hacer.

En un form pega esto:
Código (Vb) [Seleccionar]


Option Explicit

Private Sub Form_DblClick()
   setMyPriority ' // Seteamos a NORMAL.
End Sub

Private Sub Form_Load()
   '   //  THREAD_PRIORITY_NORMAL  Como solo manejasmos un solo hilo no tiene caso cambiar este.
   '   //  REALTIME_PRIORITY_CLASS HAce que nos atienda mas constante el Scheduler del S.O.
   setMyPriority THREAD_PRIORITY_HIGHEST, REALTIME_PRIORITY_CLASS    '   //  Establecemos prioridad en tiempo REAL.
End Sub



En un modulo:
Código (vb) [Seleccionar]


Option Explicit

Enum PRIORYTYCLASS
   ABOVE_NORMAL_PRIORITY_CLASS = &H8000
   BELOW_NORMAL_PRIORITY_CLASS = &H4000
   HIGH_PRIORITY_CLASS = &H80
   IDLE_PRIORITY_CLASS = &H40
   NORMAL_PRIORITY_CLASS = &H20
   PROCESS_MODE_BACKGROUND_BEGIN = &H100000
   PROCESS_MODE_BACKGROUND_END = &H200000
   REALTIME_PRIORITY_CLASS = &H100
End Enum

Enum PRIORYTYTHREAD
   THREAD_MODE_BACKGROUND_BEGIN = &H10000
   THREAD_MODE_BACKGROUND_END = &H20000
   THREAD_PRIORITY_ABOVE_NORMAL = 1
   THREAD_PRIORITY_BELOW_NORMAL = -1
   THREAD_PRIORITY_HIGHEST = 2
   THREAD_PRIORITY_IDLE = -15
   THREAD_PRIORITY_LOWEST = -2
   THREAD_PRIORITY_NORMAL = 0
   THREAD_PRIORITY_TIME_CRITICAL = 15
End Enum

Declare Function SetThreadPriority Lib "kernel32" (ByVal GetCurrentThread As Long, ByVal nPriority As Long) As Long
Declare Function SetPriorityClass Lib "kernel32" (ByVal GetCurrentProcess As Long, ByVal dwPriorityClass As Long) As Long
Declare Function GetCurrentThread Lib "kernel32" () As Long
Declare Function GetCurrentProcess Lib "kernel32" () As Long

Public Function setMyPriority(Optional ByVal ThreadPriority As PRIORYTYTHREAD = THREAD_PRIORITY_NORMAL, Optional ByVal ClassPriority As PRIORYTYCLASS = NORMAL_PRIORITY_CLASS) As Boolean
   ' (http://infrangelux.hostei.com/)
   setMyPriority = SetThreadPriority(GetCurrentThread, ThreadPriority) Or _
                   SetPriorityClass(GetCurrentProcess, ClassPriority)
End Function



Temibles Lunas!¡.