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

#91
Hola, tengo un nuevo problema, tengo una imagen la cual obtengo directamente de la base de datos... Una vez obtenida quiero almcenar su valor binario en un archivo (para lo del vcard), como puedo hacerlo???

gracias de antemano.
#92
Bueno, al final he decidido que es mejor poner un ProgressBar con el Style Marquee, pues creo que es mas logico...

Pero con el nuevo codigo sigo teniendo problemas... y es que no se muestra el progreso, es decir, no se carga la barrita, no
He leido webs y mas webs, codigos y codigos... y en todas partes pone que lo unico que hay que acer para hacer un que empiece el Progress Bar es establecer el ProgressBarSytle a marquee, y el MarqueeAnimatinSpeed al valor que se quiera, ademas de tener Application.EnableVisualStyles()...

El codigo:

-- Con un solo subproceso en segundo plano:

Código (csharp) [Seleccionar]
public partial class Interfaz_Conectar : Form
   {
       /* Delegados */
       public delegate void Delegado_Conectar();
       private delegate void Cerrar();
       private delegate void Animar_ProgressBar();

       /* Eventos */
       public event Delegado_Conectar Conectar;
       public event Delegado_Conectar noConectar;


       /* Proceso de segundo plano */
       private BackgroundWorker bw = new BackgroundWorker();
       
       /* Factoria */
       private Factoria_DAO factoria;
       
       public Interfaz_Conectar(Factoria_DAO _factoria)
       {
           InitializeComponent();
           this.factoria = _factoria;
           
       }

       /* Evento que tiene lugar cuando se muestra el formulario por primera vez */
       private void Interfaz_Conectar_Shown(object sender, EventArgs e)
       {
           
           
           bw.WorkerReportsProgress = true;
           bw.WorkerSupportsCancellation = true;
           bw.DoWork += new DoWorkEventHandler(bw_DoWork);
           bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);

         
           if (bw.IsBusy != true)
           {
               /* Se inicia la operacion en segundo plano */
               bw.RunWorkerAsync();
           }
     
       }

       private void bw_DoWork(object sender, DoWorkEventArgs e)
       {
           BackgroundWorker worker = sender as BackgroundWorker;

           if (worker.CancellationPending == true)
           {
               e.Cancel = true;
           }
           else
           {

               // Llamada segura desde el  para animar el progressBar
               if (this.InvokeRequired == true)
               {
                   Animar_ProgressBar animarPb = new                    Animar_ProgressBar(this.animarProgressBar);
                   this.Invoke(animarPb);
               }
               else
               {
                   this.animarProgressBar();
               }

               // Operaciones que realiza el subpreceso (conexcion con al base de datos)
               Gestion_Conectividad gconectividad = new Gestion_Conectividad();
               System.Threading.Thread.Sleep(100);
               if (gconectividad.Comprobar_conectividad(factoria))
               {
                   if (Conectar != null)
                        Conectar();
               }
               else
               {
                   if (noConectar != null)
                       noConectar();
               }
           }
       }
       

       private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
       {
           if (!(e.Error == null))
           {
               if (noConectar != null)
                   noConectar();
           }
           else
           {
               if (this.InvokeRequired == true)
               {

                   
                   Cerrar cerrar = new Cerrar(this.Cerrar_form);
                   this.Invoke(cerrar);
               }
               else
               {
                   this.Cerrar_form();
               }
           }        
       }

       private void animarProgressBar()
       {
               this.progressBarConectar.Style = ProgressBarStyle.Marquee;
               this.progressBarConectar.MarqueeAnimationSpeed = 100;

           }
       }

       private void Cerrar_form()
       {
           // Se detiene el progressBar y se cierra el form
           this.progressBarConectar.Style = ProgressBarStyle.Blocks;
           this.progressBarConectar.MarqueeAnimationSpeed = 0;
           this.Close();
       }
   }



-- CON DOS SUBPROCESOS COMO SOLUCION PARA LLAMAR EN UN BUCLE A "APPLICATION.DOEVENTS()"

Código (csharp) [Seleccionar]
   public partial class Interfaz_Conectar : Form
   {
       /* Delegados */
       public delegate void Delegado_Conectar();
       private delegate void Cerrar();
       private delegate void Animar_ProgressBar();

       /* Eventos */
       public event Delegado_Conectar Conectar;
       public event Delegado_Conectar noConectar;


       /* Proceso de segundo plano */
       private BackgroundWorker bw = new BackgroundWorker();
       private BackgroundWorker bwProgressBar = new BackgroundWorker();
       
       /* Factoria */
       private Factoria_DAO factoria;
       
       public Interfaz_Conectar(Factoria_DAO _factoria)
       {
           InitializeComponent();
           this.factoria = _factoria;
           
       }

       /* Evento que tiene lugar cuando se muestra el formulario por primera vez */
       private void Interfaz_Conectar_Shown(object sender, EventArgs e)
       {
           

           bwProgressBar.WorkerReportsProgress = true;
           bwProgressBar.WorkerSupportsCancellation = true;
           bwProgressBar.DoWork += new DoWorkEventHandler(bwProgressBar_DoWork);
           bwProgressBar.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwProgressBar_RunWorkerCompleted);

           
           bw.WorkerReportsProgress = true;
           bw.WorkerSupportsCancellation = true;
           bw.DoWork += new DoWorkEventHandler(bw_DoWork);
           bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);

           if (bwProgressBar.IsBusy != true)
           {
               bwProgressBar.RunWorkerAsync();
           }
         
           if (bw.IsBusy != true)
           {
               /* Se inicia la operacion en segundo plano */
               bw.RunWorkerAsync();
           }
     
       }

       private void bwProgressBar_DoWork(object sender, DoWorkEventArgs e)
       {
           BackgroundWorker worker = sender as BackgroundWorker;

           if (worker.CancellationPending)
           {
               e.Cancel = true;
           }
           else
           {
               if (this.InvokeRequired == true)
               {
                   Animar_ProgressBar animarPb = new Animar_ProgressBar(this.animarProgressBar);
                   this.Invoke(animarPb);
               }
               else
               {
                   this.animarProgressBar();
               }
               
           }
       }

       private void bwProgressBar_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
       {
           if (!(e.Error == null))
           {
               if (noConectar != null)
                   noConectar();
           }
           else
           {
               this.progressBarConectar.Style = ProgressBarStyle.Blocks;
               this.progressBarConectar.MarqueeAnimationSpeed = 0;
           }
       }

       private void bw_DoWork(object sender, DoWorkEventArgs e)
       {
           BackgroundWorker worker = sender as BackgroundWorker;

           if (worker.CancellationPending == true)
           {
               e.Cancel = true;
           }
           else
           {

               Gestion_Conectividad gconectividad = new Gestion_Conectividad();
               System.Threading.Thread.Sleep(1000);
               if (gconectividad.Comprobar_conectividad(factoria))
               {
                   if (Conectar != null)
                        Conectar();
               }
               else
               {
                   if (noConectar != null)
                       noConectar();
               }
           }
       }
       

       private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
       {
           if (!(e.Error == null))
           {
               if (noConectar != null)
                   noConectar();
           }
           else
           {
               if (this.InvokeRequired == true)
               {
                   Cerrar cerrar = new Cerrar(this.Cerrar_form);
                   this.Invoke(cerrar);
               }
               else
               {
                   this.Cerrar_form();
               }
           }        
       }

       private void animarProgressBar()
       {
           Boolean animar = true;
           if (animar)
           {
               this.progressBarConectar.Style = ProgressBarStyle.Marquee;
               this.progressBarConectar.MarqueeAnimationSpeed = 100;

               while (!this.bwProgressBar.CancellationPending)
               {
                   Application.DoEvents();
                   
               }
           }
       }

       private void Cerrar_form()
       {
           this.bwProgressBar.CancelAsync();
           this.Close();
       }
   }



Ayuda plz, no consigo que funcionee de ninguna de las dos maneras ...

Gracias
#93
Hola chic@s, como ya sabeis algunos estoy haciendo una agenda, y ahora me gustaría crear un calendario personalizado en el cual pueda insertar citas y que me muestre también las tareas que tenga programadas etc...

Cual es la mejor forma de hacerlo??? he importado el mscal.ocx pero esque me viene solo en inglés y no lo encuentro en español. Hay alguna otra forma de hacerlo??? hay alguna manera de conseguir algo similar a esto???: (os pongo algunas imágenes para que os hagais una idea)

http://citruslogic.net/images/ZestCalendar.png

http://www.codeproject.com/KB/wtl/HolidayCalendar/calendar.gif

http://www.software-dungeon.co.uk/images/108580_WebdailyCalendar.jpg

gracias de antemano..

#94
Lool, no encuentro ninguno que tenga el aniversario o el nombre del cónyuge...  >:(
#95
Vale, gracias a los dos! He modificado un poco el codigo, segun lo que me habeis dixo, aunque no tengo muy claras las ideas, pero os pongo el codigo a ver si voy bien encaminado...

Código (csharp) [Seleccionar]
public partial class Interfaz_Conectar : Form
    {
        /* Delegados */
        public delegate void Delegado_Conectar();
        private delegate void Detener_progreso();
        private delegate void Cerrar();
       

        /* Eventos */
        public event Delegado_Conectar Conectar;
        public event Delegado_Conectar noConectar;


        /* Proceso de segundo plano */
        private BackgroundWorker bw = new BackgroundWorker();
       
        /* Factoria */
        private Factoria_DAO factoria;

        public Interfaz_Conectar(Factoria_DAO _factoria)
        {
            InitializeComponent();
            this.factoria = _factoria;
        }

        /* Evento que tiene lugar cuando se muestra el formulario por primera vez */
        private void Interfaz_Conectar_Shown(object sender, EventArgs e)
        {
            bw.WorkerReportsProgress = true;
            bw.WorkerSupportsCancellation = true;
            bw.WorkerReportsProgress = true;
            bw.DoWork += new DoWorkEventHandler(bw_DoWork);
            bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
            bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);

            if (bw.IsBusy != true)
            {
                /* Se inicia la operacion en segundo plano */
                bw.RunWorkerAsync();
            }
       
        }

        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;

            int contador = this.progressBarConectar.Minimum;

            while (worker.CancellationPending != true)
            {
                if (worker.CancellationPending == true)
                {
                    e.Cancel = true;
                    break;
                }
                else
                {
                    Gestion_Conectividad gconectividad = new Gestion_Conectividad();
                    if (gconectividad.Comprobar_conectividad(factoria))
                    {
                        if (Conectar != null)
                            Conectar();
                    }
                    else
                    {
                        if (noConectar != null)
                            noConectar();
                    }
                    contador++;
                    System.Threading.Thread.Sleep(100);
                    worker.ReportProgress(/* ¿ que valor le paso? */ contador);

                }
            }
        }
       

        private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!(e.Error == null))
            {
                if (noConectar != null)
                    noConectar();
            }
            else
            {
                this.progressBarConectar.Value = this.progressBarConectar.Maximum;
                if (this.InvokeRequired == true)
                {
                    Cerrar cerrar = new Cerrar(this.Cerrar_form);
                    this.Invoke(cerrar);
                }
                else
                {
                    this.Cerrar_form();
                }
            }       
        }

        private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBarConectar.Value = e.ProgressPercentage;

        }


        private void Cerrar_form()
        {
            this.Close();
        }
    }



Primer problema: 
Código (csharp) [Seleccionar]
Gestion_Conectividad gconectividad = new Gestion_Conectividad();
                    if (gconectividad.Comprobar_conectividad(factoria))
                    {
                        if (Conectar != null)
                            Conectar();
                    }
                    else
                    {
                        if (noConectar != null)
                            noConectar();
                    }

No se como meter este trozo de codigo que es el que inicia las operaciones hacia la base de datos, y de manera paralela un bucle que haga un Sleep y el incremento del valor del PB...
Porque lo que yo tengo puesto ahora, es un bucle "estupido" que realiza un monton de veces la misma operacion a la base de datos xD

Gracias a los dos por las respuestas..
#96
Umm, alguien puede hacer la conversión a c# y que funcione?? porque lo he hecho pero hay algunas clases que no conocia y no se como ponerlas...

Gracias.
#97
Muchas gracias! Ahora ya se hacerlo!
Solo tengo un pequeño problema, y esuqe para establecer el valor maximo del progressbar necesito cuantificar el tiempo que tarda el subproceso en acceder a la base de datos... como puedo hacerlo??

El subproceso no hace mas que esto:

Código (csharp) [Seleccionar]
public override bool Comprobar_conexion(string database)
        {
            /* Exito */
            bool conectado = false;

            /* Sentencia Sql */
            String querySel = "EXEC sp_databases";
           
            /* Conexion con la base de datos */
            SqlConnection cnn = null;

            try
            {
                /* Conexion */
                cnn = new SqlConnection(cadena_conexion);
                SqlDataAdapter da = new SqlDataAdapter(querySel, cnn);

                /* Se almacenan los datos obtenidos en el DataTable */
                DataTable dt = new DataTable();
                cnn.Open();
                da.Fill(dt);
                cnn.Close();

                /* Se busca la base de datos que queremos conectar */
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    if (dt.Rows[i][0].ToString() == database)
                        conectado = true;                       

                }
               
            }
            catch (SqlException ex)
            {
                MessageBox.Show("ERROR al conectar con la base de datos:\n" + ex.Message, "Conexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
                conectado = false;
            }
            finally
            {
                if (cnn != null)
                {
                    if (cnn.State == ConnectionState.Open)
                        cnn.Close();
                }
            }
            return (conectado);
        }
#98
Cita de: Novlucker en 30 Julio 2010, 15:36 PM
Por que no comparas un .vcf que este correcto con los que estas creando tú?

Saludos


Ok, voy a ver si encuentro alguno. xD
#99
jajaja, me he explicado mal. Yo lo que quiero es escribir, pero luego al abrir el archivo el propio windows 7 me lo abre con el programa de contactos que tiene. el problema esque esos campos no los reconoce... No se si ahora me he explicado bien...

Saludos.
#100
Nada, no hay manera de que me lea nada. ni fechas, ni el nombre de la pareja ni nada de nada.

lo único que he conseguido es que me lea bien los acentos, el resto no. A ver si me podeis echar un ojo. Este es mi código:

Código (csharp) [Seleccionar]

using (StreamWriter sw = new StreamWriter(path, false, System.Text.Encoding.Default))
                    {
                        sw.WriteLine("BEGIN: VCARD");
                        sw.WriteLine("VERSION: 3.0");
                        sw.WriteLine("N:" + name);
                        sw.WriteLine("FN:" + formatedName);
                        sw.WriteLine("ORG:" + datos[23]);
                        sw.WriteLine("TITLE:" + datos[0]);                       
                        sw.WriteLine("NOTE:" + datos[34]);
                        sw.WriteLine("TEL;WORK;VOICE:" + datos[27]);
                        sw.WriteLine("TEL;HOME;VOICE:" + datos[11]);
                        sw.WriteLine("TEL;CELL;VOICE:" + datos[12]);
                        sw.WriteLine("TEL;WORK;FAX:" + datos[28]);
                        sw.WriteLine("TEL;HOME;FAX:" + datos[13]);
                        sw.WriteLine("ADR;WORK:;;" + datos[18] + ";" + datos[19] + ";" + datos[20] + ";" + datos[22] + ";" + datos[21] + ";");
                        sw.WriteLine("LABEL;WORK:" + datos[18] + "\\" + datos[19] + "\\" + datos[20] + "\\" + datos[22] + "\\" + datos[21]);
                        sw.WriteLine("ADR;HOME:;;" + datos[6] + ";" + datos[7] + ";" + datos[8] + ";" + datos[9] + ";" + datos[10] + ";");
                        sw.WriteLine("LABEL;WORK:" + datos[6] + "\\" + datos[7] + "\\" + datos[8] + "\\" + datos[9] + "\\" + datos[10]);
                        sw.WriteLine("EMAIL;PREF;INTERNET:" + datos[14]);
                        sw.WriteLine("URL:" + datos[15]);
                        sw.WriteLine("X-ANNIVERSARY:" + fecha);
                        sw.WriteLine("item1.X-SPOUSE:" + datos[31]);
                       
                        sw.WriteLine("END: VCARD");
                    }


Pero no me lee nada. La fecha simplemente era una variable string Que ya tenía el formato de fecha y la he convertido a fecha pero nada.  Y lo de spouse (cónyuje) tampoco me lo lee.

Os dejo unos enlaces que estoy siguiendo por si os sirven:

http://www.w3.org/2002/12/cal/vcard-notes.html

http://en.wikipedia.org/wiki/VCard

Salu2