![]() |
Hacer sonar el Speaker del Ordenador
Hola a todos.
Este golpe una facil. :p ¿Cómo puedo hacer sonar el Speaker del Ordenador durante 'X' segundos? Un saludo. ;) |
Beep(Frecuencia, Duracion);
|
A mi en delphi 7 me dice:
[Error] Unit1.pas(28): Too many actual parameters Y si pruebo quitándo los parámetros, me salta el "¡¡PONG!!" del windows por el altavoz externo |
He de aclarar que hay dos versiones de beep.
unit sysutils: En mi versión de delphi (la 4), beep es un beep del sistema (que efectivamente hace sonar el altavoz), pero no se pueden especificar ni la frecuencia, ni la duración. unit windows: Pero esto todavia existe en Delphi??? me ha hecho recordar los viejos tiempos de turbo pascal, con el procedure sound :eek: Es la descrita por delphi.com.ar; la fecuencia está dada en Hertz (hz) y la duración en milisegundos. Para diferenciar cual de las dos queres usar, es mejor calificar completamente la función... es decir, en lugar de usar beep, usar sysutils.beep o windows.beep. Hasta luego. ;) |
Cita:
:D :D // Saludos |
Si me refería al Beep de la unit Windows (falto la aclaración), el tema es que con el SysUtils.Beep no puede definir el tiempo como pedía.
Obviamente si queremos desarrollar algo que se abtraiga de la plataforma, nos convendrá utilizar el Beep de SysUtils Saludos! |
... prueba esto...
Hay una funcion de la API que llama MessageBeep (mira la ayuda de DELPHI si deseas mas info. de ella) si le das un como parametro el valor -1 puedes usar el speaker del PC. la puedes usar asi:
No le puedes dar la duración pero si lo manejas con Sleep en un ciclo tal vez puedas hacer lo que quieres. Si miras este link tienes un ejemplo mas o menos como te digo que te puede ayudar: http://community.borland.com/article/0,1410,16838,00.html Espero que te sirva. Jure. |
pero que word(-1) no es igual a 65535???
Este tipo de "constantes" me parece un exceso... en serio! |
Cita:
:D // Saludos |
No me digas que esa documentación es de Microchof, que no te lo creo!!!
:D :D :D |
No te lo digo
;) |
... encontre esto ...
Cita:
Hola jachguate no me habia fijado, lo habia usado tal como consegui el codigo sin prestarle atención. Cita:
roman tiene razón, en la documentación de la API indica que el valor debe ser -1 (0xFFFFFFFF) para usar el PC Speaker pero revisando la unit Windows me encontre con esto:
el tipo UINT es un entero sin signo, realmente no se si sera un bug o la declaración de esta función de la API debe hacerse asi en Pascal. Pero explica porque esa conversión. Gracias por las acotaciones. Jure. |
La interpretación del valor 0xFFFFFFFF (o $FFFFFFFF para los fanáticos de pascal) depende precisamente de si se trata de un entero con signo, o de un entero sin signo. Pero el valor máximo de un tipo word (2 bytes), en todo caso, es 0xFFFF ($FFFF) que es equivalente a 65,535. Por el contrario, si se trata de un SmallInt (también 2 bytes) el valor 0xFFFF ($FFFF) significa -1 (debido a que el bit del signo está encendido!).
Si Uint es de 32 bits... sin signo, el valor 0xFFFFFFFF, es equivalente a 4,294,967,295. Al haber tremenda revolución de tipos... seria interesante ver lo que el compilador de delphi hace... como traslada word(0xFFFF) a Uint... lo lógico para mi, es que lo haga como 0x0000FFFF... pero no se.. alguien tiene tiempo de hacer una prueba?? Hasta luego. ;) |
Cita:
Cita:
Pero vamos, no seamos tan duros con MS :D . La función requiere un parámetro distinto de los otros (cualquier cosa que esto signifique) y por legibilidad consideraron mejor -1 que 0xFFFFFFFF. // Saludos |
Cita:
Si delphi lo declara asi en la unit Windows, es porque el api de windows espera un entero sin signo de 32 bits... pero que tiene que ver el Word(-1) en todo esto??? Hasta luego. ;) |
... yo tambien ...
Cita:
La funcion MessageBeep de la API espera valor -1 para activar el PC Speaker pero la declaración de la función en Delphi pide que sea un valor entero (UINT). Pero mira que uso MessageBeep($ffffffff ) y bingo: funciona. Ahora ya me estoy confundiendo tambien. ....:confused: :confused: :confused: |
Hola y muchas gracias a todos.
1º: No sabia iba a liar lo que he liado con el puñetero Beep del speaker, jejeje. 2º: Muchas gracias a todos, probaré lo que habéis dicho y os comento el resultado, de momento no se si funciona porque el Pc desde donde estoy programándolo no tiene el dichoso altavoz, he de hacerme con uno y probarlo. Nuevamente gracias a todos |
La franja horaria es GMT +2. Ahora son las 06:31:35. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi