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

#301
Ok, gracias Elektro

Por curiosidad he probado de hacer algo parecido con el código que expuse al principio. A ver que te parece  ::)


Código (vbnet) [Seleccionar]

Module Module1
    Dim lblEtiqueta(4) As Label
    Sub CrearPanel(ByVal pnl As Object, ByVal Disponible As Boolean)
        Dim Starlbl As New Point(x:=10, y:=20)
        pnl.backcolor = Color.DarkGray
        If Disponible Then

            For I As Integer = 0 To 3
                lblEtiqueta(I) = New Label
                lblEtiqueta(I).Width = 15
                lblEtiqueta(I).Height = 15
                lblEtiqueta(I).BackColor = Color.Gray
                lblEtiqueta(I).Location = Starlbl 'posición X e Y del cuadro
                pnl.Controls.Add(lblEtiqueta(I)) 'Crea el label
                Starlbl.X += 20
            Next
        Else
            Try
                For Index As Integer = 0 To 3
                    lblEtiqueta(Index).Dispose()
                Next Index
            Catch ex As Exception
            End Try
        End If
    End Sub
End Module




Para llamar uso:
(para mostrar los Labels)
Código (vbnet) [Seleccionar]
CrearPanel(Panel1, True)

(para quitar los labels)
Código (vbnet) [Seleccionar]
CrearPanel(Panel1, False)
#302
Gracias muy buena respuesta, me has resuelto todas las dudas.;-)

Y lo del canvas es lo que buscaba, creía que el equivalente en WPF era el stackpanel  :P
#303
Hola amigos

Hasta ahora he estado usando Windows Forms, pero para conseguir un aspecto gráfico más bonito en mi aplicación he decidido usar WPF. El problema es que cambian algunos eventos y propiedades y otras cosas y tengo que ir investigando.

Me ha pasado que ya tenía una apliación hecha en Windows Forms y he ido pasado el código a WPF pero resulta que concretamente esto no lo he sabido resolver.

En Windows Forms creé un Panel y un array de controles con Labels. El panel se crea desde un módulo que he llamado (modCrearPanel).  El módulo también tiene eventos y más cosas pero no viene a cuento. La cuestión es poder crear los Labels dentro de un control StackPanel en WPF.


- Primero: Creo un Panel o StackPanel en el Windows Forms y en MainWindow en WPF
- Segundo paso:

EN WINDOWS FORMS
(no es el código original, es una simplificación)
Código (vbnet) [Seleccionar]

Module Module1
   Dim Etiqueta As New Label
   Dim lblEtiqueta(4) As Label
   Sub CrearPanel()
       Dim Y As Integer = 20
       Dim X As Integer
       Form1.Panel1.BackColor = Color.DarkGray
       X = 10 'valor X inicial
       For I as Integer = 0 To 3
           lblEtiqueta(I) = New Label
           lblEtiqueta(I).Width = 15
           lblEtiqueta(I).Height = 15
           lblEtiqueta(I).BackColor = Color.Gray
           lblEtiqueta(I).Location = New Point(X, Y) 'posición X e Y del cuadro
           Form1.Panel1.Controls.Add(lblEtiqueta(I)) 'Crea el label
           X = X + 20
       Next
   End Sub
End Module


CON WPF (NO FUNCIONA)
Código (vbnet) [Seleccionar]
Module Module1
   Dim Etiqueta As New Label
   Dim lblEtiqueta(4) As Label
   Dim Main As MainWindow
   Public Sub CrearPanel()
       Dim Y As Integer = 10
       Dim X As Integer
       Main.StackPanel1.Background = Brushes.DarkGray
       X = 10
       For i As Integer = 0 To 3
           lblEtiqueta(i) = New Label
           lblEtiqueta(i).Background = Brushes.Gray
           lblEtiqueta(i).Width = 15
           lblEtiqueta(i).Height = 15
           lblEtiqueta(i).Margin = New Thickness(0, X, Y, 0)
           X = X + 20
           Main.StackPanel1.Children.Add(lblEtiqueta(i))
       Next i
       Main.Show()
   End Sub
End Module



Para crear el Penel se llama desde el Load o Loaded en WPF a CrearPanel.

Con toda seguridad el problema está en la forma de poder hacer referencia al StackPanel1 que se encuentra en MainWindow. No se como se hace.


Gracias por ayuda




Encontré la forma   :laugh:


Código (vbnet) [Seleccionar]
Module Module1
   Dim Etiqueta As New Label
   Dim lblEtiqueta(4) As Label
   Private app As Application
   Private Main As MainWindow
   Public Sub CrearPanel()
       Dim Y As Integer = 10
       Dim X As Integer
       app = System.Windows.Application.Current
       Main = CType(app.MainWindow, MainWindow)

       Main.StackPanel1.Background = Brushes.DarkGray
       X = 10
       For i As Integer = 0 To 3
           lblEtiqueta(i) = New Label
           lblEtiqueta(i).Background = Brushes.Gray
           lblEtiqueta(i).Width = 15
           lblEtiqueta(i).Height = 15
           lblEtiqueta(i).Margin = New Thickness(0, X, 0, Y)
           X = X + 20
           Main.StackPanel1.Children.Add(lblEtiqueta(i)) 'Crea el label
       Next i
   End Sub
End Module




Esto es lo que había que añadir al código para poder hacer referencia a objetos creados en MainWindow

Código (vbnet) [Seleccionar]

   Private app As Application
   Private Main As MainWindow
   Public Sub CrearPanel()
       app = System.Windows.Application.Current
       Main = CType(app.MainWindow, MainWindow)
      Main.StackPanel1.Background = Brushes.DarkGray
End Sub


Encontré la solución aquí:
https://msdn.microsoft.com/es-es/library/vstudio/ms750944%28v=vs.100%29.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

Ahora que lo he conseguido hacer solo falta colocar correctamente los labels ya que en susitución a "Location"  he usado "Margin" y no funciona igual. Veré a ver  :-\

Saludos

#304
Hola,

Con VB.Net 2010 y utilizando System.Net.NetworkInformation obtengo el valor de datos de subida y bajada de mi conexión.

El caso es que me funciona en Vista y Windows7  pero no en XP.

Esta es la función que he utilizado:

Código (vbnet) [Seleccionar]

Public Class InformationNetWork
Dim Estado As String
Dim DatosRecibidos As String
Dim DatosEnviados As String

   Public Function EnumerateNetwok()
       Dim properties As System.Net.NetworkInformation.IPGlobalProperties = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties()
       Dim ipstat As System.Net.NetworkInformation.IPGlobalStatistics = properties.GetIPv4GlobalStatistics()


       '//Estado de red
       Dim ipv4Stats As System.Net.NetworkInformation.IPv4InterfaceStatistics
       ipv4Stats = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces(0).GetIPv4Statistics


       DatosRecibidos = ipv4Stats.BytesReceived.ToString
       DatosEnviados = ipv4Stats.BytesSent.ToString


       '//Estado Conexión

       Dim ipv4Time As System.Net.NetworkInformation.IPGlobalProperties = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties()
       Try
           Dim n = ipv4Time.GetActiveTcpConnections().Cast(Of System.Net.NetworkInformation.TcpConnectionInformation).First(Function(el) el.State)
           Estado = n.State
       Catch ex As Exception
           Estado = "Desconectado"
       End Try
       Return 0
   End Function



   Public Property DatesRecibidos As String
       Get
           Return DatosRecibidos
       End Get
       Set(ByVal value As String)
       End Set
   End Property
   Public Property DatesEnviados As String
       Get
           Return DatosEnviados
       End Get
       Set(ByVal value As String)
       End Set
   End Property
End Class


Y para llamarlo hago lo siguiente:

Código (vbnet) [Seleccionar]
   
