2009-03-05 10 views
5

estoy usando un componente TWebBrowser en mi aplicación Delphi, cuyo contenido me carga mediante programación:clic molesto sonido en TWebBrowser

(aWebBrowser.Document as IPersistStreamInit). 
           Load(TStreamAdapter.Create(aMemoryStream)) 

en cada carga de componente produce un sonido de clic molesto. ¿Esto puede ser deshabilitado?
TIA

Respuesta

18

Eche un vistazo al procedimiento CoInternetSetFeatureEnabled en URLMON.DLL, como se documentó en here. Si habilitas FEATURE_DISABLE_NAVIGATION_SOUNDS para tu aplicación, harás lo que necesites.

1

¿Hay alguna posibilidad de que este sea el sonido estándar de "Iniciar navegación" de Windows (consulte "Panel de control" - "Sonidos y dispositivos de audio")?

7

Esto es windows setting. No estoy seguro de que tu aplicación deba cambiar esa configuración.

+0

esto es lo que busco – Cletrix

2

bien, esto es lo que he intentado:

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    Application.OnActivate := AppActivate; 
    Application.OnDeactivate := AppDeactivate; 
end; 

procedure TForm1.AppActivate(Sender: TObject); 
begin 
    with TRegistry.Create do 
    try 
    RootKey := HKEY_CURRENT_USER; 
    OpenKey('AppEvents\Schemes\Apps\Explorer\Navigating\.Current', False); 
    if ReadString('') <> '' then 
     RememberSoundFile := ReadString(''); 
    WriteString('', ''); 
    finally 
    Free; 
    end; 
end; 

procedure TForm1.AppDeactivate(Sender: TObject); 
begin 
    with TRegistry.Create do 
    try 
    RootKey := HKEY_CURRENT_USER; 
    OpenKey('AppEvents\Schemes\Apps\Explorer\Navigating\.Current', False); 
    WriteString('', RememberSoundFile); 
    finally 
    Free; 
    end; 
end; 

Se es fugly pero funciona. :-) Aunque básicamente estoy de acuerdo con Davy, esta solución al menos tiene la ventaja de que otras aplicaciones no se verán afectadas.
Puedo agregarlo como una opción de usuario para desactivar el clic, pero personalmente ¡realmente quiero que se vaya!

+0

"otras aplicaciones no se verán afectadas", mientras su aplicación se ejecuta todas las otras aplicaciones se verán afectadas. Sin mencionar el hecho de que si su aplicación se bloquea o su configuración no se restaura en absoluto ... (para hacerlo un poco más robusto haga esto en un bloque try catch en su app.dpr) –

+0

Esto está configurando el almacenamiento subyacente que IE usa para controlar la configuración. Afecta a todas las aplicaciones. Si bien tu aplicación tiene foco, otras aplicaciones no emitirán sonido. Use el CoInternetSetFeatureEnabled documentado para configurarlo solo para su aplicación. No es necesario alternar a medida que su aplicación gana y pierde el foco. –

+1

Acepté la respuesta de Nick. En cuanto a las otras aplicaciones, para mí es incluso mejor si se mantienen en silencio mientras no tienen el foco. Davy, tienes razón sobre la situación del choque, pero mis aplicaciones nunca fallan (sí, claro :-)) – stevenvh

Cuestiones relacionadas