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 - okik

#631
Hola
Me he dado cuenta que hay algunas páginas en la que si cuelgas algo, lo eliminas porque has detectado algún error y luego lo corriges y lo quieres volver a colgar, ya no puedes.

Me ha pasado en Yahoo y Youtube.

Colgué un video, detecté un error. Eliminé el vídeo. Corregí el error  y volví a intentar colgar el vídeo pero no hubo manera.

En los artículos de de Yahoo noticias, hay comentarios. Escribes uno, lo eliminas porque encuentras un error, pero si lo quieres volver a colgar ya no puedes.

¿Por qué?

Lo del vídeo me ha fastidiado mucho porque me ha costado mucho hacerlo

#632
 ;D
La verdad es que en muchos casos en .NET no tengo ni idea de lo que hago, solo se que esto o lo otro funciona o hace esto o  aquello. En fin que hace lo que yo quiero.

Voy a aclarar algunos puntos.
A. No soy programador, solo aficionado. No trabajo para ninguna empresa ni tengo intención de ello, ni creo que pueda.

B. Acabo de empezar con VB.NET hace como un par de meses o tres, más o menos. Empecé tonteando un poco para adaptarme al entorno, del cual solo he usado seguramente como el 2% de lo que tiene.

C. No soy "programador" de escuela, ni de libro, es decir, no estudio la teoría, aprendo de forma empírica. Quiero hacer algo y busco la forma. Muchas veces es a base de prueba y error. Por supuesto entiendo conceptos como array, bucles, funciones, eventos, etc. y leo definiciones, que muchas veces tengo que decirlo no las entiendo. Por ejemplo, hace unos días pregunté sobre el operador XOR porque por la definición del MSDN no entendía ni papa. Pero afortunadamente dos usuarios respondieron de forma fantástica y pude entenderlo.

D.
Código (xml) [Seleccionar]
¿Ese es el código completo que estás utilizando?

Me gusta programar por bloques, algo así como una conexión en red pero de código. No me gusta mezclarlo todo, porque en el momento que se me ocurre algo y quiero hacer una modificación, puede resultar o bien que  la modificación produzca un error que me obliga a modificar todo  o empezar casi desde el principio por incompatibilidad o bien haya pasado tanto tiempo desde que revisé el código que ya no recuerdo ni lo que hice y no se lo que hacía esto o aquello, sobre todo con códigos muy grandes.
También facilita y agiliza la creación  de programas pues solo tengo que hacer un copia y pega. Tengo cientos de plantillas de código simple y ejemplos sólo de VB, los cuales hacen lo básico y lo importante. Por supuesto son modificables y ajustables  a la necesidades del programa.
Y por supuesto mi me memoria es pésima, cuando dejo de usar algo se me olvida, y es muy práctico tener un código de ejemplo para cuando lo necesite.

El código que he puesto NO es el programa que estoy haciendo, tan sólo quiero hacer como he dicho un bloque de código independiente que me va a servir para el programa o para futuros programas.  Tan sólo quiero:

Form1 (o cualquier otro, o módulo)
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-Llama a la función y la URL
-Recibir información de descarga mientras se produce
-Opción cancelar
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
              ▲
               •
               •
               •
              ▼
Bloque de código aparte
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- Función de descarga con la URL  
- Obtener información de descarga
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀

Por lo tanto como ejemplo y como base, tan solo necesito un label el cual va a recibir la información del porcentaje, todo lo demás es irrelevante.

A veces encuentro en la red, que gente pone ejemplos supercomplejos, casi programas completos, con variables incomprensibles,  por ejemplo como usar un Listview, y en lugar de decir para crear columnas, tal, para introducir filas, tal, para esto tal. Pues te ponen un entramado inconprensible que tienes que ir desglosando. Lo cual dificulta el aprendizaje de aquellos que están aprendiendo y solo buscan algo muy concreto. Además, no todos somos unos gurús de la informática. Esto me ha pasado especialmente, buscando información sobre GDI, que siempre aparecen ejemplo de programas completos y bastante complejos. Hace poco modifiqué un programa de Leandro (no se qué) que semitransparenta un Form de modo que se vean nítidamente los controlos y demás pero el fondo del form sea semitransparente. Pero tengo que decir que no comprendo el código completo. Tuve que modificarlo porque su código degradaba el form en dos colores sin opción o propiedad 'set' para cambiar dichos colores o ponerlo todo a un solo color. También hace poco también puse un ejemplo muy sencillo para convertir una imagen en blanco y negro con GDI. Poniendo lo básico, sin florituras.