Public Class Form1
Dim Subida As Decimal
   Dim Bajada As Decimal
   Dim OldSubida As Decimal
   Dim OldBajada As Decimal
   Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
       Dim InfoNet As New InformationNetWork
       InfoNet.EnumerateNetwok()


       Label4.Text = FormatNumber(((InfoNet.DatesEnviados / 1024 / 1024)), 2) & " MB"
       Label5.Text = FormatNumber(((InfoNet.DatesRecibidos / 1024 / 1024)), 2) & " MB"
       If OldSubida <> Convert.ToDecimal(FormatNumber(((InfoNet.DatesEnviados / 1024 / 1024)), 2)) Then
           Label6.Text = Convert.ToDecimal(FormatNumber(((InfoNet.DatesEnviados / 1024 / 1024)), 2)) + OldSubida & " MB"
           Label7.Text = Convert.ToDecimal(FormatNumber(((InfoNet.DatesRecibidos / 1024 / 1024)), 2)) + OldBajada & " MB"
           Label9.Text = (Convert.ToDecimal(FormatNumber(((InfoNet.DatesEnviados / 1024 / 1024)), 2)) + OldSubida) + _
               (Convert.ToDecimal(FormatNumber(((InfoNet.DatesRecibidos / 1024 / 1024)), 2)) + OldBajada) & " MB"

           Subida = Convert.ToDecimal(FormatNumber(((InfoNet.DatesEnviados / 1024 / 1024)), 2)) + OldSubida
           Bajada = Convert.ToDecimal(FormatNumber(((InfoNet.DatesRecibidos / 1024 / 1024)), 2)) + OldBajada
       End If
   End Sub

End Class
#305
Cita de: Eleкtro en  9 Septiembre 2015, 00:05 AM
Corrígeme si me equivoco al hacer suposiciones, pero deduzco que lo que hiciste fue simplemente copiar y pegar en la class principal el código de ambas classes, de esta forma:
No te equivocas jeje, es verdad, tendría que haberlo metido en un módulo. Fallo de novatos  :xD

En cuanto a lo de WPF. Pues he hecho algunas pruebas y lo he usado.. muy poco no, nada en absoluto. Mi primeros intentos fue porque leí maravillas con respecto a su capacidad gráfica y que podías personalizar los controles. Eso es algo que a mí me gusta hacer. El problema es que no he conseguido personalizar los controles en general, es decir, no tener que estar estableciendo la configuración gráfica para cada control, y de este modo establecer una aspecto gráfico uniforme y cosntante en toda la aplicación. He encontrado ejemplos en la red pero no me han funcionado, supongo que no habré hecho algo bien.

Más adelante, un día de estos crearé un nuevo tema y preguntaré sobre esto en cuestion, poniendo el código y el método que he usado y haber si alguien me ayuda con este tema. Mientras tanto usaré el form clásico. Poco a poco se va llenando el bote.

Saludos


#306
Hasta en los juegos tienen que meter la política >:(

#307
Hola

El ListBox no es un control hecho para trabajar con directorios.


Lo más básico es usar :
-------------
DriveListBox
DirListBox
FileListBox
-----------



DriveListBox  muestras las unidades de disco duro y DVD/CD- ROM

DirListBox muestra los las carpeta que contienen las unidades de disco

FileListBox muestra los archivos que contienen las carpetas


http://www.recursosvisualbasic.com.ar/htm/tutoriales/control_drive_dir_file.htm



Otra opción más complicada es usar el control TreeView que no está disponible por defecto en el cuadro de herramientas de VB6. Desde Proyecto/Componentes debes cargar el componente"Microsoft Windows Common Controls 6.0" cuyo archivo OCX es MSCOMCTL.OCX. Es decir, si usas este componente tu aplicación tendrá dependencia con este archivo, si no lo encuentra dará error.

Puedes encontrar muchos ejemplos en la red:

http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/334-listar-directorios-en-treeview.htm











#308
Jugando a viejos juegos de MAME32 he descubierto que se hacía ya en aquel entonces tres versiones de un juego cuya dificultad o contenido podía cambiar según fuera para Europa, Asia y EEUU.

Me he encontrado que un mismo juego en japonés iba más rápido y era más difícil que en la versión para Europa. No se si es que pensaban que es que en Europa somos tontos o que. También puede ser porque el juego para máqunas estaban pensados para recaudar dinero con la excusa del entretenimiento y pudiera ser que había un afán de recaudar más en Japón que en Europa. Es decir, que la dificultad era mayor para evitar que el jugador durase más tiempo jugando y obligarle a introducir de nuevo una moneda.

Luego está en juegos actuales lo del NTSC y PAL. No entiendo lo de usar diferentes frecuencias en un sitio que en otro También que trucos que funcionan en EEUU o Japón no funcionen en Europa y cosas así. Creo que hoy en día también la dificultad del juego puede cambiar.

#309
Puede que sea porque estás usando el mismo número de archivo #1

Prueba a usar Freefile:
Código (vb) [Seleccionar]

Dim intFile as Integer
intFile = Freefile
...
Open App.Path & "\Indices.txt" For Binary As intFile
#310
Gracias, el código va perfecto.

Tan sólo un problema me ha dado y es el siguiente. He usado un Form simple en VisualBasic.Net 2010 y tras copiar y pegar tu código ocurría el siguiente error:

La clase Form1 se puede diseñar, per no es la primera clase de archivo.
Visual Studio requiere que los diseñadores utilicen la primera clase del archivo.
Mueva el código de clase para convertirla en la primera clase del archivo y vuelva a intetar cargar el diseñador de nuevo.


No se podía ver el diseño del form.

Por ello,si me lo permites, he reducido y cambiado el orden de tu código. También he usado el evento MouseMove en lugar de Label1_MouseEnter y Label1_MouseLeave, ya que el Label que uso en mi programa se crea en tiempo real y es una matriz de control. Creo el evento mediante código y prefiero crear sólo un evento en lugar de dos. Funciona igual. También he cambiado "{0}.ani" por "{0}.cur" ya que mi cursor no es animado. Espero que no te importe.



Código (vbnet) [Seleccionar]
Imports System
Imports System.ComponentModel
Imports System.IO
Imports System.Runtime.InteropServices
Imports System.Windows.Forms

Public Class Form1

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

   End Sub

   Private Sub Label1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseMove
       Static cur As Cursor

       If cur Is Nothing Then
           cur = CursorUtil.LoadCursorFromResource(My.Resources.Resource1.Cursor1)
       End If

       ' Asegurarse de liberar el objeto cuando sea necesario...

       DirectCast(sender, Label).Cursor = cur
   End Sub
End Class


Public NotInheritable Class CursorUtil
   <DllImport("User32.dll", CharSet:=CharSet.Ansi, BestFitMapping:=False, ThrowOnUnmappableChar:=True, SetLastError:=True)>
   Public Shared Function LoadCursorFromFile(ByVal filepath As String) As IntPtr
   End Function

   Public Shared Function LoadCursorFromResource(ByVal resource As Byte(), Optional ByVal cleanTempFile As Boolean = True) As Cursor

       Dim tmpFilepath As String = String.Format("{0}.cur", Path.GetTempFileName)

       Try
           Using fs As New FileStream(tmpFilepath, FileMode.Create, FileAccess.Write, FileShare.Read)
               fs.Write(resource, 0, resource.Length)
           End Using

           Dim result As IntPtr = LoadCursorFromFile(tmpFilepath)
           Dim win32Err As Integer = Marshal.GetLastWin32Error

           If result = IntPtr.Zero Then
               Throw New Win32Exception([error]:=win32Err)
           Else
               Return New Cursor(result)
           End If

       Catch ex As Exception
           Throw

       Finally
           If (cleanTempFile) AndAlso (File.Exists(tmpFilepath)) Then
               File.Delete(tmpFilepath)
           End If

       End Try

   End Function

End Class



Esperaba no tener que usar una función API. No entiendo como no se permite usar cursores en color, la verdad.