elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: 1 ... 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [24] 25 26 27 28 29 30 31 32
231  Programación / .NET (C#, VB.NET, ASP) / Re: Listview header modificado en listview vbnet en: 12 Diciembre 2015, 18:22 pm
hola

No entiendo porqué quieres usar API para cambiar el estilo de las cabeceras de un Listview cuando vb.net ya ofrece medios para ello.

ListView.DrawColumnHeader Event



Código
  1. Public Class Form1
  2.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  3.        ListView1.View = View.Details
  4.        ListView1.Columns.Add("Header1", 100)
  5.        ListView1.Columns.Add("Header2", 100)
  6.        ListView1.Items.Add("Item1")
  7.        ListView1.Items(0).SubItems.Add("SubItem1")
  8.        ListView1.Items.Add("Item2")
  9.        ListView1.Items(1).SubItems.Add("SubItem2")
  10.        ListView1.OwnerDraw = True
  11.  
  12.    End Sub
  13.  
  14.    Private Sub ListView1_DrawColumnHeader(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewColumnHeaderEventArgs) Handles ListView1.DrawColumnHeader
  15.        '//Rectángulos para el Bacground
  16.        Try
  17.            'Rectángulo inferior
  18.            e.Graphics.FillRectangle(Brushes.Black, e.Bounds)
  19.            'Rectángulo superior (Se superpone sobre el rectángulo anterior y es más pequeño)
  20.            Dim RectPoint As New Point(e.Bounds.X + 1, e.Bounds.Y + 1)
  21.            Dim RectSize As New Size(New Point(e.Bounds.Width - 2, e.Bounds.Height - 2))
  22.            Dim Rect As New Rectangle(RectPoint, RectSize)
  23.            e.Graphics.FillRectangle(Brushes.White, Rect)
  24.        Finally
  25.        End Try
  26.  
  27.  
  28.        '//Dibuja el texto (Se superpone a los rectángulos anteriores o imagen de fondo)
  29.        Dim sf As New StringFormat()
  30.        Try
  31.            Select Case e.Header.TextAlign
  32.                Case HorizontalAlignment.Center
  33.                    sf.Alignment = StringAlignment.Center
  34.                Case HorizontalAlignment.Right
  35.                    sf.Alignment = StringAlignment.Far
  36.            End Select
  37.  
  38.            Dim headerFont As New Font("Helvetica", 10, FontStyle.Bold)
  39.            Try
  40.                e.Graphics.DrawString(e.Header.Text, headerFont, Brushes.Black, _
  41.                                      New Point(e.Bounds.X + 5, e.Bounds.Y + 1), sf)
  42.            Finally
  43.                headerFont.Dispose()
  44.            End Try
  45.  
  46.        Finally
  47.            sf.Dispose()
  48.        End Try
  49.  
  50.  
  51.    End Sub
  52.  
  53.    Private Sub ListView1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewItemEventArgs) Handles ListView1.DrawItem
  54.        e.DrawDefault = True
  55.    End Sub
  56. End Class
  57.  

Los cambios se asignan por capas primero estableces lo que sería el 'Background' mediante FillRectangle, si creas otro FillRectangle éste se coloca en la parte superior del anterior en el mismo orden en el que se nombra en el código. Y por último la representación del texto. Si escribes la referéncia al texto antes que aplicar el rectángulo entonces no se verá el texto.

También puedes aplicar una imagen en lugar FillRectangle:

Código
  1.  
  2.   Public Class Form1
  3.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.        ListView1.View = View.Details
  5.        ListView1.Columns.Add("Header1", 100)
  6.        ListView1.Columns.Add("Header2", 100)
  7.        ListView1.Items.Add("Item1")
  8.        ListView1.Items(0).SubItems.Add("SubItem1")
  9.        ListView1.Items.Add("Item2")
  10.        ListView1.Items(1).SubItems.Add("SubItem2")
  11.        ListView1.OwnerDraw = True
  12.  
  13.    End Sub
  14.  
  15.    Private Sub ListView1_DrawColumnHeader(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewColumnHeaderEventArgs) Handles ListView1.DrawColumnHeader
  16.  
  17.        '//Dibuja una imagen
  18.        Dim imagen As Image
  19.        imagen = Image.FromFile("C:\Documents and Settings\Administrador\Mis documentos\columnHeader.png")
  20.        e.Graphics.DrawImage(imagen, e.Bounds)
  21.  
  22.  
  23.        '//Dibuja el texto (Se superpone a los rectángulos anteriores o imagen de fondo)
  24.        Dim sf As New StringFormat()
  25.        Try
  26.            Select Case e.Header.TextAlign
  27.                Case HorizontalAlignment.Center
  28.                    sf.Alignment = StringAlignment.Center
  29.                Case HorizontalAlignment.Right
  30.                    sf.Alignment = StringAlignment.Far
  31.            End Select
  32.  
  33.            Dim headerFont As New Font("Helvetica", 10, FontStyle.Bold)
  34.            Try
  35.                e.Graphics.DrawString(e.Header.Text, headerFont, Brushes.Black, _
  36.                                      New Point(e.Bounds.X + 5, e.Bounds.Y + 1), sf)
  37.            Finally
  38.                headerFont.Dispose()
  39.            End Try
  40.  
  41.        Finally
  42.            sf.Dispose()
  43.        End Try
  44.  
  45.  
  46.    End Sub
  47.  
  48.    Private Sub ListView1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewItemEventArgs) Handles ListView1.DrawItem
  49.        e.DrawDefault = True 'No quitar esto. A no ser que apliques una personalización para este evento. DrawDefault dibujará los valores por defecto.
  50.    End Sub
  51. End Class
  52.  


