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

#4131
Sigo sin entender exactamente cual o donde se produce el problema... no se como intentar ayudarte.

...¿Es esto correcto?:

1. Compilas el programa, intentas ejecutarlo, y funciona correctamente.
2. Empaquetas el programa con InstallShield, el instalador funciona.
3. Despues de terminar el proceso de instalación, el programa que se ha expandido al directorio de instalación no funciona, y tiene el icono por defecto.

Si el problema está en el punto nº3, ¿y si actualizas la versión del software?... o tratas de buscar algún bug en el script de instalación.

Añado una pregunta:
  • ¿Estás en Windows XP?, en ese caso si que podría haber incompatibildiad con el icono que le asignas al programa.

Saludos
#4132
Cita de: mOrfiUs0 en 20 Diciembre 2015, 15:03 PMNo es necesario, por lo menos en c# y entiendo que IML es común. Así estás duplicando la información.

¿Por qué antes de contradecir a alguien no haces la prueba del algodón con un profiller de memoria para .Net que te muestre las fugas o leaks de memoria provocadas (y la relación a objetos, etc) antes de afirmar algo así?, las cosas se pueden decir de otra manera, parece que critiques por criticar o compitas por competir.

Simplemente dale un vistazo a la referencia del código fuente online de .Net Framework, a los controles built-in de WinForms, y si profundizas verás de lo que hablo...


Cómo ya comenté, la class Control (y UserControl) implementa la interfáz IDisposable; pues obviamente los controles built-in de Winforms utilizan recursos administrados, cómo no administrados, por lo tanto se debe llamar al método implementado Control.Dispose() si o si.

Hay otras classes que implementan la interfáz IDisposable y no es estrictamente necesario llamar al método Dispose() (ej. la class Process), pero este no es el caso.

El caso en el que realmente no sería necesario llamar a Control.Dispose(), sería si el control se añadiese a una colección de controles administrada (class ControlCollection) y liberases el control padre de esa colección (por ejemplo, al añadir los controles a la colección de controles de un Form, y despues de eso, liberar el Form), en ese caso WinForms administraría automaticamente las llamadas al método Control.Dispose() por cada control de la colección, de lo contrario, no, y ese no es el caso, ya que aquí la pregunta trata sobre crear controles dinámica e indefinidamente cada vez que suceda "x" evento, y así... si no los liberas, el garbage-collector no los va a liberar por ti.




Cita de: mOrfiUs0 en 20 Diciembre 2015, 15:03 PMUn simple for each Control in Formulario.Controls te da una referencia y por tanto no es necesario almacenar otro array.

1. No conozco a ninguna otra persona que le resulte más "simple" escribir código repetitivo con un For, que declarar una referencia de nombre corto o shortname ref;
   Indiscutiblemente es más productivo que escribir el bloque de un For, y es más eficiente que irerar una colección de controles hasta encontrar dicho control.

2. No es duplicar.

Aquí tienes un simple ejemplo demostrativo siguiendo la linea del código que publiqué arriba:
Código (vbnet) [Seleccionar]
Dim ctrls As ICollection(Of Control) = New HashSet(Of Control) From {
   New Control
}

Me.Controls.AddRange(ctrls.ToArray)
Me.Controls(0).Dispose()
MsgBox(ctrls(0).IsDisposed())


...Conviértelo a C# si quieres, estoy vago.




Cita de: mOrfiUs0 en 20 Diciembre 2015, 15:03 PMPara todos los controles que no están heredados de la API nativa de Windows, es decir no tienen un hWnd

Todo control (o user-control) es practicamente una ventana Win32, ya que implementa la interfáz IWin32Window, por lo tanto tienen un handle de ventana o hWnd, todos, ya que los controles de WinForms están basados en este modelo Win32.

Sin embargo, si estuviesemos hablando de WPF, la cosa sería distinta, pero obviamente tampoco es el caso. De todas formas de tecnología WPF si que se muy poquito, lo he usado muy poco.

Sin más, espero que esto haya sido suficiente con los motivos o argumentos que he dado. Si tienes preguntas al respecto, haz las que quieras (pero por favor, formula cualquier pregunta en un nuevo post, no invadamos más este hilo con offtopics).

Saludos.
#4133
¿te refieres tu al icono de la aplicación desarrollada en Vb.Net, o al icono del installer generado por InstallShield?, ¿cual es el que te da problemas?.

Intenta dar mas detalles de como lo estás haciendo. ¿el icono de la aplicación lo estableciste desde la página de propiedades del proyecto en Visual Studio, verdad?, de lo contrario, di que hiciste.

¿Puedes mostrar/subir el icono aquí?

saludos
#4134
Llego bastante tarde a responder (es lo que sucede si se publica en la sección equivocada, jeje), pero, ¿ya solucionaste el problema?, como veo que no recibiste respuesta te dejo alguna ayuda por si acaso...

Puedes hacerlo al menos de dos formas, la primera sería invocando el verbo de impresión del archivo (la constante "print"), con la class Process:
Código (vbnet) [Seleccionar]

Using p As New Process
   p.StartInfo.FileName = "C:\Imagen.png"
   p.StartInfo.Verb = "Print"
   p.Start()
End Using


Y la segunda manera sería utilizar la class PrintDocument para dibujar la imagen en el evento PrintPage, pero este modo en mi opinión es para tareas más sofisticadas que una simple impresión de un archivo multimedia.

Saludos
#4135
Lo siento, llego tarde al tema (es lo que sucede si publicas en la sección incorrecta).

Ya lo has solucionado de una manera, pero si por casualidad lees esto quiero preguntarte si el rendimiento es un factor importante para tu algoritmo, ya que en caso afirmativo entonces estás desaprovechando todo el potencial que .Net nos ofrece.

Para cálculos de complejidad computacional cómo son las permutaciones y combinaciones, puedes utilizar el paralelismo para ganar una elevada velocidad de procesamiento al utilizar todos los nucleos disponibles, y evitar todos esos wrappers de Vb6 que utilizaste reemplazándolos por el uso de LINQ (o al menos utilizar un For pero con los métodos de manipulación de string equivalentes y el método Array.Copy en lugar de ReDim), ganando así velocidad, mucho más estabilidad del algoritmo y reducción/legibilidad del código, a costa de perder una cantidad ínfima de rendimiento que ya habrías ganado al reemplazar el código vb6-estilizado.

Si lo necesitas dímelo y desarrollo una solución, pero trata de explicame mostrando un ejemplo con las expectativas del resultado de ejecución, ya que no me ha quedado del todo claro que quieres hacer con esos ocho grupos, como quieres calcular las permutaciones;
¿quieres intercambiar las posiciones de cada grupo preservando los 2 caracteres de cada grupo?, ¿o quieres sustituir de forma incrementativa cada caracter de cada grupo?.

Saludos!
#4136
Scripting / Re: Crear Acceso Especial con *.VBS
20 Diciembre 2015, 07:11 AM
Aquí se dió una respuesta al problema, si a alguien le interesa:
http://foro.elhacker.net/windows/ayuda_iquestcomo_poder_crear_este_tipo_de_acceso_directo-t437862.0.html;msg2042216#msg2042216

Cierro el tema por duplicado y por antiguedad.

Saludos!
#4137
Vale, ¿y que tiene que ver C-Sharp con Visual Basic 6?. desde luego... que publicais los posts donde os da la gana, todos.

Los mejores video tutoriales (según mi opinión personal, que será distinta a la de otras personas) los encontrarás aquí, eso si, en inglés.

Míra también este post, te podría resultar util:

Saludos!
#4138
Buenas

Si la aplicación compila correctamente (y si se ejecuta correctamente), y tras empacarla con Installshield la aplicación ya no funciona, entonces obviamente el problema es de algo que ha sucedido despues de la compilación, tal vez un conflicto causado por el proceso de del InstallShield.

Piensa que además, cuando existe un archivo executable con icono personalizado, pero el explorador de Windows muestra el icono de aplicación por defecto para ese archivo, es un claro signo de que el archivo está corrupto, y esa corrupción ha debido suceder post-compilación, no antes. ¿Qué le hiciste al archivo?, jeje.

Saludos!
#4139
Las preguntas sobre Vb.Net, publicarlas en la sección de .Net, y los demás, por favor reportar los mensajes siempre que podais... a ver si estamos a lo que estamos :P

Saludos!
#4140
Buenas

Añadir checkboxes a la UI suena bastante feo, aunque de todas formas no puedo hacer una buena evaluación del problema y post-recomendación sin saber el propósito de esos checkboxes, pero sea como sea yo creo que te convendría mucho más utilizar un ListBox al que añadirle las "opciones" o entradas, establecerle al control el modo de selección múltiple, y actualizar las entradas del ListBox en consecuencia. De esta manera sería un mecanismo más eficiente y además desocuparía parte del espacio que llenarían tantos chekboxes de la interfáz gráfica.
( ya te dió la idea el compañero @El Benjo, pero quise profundizar un poco en algunos de los motivos por los que podrías preferir utilizarlo. )

Aparte, quiero hacer un pequeño matíz:
Los controles implementan la interfáz IDisposable, por lo tanto se debe mantener una referencia a los controles que se crean en tiempo de ejecución, y una vez ya no se necesiten, liberarlos (llamando al método Control.Dispose()), de lo contrario se convierte en una metodología expensiva para la aplicación, pudiendo producir un buen leak de memoria dependiendo de cuantas veces se repita el procedimiento dinámico de creación de controles.
( Lo comento por si acaso para que lo tengas en cuenta si prefieres crear controles. )

Esto es una mezcla del ejemplo que ha mostrado el usuario @mOrfiUs0 y lo que he mencionado (aunque como ya dije, yo utilizaría un listbox):

Código (vbnet) [Seleccionar]
' Si el orden de los controles te importa, entonces utiliza una colección de tipo [b]IList(of T)[/b].
Private ctrls As ICollection(Of Control) = New HashSet(Of Control)

Private Sub CreateControls(ByRef ctrls As ICollection(Of Control), ByVal dt As DataTable)

   ctrls.Clear()

   For Each col As DataColumn In dt.Columns.Cast(Of DataColumn)()

       Dim ctrl As Control = New CheckBox
       With ctrl
           .Text = String.Empty
           .Location = Point.Empty
           ' etc...
       End With
       ctrls.Add(ctrl)

   Next

   With Me
       .SuspendLayout()
       .Controls.AddRange(ctrls.ToArray)
       .ResumeLayout()
   End With

End Sub


Saludos