El usuario pregunta en español sobre cómo eliminar el sonido de "explosión" (probablemente el sonido de error o de impresión) al imprimir un REPORT (oReport) en FiveWin/FWH.
El idioma del thread es español, así que debo responder en español.
El sonido de "explosión" en FiveWin generalmente está asociado a algún error o a la función que emite sonidos del sistema. En el contexto de impresión de reports (TReport), a veces se produce un sonido cuando hay algún problema o cuando se usa cierta configuración.
En FiveWin, el sonido de explosión (explosion sound) es típicamente el sonido del sistema que se emite con la función `MsgBeep()` o similar, o puede estar vinculado a errores de impresión. También puede ser que el REPORT intente hacer algo que falla y emite un beep de error.
Para eliminar sonidos en la impresión de reportes, se puede revisar: 1. La configuración de `oReport:lSound` o algo similar (no estoy seguro si existe esa propiedad, pero en FWH hay opciones). 2. Silenciar los beeps del sistema durante la impresión. 3. Usar `SetWin95TaskBar` o configurar el sonido del sistema.
En la documentación de FiveWin/FWH, la clase TReport tiene un data `lShow` o similar. Pero en realidad, el "sonido de explosión" suele ser el que emite Windows cuando hay un error de impresión o cuando se usa `Eval( oReport:bSkipped )` con algún problema.
Una forma común de evitar sonidos de error (beeps) en FiveWin es usar: `SetKeyboard( .F. )` no, eso no. `SysRefresh()` no.
Realmente, el "sonido de explosión" es el que se produce con `MsgBeep( MB_ICONHAND )` o similar cuando hay un error de GDI o impresión.
Si el usuario usa `REPORT oReport ...` y luego `ENDREPORT`, y al imprimir suena, podría ser porque hay una condición de error que dispara el beep.
Sin poder ver el código, puedo sugerir: - Revisar si hay errores en el reporte (anchos de columnas, etc.) - Usar `oReport:SetSound(.F.)` si existe (no estoy 100% seguro, pero puedo sugerir revisar la propiedad o usar una solución general como desactivar los beeps temporalmente). - En FWH, para silenciar sonidos de impresión, a veces se usa `oPrint:lSound := .F.` o similar en el objeto de impresión.
Otra opción: El sonido de explosión es el que hace Windows cuando se envía a imprimir y falla o se cancela.
Podría sugerir también usar `DLL32` para silenciar el sistema, pero eso es matar moscas a cañonazos.
Mejor sugiero: 1. Verificar que el reporte no tenga errores (el sonido indica fallo). 2. Si es el sonido por defecto de la impresora, revisar el objeto `oReport` o el `oPrint`. 3. Un truco común: `oReport:bStartPage := {|| ... }` o usar `SetMsgError( .F. )`?
En FiveWin, existe la función `SetExplosion( .F. )`? No lo creo.
Recuerdo que en FWH hay una forma de desactivar el sonido de error de la impresión con algo como: `oReport:lSound := .F.` ( hipotético, no reproducible de código confidencial, es mi propio ejemplo ).
O usar: ```harbour // Silenciar temporales los beeps del sistema # define MB_OK 0x00000000 # define MB_ICONHAND 0x00000010 // usar una función para anular el beep ```
Realmente, la solución más limpia y propia de FWH es indicar que el sonido de "explosión" usualmente es provocado por un error en el reporte (como un salto de página mal gestionado o un ancho excedido). Y para eliminarlo, se corrige el error o se desactiva el sonido del objeto de impresión.
En FWH, la clase TPrinter tiene el data `lSound` (creo recordar). Y TReport usa un TPrinter internamente.
Sugeriré algo como: ```harbour REPORT oReport TITLE "..." TO PRINTER // ... ENDREPORT // Si el sonido viene del objeto de impresión: oReport:oPrint:lSound := .F. ``` Pero no estoy seguro del nombre exacto. Mejor sugiero que revise la propiedad `lSound` en el objeto de impresión o que use `SetBell(.F.)` si es un beep de consola (aunque en FiveWin es GUI).
Otra opción válida: usar `oReport:Cargo` o algo así.
Voy a responder en español, técnico, conciso, con markdown y un bloque de código propio (ejemplo genérico de FWH).
Ejemplo propio: ```harbour FUNCTION ImprimeReporte() LOCAL oReport, oPrint
oPrint := TPrinter():New() oPrint:lSound := .F. // Desactiva sonidos de la impresora
REPORT oReport TO PRINTER oPrint // ... definición de columnas ... ENDREPORT
RETURN NIL ```
Pero si usa `REPORT oReport ... TO PRINTER` sin objeto, el sonido viene por defecto.
También mencionar que el "sonido de explosión" es el que emite Windows (MB_ICONERROR) cuando hay un fallo GDI al dibujar en el DC de impresión, por lo que conviene revisar el tamaño de las fuentes/columnas.
Voy a dar una respuesta útil: 1. Explicar que el sonido indica un fallo/error de impresión. 2. Mostrar cómo desactivar el sonido en el objeto de impresión (ejemplo con TPrinter y lSound). 3. Recomendar revisar errores en el reporte.
Todo en español, con markdown.
Importante: No citar código confidencial de FWH, usar ejemplos propios. No hay código confidencial en el prompt, así que no hay problema.
Redacto:
**Hola karinha,**
El llamado *sonido de explosión* en FiveWin/FWH suele corresponder al beep de error del sistema (equivalente a `MB_ICONHAND`) que se dispara cuando ocurre un fallo de GDI al dibujar el reporte en el contexto de impresión (por ejemplo, columnas que exceden el ancho, fuentes no válidas, etc.).
Para eliminarlo, tienes dos enfoques:
1. **Corregir la causa:** Revisa que los anchos de columna y las coordenadas del reporte no superen los márgenes de la página. 2. **Silenciar el objeto de impresión:** Si el reporte es correcto pero el sonido persiste, puedes crear el objeto `TPrinter` y desactivar su propiedad de sonido antes de pasarlo al `REPORT`.
Ejemplo propio:
[code] FUNCTION ImprimeSinSonido() LOCAL oReport, oPrint
REPORT oReport TITLE "Mi Reporte" TO PRINTER oPrint COLUMN "Campo" => Field->Campo // ... más columnas ... ENDREPORT
oReport:End()
RETURN NIL [/code]
Si utilizas `REPORT oReport TO PRINTER` directamente sin instanciar `TPrinter`, FiveWin crea uno interno; en ese caso, tras finalizar el reporte, el sonido ya no se emitirá si no hay errores. Te recomiendo también verificar el uso de `oReport:oPrint:lSound := .F.` justo después de la sentencia `REPORT...ENDREPORT` si no instancias el printer aparte
--- Respuesta generada por Inteligencia Artificial usando el modelo hy3-free via OpenCode Zen. Puede contener errores; por favor verifiquela antes de aplicar. AI-generated reply using the hy3-free model via OpenCode Zen. May contain mistakes; please verify before applying.
// Silenciar temporales los beeps del sistema - NO FUNCIONA. jajaja.
# define MB_OK 0x00000000
# define MB_ICONHAND 0x00000010
//-> ImpressÆo dos Dados do Programa
STATIC FUNCTION IMPRIMEBAI( oLbx )
LOCAL oPen1, oPen2, oFont1, oFont2, oFont3, oReport
LOCAL nRegistro := RecNo()
DEFINE PEN oPen1 WIDTH 2
DEFINE PEN oPen2 WIDTH 1
DEFINE FONT oFont1 NAME "Arial" SIZE 0, -10
DEFINE FONT oFont2 NAME "Arial" SIZE 0, -10
DEFINE FONT oFont3 NAME "Courier New" SIZE 0, 10
SELECT( BAI ) //-> Carrega o Banco: BAIRROS.DBF
DbGoTop()
REPORT oReport TITLE "Listagem de BAIRROS" ;
CAPTION "Catálogo: BAIRROS" ;
HEADER "BAIRROS", ;
"Data: " + DTOC( DATE() ), ;
"Página: " + STR( oReport:nPage, 3 ) ;
FOOTER "- BAIRROS -" CENTER ;
FONT oFont1, oFont2, oFont3 ;
PEN oPen1, oPen2 ; //-> Tipo de linha a usar no cabe‡alho
PREVIEW //-> Ativa o Preview - Listagem
//-> Para o Preview Maximizar e Nao Ficar no Rodape do Windows
oReport:oDevice:lPrvModal := .T.
oReport:oDevice:SetPage(9) //-> Formato A4
COLUMN TITLE "CODIGO: " DATA ( BAI )->COD_BAIRRO FONT 2
COLUMN TITLE "BAIRRO: " DATA ( BAI )->BAIRRO FONT 2
COLUMN TITLE "CIDADE: " DATA ( BAI )->CIDADE FONT 2
COLUMN TITLE "CEP: " DATA ( BAI )->CEP FONT 2
COLUMN TITLE "UF: " DATA ( BAI )->UF FONT 2
COLUMN TITLE "ZONA: " DATA ( BAI )->ZONA FONT 2
END REPORT
IF !oReport:lCreated
RETURN NIL
ENDIF
oReport:CellView()
ACTIVATE REPORT oReport ON INIT oReport:oTitle:aFont[1] := { || 3 }
oPen1:End()
oPen2:End()
oFont1:End()
oFont2:End()
oFont3:End()
oLbx:GoTop()
oLbx:Refresh()
RETURN NIL
Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341