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:
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:
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.