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 - Eleкtro

#4121
Pues del mismo modo que lo haces en la iteración de filas para acceder a la celda 3, utilizando la variable de For...

Código (csharp) [Seleccionar]
foreach (DataGridViewRow row in gridservicio.Rows) {
if (((DataGridViewCheckBoxCell)row.Cells(3)).Selected) {
MessageBox.Show(Convert.ToString(row.Cells(2).Value));
}
}


Saludos!
#4122
Cita de: myepro en 22 Diciembre 2015, 14:30 PMAhora como tendría que hacer para que todo quede en el .exe?

¿Que .exe, el del installer?.

No se si te entendí bien, pero me das a entender que has modificado el source y has compilado el .exe resultante de la aplicación con las modificaciones deseadas, y ahora a lo que te refieres es a como reemplazar tu .exe compilado por el .exe que está empacado dentro del instalador, ¿es correcto?, pues eso sería una faena algo tediosa ya que deberías desarrollar el script de instalación desde cero y sin dejar ningún detalle (ej. la instalación del servicio de OSC inventary, y demás); vamos, aprender NSIS, y nunca he usado NSIS así que en ese aspecto no puedo ayudarte más, pero ya te expliqué como extraer los recursos del instaler, y eso sería el 50% del trabajo hecho.

¿Y si simplemente haces un script de instalación automatizada?, en el lenguaje que sea, Batch por ejemplo ...sería lo más sencillo.

Código (dos) [Seleccionar]
@Echo Off

Start /Wait "" "instalador.exe" /S
Copy /Y ".\aplicación modificada.exe" ".\ruta de instalación\aplicación original.exe"
Exit /B 0


De esa manera instalarías el installer original y una vez instalado reemplazarías el .exe original en la ruta d einstalación por tu .exe modificado.

Lo comprimirías todo en un RAR autoextraible (es decir, el instalador, el script batch, y el .exe modificado) para iniciar el script personalizado, y se acabó el problema.

Nota: Modificar "/S" por el parámetro de instalación esatendida adecuado:
http://www.silentinstall.org/nsis

PD: ¿Te referías a eso o no?.

Saludos!
#4123
Cita de: bybaal en 22 Diciembre 2015, 17:23 PMlo que necesito es una imagen, por ejemplo un cuadrado azul, que se vea un 25% transparente y poder cambiar el valor de transparencia en tiempo de ejecución.

Creo que te refieres a lo siguiente, y te sugiero hacerlo de la siguiente manera:

1. Mantener una referencia a la imagen original, opaca.
2. Crear una copia de la imagen opaca, con la transparencia deseada;
   cada vez que quieras modificar la transparencia haces una copia de la imagen opaca, y liberas los recursos de la copia semi-transparente anterior.