232  Programación / .NET (C#, VB.NET, ASP) / Re: Leer secuencialmente dos tablas de un archivo creado en vb.net 2010 en: 3 Diciembre 2015, 15:06 pm
Hola

Gracias por comentar la actualización que has hecho para que fuera compatible con Acces 2010  ;-)

Creo que se puede simplificar el código obteniendo la tabla mediante una función y luego con la tabla haces lo que te de la gana.

He modificado la función que puse en el comentario anterior. Aquí no se obtiene sólo un elemento de una tabla sino toda la tabla entera para luego en otro evento hacer lo que se quiera con ella:

[FUNCIÓN PARA OBTENER TABLA ACCES]
Código
  1. #Region "Lectura de base de dato ACCES ver. 12.0"
  2. Module modGetDateTable
  3.  
  4.    Public Function LeerDatosTabla(ByVal PathFileMDB As String, ByVal NombreTabla As String) As DataTable
  5.        Dim query As String = "SELECT * FROM " & NombreTabla
  6.        Dim MDBConnString_ As String = "Provider=Microsoft.ACE.OLEDB.12.0;data source=" & PathFileMDB & ";"
  7.        Dim DataSet_ As New DataSet       '//Caché de memoria interno de datos
  8.        Dim Connection As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection(MDBConnString_)       '//Conexión con la base de datos
  9.        Dim Resultado As String = Nothing
  10.        Dim Tabla As DataTable = Nothing
  11.        Try
  12.            Connection.Open()                                                                           '//Abre la clase de datos
  13.            Dim cmd As New System.Data.OleDb.OleDbCommand(query, Connection)                             '//Instrucción SQL
  14.            Dim DataAdapter As New System.Data.OleDb.OleDbDataAdapter(cmd)
  15.            DataAdapter.Fill(DataSet_, NombreTabla)                                                     '//Adapta la tabla (fila, columnas) al DataSet
  16.            Connection.Close()                                                                          '//Cierra conexión
  17.            Tabla = DataSet_.Tables(NombreTabla)                                       'Crea una tabla e introduce los datos del DataSet
  18.  
  19.        Catch ex As Exception
  20.            MessageBox.Show(ex.Message)
  21.        End Try
  22.        Return Tabla
  23.    End Function
  24. End Module
  25. #End Region

Ejemplo se uso:
Código
  1.  
  2.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  3.        Dim PhatFileMDB As String = System.Windows.Forms.Application.StartupPath & "\Datos.accdb"
  4.        Dim dtTable As DataTable = LeerDatosTabla(PhatFileMDB, "L1")
  5.        Try
  6.            For Each dtrow As DataRow In dtTable.Rows
  7.                ListBox1.Items.Add(dtrow.Item(0))
  8.            Next
  9.        Catch ex As Exception
  10.            MessageBox.Show(ex.Message)
  11.        End Try
  12.    End Sub
  13.  

Por otro lado yo no quitaría Try/Catch

Código
  1.   Try '//Intenta ejecutar el siguiente código
  2.            '1...Código
  3.            '2...Código
  4.            '3....
  5.        Catch ex As Exception   '//si se produce una excepción
  6.            '//Muestra un mensaje por ejemplo, Cierra la aplicación o puedes no poner nada
  7.        End Try '//Fin de intento



[MODIFICACIÓN DE TU CÓDIGO]
En un principio dijiste:
Código:
después comparo esos dos valores si son iguales

Entiendo que lo que quieres es comparar las filas de unas tablas y comprobar que las dos NO tienen coincidencias ¿no?

He realizado otra forma  ya que, pueden haber coincidencias pero no estar en el mismo lugar es decir: {A, B, C} y {N, M, A} tienen en común A