Estas cosas:
AddHandler, Task, WithEvents, RaiseEvent ,IsNullOrWhiteSpace, InvokeRequired

todavía no se como van, es nuevo para mí, tendré que mirar uno por uno para poder entender el código y conseguir lo que busco.

Intentaré conseguir lo más básico y simple posible y luego lo colgaré.

Sl2





#633
Eres un maestro

Lo que busco es tan simple como esto, y te juro que el label se queda en blanco, la verdad que no lo entiendo

Código (vbnet) [Seleccionar]
Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim ns As New modDownloadURL
       ns.DownLoadFileInBackground2("http://3.bp.blogspot.com/-08K8K-44ouk/VYg40YxJvxI/AAAAAAAAARw/wrLQDfGDW-8/s1600/OKIK2.gif", _
"E:\jk.gif")
       Label1.Text = ns.getProgress
   End Sub
End Class

Class modDownloadURL
   Public Progress As Object
   Private Sub DownloadProgressCallback(ByVal sender As Object, _
ByVal e As System.Net.DownloadProgressChangedEventArgs)
       Dim intBytes As Double = Double.Parse(e.BytesReceived.ToString()) 'Bytes recibidos
       Dim AllBytes As Double = Double.Parse(e.TotalBytesToReceive.ToString()) 'Total bytes recibidos
       Dim percentage As Double = intBytes / AllBytes * 100
       Progress = (e.ProgressPercentage & (" %"))
   End Sub
   Private Sub Client_DownloadCompleted(ByVal sender As Object, _
ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
       MessageBox.Show("Descarga completada")
   End Sub

   Public Sub DownLoadFileInBackground2(ByVal address As String, _
ByVal strDirFile As String)
       Dim Client As System.Net.WebClient = New System.Net.WebClient()
       AddHandler Client.DownloadProgressChanged, AddressOf DownloadProgressCallback
       AddHandler Client.DownloadFileCompleted, AddressOf Client_DownloadCompleted
       Dim uri As Uri = New Uri(address)
       Client.DownloadFileAsync(uri, strDirFile)
   End Sub
   ReadOnly Property getProgress() As String
       Get
           Return Progress
       End Get
   End Property

End Class


Me ha gustado tu opción de cancelar, también buscaba eso...
#634
Hola
Gracias por el código, funciona bien, pero no he conseguido que haga lo siguiente, ni aún añadiendo el opcional. Quizás es que no lo utilizo bien.

Lo que yo quería era pasar el porcentaje  a la variable Progress, para luego desde el Form capturar la información de esa variable y mostrarlo en un Label mientras se produce la descarta y en tiempo real, desde el evento Click. Pero pasa que  el label se queda en blanco. Tan solo muestra la información cuando hago esto, desde el módulo. Sustituyendo directamente la variable Progress por el control Label

Código (vbnet) [Seleccionar]
Private Sub DownloadProgressCallback(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)
       Dim intBytes As Double = Double.Parse(e.BytesReceived.ToString()) 'Bytes recibidos
       Dim AllBytes As Double = Double.Parse(e.TotalBytesToReceive.ToString()) 'Total bytes recibidos
       Dim percentage As Double = intBytes / AllBytes * 100
      Form1.Label1.text = CStr(e.ProgressPercentage & (" %"))
   End Sub


Con tu código quedaría así:

Código (vbnet) [Seleccionar]
   Private Sub WC_DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs) Handles wc.DownloadProgressChanged
       If Not e.ProgressPercentage = 100 Then
           Form1.Label1.Text = String.Format("Progress: {0}", ((e.BytesReceived / e.TotalBytesToReceive) * 100.0R).ToString(format:="00.00 \%"))
       End If
   End Sub


Pero lo extraño es que la el porcentaje se para en 94%, 89%, etc. Nunca en 100%, aunque el archivo se descargue por completo. He usado el url de un archivo pequeño (el de mi avatar, el gif).

Queda corregido sustituyendo 100 por 101
Código (vbnet) [Seleccionar]
Not e.ProgressPercentage = 101

Probaré mañana, si puedo, creando un módulo de clase. Con la propiedad Get, creo que debería funcionar.

La idea es crear una función de código independiente y aparte sin tener que estar modificando dicho código para que devuelva la información de descarga a un determinado control.