Código sacado de mi framework y modificado un poco a las circunstancias:
Código (vbnet) [Seleccionar]
''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Sets the opacity of an <see cref="Image"/>.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <example> This is a code example.
''' <code>
''' Dim img As Image = Bitmap.FromFile("C:\File.png").SetOpacity(opacity:=0.5F)
''' </code>
''' </example>
''' ----------------------------------------------------------------------------------------------------
''' <param name="sender">
''' The source <see cref="Image"/>.
''' </param>
'''
''' <param name="opacity">T
''' The target opacity level, from <c>0.0</c> to <c>1.0</c>.
''' </param>
''' ----------------------------------------------------------------------------------------------------
''' <returns>
''' The <see cref="Image"/> with the opacity applied.
''' </returns>
''' ----------------------------------------------------------------------------------------------------
''' <exception cref="ArgumentOutOfRangeException">
''' opacity
''' </exception>
''' ----------------------------------------------------------------------------------------------------
<DebuggerStepThrough>
Public Function SetOpacity(ByVal sender As Image, ByVal opacity As Single) As Image

   If (opacity < 0.0F) OrElse (opacity > 1.0F) Then
       Throw New ArgumentOutOfRangeException(paramName:="opacity")

   Else
       Using g As Graphics = Graphics.FromImage(sender)

           Dim matrix As New ColorMatrix
           matrix.Matrix33 = opacity

           Using ia As New ImageAttributes

               ia.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap)
               g.DrawImage(sender, New Rectangle(0, 0, sender.Width, sender.Height), 0, 0, sender.Width, sender.Height, GraphicsUnit.Pixel, ia)

           End Using

       End Using

       Return sender

   End If

End Function


Source original:

Saludos!
#4124
Foro Libre / Re: Debate elecciones 2015
22 Diciembre 2015, 04:20 AM
Cita de: programatrix en 22 Diciembre 2015, 02:32 AMel PP DEBE gobernar, ha ganado las elecciones y es el partido que representa a una mayoría de Españoles.

por suerte el PP tiene MAYORÍA ABSOLUTA en el senado.

El pueblo ha hablado y quiere 4 años más de PP

Espero que tengamos el gobierno del PP pronto, para continuar con la recuperación económica, las inversiones, el crecimiento y la creación de empleo

Finalmente, PODEMOS a partir de aquí se deshinfla.

Te digo una cosa con todos mis respetos, es triste leer ese tipo de comentarios viniendo de una persona inteligente como tu.

Pero bueno, entiendo que las opiniones están para respetarlas... aunque yo opine todo lo contrario.

Me gustaría hacerte una pregunta ...solamente si quieres responderla:
¿Por que motivo has votado al PP?, ¿que cosa positiva es la que puede seguir viendo un Español en PP/Rajoy?,
que alguien me lo explique, por que yo no entiendo a esa mayoría de Españoles... y siento una gran decepción por el ser humano en general.

Postdata:
[youtube=640,360]https://www.youtube.com/watch?v=oH47UcwSlIU&feature=em-uploademail[/youtube]

Saludos!
#4125
Cita de: myepro en 21 Diciembre 2015, 16:51 PMquería saber como se puede editar un instalador.
Mediante ingeniería inversa, desempacando el installer y volviendolo a construir con las modificaciones realizadas.

Cita de: myepro en 21 Diciembre 2015, 16:51 PMQuería saber si es posible modificar los parametros predeterminados de la aplicacion de forma mas o menos sencilla y de que manera habría que hacerlo.

El soft es OSC-NG Inventory y los parámetros a modificar son la dirección del server y que se tilden dos pestañitas de configuracion.

¿Los parámetros de la aplicación, o los del instalador?.

El instalador fue desarrollado con el install-builder de NSIS, lo tienes facil para extraer su contenido, lo dificil sería reconstruir el script de instalación y hacer "X" modificaciones que quieras.

En cambio, si te refieres a editar la configuración de usuario de la aplicación instalada, entonces primero debes averiguar donde se almacena dicha configuración, si es en un archivo local o en el registro de Windows... y según como sea, hacer las modificaciones convenientes en el archivo o clave de registro.
Para averiguar lo que dije solo tienes que monitorear cambios en el sistema de archivos y/o el registro cuando modifiques algún parámetro de la configuración.

EDITO:
Me acabo de dar cuenta que es un software open-source y el código fuente está publicado en GitHub:
https://github.com/OCSInventory-NG

Así que también podrías optar por descargarlo y modificar la interfáz de usuario por defecto como sea a tu gusto.

PD: Está desarrollado en VC++

Saludos.
#4127
Buenas!

1. Por favor, postea las preguntas de Vb.Net en la sección correcta. (hay muchos posts movidos que deberían haberte dado ya una pista...)

2. Debes utilizar las etiquetas Geshi para insertar código, lee las reglas del foro de programación general, gracias.




Es normal lo que te ocurre, ya que cuando activas el parámetro "wait", el hilo propietario desde el que has realizado la llamada se detiene por tiempo indefinido hasta que el proceso finalize su ejecución.

Para solucionar el problema que has descrito se me ocurren al menos dos maneras distintas,
pero antes de nada por cuestiones de productividad, rendimiento, y adquisición de buenas costumbres, te aconsejo parar ahora mismo de utilizar la función Microsoft.VisualBasic.Shell y cualquier otro miembro de ese espacio de nombres; reemplazalo por el uso de la Class System.Diagnostics.Process.

1. Puedes iniciar el proceso de la siguiente manera:
Código (vbnet) [Seleccionar]
Threading.Tasks.Task.Factory.StartNew(
   Sub()
       Using p As New Process
           p.StartInfo.FileName = "calc.exe"
           p.StartInfo.WindowStyle = ProcessWindowStyle.Normal
           p.Start()
           p.WaitForExit()
       End Using

       MessageBox.Show("cerrada la aplicación", "Calc.exe",
                       MessageBoxButtons.OK, MessageBoxIcon.Information)

   End Sub, TaskCreationOptions.None)


Nota:
En otras circunstancias tal vez podrias preferir utilizar el flag TaskCreationOptions.LongRunning para forzar la creación de un nuevo hilo en el grupo de hilos por defecto, ganando así más velocidad de inicialización de la tarea al no esperar en la cola de hilos.

2. O puedes suscribirte al evento Process.Exited:
Código (vbnet) [Seleccionar]
Friend WithEvents Calc As Process

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

   Calc = New Process
   Calc.EnableRaisingEvents = True
   Calc.StartInfo.FileName = "calc.exe"
   Calc.StartInfo.WindowStyle = ProcessWindowStyle.Normal
   Calc.Start()

End Sub

Private Sub Calc_Exited() Handles Calc.Exited

   MessageBox.Show("cerrada la aplicación", "Calc.exe",
                           MessageBoxButtons.OK, MessageBoxIcon.Information)

   ' Seguir con la lógica aquí...

End Sub


Saludos
#4128
Cita de: kub0x en 21 Diciembre 2015, 14:15 PMSimple y sencillo, se ve estupéndamente EleKtro, como curiosidad, ¿has probado a pasarle OCR?

Segurísimo que cualquier motor OCR leería perfectamente las letras, ni falta que hace probarlo creo yo, ya que no implementé medidas de seguridad por así decirlo, vaya.

El propósito del código que compartí era mostrar las letras lo más legible posible para el usuario, sin sobrecargar la imagen, ya que considero que una aplicación no necesita más.

Aquí les dejo una versión alternativa para mostrar maneras de extender el código, con fuentes de letra aleatorias, posición de letras aleatoria, curvas y ruido,
aunque no me gusta como ha quedado el resultado, se podría hacer mucho mejor pero no soy ningún gurú del GDI+ y no invertiré más tiempo en ello, ya que como dije, no quería sobrecargar la imagen.

     

     

Código (vbnet) [Seleccionar]
   Private Shared rand As New Random

   Public Shared Function GenerateCaptcha(ByVal length As Integer,
                                          ByVal width As Integer,
                                          ByVal height As Integer) As KeyValuePair(Of Bitmap, String)

       Dim vLinesGdi As New Dictionary(Of Point, Point)
       Dim hLinesGdi As New Dictionary(Of Point, Point)
       Dim charsGdi As New Dictionary(Of Char, Point)
       Dim captcha As New Bitmap(width, height)
       Dim fontHeight As Integer = (height \ 2)
       Dim vLineSpacing As Integer = 2
       Dim hLineSpacing As Integer = 2
       Dim str As String =
           String.Join("", (From c As Char In "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
                            Order By rand.Next Select c).Take(length))

       ' Set vertical lines.
       For i As Integer = 1 To width
           vLinesGdi.Add(New Point(i * vLineSpacing, 0), New Point(i * vLineSpacing, height))
       Next i

       ' Set horizontal lines.
       For i As Integer = 1 To height
           hLinesGdi.Add(New Point(0, i * hLineSpacing), New Point(width, i * hLineSpacing))
       Next i

       ' Set char positions.
       Using g As Graphics = Graphics.FromImage(captcha)

           For i As Integer = 0 To (length - 1)

               Using font As New Font(GetRandomFont, fontHeight)

                   Dim charPosX As Integer =
                       (((i * (width - (g.MeasureString(str(i), font, width).ToSize.Width \ length)))) \ length)

                   Dim charPosY As Integer = rand.Next((fontHeight \ 2), height - (fontHeight \ 2))

                   charsGdi.Add(str(i), New Point(charPosX, charPosY))

               End Using ' font

           Next

       End Using ' g

       Using g As Graphics = Graphics.FromImage(captcha)

           g.InterpolationMode = InterpolationMode.HighQualityBicubic
           g.SmoothingMode = SmoothingMode.HighQuality
           g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit
           g.CompositingQuality = CompositingQuality.GammaCorrected
           g.PixelOffsetMode = PixelOffsetMode.HighQuality

           ' Draw background.
           Using bgBrush As New LinearGradientBrush(New Point(0, (height \ 2)),
                                                    New Point(width, (height \ 2)),
                                                    Color.FromArgb(rand.Next(&HFF7D7D7D, &HFFFFFFFF)),
                                                    Color.FromArgb(rand.Next(&HFF7D7D7D, &HFFFFFFFF)))

               g.FillRectangle(bgBrush, New Rectangle(0, 0, width, height))
           End Using ' bgBrush

           ' Draw rectangles.
           Using linePen As New Pen(Brushes.Gray, 1)

               ' Draw vertical rect-lines.
               For Each linePair As KeyValuePair(Of Point, Point) In vLinesGdi
                   g.DrawLine(linePen, linePair.Key, linePair.Value)
               Next linePair

               ' Draw horizontal rect-lines.
               For Each linePair As KeyValuePair(Of Point, Point) In hLinesGdi
                   g.DrawLine(linePen, linePair.Key, linePair.Value)
               Next linePair

           End Using ' linePen

           ' Draw characters.
           For Each charPoint As KeyValuePair(Of Char, Point) In charsGdi

               Using font As New Font(GetRandomFont, fontHeight)

                   Using path As New GraphicsPath

                       path.FillMode = FillMode.Alternate
                       path.AddString(charPoint.Key, font.FontFamily, FontStyle.Bold, fontHeight,
                                      New Point(charPoint.Value.X, charPoint.Value.Y),
                                      New StringFormat With {
                                          .Alignment = StringAlignment.Near,
                                          .LineAlignment = StringAlignment.Center,
                                          .FormatFlags = StringFormatFlags.NoFontFallback Or StringFormatFlags.NoWrap
                                      })

                       g.DrawPath(Pens.Black, path)
                       g.FillPath(Brushes.Gainsboro, path)

                   End Using ' path

               End Using ' font

           Next charPoint

           ' Draw curve.
           Using curvePen As New Pen(Brushes.Black, 1.5F)
               g.DrawCurve(curvePen, charsGdi.Values.ToArray, 0, (length - 1), 10.0F)
           End Using ' curvePen

           '' Add noise.
           '' Nota: Usar "Bitmap.Lockbits()" para quien quiera una implementación más rápida y eficiente.
           'For x As Integer = 0 To (width - 1) Step 6
           '    For y As Integer = 0 To (height - 1) Step 6
           '        Dim num As Integer = rand.Next(0, 256)
           '        captcha.SetPixel(x, y, Color.FromArgb(255, num, num, num))
           '    Next
           'Next

       End Using ' g

       Return New KeyValuePair(Of Bitmap, String)(captcha, str)

   End Function

   Public Shared Function GetRandomFont() As FontFamily

       Using fontCol As New InstalledFontCollection
           Return (From family As FontFamily In fontCol.Families
                   Order By rand.Next Select family).First
       End Using

   End Function


Notas:
No lo he probado con un OCR.
El código es solo un ejemplo, una base donde agarrarse.
Conviene usar una colección de fuentes óptima y personalizada, para evitar fuentes de texto incompletas y/o simbólicas como la fuente Widenings de Microsoft.

Saludos!
#4129
Cita de: davenSpain87 en 21 Diciembre 2015, 14:09 PM¿que me recomiendan para diseñarme mi propio icono y no me suceda esto?

Pues el problema podría ser el modo de compresión de capas que esa web le dió al icono resultante.

Desde Photoshop puedes exportar directamente a .ico instalando este plugin:

Como Photoshop para mi no existe mejor herramienta en lo referente al diseño, pero IcoFx2 está muy bien tanto para el diseño como para la manipulación en general de iconos:

Saludos
#4130
El problema está en la forma en la que estás percibiendo las cosas.

Cuando llamas a la función ShowDialog, el flujo de control pasa a ese diálogo y el form propietario queda en inactividad hasta que se devuelva una respuesta por parte del diálogo que mostraste.

O dicho de otra forma, un diálogo exige al usuario completar y cerrar manualmente dicho dialogo, ya sea pulsando el botón de cerrar "X" o pulsando algún botón que lo haga cerrarse
, antes de poder continuar con la ejecución de la ventana propietaria.

En el código que has mostrado, esto que he explicado se resume en algo tan simple como que...:

Código (csharp,3) [Seleccionar]
Form4 frm = new Form4();
frm.ShowDialog(this);
frm.Dispose();


...la orden frm.Dispose() nunca se va a procesar hasta que el diálogo no se haya cerrado (o dicho de otra forma, hasta que devuelvas un resultado de diálogo), ya que la función frm.ShowDialog() es bloqueante.

Te sugiero que añadas un Timer en la Class del Form del diálogo para cerrarlo de forma automatizada pasado un intervalo de tiempo que tu creas conveniente para terminar de mostrar la imagen. ¿lo entendiste?.

Saludos!