Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Hacer sonar el Speaker del Ordenador (https://www.clubdelphi.com/foros/showthread.php?t=9740)

mrmanuel 30-04-2004 17:51:22

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. ;)

delphi.com.ar 30-04-2004 17:52:51

Beep(Frecuencia, Duracion);

DarkByte 30-04-2004 18:09:38

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

jachguate 30-04-2004 18:12:48

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.

;)

roman 30-04-2004 18:16:37

Cita:

Empezado por jachguate
unit windows:
Pero esto todavia existe en Delphi???

Hombre, ¿a tal grado alucinas a Windows???

:D :D

// Saludos

delphi.com.ar 30-04-2004 18:39:57

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!

Jure 30-04-2004 18:51:11

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

Código Delphi [-]
   MessageBeep(word(-1));


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.

jachguate 01-05-2004 00:12:49

pero que word(-1) no es igual a 65535???

Este tipo de "constantes" me parece un exceso... en serio!

roman 01-05-2004 00:43:45

Cita:

Empezado por jachguate
Este tipo de "constantes" me parece un exceso... en serio!

Puede ser. Lo que pasa es que la documentación especifica que el valor debe ser -1. Claro que la documentación también especifica que el parámetro es un entero sin signo pero bueno...

:D

// Saludos

jachguate 01-05-2004 01:04:09

No me digas que esa documentación es de Microchof, que no te lo creo!!!

:D :D :D

roman 01-05-2004 01:06:49

No te lo digo

;)

Jure 01-05-2004 02:40:00

... encontre esto ...
 
Cita:

Empezado por jachguate
pero que word(-1) no es igual a 65535???


Hola jachguate no me habia fijado, lo habia usado tal como consegui el codigo sin prestarle atención.
Cita:

Empezado por roman
...Lo que pasa es que la documentación especifica que el valor debe ser -1. ...


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:
Código Delphi [-]
Function MessageBeep(uType:  UINT):  BOOL;  // Windows Unit

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.

jachguate 01-05-2004 03:00:04

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.

;)

roman 01-05-2004 03:03:31

Cita:

Empezado por Jure
no se si sera un bug o la declaración de esta función de la API debe hacerse asi en Pascal[/color]

Ni es bug ni es que así tenga que declararse en Pascal. Cuando dije:

Cita:

Empezado por roman
la documentación también especifica que el parámetro es un entero sin signo

me refería a la documentación del sdk de Windows, o sea que así es la declaración en C.

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

jachguate 01-05-2004 03:04:45

Cita:

Empezado por Jure
Pero explica porque esa conversión

Creo que está lejos de explicarlo... como lo ves en mi post anterior.. yo realmente estoy mas confundido!!!

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.

;)

Jure 01-05-2004 03:31:58

... yo tambien ...
 
Cita:

Empezado por jachguate
...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...



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:

mrmanuel 03-05-2004 09:25:55

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