Código
  1.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.        Dim Mydir As String = System.Windows.Forms.Application.StartupPath & "\" & "\Datos.accdb"
  3.  
  4.        Try  '//Intenta ejectuar el código
  5.            '//Importa las tablas
  6.            Dim Tabla1 As DataTable = LeerDatosTabla(Mydir, "L1")
  7.            Dim Tabla2 As DataTable = LeerDatosTabla(Mydir, "L2")
  8.            Dim Columna As Integer = 0 '//columna que va a comparar
  9.  
  10.            '//compara las tablas (independientemente de su orden) ej: A= {X,Y,Z}  B= {Y,N,S} HayCoincidencias devuelve  TRUE EN 'Y'
  11.            Dim ListItems1 As New List(Of String), ListItems2 As New List(Of String)
  12.            '//Introduce los elementos de la columna 0 en las listas ListItems1 y ListItems2
  13.            For Each dtRow As DataRow In Tabla1.Rows
  14.                ListItems1.Add(dtRow(Columna))
  15.            Next
  16.            For Each dtRow As DataRow In Tabla2.Rows
  17.                ListItems2.Add(dtRow(Columna))
  18.            Next
  19.  
  20.            '//Comprueba  las coincidencias
  21.            Dim HayCoincidencia As Boolean = False
  22.            Dim Coincidencias As String = Nothing
  23.            If ListItems1.Count = ListItems2.Count Then
  24.                Dim Int As Integer = -1
  25.                For Each Elemento As String In ListItems2
  26.                    Int += 1
  27.                    If ListItems1.Contains(Elemento) = True Then
  28.                        HayCoincidencia = True
  29.                        If Coincidencias = "" Then
  30.                            Coincidencias &= String.Format("- {0}", Elemento)
  31.                        Else
  32.                            Coincidencias &= String.Format("{0}- {1}", Environment.NewLine, Elemento)
  33.                        End If
  34.                    End If
  35.                Next
  36.            Else
  37.                MessageBox.Show("Las listas no tiene el mismo número de elementos.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  38.            End If
  39.            '//Lanza mensaje
  40.            If HayCoincidencia Then
  41.                MessageBox.Show(String.Format("Hay coincidencias: {0}{1}", Environment.NewLine, Coincidencias), _
  42.                                "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  43.            Else
  44.                MessageBox.Show("No hay coincidencias.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information)
  45.            End If
  46.  
  47.            Me.Close()
  48.        Catch ex As Exception  '//Si se produce una excepción"
  49.            Me.Close() 'cierra
  50.        End Try '//Fin de intento
  51.  
  52.    End Sub

Como ves llamando a la función LeerDatosTabla se obtiene el DataTable  y luego desde el evento de un botón por ejemplo puedes obtener la tabla y luego hacer lo que quieras, si no, es un lío tremendo. Así es más cómodo.

En un principio y para ahorrar código usé Lista1.Except(Lista2) para obtener una lista de elementos en los que no son iguales. Pero lo que interesaba es obtener los elementos que SI son iguales. En su lugar he usado Lista1.Contains(A) que devuelve TRUE si existe el elemento A en  la lista.
 
Estoy seguro que debe de haber alguna función o funciones NET para comparar listas que ahorre código pero como no la conozco lo he hecho a la cuenta de la vieja XD.



Otra cosa para la próxima puedes usar la lista de GeSHi que puedes ver en este foro cuando editas un comentario para pegar código y sea más legible.

Código:
[code=vbnet]...CÓDIGO...
[/code]

Y por último decirte que este foro es para VB5 o VB6 y no para NET. Ya hay uno para net  ;)

http://foro.elhacker.net/net-b62.0/

Sl2s




233  Programación / .NET (C#, VB.NET, ASP) / Re: Leer secuencialmente dos tablas de un archivo creado en vb.net 2010 en: 2 Diciembre 2015, 19:33 pm
Hola

Antes de nada comentarte que no dispongo de Office 2010 ni archivos *.accdb. Pero he realizado este programa para leer archivos *.mdb y  supongo que el programa será capaz de leer los primeros. Ya me dirás.

Se trata de una función llamada LeerDatosTabla. Esta función devuelve un valor de un lugar concreto de una tabla de una base de datos. Se llama de la siguiente manera:


Código:
LeerDatosTabla("E:\Database1.accdb", NOMBRE DE TABLA, FILA, COLUMNA, NúmeroDeFilas, NúmeroDeColumnas)

Donde NúmeroDeFilas y  NúmeroDeColumnas devuelven el número de filas y columnas de la tabla. Es necesario que declares estas variables como 'integer' antes de llamar a la función como se muestra en el siguiente ejemplo. Claro que si no lo quieres puedes modificar el código.Tu mismo.


EJEMPLO:
Código
  1.  
  2.  
  3. Public Class Form1
  4.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  5.    End Sub
  6.  
  7.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  8.        Dim NúmeroDeFilas As Integer = Nothing          '//Variable para introducir el número de filas de la tabla
  9.        Dim NúmeroDeColumnas As Integer = Nothing       '//Variable para introducir el número de columnas de la tabla
  10.        Try
  11.            Dim Valor1 As String = LeerDatosTabla("C:\Carpeta\Database1.accdb", "L1", 1, 0, NúmeroDeFilas, NúmeroDeColumnas) '//Devuelve el valor1
  12.            Dim Valor2 As String = LeerDatosTabla("C:\Carpeta\Database1.accdb", "L2", 1, 0, NúmeroDeFilas, NúmeroDeColumnas) '//Devuelve el valor2
  13.  
  14.            If Valor1.Length > 0 And Valor2.Length > 0 Then '//Comprueba que Valor1 y Valor2 contienen alguna cadena
  15.                If Valor1.Equals(Valor2) Then 'compara
  16.                    MessageBox.Show("Hay coincidencia", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information)
  17.                End If
  18.            End If
  19.  
  20.            'Label1.text = NúmeroDeFilas  
  21.            'Label2.text = NúmeroDeFilas
  22.        Catch ex As Exception
  23.            MessageBox.Show(ex.Message)
  24.        End Try
  25.    End Sub
  26.  
  27. End Class
  28. #Region "Lectura de base de datos"
  29. Module modGetDateTable
  30.    ''' <summary>
  31.    ''' OBTIENE DATOS DE UNA BASE DE DATOS ACCESS
  32.    ''' </summary>
  33.    ''' <param name="PathFileMDB"></param>
  34.    ''' <param name="NombreTabla"></param>
  35.    ''' <param name="nFila"></param>
  36.    ''' <param name="nColumna"></param>
  37.    ''' <param name="file_Count"></param>
  38.    ''' <param name="Column_count"></param>
  39.    ''' <returns></returns>
  40.    ''' <remarks></remarks>
  41.    Public Function LeerDatosTabla(ByVal PathFileMDB As String, _
  42.                                   ByVal NombreTabla As String, _
  43.                                   ByVal nFila As Integer, _
  44.                                   ByVal nColumna As Integer, _
  45.                                   ByRef file_Count As Integer, _
  46.                                   ByRef Column_count As Integer) As String
  47.        Dim query As String = "SELECT * FROM " & NombreTabla
  48.        Dim MDBConnString_ As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PathFileMDB & ";"
  49.        Dim DataSet_ As New DataSet       '//Caché de memoria interno de datos
  50.        Dim Connection As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection(MDBConnString_)       '//Conexión con la base de datos
  51.        Dim Resultado As String = Nothing
  52.        Try
  53.            Connection.Open()                                                                           '//Abre la clase de datos
  54.            Dim cmd As New System.Data.OleDb.OleDbCommand(query, Connection)                             '//Instrucción SQL
  55.            Dim DataAdapter As New System.Data.OleDb.OleDbDataAdapter(cmd)
  56.            DataAdapter.Fill(DataSet_, NombreTabla)                                                     '//Adapta la tabla (fila, columnas) al DataSet
  57.            Connection.Close()                                                                          '//Cierra conexión
  58.  
  59.            Dim Tabla As DataTable = DataSet_.Tables(NombreTabla)                                       'Crea una tabla e introduce los datos del DataSet
  60.            Dim NumRows As Integer = Tabla.Rows.Count                                                   '//Obtiene el número de filas de la tabla
  61.  
  62.            file_Count = NumRows                                                                        '//Devuelve Número de filas de la tabla
  63.            Column_count = Tabla.Columns.Count
  64.            Resultado = Tabla.Rows(nFila).Item(nColumna)
  65.        Catch ex As Exception
  66.            MessageBox.Show(ex.Message)
  67.        End Try
  68.        Return Resultado
  69.    End Function
  70. End Module
  71. #End Region



[EJEMPLO SIMPLE]
A veces con las funciones metidas en un módulo y  con el Byval y el ByRef pueden ser confusas. Aquí te dejo un ejemplo sencillo de lectura dentro de un botón, para que lo veas más claro:

- Necesitas meter un ListBox y un Button

Código
  1.    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  2.  
  3.        Dim PathMDB As String = "C:\Carpeta\Database1.accdb"                                            '//Nombre de la tabla
  4.        Dim NombreTabla As String = "Direcciones"                                       '//La tabla se llama "Direcciones"
  5.  
  6.        Dim query As String = "SELECT * FROM " & NombreTabla
  7.        Dim MDBConnString_ As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PathMDB & ";"
  8.        Dim DataSet_ As New DataSet                                                    '//Caché de memoria interno de datos
  9.        Dim Connection As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection(MDBConnString_)        '//Conexión con la base de datos
  10.        Connection.Open()                                                              '//Abre la clase de datos
  11.        Dim cmd As New System.Data.OleDb.OleDbCommand(query, Connection)                                 '//Instrucción SQL
  12.        Dim DataAdapter As New System.Data.OleDb.OleDbDataAdapter(cmd)
  13.        DataAdapter.Fill(DataSet_, NombreTabla)                                        '//Adapta la tabla (fila, columnas) al DataSet
  14.        Connection.Close()                                                             '//Cierra conexión
  15.  
  16.        Dim Tabla As DataTable = DataSet_.Tables(NombreTabla)                           '//Crea una tabla e introduce los datos del DataSet
  17.        Dim NumRows As Integer = Tabla.Rows.Count                                       '//Obtiene el número de filas de la tabla
  18.        For Each Filas As DataRow In Tabla.Rows
  19.            Dim Columna As Integer = 0                                                  '//La primera columna de la tabla
  20.            ListBox1.Items.Add(Filas.Item(Columna))                                     '//Devuelve las filas de la primera columna
  21.        Next
  22.  
  23.        '//Forma selectiva
  24.        'Label1.Text = Tabla.Rows(FILA).Item(COLUMNA)
  25.    End Sub

 Lo que hace este código es meter todos los elementos de la primera fila de una tabla en un ListBox
 
[LECTURA DE ARCHIVOS XLS O XLSX]
Si quieres leer archivos XLS (Excel) solo tienes que reemplazar:
Código
  1. Dim MDBConnString_ As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PathFileMDB & ";"

por esta otra línea:

Código
  1. Dim MDBConnString_ As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PathFileMDB & ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=0'"

Y como nombre de tabla:

Código
  1. [Hoja1$]

Ejemplo:
Código
  1.   Dim NúmeroDeFilas As Integer = Nothing          '//Variable para introducir el número de filas de la tabla
  2.        Dim NúmeroDeColumnas As Integer = Nothing       '//Variable para introducir el número de columnas de la tabla
  3.        Dim Valor1 As String = LeerDatosTabla("C:\Carpeta\Libro1.xls", "[Hoja1$]", 1, 0, NúmeroDeFilas, NúmeroDeColumnas) '//Devuelve el valor1
  4.        Me.Text = Valor1

Sldos
234  Foros Generales / Foro Libre / Re: Debate elecciones 2015 en: 2 Diciembre 2015, 16:46 pm
En resumen, pienso que...

El valor de las partes(Podemos, Ciudadanos, PSOE, etc) será inferior al resto(PP) y que la suma de las partes (Podemos, Ciudadanos, PSOE, etc) será superior al resto.

Espero estar equivocado, pero creo que será así.
235  Foros Generales / Foro Libre / Convenio de Prácticas el nuevo timoempleo en: 2 Diciembre 2015, 12:34 pm
Hola

España es el país de los pillos, los tramposos, los estafadores, y los listillos... :¬¬

Los/as empresarios/as españoles/as,  se han sacado de la manga una forma de conseguir trabajadores/as GRATIS y se llama 'Convenio de Prácticas (becarios)'. Vale no es nuevo pero enseguida entenderás porqué lo digo.

Ya no les basta con contratar a trabajadores con 'mínima discapacidad' (si estás en silla de ruedas no les vales), para beneficiarse de ayudas y bonificaciones. Con trabajadores que lo mismo tienen una quemadura con secuelas o un poco de sordera. En fin buscan trabajadores que puedan cumplir y que tengan alguna 'tara' los suficientemente importante como para que disponga de un certificado  de discapacidad, pero que sea la más mínima posible y así poder beneficiarse de su contratación.




Ahora la moda es el Convenio de Prácticas. Durante hace un mes, más o menos, me estoy encontrando ofertas de empleo bastante a menudo demandando trabajadores dispuestos a trabajar por convenio, es decir SIN CONTRATO.

Existe el Convenio de Prácticas y Contrato de Prácticas. El primero es sin contrato  y el segundo es con contrato y sueldo.

Curiosamente se está demandando mucho para trabajos de baja cualificación. Por favor, ¿becario para mozo de almacén? No se si reír o llorar. Así que yo voy a la universidad y estudio por ejemplo...periodismo, y me contratan de becario para preparar pedidos en un almacén, o descargar y cargar camiones. Alucino en colores

Pues a esto hemos llegado.

NO ACEPTÉIS ESTOS TRABAJOS sin no cumplís los requisitos que ahora mencionaré, pues si no es así, te están tomando el pelo.



Requisitos para poder realizar un convenio de prácticas
Código:
-	Estar matriculado en una Universidad o un centro de formación autorizado para la firma de convenios de prácticas con empresas.
- Que la actividad de las prácticas esté relacionada con la formación del estudiante.
- Haber superado el 50% de los créditos necesarios para obtener la titulación.
- Si se trata de prácticas curriculares (incluidas en el plan de estudios), el estudiante debe estar matriculado en la asignatura vinculada a esas prácticas.
- No tener relación contractual alguna con la empresa o institución en la que se vayan a realizar las prácticas.

OJO  :rolleyes:
Que la actividad de las prácticas esté relacionada con la formación del estudiante.

Fuente:
primerempleo


En definitiva, ¿Tienes más de cuarenta? Pues se pasan por el forro de los huevos toda tu experiencia, tus títulos  (mira que me dieron la vara con lo de la ESO y el Bachillerato, lo tengo ¿y para qué?) . Se pasan por el forro todo, lo que quieren es ahorrarse dinerito y se les ocurre la brillante idea de contratar a estudiantes de Universidad, sin contrato y puede que sin pagar, porque aunque deban puede que no lo hagan.


Luego importan el black friday para incentivar el consumo, porque quieren que compremos pero no que cobremos.

Si no cobramos, no compramos, si cobramos poco, compramos poco, así de simple.

¡Que no te tomen el pelo!

Se nota que estoy enfadado ¿no? pues sí , y mucho.




236  Foros Generales / Dudas Generales / Re: Es posible compartir una url por whatsapp "botón" en: 1 Diciembre 2015, 19:43 pm
Hola
Como no te contesta nadie...

Prueba esto:
¿Cómo uso una Lista de difusión?

"Una Lista de difusión es una lista de destinatarios que queda guardada. Cuando usas esta lista, puedes volver a difundir un mensaje a los mismos destinatarios sin tener que seleccionarlos de nuevo uno por uno."

Sl2s
237  Programación / .NET (C#, VB.NET, ASP) / Re: ElektroKit v1.0 | API de propósito general para desarrolladores de .Net en: 1 Diciembre 2015, 19:25 pm
Hola

¡Enhorabuena por el proyecto!

Ya está en google XD


https://www.google.es/webhp?source=search_app&gfe_rd=cr&ei=x5AlVrTHMNOCiAaT8oW4AQ&gws_rd=ssl#q=elektrokit

Por cierto, no se de donde sacas el tiempo... :P Veo muchas horas ahí sin dormir.


¿No hay nada para girar la pantalla y que funcione en XP? Encontré varios códigos que funcionan en Vista y posterior pero no en XP.



238  Programación / .NET (C#, VB.NET, ASP) / Clase y propiedades con Webbrowser en: 29 Noviembre 2015, 14:25 pm
Hi

Lo que intento es lo siguiente:
-Obtengo código fuente de una página y lo cargo en A
-Cargo la página en el Webbrowser:  WB.DocumentText= A
-Cuando cargue la página llama al evento ReadWeb
-ReadWeb obtiene datos en modo lista y lo Carga en una variable List
-Desde Button_Click llamo a la clase  e intento obtener dicha lista.

Problema: No puedo obtener dicha lista.

Código
  1. Class clsGetDataWeb
  2.    Dim Lista As New List(Of String)
  3.    Dim WB As New WebBrowser
  4.    Dim strUrl As String = "http://www...."
  5.    Dim WebSource As String = Nothing
  6.  
  7.  
  8.    Public Sub GetDataWeb()
  9.  
  10.        '//OBTIENE EL CÓDIGO FUENTE DE LA PÁGINA
  11.        Try
  12.            WebSource = GetWebSource(strUrl) 'Obtiene el código de la página
  13.        Catch ex As Exception
  14.            MessageBox.Show(ex.Message)
  15.            Exit Sub
  16.        End Try
  17.  
  18.        'LLama al evento DocumentCompletes
  19.        AddHandler WB.DocumentCompleted, AddressOf WB_DocumentCompleted
  20.  
  21.        'Carga el código html en WB
  22.        WB.ScriptErrorsSuppressed = True
  23.        WB.DocumentText = WebSource
  24.  
  25.  
  26.    End Sub
  27.    Private Sub WB_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
  28.            ReadWeb(WB)
  29.    End Sub
  30.    Private Sub ReadWeb(ByVal WBrowser As WebBrowser)
  31.        Dim document As System.Windows.Forms.HtmlDocument = WBrowser.Document
  32.        Dim doc As HtmlDocument = WBrowser.Document
  33.        Dim divs As HtmlElementCollection = doc.GetElementsByTagName("td")
  34.        Lista.Clear()
  35.        For Each div As HtmlElement In divs
  36.            If div.GetAttribute("classname") = "Canción" Then Lista.Add(div.InnerText)
  37.        Next
  38.        Lista= Lista.Distinct.ToList
  39.    End Sub
  40.  
  41.    Private Function GetWebSource(ByVal strUrl As String) As String
  42.           ...AQUÍ CÓDIGO PARA OBTENER EL CÓDIGO FUENTE DE LA PÁGINA WEB
  43. Return CódigoFuente
  44.    End Function
  45.  
  46.    Public ReadOnly Property ParameterNames() As IEnumerable(Of String)
  47.        Get
  48.            Return New List(Of String)(Lista)
  49.        End Get
  50.    End Property
  51.  
  52. End Class
  53.  
  54. #End Region


Y desde el un evento click:

Código
  1. '//Llamo a
  2. Dim ClassDW As New clsGetDataWeb
  3.        ClassDW.GetDataWeb()
  4.        For Each N As String In ClassDW.ParameterNames
  5.            ListBox1.Items.Add(n)
  6.        Next


He constatado por puntos de interrupción que el código de la página lo obtiene y la lista también. Creo que el problema tiene relación con Evento DocumentCompleted y la propiedad Get

parace como si se estableciese la propiedad antes de que se obtenga la lista

Gracias

[SOLUCIONADO]

Era lo que yo pensaba  :-\

Se carga la propiedad antes de que se obtenga la lista. Para solucionarlo he añadido un simple código de espera
Código
  1.    Public ReadOnly Property ParameterNames() As System.Collections.Generic.ICollection(Of String)
  2.        Get
  3.  
  4.            While [LISTA].Count = 0
  5.                My.Application.DoEvents()
  6.            End While
  7.  
  8.            Return New List(Of String)([LISTA])
  9.        End Get
  10.    End Property
239  Programación / .NET (C#, VB.NET, ASP) / Re: Cambiar estilo de las ventanas (invertir, quitar botones, bloquear, etc) en: 29 Noviembre 2015, 00:24 am
Otra forma de cambiar el estilo de una ventana...

Código
  1. Public Class Form1
  2.    Const WS_VSCROLL As Integer = &H200000
  3.    Const WS_HSCROLL As Integer = &H100000
  4.    Const WS_DISABLED As Integer = &H8000000
  5.  
  6.    Enum Style_Window
  7.        FLAT = &H0
  8.        NOBORDER_3D = &H400000 '3d sin bordes
  9.        NOTITLEBAR = &H40000 'con bordes sin barra de título
  10.        FLAT_3D = &H800000 'Flat style con línea externa
  11.        BORDER_NOTITLEBAR_SCROLLBAR = &HBEBC20 'con bordes sin barra de título con ScrollBAr
  12.        NOBUTTONSBAR = &HC00000 'sin botones en la barra y no redimensionable
  13.        NOBUTTONSBAR_RESIZABLE = &HC50000 'sin botones en la barra y  redimensionable
  14.        TYPE_MSGBOX = &HC89500 'solo boton cerrar no redimensionable (tipo msgbox)
  15.        TYPE_MSGBOX_NOMIN = &HC99500 'Cerrar + max no redimensionable (tipo msgbox)
  16.        TYPE_MSGBOX_NOMAX = &HCA0000 'Cerrar + min no redimensionable (tipo msgbox)
  17.        TYPE_MSGBOX_ALLBUTTONS = &HCB0000 'todo no redimensionable
  18.        ONLY_CLOSEBUTTON = &HCC0000 'Solo botón Cerrar redimensionable
  19.        ONLY_CLOSE_MAX = &HCD0000 'Cerrar + max redimensionable
  20.        ONLY_CLOSE_MIN = &HCE0000 'Cerrar + min redimensionable
  21.        ALLBUTTONS_RESIZABLE = &HCF0000  'redimensionable
  22.        SCROLLBARS = WS_VSCROLL + WS_HSCROLL
  23.    End Enum
  24.    Enum ExStyle_Window
  25.        BIGBORDER = &H200  'borde ancho
  26.        NORMAL_TITLE_LEFT = &H0 'título a la izquierda
  27.        NORMAL_TITLE_RIGHT = &H1000  'título a la derecha
  28.        INVERT_TITLE_LEFT = &H405000  'Invertido con título a la izquierda
  29.        INVERT_TITLE_RIGHT = &H400000  'Invertido con título a la derecha
  30.        TOOLWINDOW_BIGBORDER_TITLELEFT = &H102390 'Tool window con título a la izquierda y borde grueso
  31.        TOOLWINDOW_BIGBORDER_TITLERIGHT = &H103390 'Tool window con título a la derecha y borde grueso
  32.        TOOLWINDOW_TITLELEFT = &H102490 'Tool window Invertido con título a la izquierda y borde fino
  33.        TOOLWINDOW_TITLERIGHT = &H103490 'Tool window invertido con título a la derecha y borde fino
  34.        TOOLWINDOWS_INVERT_TITLELEFT = &H401080 'Tool window Invertido con título a la izquierda y borde fino
  35.        TOOLWINDOWS_INVERT_TITLERIGHT = &H400180 'Tool window invertido con título a la derecha y borde fino
  36.        TOOLWINDOWS_INVERT_BIGBORDER_TITLELEFT = &H403390 'Tool window Invertido con título a la izquierda y borde grueso
  37.        TOOLWINDOWS_INVERT_BIGBORDER_TITLERIGHT = &H400290 'Tool window invertido con título a la derecha y borde grueso
  38.    End Enum
  39.    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
  40.        Get
  41.            Dim cp As CreateParams = MyBase.CreateParams
  42.            'cp.Style = cp.Style Or Style_Window.SCROLLBARS
  43.            cp.ExStyle = ExStyle_Window.TOOLWINDOWS_INVERT_TITLERIGHT
  44.            Return cp
  45.        End Get
  46.    End Property
  47.    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
  48.    End Sub
  49. End Class
240  Programación / .NET (C#, VB.NET, ASP) / Re: Cambiar estilo de las ventanas (invertir, quitar botones, bloquear, etc) en: 28 Noviembre 2015, 05:18 am
Está genial no sabía esa propiedad de Environtment  ;-)

Lo testearé en 64bits más tarde, porque el ratón se quedó sin pilas y estoy recargando y el ratón con teclado numérico es un palo.

sl2s


TESTEADO EN 64BITS

Bueno, ya lo he testeado funciona perfecto y no da ningún error.

Hay que tener en cuenta que el nombre que usé al declarar la función del API es irrelevante. Yo puedo poner VivaLaPepa y funcionaría igual:

 
Código
  1.  <System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="GetWindowLongA", SetLastError:=True)> _
  2.    Private Function VivaLaPepa(ByVal hWnd As IntPtr, _
  3.                                          <System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.I4)> ByVal nIndex As Integer) As Integer
  4.    End Function

Lo importante es el punto de entrada GetWindowLongA. Si no establezco el punto de entrada como ocurre por ejemplo en SetWindowPos entonces NO puedo hacer la llamada con otro nombre que no sea SetWindowPos, pues este mismo nombre va actuar como punto de entrada.

Ahora bien, he importado las entradas de USER32.DLL tando en X86 com x64 (Windows 7 64bits) y he encontrado dos  entradas distintas que no se encuentran e x86. Estas son las entradas en User32.dll:

x86
Código:
1916  197 00017D64 GetWindowLongA
1919  19A 00019938 GetWindowLongW

x64
Código:
1916  197 00017D64 GetWindowLongA
1917  198 00016050 GetWindowLongPtrA
1918  199 0001B970 GetWindowLongPtrW
1919  19A 00019938 GetWindowLongW

Importar Apis


Sin embargo si uso la entrada GetWindowLongPtrA (en sistema de 64bits) o GetWindowLongPtr aparece el siguiente error:

Código:
Unable to find an entry point named 'GetWindowLongPtrA' in DLL 'user32.dll

Así no entiendo lo del MSDN. Además pone que para que sea compatible con 32bit y 64bits y ya era compatible con 32bits usando GetWindowLong normal y punto de entrada  GetWindowLongA. Ahora se también que sigue siendo compatible también a 64bits.

Y otro detalle importate. Como he mencionado en 32bits no existen las entradadas GetWindowLongPtrA y GetWindowLongPtrW ¿Por qué dice
To write code that is compatible with both 32-bit ? si dichas entradas no existen en 32 bits XD. No se puede que sea para Windows 8 o posterior o desde lenguaje C
 

Lo de Environment.Is64BitOperatingSystem ya me ha resultado útil y lo he añadido al código de Importar Apis  ;D. Me va genial para determinar que ProgramFiles usar.

Sl2s

[NUEVO DATO SOBRE ESTE TEMA]

Dandole vueltas al asunto y viendo que Elektro a usado la siguiente convención de llamada para GetWindoLong:
Código
  1. <SuppressMessage("Microsoft.Interoperability", "CA1400:PInvokeEntryPointsShouldExist",justification:="Code-Analysis is 32-Bit so it only checks for the entrypoint in the user32.dll of the Win32 API.")><DllImport("user32.dll", EntryPoint:="GetWindowLongPtr", SetLastError:=True)>Public Shared Function GetWindowLongPtr(ByVal hwnd As IntPtr,          <MarshalAs(UnmanagedType.I4)> ByVal nIndex As WindowLongFlags) As IntPtrEnd Function

Me he preguntado ¿Y si mi apliación se está ejecutando con compatibilidad en X86 o como si se ejecutara en X86?

Así que me he dirigido a la configuración de mi proyecto haciendo doble click en My Project  en el Explorador de soluciones y en 'Compilar'
he visto que ponía CPU Destino = X86  y lo he cambiado a X64. He cambiado la llamada a GetWindowLong usando el punto de control GetWindowLongPtrA y sin suprimir errores:

Código
  1.  <DllImport("user32.dll", EntryPoint:="GetWindowLongPtrA", SetLastError:=True)> _
  2.    Public Function GetWindowLong(ByVal hwnd As IntPtr, _
  3.     <MarshalAs(UnmanagedType.I4)> ByVal nIndex As Integer) As IntPtr
  4.    End Function

Y NO me da error. Encuentra el punto de entrada  y el programa funciona perfecdtamente. Vuelvo a cambiar a  CPU Destino = X86 y denuevo me dice que no encuentra el punto de entrada.

Entonces llego a la conclusión que la llamada debe hacerse según como compiles el programa y no en el hecho que se ejecute en 32bits o 64bits. De modo que si lo compilo para 64bits y CPU Destino = X64 y llamo al punto de entrada GetWindowLongPtrA sólo será compatible con 64bits. Sin embargo si hago la llamada al punto de entrada GetWindowLongA es compatible en ambos.
Páginas: 1 ... 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [24] 25 26 27 28 29 30 31 32
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines