Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TWebBrowser Fokus abgeben (https://www.delphipraxis.net/111552-twebbrowser-fokus-abgeben.html)

Henning der zweite 5. Apr 2008 10:56


TWebBrowser Fokus abgeben
 
Hallo,
wie kann man der TWebBrowser Komponente abgewöhnen, daß sie sich immer den Fokus nimmt?

Ich bin nämlich gerade dabei, einen Chat zu programmieren, dessen Text
mit HTML angezeigt wird. Das Eingabefeld ist eine TEdit Komponente.
Wenn man nur einmal den Webbrowser fokussiert, um dort z.b. Text herauszukopieren, und dann wieder das Edit-feld, und dort Text
absendet, welcher dann dem Webbrowser hinzugefügt wird, zieht der Webbrowser wieder den Focus, sodass, wenn man
eine weitere Nachricht schreiben will, man wieder das Edit fokussieren muss.
Ich will aber, dass das Edit andauernd fokussiert bleibt, es sei denn, der Benutzer will z.b. Text aus dem
Webbrowser kopieren.
Erst nach Neustart des Programmes zeiht der Browser nicht wieder den Fokus, sobald man eine Nachricht gesendet hat.
Das gleiche Problem hatte auch Berni68.

Hoffe ihr versteht mein Problem,
Vielen Dank schonmal vorraus

Henning der zweite 8. Apr 2008 20:28

Re: TWebBrowser Fokus abgeben
 
Hab die Frage auch in einem anderem Forum gestellt (Delphi-Treff)

toms 11. Mai 2008 12:42

Re: TWebBrowser Fokus abgeben
 
Zitat:

Zitat von Henning der zweite
Text herauszukopieren, und dann wieder das Edit-feld, und dort Text absendet, welcher dann dem Webbrowser hinzugefügt wird, zieht der Webbrowser wieder den Focus

Hallo, kannst du nicht nach dem Absenden des Textes den Fokus wieder auf das Edit Feld setzen?

Henning der zweite 11. Mai 2008 12:53

Re: TWebBrowser Fokus abgeben
 
Es bewirkt nichts!
Egal welches Event ich benutze, er zieht den Fokus immer wieder...

toms 11. Mai 2008 16:20

Re: TWebBrowser Fokus abgeben
 
Ich wollte das Verhalten reproduzieren aber kann es leider nicht.
Bei mir bleibt der Focus immer im Edit.

(Konnte nicht den Delphi Tag nehmen, da er
interpretiert)

Code:
uses
  MSHTML, ActiveX;

// Anfangs Zu einer leeren Seite navigieren

procedure TForm1.FormCreate(Sender: TObject);
begin
  Webbrowser1.Navigate('about:blank');
end;

// Eine Zeile HTML Code hinzufügen

procedure TForm1.InsertHTML(s: string);
var
  WebDoc: HTMLDocument;
  WebBody: HTMLBody;
begin
  WebDoc := Webbrowser1.Document as HTMLDocument;
  WebBody := WebDoc.body as HTMLBody;
  WebBody.insertAdjacentHTML('beforeEnd', s+'
');
end;

// OnKeyPress im Edit

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if key = #13 then
 begin
   Key := #0;
   InsertHTML(Edit1.Text);
 end;
end;

initialization
  OleInitialize(nil);
finalization
  OleUninitialize;

Henning der zweite 11. Mai 2008 18:46

Re: TWebBrowser Fokus abgeben
 
Vielen Dank, dass Du Dich mit meinem Prolem so beschäftigst!
Ich musste den Code etwas ändern, damit ich ihn unter D5 kompilieren konnte.
Das Problem ist immer noch da: Sobald ich etwas mit dem Edit "sende"
und dann etwas aus dem Webbrowser herauskopiere, und dann wieder mit dem Edit was sende, schluckt das ActivX-Control
sofort den Fokus.

Mein abgeänderter Code:
Delphi-Quellcode:
uses
 ActiveX; //MSHTML konnte er nicht finden

// Anfangs Zu einer leeren Seite navigieren

procedure TForm1.FormCreate(Sender: TObject);
begin
  Webbrowser1.Navigate('about:blank');
  Lines:=TStringList.Create();
end;

// Zeilen HTML Code hinzufügen
procedure AddHTMLToWebbrowser(AWebBrowser: TWebBrowser; AHTMLCode: TStrings);
var
  myDocument:OleVariant;
begin
  if AWebBrowser.Document = nil then AWebBrowser.Navigate('about:blank');
  myDocument:=AWebBrowser.Document;
  myDocument.Write(AHTMLCode.Text);
  myDocument.Close;
end;

 

// OnKeyPress im Edit
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
   Key := #0;
   Lines.add(Edit1.text + #10);
   AddHTMLToWebbrowser(Webbrowser1,Lines);
end;
end;

initialization
  OleInitialize(nil);
finalization
  OleUninitialize;
Also nochmal: der Fehler kommt zustande, wenn man
1. Etwas mit dem Edit sendet, indem man das Edit fokussiert, Text eingibt, und dann Enter drückt
2. Dann Text aus dem Webbrowser markiert bzw. herauskopiert
3. Dann mit der Maus den Fokus auf das Edit setzt, indem man es anklickt
4. Dann wieder etwas sendet (schwupp di wupp: der Fokus wurde dem Edit entzogen)
5. Dann wieder etwas sendet (Kann man nicht, ohne das man das Edit wieder selektiert...)

Hoffe ich habe das Problem jetzt etwas genauer geschildert :-D

toms 11. Mai 2008 19:07

Re: TWebBrowser Fokus abgeben
 
Hallo,

Ich kann das Problem mit deinem Code reproduzieren. Kann mir jedoch nicht erklären, warum es sich so verhält.

Wenn ich aber meine InsertHTML nehme, verliert das Edit Feld den Fokus nicht.

Falls du die unit MSHTML nicht hast, kannst du sie hier herunterladen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz