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

#2591
Cita de: Ragaza en  1 Abril 2017, 01:38 AMMi pregunta como puedo obtener la ruta o nombre de un recursos embedido

No existe tal ruta, pues se trata de un recurso, embedido... en el archivo de recursos del executable compilado.

Cita de: Ragaza en  1 Abril 2017, 01:38 AMYa que lo llamare por medio de la funcion
RunInterna("la ruta del recurso embedido", "pass");

...¿?. Intenta explicar de forma clara que es lo que estás intentando hacer.

Si pretendes ejecutar un archivo binario que has embedido como recurso, entonces lee aquí:

Y aquí te dejo lo siguiente por si te sirve, un código de uso genérico (extraido de mi framework de pago ElektroKit) para ejecutar recursos binarios en memoria, es decir, sin extraerlos previamente al disco:
( puedes usar cualquier conversor online a C# )

¡Saludos!
#2592
Hola.

Si no te he entendido mal quieres ser capaz de controlar el evento ComboBox.SelectedIndexChanged de los ComboBoxes que existan en las celdas de tu DataGridView, y obtener el número de columna y fila de la celda cada que que dicho evento se dispare.

Bien, pues para ello puedes controlar el evento DataGridView.EditingControlShowing de la siguiente manera. Te muestro un ejemplo que puedas adaptar a tus necesidades:

Código (vbnet) [Seleccionar]
Public NotInheritable Class Form1 : Inherits Form

   Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown

       Dim column As New DataGridViewComboBoxColumn()
       With column
           .DataSource = "qwerty".ToArray()
           .ValueType = GetType(Char)
       End With

       Me.DataGridView1.Columns.Add(column)

   End Sub

   Private Sub DataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) _
   Handles DataGridView1.EditingControlShowing

       Dim cb As ComboBox = DirectCast(e.Control, ComboBox)
       ' Eliminar un posible controlador de evento que haya sido agregado anteriormente, para evitar agregar varios.
       RemoveHandler cb.SelectedIndexChanged, AddressOf Me.ComboBox_SelectedIndexChanged
       ' Aasociar el nuevo controlador.
       AddHandler cb.SelectedIndexChanged, AddressOf Me.ComboBox_SelectedIndexChanged

   End Sub

   Private Sub ComboBox_SelectedIndexChanged(sender As Object, e As EventArgs)

       Dim cb As ComboBox = DirectCast(sender, ComboBox)

       If (cb.SelectedIndex <> -1) Then
           Dim dgv As DataGridView = DirectCast(cb.Parent.Parent, DataGridView)
           Dim cell As DataGridViewCell = dgv.CurrentCell
           Dim colIndex As Integer = cell.ColumnIndex
           Dim rowIndex As Integer = cell.RowIndex

           Dim sb As New StringBuilder()
           sb.AppendLine(String.Format("Selected index changed: {0}", cb.SelectedIndex))
           sb.AppendLine(String.Format("Column Index: {0}, Row Index: {1}", colIndex, rowIndex))
           MessageBox.Show(sb.ToString())
       End If

   End Sub

End Class


¡Saludos!
#2594
Cita de: NoBullshit en 31 Marzo 2017, 08:17 AM
Esta voz la tengo escuchada yo, sea para convertir audiolibros, o sea pars plugin de navegador. Si doy con el programa ya diré que lo tengo en otro dispositivo

Ojalá la encuentres. Precisamente yo la quiero para convertir libros y que me vaya leyendo la voz de la tia esa :xD, por que a diferencia de cualquiera otra voz TTS que yo haya escuchado hasta ahora, es sencillamente perfecta, parece que te esté hablando un humano, en serio no tiene nada que ver con la porquería de voces de Loquendo, Ivona y programas similares... que en cada palabra pronunciada se nota que es una voz sintética.

Cita de: NEBIRE en 31 Marzo 2017, 17:30 PMmmmmm... me parece recordar que se llama "Teresa" y no estoy seguro de si efectivamente era de Loquendo, pero de hace entre 15 y 20 años...

Eso es algo imposible, la calidad del software de sintetización de hace < 6-8 años era simplemente ridícula, la síntesis de Loquendo es muy mala.

Fíjate en la sofisticación de la voz femenina de esos dos videos que he compartido, apenas se nota que haya 1 solo corte al pronunciar las palabras, de echo si no te dijera que es una voz sintética probablemente te costaría reconocer que lo es. Sin embargo con voces/programas de hace 10 años... se nota al instante, por que las voces producidas están llenas de glitches.

La sintesis de esta voz no tiene nada que se le pueda comparar a Loquendo, uf, sencilalmente es muy sofisticada, es de otro nivel superior, nunca habia visto una voz con tanto nivel de calidad. Por eso me intriga, quiero saber que voz es y que programa han usado.

¡Saludos!
#2595
Cita de: PETTETE en 31 Marzo 2017, 08:03 AMda error en el CLR, por que?

El tipo de error que recibirías en este caso, System.IndexOutOfRangeException y el mensaje de error que lo acompaña, "Índice fuera de los límites de la matriz" son lo suficientemente auto-descriptivos para hacerte una idea de lo que ocurre.




El índice de un Array en la programación .NET empieza por el número Cero, y la propiedad Count / Length devuelve el número de elementos en un Array.

Lo explicaré de otra forma:
Si tu añades cinco elementos a un array, el margen numérico que podrás utilizar en el indexer de ese array será desde el 0 hasta el 4:
Ejemplo:
Código (vbnet) [Seleccionar]
Dim arr As Object() = {item1, item2, item3, item4, item5}
Es decir que puedes usar desde arr(0) hasta arr(4).

Cuando llamas a la propiedad arr.Count / arr.Length, ésta devolverá la cantidad de elementos del array, es decir un valor de 5, puesto que el array contiene 5 elementos;
Entonces, al intentar iterar los elementos de la siguiente manera, estarías intentando acceder al índice arr(5), el cual no existe, y por lo tanto lanzaría un error:
Código (vbnet) [Seleccionar]
For i As Integer = 0 To arr.Length  ' 0 To 5
   Console.WriteLine(arr(i))
Next


Por eso se le debe descontar 1 al valor que devuelve la propiedad Count / Length:
Código (vbnet) [Seleccionar]
For i As Integer = 0 To (arr.Length - 1) ' 0 To (5 - 1)
   Console.WriteLine(arr(i))
Next


Lo mismo se aplicaría al ejemplo que pusiste de un búcle con la incrementación de la instrucción Step:
Código (vbnet) [Seleccionar]
For i As Integer = 0 To (arr.Length - 1) Step 1 ' 0 To (5 - 1) Increment 1
   Console.WriteLine(arr(i))
Next





Cita de: PETTETE en 31 Marzo 2017, 13:52 PMpero por eso se pone el -1? para que no salga del limite?
y que no llegue al 5 sino que se quede en el 4????

Exacto. Puesto que el índice de un array empieza por 0, la propiedad Count / Length siempre devolverá un valor mayor (un 1 más) puesto que lo que hace es contrar la cantidad de elementos del array, así que si un array contiene 1 elementos, Count / Length devolverá el valor "1", no "0"... evidéntemente.

¡Saludos!
#2596
Cita de: UserDistortion en 31 Marzo 2017, 09:29 AMNo se si se podra

Si, se puede, pero es cosa fea, muy engorrosa y con ciertas limitaciones:
...Esto es Batch.

Para tener más versatilidad y poder modificar el color de cada palabra o caracter a nuestro antojo tienes dos opciones, la primera sería olvidarse de Batch y de las limitadísimas funcionalidades que éste nos ofrece, y empezar a utilizar cualquier otro lenguaje que nos permita hacer lo que quieres (ya sea de forma built-in, o con librerías externas) como Python, Ruby o .NET (VB.NET / C#). La segunda opción sería seguir usando Batch y recurrir a una aplicación externa que interctuase con la ventana/buffer de la CMD, como por ejemplo la aplicación COLOUS:

Cita de: Eleкtro en 11 Enero 2016, 12:24 PMEDITO: Acabo de recordar, el programa de terceros de usuarios de elhacker.net que utilicé por más tiempo fue 'colous' (estuve dándole un par de años programando en Batch), aunque creo que no fue oficialmente publicado aquí sino en portalhacker, pero bueno, el autor del código publicó posts relacionados con su app, por ejemplo:


( Lamentablemente no funciona el enlace de descarga que compartí. Es cosa tuya buscarte la vida para encontrar el programa en este foro o en protalhacker o en Google, aunque ya te digo desde ya que lo mejor que puedes hacer es NO seguir usando Batch. )

Un ejemplo de su versatilidad, joder, cuanto tiempo hace de esto :xD:
Cita de: Elektro en 25 Noviembre 2009, 08:38 AM

Saludos!
#2597
Cita de: Constance en 31 Marzo 2017, 01:49 AMNomino a Randomize con 3 puntos y a El_Andaluz con otros 3 puntos para Moderadores del Foro Libre

Muy bonito, pero son los miembros del staff quienes deben nominar a los nuevos pupilos. ¿Nos quieres robar el puesto, Constance?. :¬¬ ¿No será que en realidad eres tú la que quiere moderar el foro libre para tener libertad y castigarnos con una sección dedicada a las fotos de tus gatitos?. :xD

En mi opinión personal @El_Andaluz y @Orubatosu cumplen con ciertos requisitos fundamentales para moderar el libre y ambos lo harían excelente, cada uno de ellos a su manera, los dos se complementarian bien... si, me estoy refiriendo a una doble moderación, o sino pues a uno solo de ellos. No creo que ninguno de los dos acabase quemado si practicamente viven en el foro libre :P.

Ya va siendo hora de que al menos les hagan Colaboradores,  A LOS DOS. Eso como mínimo...

#2598
Primero fue el MrGranBomba (o cara-anchoa) gastándole una "broma" a un repartidor y luego mostrando la intención de denunciarle, luego fue el Reset (el chino maltratador de gatos) dándole galletas rellenas de pasta a un vagabundo para intoxicarle... "broma" lo llamaron también, y ahora es el Paco Sanz este fingiendo una enfermedad terminal y pidiendo sustanciosas donaciones. Uno por uno va saliendo la escoria...

Bienvenidos a Youtube España.

¿Qué clase de infraser tendremos la oportunidad de conocer la próxima vez?, no lo sé, pero seguro que no pasan ni 3 meses antes de que vuelva a aparecer un nuevo gilipollacas en Youtube....
#2599
.NET (C#, VB.NET, ASP) / Re: Toolbox en C#
31 Marzo 2017, 00:33 AM
Cita de: Nolohagan en 30 Marzo 2017, 13:37 PM
A que te refieres con los segundo?

quiero arrastrar un Listbox desde Treeview hasta el panel.

Entonces olvida lo que dije, yo supuse que querías arrastrar el listbox dentro del área cliente del treeview para "insertarlo" en un nodo, así que te advertí de lo que necesitarías o podrías necesitar controlar (como el procedimiento WndProc/mensajes de ventana por si ibas a hacer otro tipo de modificaciones al TreeView), pero si lo que quieres es arrastrar el control a un panel/contenedor externo entonces la cosa no requiere ni la mitad de esfuerzo. Por eso primero de nada siempre hay que aclarar bien lo que uno necesita hacer antes de preguntar en un foro de programación donde los detalles es lo más importante...

Cita de: Nolohagan en 30 Marzo 2017, 13:37 PMY tu dices que las clases de uso generico tuyas me seran de ayuda para lo que yo quiero hacer?

La clase ControlDragger implementa la funcionalidad de mover "X" control por la colección de controles donde dicho control se encuentre; para hacer lo que pides habria que adaptarlo (y sería un coñazo). Pero olvida ese código que te mostré, por que si tan solo quieres arrastrar el control adentro de otra colección de controles entonces no necesitas implementar la funcionalidad de mover el control, lo que necesitas es hacer uso de la funcionalidad Drag&Drop (arrastrar y soltar) que proveen los controles de WindowsForms.




Lo primero de todo que debes tener en cuenta sería activar la propiedad AllowDrop del Panel para permitir soltar objetos/controles adentro:
Código (csharp) [Seleccionar]
this.panel1.AllowDrop = true;

Luego, tomando como ejemplo la clase que te mostré del TreeView, añadirías el siguiente controlador del evento MouseDown:
Código (csharp,30,36,37,38,39,45) [Seleccionar]
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Security.Permissions;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {

   [DisplayName("MyTreeView")]
   [Description("A extended TreeView control.")]
   [DesignTimeVisible(true)]
   [DesignerCategory("UserControl")]
   [ToolboxBitmap(typeof(TreeView), "TreeView.bmp")]
   [ToolboxItem(true)]
   [ToolboxItemFilter("System.Windows.Forms", ToolboxItemFilterType.Require)]
   [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
   public class MyTreeView : TreeView, IDisposable {

       [Browsable(true)]
       [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
       [Category("Child Controls")]
       public ListBox ListBox { get { return this.listBoxB; } }
       private ListBox listBoxB; // Backing field.

       [DebuggerStepThrough()]
       public MyTreeView(){
           this.SuspendLayout();
           this.listBoxB = new ListBox();
           this.listBoxB.MouseDown += this.ListBox_MouseDown;
           this.Controls.Add(this.listBoxB);
           this.listBoxB.Show();
           this.ResumeLayout(performLayout: false);
       }

       private void ListBox_MouseDown(object sender, MouseEventArgs e) {
           ListBox lb = (ListBox)sender;
           lb.DoDragDrop(lb, DragDropEffects.Move);
       }

       [DebuggerStepThrough()]
       protected override void Dispose(bool disposing) {
           if ((disposing)) {
               if ((this.listBoxB != null)) {
                   this.listBoxB.MouseDown -= ListBox_MouseDown;
                   this.listBoxB.Dispose();
                   this.listBoxB = null;
               }
           }
           base.Dispose(disposing);
       }

   }
}


Y por último, en el Form donde hayas colocado el panel, añadirías los siguientes controladores de evento para controlar el arrastre y el soltar/inserción del ListBox:
Código (csharp,13,14,15,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,34,35,36,37,39,40,41,42,43,44) [Seleccionar]
using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {
   public partial class Form1 : Form {
       public Form1() {
           InitializeComponent();
       }

       private void Form1_Load(object sender, EventArgs e) {
           this.panel1.AllowDrop = true;
           this.panel1.DragEnter += this.Panel1_DragEnter;
           this.panel1.DragOver += this.Panel1_DragOver;
           this.panel1.DragDrop += this.Panel1_DragDrop;
       }

       private void Panel1_DragEnter(object sender, DragEventArgs e) {
           Control ctrl = e.Data.GetData(e.Data.GetFormats()[0]) as Control;
           Panel pan = (Panel)sender;

           if (ctrl != null) {
               ctrl.Location = pan.PointToClient(new Point(e.X, e.Y));
               pan.Controls.Add(ctrl);
           }
       }

       private void Panel1_DragOver(object sender, DragEventArgs e) {
           Control ctrl = e.Data.GetData(e.Data.GetFormats()[0]) as Control;
           Panel pan = (Panel)sender;

           if (ctrl != null) {
               ctrl.Location = pan.PointToClient(new Point(e.X, e.Y));
           }

           e.Effect = DragDropEffects.Move;
       }

       private void Panel1_DragDrop(object sender, DragEventArgs e) {
           Control ctrl = e.Data.GetData(e.Data.GetFormats()[0]) as Control;
           if (ctrl != null) {
               // ...
           }
       }

   }
}


Nota: Una vez arrastrado el ListBox adentro del Panel, ten presente que el Panel se convertirá en el contenedor padre (parent) del ListBox.

¡Saludos!




EDITO: ¿Ralmente quieres arrastrar un ListBox en tiempo de ejecución, o más bien lo que quieres es arrastrar una etiqueta donde pone "ListBox" y que se genere un nuevo ListBox allá en donde hayas soltado esa etiqueta?, por que vaya, serían dos cosas complétamente distintas y hasta ahora tú has dicho "quiero arrastrar un ListBox" no "quiero arrastrar una etiqueta y que se cree un ListBox". Intenta dar DETALLES ESPECÍFICOS Y PRECISOS.
#2600
Cita de: NEBIRE en 30 Marzo 2017, 01:33 AMotra razón para usarla con Get y Set, es que tienes pleno control de su valor y de cuando esta cambia...

Es decir, no solo se contenta uno con recibir y devolver un valor, la mayor ventaja es precisamente poder SABER más cosas acerca del valor que se recibe (también cuando se entrega, aunque no ponga un ejemplo explícito), y en base a ello hacer lo que proceda si es necesario. Y la posibilidad de hacer más cosas en base a ese SABER acerca del valor recibido/devuelto.

Ya que estamos, otro ejemplo de notificación de cambios del valor de una propiedad sería mediante la implementación de la interfáz INotifyPropertyChange:




Otra ventaja bastante importante que no mencioné al utilizar propiedades, serïa la capacidad de utilizar classes de atributos específicos o compatibles para este tipo de miembros.
Los atributos son simples metadatos que podemos "adherir" a la definición de un miembro (en este caso a una propiedad) y que suelen modificar el comportamiento del código en tiempo de diseño.

Por ejemplo, al estar diseñando un control de usuario, un atributo muy usado para una propiedad sería el atributo "<Category()>", con el que podemos hacer que nuestra propiedad se represente dentro de una categoría específica en la grilla de propiedades del control, o el atributo "<Description()>" que nos permite presentar una descripción del propósito de nuestra propiedad en la grilla de propiedades del control:

Código (vbnet) [Seleccionar]
<Category("Appearance")>
<Description("The background color of the control.")>
<Localizable(True)>
Public Property BackColor As Color



La propiedad <Localizable(True)> se encargaría de traducir automáticamente el nombre "Appearance" en la grilla de propiedades al idioma actual de Visual Studio y también la descripción aportada en el atributo <Description()> siempre y cuando estos sean localizables, es decir que si usamos Visual Studio en Español entonces nuestra propiedad aparecería en la categoría "Apariencia" y su descripción sería la misma que usa Microsoft por defecto.

Existen muchos tipos de classes de atributos que son aplicables a distintos tipos de miembros (a classes, módulos, interfaces, propiedades, métodos y funciones, etc) y por supuesto NO todos ellos tienen un propósito estético, hay atributos para especificar un rango de valor mínimo y máximo para una propiedad, por ejemplo, o atributos para modificar el comportamiento del depurador de Visual Studio sobre un miembro específico.

¡Saludos!