Delphi - para doc juzman

 
Vista:

para doc juzman

Publicado por juantastico (5 intervenciones) el 29/07/2004 06:55:56
tu me mandaste una pagina de donde podia apreder mas cosillas sobre delphi. esta muy buena, pero en el ejemplo de la alarma no entendi muy bien lo que hay que hacer para que en los dos forms se tenga la misma hora programada. el texto es el siguiente:

Bueno, pues ya queda poco. Pero antes un puntualización, quizás los más avispados se hayan dado cuenta que los dos formularios tienen unas etiquetas que muestran la hora a la cual está fijada la alarma. Bueno pues es muy fácil. Declaro una variable que contenga la hora a la que esté programa la alarma, y que esté disponible para ambos formularios. Así que la pongo en la sección Public del formulario, así está disponible para todos los formularios que hagan referencia en su cláusula uses al formulario principal. Fíjate que es del tipo TdateTime, eso es porque en ella vamos a almacenar un dato que representa una fecha y una hora, aunque nosotros solo usemos la parte de la hora. Si mirás el código un poco más abajo esta la sección Private del Formulario, en esta sección declaramos las variables que queremos que estén disponibles para todos los procedimientos y funciones de este y solo este formulario.

no se como declarar esa variable para que la hora programada este en los dos forms. te agradezco mucho tu ayuda. gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:para doc juzman

Publicado por Dr Juzam (821 intervenciones) el 29/07/2004 15:19:16
Pues efectivamente, para que la variable sea accesible desde todos los puntos de tu programa, debes declararla en la parte public (está en la parte superior del código del Form en cuestión).
Por ejemplo

public
HoraAlarma: TDateTime;

Luego, para hacer referencia a esta variable en otro formulario, éste debe "poder ver" al formulario que tiene la variable HoraAlarma. Esto se hace declarando la Unit del formulario con la variable en el uses del Form en cuestión (por ejemplo, la Unit del Form1 en la Unit del Form2). Sencillamente se puede hacer este paso en el menu File|Use Unit o pulsando Alt+F11. Una vez salga la ventanita, le dices que quieres usar el Unit1 (en este caso). Debes hacer esto teniendo marcado el Form2.
Hecho esto, ya se encuentra resuelto la mitad del problema. Luego, cuando quieras hacer referencia a la variable, el método es (Nombre del Form).(Variable). Así sería, si quisieses cambiar la hora de la alarma desde el Form2:

Form1.HoraAlarma:={Lo que fuese}

Espero que hayas podido entenderlo. Si no fuese así, dímelo y te mando un pequeño ejemplito sobre esto. Pero te aseguro que no tiene ninguna dificultad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:para doc juzman

Publicado por juantastico (5 intervenciones) el 29/07/2004 23:17:26
gracias dr juzman, ya entendi esa parte, pero ahora me complica como resolver elresto del problema. no entiendo como mostrsr la hora del sistema en el form1 , como activar la alarma y como llamar al archivo de sonido para que suene la alrma. gracias por la ayuda, espero que me pueda orientar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:para doc juzman

Publicado por Dr Juzam (821 intervenciones) el 30/07/2004 01:35:48
Existe un procedimiento llamado DecodeTime. Su funcionamiento es tomar un valor de tiempo dado y extraer de él las horas, minutos, segunods milisegundos. Por otro lado, la función Now devuelve el valor de la hora actual del sistema. El siguiente ejemplo muestra como funcionan estos dos (vienen en la ayuda de Delphi. Puedes consultarla para más información):

procedure TForm1.FormCreate(Sender: TObject);
var
Hour, Min, Sec, MSec: Word;
begin
DecodeTime (Now, Hour, Min, Sec, MSec);
Label1.Caption:=IntToStr(Hour)+':'+IntToStr(Min)+'.'+IntToStr(Sec);
end;

Este procedimiento devuelve la hora actual del sistema, partiéndola en horas, minutos, segundos y milisegundos. Yo desecharía los milisegundos para el reloj.
Hay muchas formas de abordar el problema. Una de ellas es declarar las variables Hora, Minutos y Segundos en el Public del Unit1. Igualmente, declaras unas variables AlHora, AlMinuto y AlSegundo que guarden la hora, minuto y segundo de la alarma (que las cambias en el Form2 por ejemplo, llamandolas Form1.AlHora := {Lo que sea}). Todas estas variables son Word (un tipo entero sin signo).
En el OnCreate coges la hora del sistema y en el OnTimer del Timer1 incrementas los segundos. Luego con un par de if miras si se debe avanzar el minuto, una cosa así:

Segundos:=Segundos+1; //O inc(Segundos)
if Segundos>59 then begin
Segundos:=0 ;
Minutos:=Minutos+1; //O inc(Minutos)
end;

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:para doc juzman (Continuación)

Publicado por Dr Juzam (821 intervenciones) el 30/07/2004 01:40:32
Luego, dentro del mismo OnTimer puedes llamar a otro procedimiento que compruebe la hora de la alarma. Sencillamente
if (Hora=AlHora) and (Minutos=AlMinuto) then
//Que suene la alarma.

La alarma puedes hacerla sonar, como dice el ejemplo, con sndPlaysound ('Ruta hacia el archivo de sonido', snd_async). Sin embargo, puedes usar igualmente el componente MediaPlayer de la paleta System. Yo te aconsejo que uses este último. Si decides usar el sndplaysound no olvides poner en el uses del form MmSystem.

Uff. Espero que te sea útil.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar