2009-05-28 8 views
3

Deux questions rapidesDelphi - TWebBrowser Questions

  1. Comment puis-je mettre l'accent sur un TWebBrowser? C'est ainsi que la roulette de la souris fait défiler l'affichage sans avoir à cliquer dans la zone d'affichage de TWebBrwoser en premier. Il a une méthode setfocus qui ne fait rien (ou semble ne rien faire). Dans un TWebBrowser, cliquez avec le bouton droit sur un lien affiché et sélectionnez les propriétés. Les boutons OK et Annuler sont désactivés et vous ne pouvez pas fermer la boîte de dialogue. Vous devez terminer la tâche de votre application pour le tuer.

Des idées?

Merci, Jason.

+0

Dans SO, il est préférable de poser des questions séparément. Le but de SO est de créer un référentiel de questions avec des réponses de haute qualité. Si vous obtenez deux réponses distinctes à vos questions, lesquelles accepterez-vous? – Argalatyr

+0

Cela a du sens. Je vais créer des questions distinctes à l'avenir. Jason. –

Répondre

6

réponse pour la question 1 après beaucoup de chasse web ....

with WebBrowser1 do 
if Document <> nil then 
with Application as IOleobject do 
DoVerb(OLEIVERB_UIACTIVATE, nil, WebBrowser1, 0, Handle, GetClientRect); 
0

Ceci est couvert dans l'article suivant de Peter Johnson, How to make a TWebBrowser become the active control when clicked.

Pour résumer fortement, ajouter cet événement OnCommandStateChange:

procedure TWebBrowserFrame.CommandStateChange(Sender: TObject; 
    Command: Integer; Enable: WordBool); 
var 
    Doc: IHTMLDocument2;  // document object 
    Sel: IHTMLSelectionObject; // current selection 
begin 
    // Check we have a valid web browser triggering this event 
    if not Assigned(Sender) or not (Sender is TWebBrowser) then 
    Exit; 
    // Check we have required command 
    if TOleEnum(Command) <> CSC_UPDATECOMMANDS then 
    Exit; 
    // Get ref to document object and check not nil 
    Doc := Browser.Document as IHTMLDocument2; 
    if not Assigned(Doc) then 
    Exit; 
    // Get ref to current selection 
    Sel := Doc.selection as IHTMLSelectionObject; 
    // If selection is of correct type then we have a mouse click 
    if Assigned(Sel) and (Sel.type_ = 'Text') then 
    begin 
    // Make the web browser the form's active control 
    (Sender as TWebBrowser).SetFocus; 
    Doc.parentWindow.focus; 
    end; 
end; 

Il y a beaucoup plus de détails dans l'article, s'il vous plaît ne vous assurer que vous lisez tout.

+0

J'ai édité dans une référence à l'article d'où vous avez obtenu ce code. S'il vous plaît ne pas poster de code sans attribution. –