Sl2
#635
Hola,

Pues aquí otra nueva duda.

No me gusta cargar demasiado de código el Form1, así que suelo poner las funciones por separado en módulos, o en módulos de clases.  El caso es que tengo un código de descarga de archivos desde un módulo y no consigo mostrar el proceso de descarga desde él.

Código (vbnet) [Seleccionar]

Imports System.Net
Module modDownloadURL
   Public Progress As String
   Private Sub DownloadProgressCallback(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)
       Dim intBytes As Double = Double.Parse(e.BytesReceived.ToString()) 'Bytes recibidos
       Dim AllBytes As Double = Double.Parse(e.TotalBytesToReceive.ToString()) 'Total bytes recibidos
       Dim percentage As Double = intBytes / AllBytes * 100
       Progress = CStr(e.ProgressPercentage & (" %"))
   End Sub
   Private Sub Client_DownloadCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
       MessageBox.Show("Descarga completada")
   End Sub

   Public Sub DownLoadFileInBackground2(ByVal address As String, ByVal strDirFile As String)
       Dim Client As WebClient = New WebClient()
       AddHandler Client.DownloadProgressChanged, AddressOf DownloadProgressCallback
       AddHandler Client.DownloadFileCompleted, AddressOf client_DownloadCompleted
       Dim uri As Uri = New Uri(address)
       Client.DownloadFileAsync(uri, strDirFile)
   End Sub
End Module


El porcentaje se carga en la variable string Progress  , y desde un botón en el formulario llamo a DownLoadFileInBackground2(url, [Dir+Namefile]) para descargar el archivo

Gracias

#636
Gracias Gh057,

Pero ahora, ¿como instalo Gdebi, sin Gdebi?

bueno, seguramente soy yo y no Ubuntu... A ver si alguien me puede ofrecer alguna alternativa que no sea Ubuntu, otro SO Linux, en el que pueda instalar sin problemas aunque sea desde la terminal, sin conexión a la red y no tenga que ir buscando programas que sean exclusivamente para mi SO, ni tenga problemas de dependencias. En fin, reguramente es mucho pedir.

Lo de la terminal, bueno siempre me falla, que si no hay esto, que sin no está eso otro, que si falta tal o cual, en fin.

Sl2
#637
Lo encontré aquí:

http://ftp.ch.debian.org

Ahora falta que funcione.

Per por el tamaño de los paquetes, me da que no van a instalar un porra, pues seguro que son enlaces para instalarse con conexión a la red.  :¬¬

#638
Cita de: #!drvy en  1 Julio 2015, 15:02 PM


Te lleva a apt://kalzium , que abre automáticamente el Software Centre de Ubuntu..

Saludos



Hola, gracias.

Es que como estaba escribiendo arriba mientras tu colgabas la respuesta, detecta el sistema desde el que he entrado en la web y a mi no me sale porque he entrado desde windows

No se quien ha hecho la web, pero me parece una tontería

lo malo de Ubuntu es que te obliga si o sí a tener conexión a la red
#639
https://apps.ubuntu.com/cat/applications/saucy/kalzium/

Que timo de página :(



Presupongo que la Web detecta si tienes instalado Ubuntu o no si no es así te pone el enlace para bajerte Ubuntu.

Pero es que precisamente tengo instalada Ubuntu en un PC sin conexión en otro lugar.
#640
Cita de: Gh057 en 29 Junio 2015, 19:20 PM
Huy lindo ejemplo... XD trataré de ampliarlo:

si A es 5 (base 10) -> 101 (2)
si B es 6 (base 10) -> 110 (2)

entonces si A = A XOR B
101
110
----
011 (lo almacenas en A)

idem si B = A XOR B
011
110
----
101 (lo almacenas en B)

ahora bien, si haces nuevamente A = A XOR B...
011
101
----
110

Entonces... ahora A será 110 o sea 6, y B 101, que equivalea  5 en decimal. XD

Te recomiendo leer sobre el tema, antes de seguir con la parte práctica. Cualquier consulta, si puedo intentaré responderla. Un cordial saludo.

Ahora mismo estaba yo descomponiendo mi ejemplo como lo has hecho tú, la verdad es que visto así se ve claro. Pero de todos modos hay que ser un poco lumbreras para tirar por ese camino, o por lo menos tener mucha práctica.


Gracias de nuevo a los dos.