FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Como puedo hacer esto :
Posts: 205
Joined: Wed Sep 02, 2009 03:11 AM
Como puedo hacer esto :
Posted: Thu Nov 19, 2009 05: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... :-)

Gracias por su ayuda...

Adjunto el codigo que llevo hasta ahora.

Code (fw): Select all Collapse
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[]
Posts: 337
Joined: Fri Oct 07, 2005 02:44 PM
Re: Como puedo hacer esto :
Posted: Thu Nov 19, 2009 07: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

Hola,

Soy un Contador que por necesidad aprendio a programar y se quedo programando.
Posts: 205
Joined: Wed Sep 02, 2009 03:11 AM
Re: Como puedo hacer esto :
Posted: Thu Nov 19, 2009 09: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...

Posts: 337
Joined: Fri Oct 07, 2005 02:44 PM
Re: Como puedo hacer esto :
Posted: 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

Hola,

Soy un Contador que por necesidad aprendio a programar y se quedo programando.
Posts: 205
Joined: Wed Sep 02, 2009 03:11 AM
Re: Como puedo hacer esto :
Posted: Thu Nov 19, 2009 10:35 PM

Como se agrega una pausa en un programa FWH

Posts: 337
Joined: Fri Oct 07, 2005 02:44 PM
Re: Como puedo hacer esto :
Posted: 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 (fw): Select all Collapse
function WaitSeconds( nSecs )

   local nStart := GetTickCount()

   DEFAULT nSecs := 1

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

return nil


Atte.,

Lautaro
Hola,

Soy un Contador que por necesidad aprendio a programar y se quedo programando.
Posts: 205
Joined: Wed Sep 02, 2009 03:11 AM
Re: Como puedo hacer esto :
Posted: 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 ?

Posts: 366
Joined: Wed Aug 30, 2006 05:25 PM
Re: Como puedo hacer esto :
Posted: Tue Nov 24, 2009 04: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

Gracias y Saludos

Ruben Fernandez - Uruguay

FWH 11.06, Harbour, Borland 5.82

Continue the discussion