2009-03-05 15 views
5

sto usando un componente TWebBrowser nel mio Delphi app, il cui contenuto mi carico di programmazione:Fastidioso click del suono in TWebBrowser

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

Su ogni caricare il componente produce un suono di click fastidioso. Può essere disabilitato?
TIA

risposta

18

Dai un'occhiata alla procedura CoInternetSetFeatureEnabled in URLMON.DLL, come documentato here. L'attivazione di FEATURE_DISABLE_NAVIGATION_SOUNDS per la tua app farà ciò di cui hai bisogno.

1

Qualsiasi possibilità che si tratti dello standard di Windows "Avvia navigazione" (vedere "Pannello di controllo" - "Suoni e periferiche audio")?

7

Questo è un windows setting. Non sono sicuro che la tua applicazione dovrebbe cambiare questa impostazione.

+0

questo era quello che cerco – Cletrix

2

OK, ecco cosa ho provato:

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; 

E 'fugly ma funziona. :-) Anche se sostanzialmente sono d'accordo con Davy, questa soluzione ha il vantaggio che le altre applicazioni non ne risentiranno.
Posso aggiungerlo come opzione utente per disabilitare il clic, ma personalmente lo voglio davvero!

+0

"le altre applicazioni non saranno interessate" bene, mentre l'applicazione è in esecuzione tutte le altre applicazioni saranno interessate. Per non parlare del fatto che se la tua applicazione si blocca o le tue impostazioni non vengono ripristinate affatto .. (per renderlo un po 'più robusto fallo in un blocco try try nell'app.dpr) –

+0

Questo è l'impostazione dello storage sottostante che IE usa per controllare l'impostazione. Colpisce tutte le applicazioni. Mentre l'app è attiva, le altre app non emetteranno alcun suono. Utilizza il documento CoInternetSetFeatureEnabled per impostarlo solo per la tua app. Non è necessario spostarlo come l'app guadagna e perde la concentrazione. –

+1

Ho accettato la risposta di Nick. Per quanto riguarda le altre app, per me è ancora meglio se rimangono in silenzio mentre non hanno il focus. Davy, hai ragione riguardo alla situazione di crash, ma le mie applicazioni non si bloccano mai (sì, giusto :-)) – stevenvh