Buenas,
Haciendo una aplicación en la que se hace un cierto uso del TWebBrowser, me he encontrado de que éste no gestiona la tecla Enter, ni para aceptar un formulario cuando estamos en un Input tipo Text ni para añadir un salto de línea en un TextArea.
Buscando por internet he encontrado la solución en los foros de Embarcadero. No obstante, quiero poner aquí la solución al problema dado que me parece muy chocante que a estas alturas este problema con el TWebBrowser no esté solucionado.
Lo primero es poner a True la propiedad KeyPreview del formulario en el que mostramos el TWebBrowser. Ahora sólo nos basta con añadir estas pocas líneas de código en su evento OnKeyPress
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin keybd_event(VK_LCONTROL, 0, 0, 0); //Ctrl key down keybd_event(Ord('M'), MapVirtualKey(Ord('M'), 0), 0, 0); // 'M' key down keybd_event(Ord('M'), MapVirtualKey(Ord('M'), 0), KEYEVENTF_KEYUP, 0); // 'M' Key up keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0); // Ctrl key up end end;
Con estas líneas de código, lo que simulamos es la pulsación de la combinación de teclas CTRL+M que, curiosamente, es la combinación de teclas que genera el «enter» tanto en el TextArea (añadiendo una línea) como en los Input tipo Text (aceptando el formulario). Para ello hacemos uso del API de Windows keybd_event definida en la unit Windows, la cual realiza una pulsación de una tecla. Cabe destacar que hay que realizar tanto la bajada de la tecla (pulsarla) como su subida (soltarla), de lo contrario esa tecla permanecería pulsada con los efectos que ya podéis imaginaros.
Otra API de Windows que se usa es MapVirtualKey para poder transformar un código «virtual-key» en un «scan code» y viceversa.
Pues nada, espero que os sirva.
Hasta la próxima entrada.