Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Ayuda para Convertir Todo este código en Function (https://www.clubdelphi.com/foros/showthread.php?t=92325)

MaxiDucoli 01-10-2017 09:25:01

Ayuda para Convertir Todo este código en Function
 
Hola, acabo de hacer este test para un traductor con Google.
El programa lo pude hacer funcionar, si bien yo quería usar TIdHTTP, no pude por que en la respuesta no me enviaba el texto traducido, así que tuve que hacerlo con un TWebBrowser,
Ahora necesito la ayuda de alguien que sepa del tema. ya que esto yo lo quiero aplicar a un XML que contiene descripción y esa descripción es la que quiero traducir.
Lo que necesito es que me ayuden a pasar todo esto a una función o procedimiento para poder aplicarlo al texto que yo quiera.
Mi problema es que no sé como asignarle eventos a un componente creado en tiempo de ejecución, por que de saberlo haría un evento y calculo que se podría poner TWebBrowser.OnDocumentComplete := MiEvento.
La verdad es que estuve buscando y no pude encontrar la manera de hacerlo.
Podrían ayudarme, por favor?


Les dejo el link del programa y de paso si les sirve lo usan.

https://mega.nz/#!dJdjQRwQ!ZLWka0f21...zsQOX6uj6m767Y

Gracias!!!

fredo 01-10-2017 20:45:14

hola, es exactamente como tu dises...

TWebBrowser.OnDocumentComplete := MiEvento.

Debe llevar los parametros exactamente iguales para que quede enganchado...

MaxiDucoli 01-10-2017 22:26:12

Al hacerlo me sale error

[DCC Error] GoogleTranslatorTool.pas(65): E2009 Incompatible types: 'method pointer and regular procedure'

MaxiDucoli 01-10-2017 22:29:07

Logré hacer que me agarre los procedure con cosas que encontré por internet.
El programa corre, pero ahora el problema es que no me pasa por NavegadorDocComplete que es donde tendría que hacer la "magia" el programa.
Les dejo el código de la unit.

Código Delphi [-]
unit GoogleTranslatorTool;

interface
uses
 StdCtrls,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, forms,strutils,IdURI, OleCtrls, SHDocVw,MSHTML;


 // Dummy class to hold event handlers:

    // Event handlers:

Type TWB = class
public
class procedure NavegadorDocComplete(ASender: TObject;const pDisp: IDispatch; var URL: OleVariant);
class procedure NavegadorNavComplete2(ASender: TObject;const pDisp: IDispatch; var URL: OleVariant);
class procedure NavegadorProgChange(ASender: TObject; Progress, ProgressMax: Integer);
//procedure NavegadorNav(const URL : widestring);
end;

procedure ObtenerTraduccion(LangIn,LangOut,SourceText : String; Navegador : TWebBrowser);

Var
  WB : TWB;
  //TMyCustomForm : TForm;
  //Navegador : TWebBrowser;
  el,el1: IHTMLElement;
  inputElement: IHTMLInputElement;
  LangSource,LangTarget,TextoInicial,TextoFinal : String;
  CurDispatch: IDispatch;
  Navegador : TWebBrowser;
CONST URL : string= ('https://translate.google.com.ar/?hl=es#');

implementation
uses gltrans;

class  procedure TWB.NavegadorDocComplete(ASender: TObject;const pDisp: IDispatch; var URL: OleVariant);
begin
application.ProcessMessages;
  if (pDisp = CurDispatch) then
  begin
    CurDispatch := nil; {clear the global variable }
    el1 := (navegador.Document as IHTMLDocument3).getElementById('gt-swap');
    el := (navegador.Document as IHTMLDocument3).getElementById('source');
        //el.onclick;
if (Assigned(el)) AND (Assigned(el1)) then
begin
//if Supports(el, IID_IHTMLInputTextElement, TextElement) then
//el := (navegador.Document as IHTMLDocument3).getElementById('source');

TextoFinal := el.outerText;

end;
  end;
end;
class procedure TWB.NavegadorNavComplete2(ASender: TObject;const pDisp: IDispatch; var URL: OleVariant);
begin
application.ProcessMessages;
   if CurDispatch = nil then
    CurDispatch := pDisp;

end;
class procedure TWB.NavegadorProgChange(ASender: TObject; Progress, ProgressMax: Integer);
begin
application.ProcessMessages;
 if ProgressMax = 0  then
begin
if Assigned(el) then (el1.click);
//memo2.Text := el.outerText;
end;
//Form1.Caption := IntToStr(ProgressMax);

                     {if READYSTATE_COMPLETE = 4 then
begin
el := (navegador.Document as IHTMLDocument3).getElementById('result_box');
if Assigned(el) then
if Supports(el, IID_IHTMLInputElement, inputElement) then
TextoFinal :=  inputElement.value;
end;}
end;

procedure ObtenerTraduccion(LangIn,LangOut,SourceText : String; Navegador : TWebBrowser);
var
WebBrow : TWB;
Begin
WebBrow := TWB.Create;
//Navegador := TWebBrowser.Create(Frmmain);
//navegador.Parent := frmmain;
Navegador.OnDocumentComplete := WebBrow.NavegadorDocComplete;
Navegador.OnNavigateComplete2 := WebBrow.NavegadorNavComplete2;
Navegador.OnProgressChange := WebBrow.NavegadorProgChange;

try
Navegador.Navigate(URL + LangIn + '/' + LangOut + '/' + SourceText);
finally
  if assigned(Navegador) then FreeAndNil(Navegador)

end;
End;




end.


La franja horaria es GMT +2. Ahora son las 13:27:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi