[Solucionado]Orientación para crear un programa de escritorio

Iniciado por luchi, 18 Febrero 2015, 23:18 PM

0 Miembros y 1 Visitante están viendo este tema.

luchi

Hola.
Me gustaría crear un programa de escritorio, un programa sencillo en el que cada hora te alerte algo. El problema es que vengo de programación web y no sé por dónde empezar. El programa sería para win 7 y o Vista. Tengo nociones de Java, aunque no me asusta empezar a aprender otro lenguaje.

Eleкtro

#1
Cita de: luchi en 18 Febrero 2015, 23:18 PM
Hola.
Me gustaría crear un programa de escritorio, un programa sencillo en el que cada hora te alerte algo. El problema es que vengo de programación web y no sé por dónde empezar. El programa sería para win 7 y o Vista. Tengo nociones de Java, aunque no me asusta empezar a aprender otro lenguaje.

¿Por cada hora te refieres a cada intervalo de 60 minutos, o cada hora del reloj interno del SO?, ¿y por "alerta", te refieres a mostrar una caja de texto, o ventanas de notificación en la esquina de la pantalla?.

Sea como sea, en cualquier lenguaje te resultará más o menos sencillo de hacer, los lenguajes de programación suelen tener miembros para el manejo de datos como Fechas y Horas, y miembros para medir intervalos de tiempo y/o utilizar temporizadores (en el caso de que quieras eso).

Practicamente no se casi nada de Java, pero puedo mostrárte un ejemplo en Vb.Net (cuya traducción sería practicamente igual en C#, con pequeñas diferencias de sintaxis):

Esto es un ejemplo que espera 60 minutos de forma asíncrona (es decir, detiene la ejecución del hilo secundario durante 60 minutos) y muestra un mensaje de alerta:

Código (vbnet) [Seleccionar]
Imports System.Threading
Imports System.Threading.Tasks

Public NotInheritable Class TestForm : Inherits Form

   ''' <summary>
   ''' Handles the Load event of the TestForm control.
   ''' </summary>
   ''' <param name="sender">The source of the event.</param>
   ''' <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
   Private Sub TestForm_Load(ByVal sender As Object, ByVal e As EventArgs) _
   Handles MyBase.Load

       Me.RunAlertAsync(60 * 1000, "Mensaje de alerta")

   End Sub

   ''' <summary>
   ''' Waits asynchronouslly the specified time interval then shows an alert.
   ''' </summary>
   ''' <param name="interval">The interval, in ms.</param>
   ''' <param name="alertText">The alert text.</param>
   Public Sub RunAlertAsync(ByVal interval As Integer,
                            ByVal alertText As String)

       Task.Factory.StartNew(Sub()
                                 Thread.Sleep(interval)
                                 Me.ShowAlert(alertText)
                             End Sub)

   End Sub

   ''' <summary>
   ''' Shows an alert.
   ''' </summary>
   ''' <param name="text">The alert text.</param>
   Private Sub ShowAlert(ByVal text As String)

       MessageBox.Show(text, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

   End Sub

End Class


Y esto es un ejemplo que muestra alertas cada hora en punto del reloj interno del SO:
Código (vbnet) [Seleccionar]
Public NotInheritable Class TestForm : Inherits Form

   ''' <summary>
   ''' The timer that will notify an alert.
   ''' </summary>
   Protected WithEvents notifyTimer As New Timer With
       {
           .Interval = 250,
           .Enabled = False
       }

   ''' <summary>
   ''' Gets the alert text.
   ''' </summary>
   ''' <value>The alert text.</value>
   Private ReadOnly Property AlertText As String
       Get
           Return "Mensaje de alerta"
       End Get
   End Property

   ''' <summary>
   ''' Initializes a new instance of the <see cref="TestForm"/> class.
   ''' </summary>
   Public Sub New()
       Me.InitializeComponent()
       Me.InitializeTimer()
   End Sub

   ''' <summary>
   ''' Initializes the <see cref="notifyTimer"/>.
   ''' </summary>
   Private Sub InitializeTimer()
       Me.notifyTimer.Enabled = True ' Inicio el temporizador.
   End Sub

   ''' <summary>
   ''' Shows an alert.
   ''' </summary>
   ''' <param name="value">The value.</param>
   Private Sub ShowAlert(ByVal value As String)
       MessageBox.Show(value, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
   End Sub

   ''' <summary>
   ''' Handles the Tick event of the Timer1 control.
   ''' </summary>
   ''' <param name="sender">The source of the event.</param>
   ''' <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
   Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) _
   Handles notifyTimer.Tick

       ' Si el minuto actual es '0', entonces...
       If DateTime.Now.Minute = 0 Then
           DirectCast(sender, Timer).Stop() ' Detengo el temporizador.
           Me.ShowAlert(Me.AlertText) ' Muestro la alerta.
       End If

   End Sub

End Class


PD: Te los he documentado para que los entiendas mejor.

Saludos.








luchi

Me refería a un intervalo cada de 60 minutos. Pues gracias por el código pero ahora ¿cómo lo hago para ejecutarlo en el ordenador?

Eleкtro

#3
Cita de: luchi en 19 Febrero 2015, 01:14 AM
Me refería a un intervalo cada de 60 minutos. Pues gracias por el código pero ahora ¿cómo lo hago para ejecutarlo en el ordenador?

Necesitas compilar el código fuente para construir el archivo binario ejecutable, claro está, jeje.

Puedes descargar la versión Express de Microsoft VisualStudio aquí:

O puedes descargar mi instalador personalizado de la versión Ultimate, orientada a VB.Net, con un sin fin de addons para empezar a desarrollar con todo lo necesario y más, aquí:

Una vez hayas instalado VisualStudio, creas un nuevo proyecto de tipo WindowsForms bajo el lenguaje VB.Net, pegas el código fuente que mostré ( corrijes el nombre de la Class 'TestForm' por 'Form1' ) y entonces ya puedes empezar a adaptar el código a tus necesidades y formular las consiguientes dudas que tengas al respecto, en el subforo de la sección dedicada a la programación .Net :).

Saludos








luchi