Como puedo hacer esto :

Como puedo hacer esto :

Postby JoseGS » Thu Nov 19, 2009 5:51 pm

Hola amigos

Necesito hacer un dialogo que cuando se abra empiece a emitir sonidos que se van incrementando hasta que se presione un boton del dialogo y el usuario pueda ver hasta donde escucho...

Lo que no se es como capturar la instruccion de parada mientras el ciclo de sonidos se esta ejecutando...

Alguna idea, debe ser algo muy facil, pero hoy amaneci con la mente dormida... :lol:

Gracias por su ayuda...

Adjunto el codigo que llevo hasta ahora.

Code: Select all  Expand view
FUNC AUDIOMETRO()
LOCAL oDlg,oSAY,oFontBIG,oBtn,lStop:=.F.
LOCAL T:=0
LOCAL cSAY
DEFINE FONT oFontBIG  NAME "Arial" SIZE 0,-50
DEFINE DIALOG oDlg RESOURCE "AUDIOMETRO"
REDEFINE SBUTTON oBtn  ID 110 OF oDlg  RESOURCE "X_ALTO"    ACTION lStop:=.T. XP PROMPT "Alto"  TEXT 4
REDEFINE SAY oSAY VAR cSAY ID 104 OF oDlg UPDATE COLOR CLR_HRED,CLR_BLACK FONT oFontBIG
DO WHILE T<1500 .AND. !lStop
   T+=20
   BEEP(T,1)
   cSAY:=ALLTRIM(STR(T))+' Hz';oSAY:REFRESH();SYSREFRESH()
ENDDO
ACTIVATE DIALOG oDlg CENTER
RETU[]
JoseGS
 
Posts: 205
Joined: Wed Sep 02, 2009 3:11 am

Re: Como puedo hacer esto :

Postby Lautaro » Thu Nov 19, 2009 7:48 pm

Jose,


Modifica asi tu codigo


FUNC AUDIOMETRO()
LOCAL oDlg,oSAY,oFontBIG,oBtn,lStop:=.F.
LOCAL T:=0
LOCAL cSAY
DEFINE FONT oFontBIG NAME "Arial" SIZE 0,-50
DEFINE DIALOG oDlg RESOURCE "AUDIOMETRO"
REDEFINE SBUTTON oBtn ID 110 OF oDlg RESOURCE "X_ALTO" ACTION lStop:=.T. XP PROMPT "Alto" TEXT 4
REDEFINE SAY oSAY VAR cSAY ID 104 OF oDlg UPDATE COLOR CLR_HRED,CLR_BLACK FONT oFontBIG
ACTIVATE DIALOG oDlg CENTER NOWAIT

DO WHILE T<1500 .AND. !lStop
T+=20
BEEP(T,1)
cSAY:=ALLTRIM(STR(T))+' Hz';oSAY:REFRESH();SYSREFRESH()
ENDDO

do while .not. lstop
...
...
sysrefresh()
enddo

odlg:end()

RETU[]


Atte.,

Lautaro Moreira
User avatar
Lautaro
 
Posts: 322
Joined: Fri Oct 07, 2005 2:44 pm
Location: Osorno, Chile

Re: Como puedo hacer esto :

Postby JoseGS » Thu Nov 19, 2009 9:01 pm

Gracias Lautaro por contestar.

Efectivamente, ya lo habia hecho asi, pero el boton no agarra el clic... y por ende, el ciclo...

Alguna otra idea.

En clipper, lo hacia mediante INKEY(0) dentro del DO WHILE , que devolvia la ultima tecla pulsada, de esa forma detectaba la pulsacion de ESC y terminaba el ciclo...
JoseGS
 
Posts: 205
Joined: Wed Sep 02, 2009 3:11 am

Re: Como puedo hacer esto :

Postby Lautaro » Thu Nov 19, 2009 10:01 pm

Jose,

Agregale una pausa y un sysrefresh() antes del enddo del ciclo que controla el beep.


Atte..,

Lautaro Moreira
User avatar
Lautaro
 
Posts: 322
Joined: Fri Oct 07, 2005 2:44 pm
Location: Osorno, Chile

Re: Como puedo hacer esto :

Postby JoseGS » Thu Nov 19, 2009 10:35 pm

Como se agrega una pausa en un programa FWH
JoseGS
 
Posts: 205
Joined: Wed Sep 02, 2009 3:11 am

Re: Como puedo hacer esto :

Postby Lautaro » Thu Nov 19, 2009 10:36 pm

for nnn = 1 to yy
next nnn

donde yy es el tiempo de pausa.

la que no deberia ser muy grande.

Tambien puedes probar usando esta funcion

Code: Select all  Expand view

function WaitSeconds( nSecs )

   local nStart := GetTickCount()

   DEFAULT nSecs := 1

   while GetTickCount() - nStart < ( 1000 * nSecs )
   end

return nil

 


Atte.,

Lautaro
User avatar
Lautaro
 
Posts: 322
Joined: Fri Oct 07, 2005 2:44 pm
Location: Osorno, Chile

Re: Como puedo hacer esto :

Postby JoseGS » Thu Nov 19, 2009 11:13 pm

Gracias Lautaro

La pausa funciono perfecto... aprendi algo nuevo, pero lamentablemente el boton sigue sin funcionar.

No puedo hacer que se detenga y es algo que necesito.

Se trata de una funcion que va emitiendo un sonido en asenso. Cuando el usuario ya no puede escuchar el sonido (mas o menos a los 14000 Hz), debe detener el proceso.

Es una forma curiosa de medir la capacidad auditiva...


Alguna idea ?
JoseGS
 
Posts: 205
Joined: Wed Sep 02, 2009 3:11 am

Re: Como puedo hacer esto :

Postby Ruben Fernandez » Tue Nov 24, 2009 4:08 pm

Jose: Intenta esto:

Declara Static lStop, coloca otro boton prompt "comenzar", que lanzara la funcion del sonido.
La funcion que emite el sonido tendra que estar aparte y sera ejecutada con el boton comenzar.
Luego me cuentas.


Saludos

Ruben Fernandez
Ruben Fernandez
 
Posts: 366
Joined: Wed Aug 30, 2006 5:25 pm
Location: Uruguay


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 26 guests