Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cómo simular el dragdrop de un fichero a un TWebbrowser? (https://www.clubdelphi.com/foros/showthread.php?t=86875)

cocute 16-10-2014 10:18:03

Cómo simular el dragdrop de un fichero a un TWebbrowser?
 
alguno sabéis si se puede simular el dragdrop de un fichero a un TWebbrowser?
Por ejemplo partiendo de un filelist que al hacer dobleclick en un fichero se simule el dragdrop hacia el tbrowser sin tener que arrastralo?
no se si es muy complicado lo que pretendo o es una chorradita pero no encuentro info al respecto, o no se bien como buscarla
(encontré algo simulando clicks del ratón, pero seguro que hay un modo más simple)


gracias

cocute 16-10-2014 22:14:46

Casi lo consigo con lo de simular clicks de ratón, pero no funciona

Código Delphi [-]
var
  point:TPoint;
 begin
  getcursorpos(point); // guardo la posición del ratón
  mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);// click abajo
  setcursorpos(800,point.y);  //Me muevo a la derecha a la parte del webbrowser
  mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); // soltar click
  setcursorpos(point.y,point.y);  //vuelvo a donde estaba
luego en el dragover del twebbrowser pongo
Código Delphi [-]
accept:=true;

Pero no funciona como debería, me sale el tipico mensaje de que si quiero abrir o guardar el archivo,
algo no hago bien

ecfisa 17-10-2014 08:10:39

Hola cocute.

Te hice un ejemplo simple (a modo de guía).
Código Delphi [-]
...
implementation

procedure TForm1.FileListBox1Click(Sender: TObject);
var
  i, it: Integer;
  o, d: TPoint;
begin
  d:= WebBrowser1.ClientOrigin;
  o:= ScreenToClient(Mouse.CursorPos);
  it:= FileListBox1.ItemAtPos(o, True)-1;
  o:= Mouse.CursorPos;
  if it <> -1 then
  begin
    FileListBox1.BeginDrag(True);
    i:= o.X;
    repeat
      SetCursorPos(i, d.Y +10);
      Inc(i, 4); 
      Sleep(1);
    until i > d.X+10;
    Application.ProcessMessages;
    FileListBox1.EndDrag(True);
    Mouse.CursorPos:= o;
 end;
end;

procedure TForm1.WebBrowser1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept:= Source is TFileListBox;
end;

procedure TForm1.WebBrowser1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  WebBrowser1.Navigate(TFileListBox(Source).FileName);
end;

Saludos :)

cocute 17-10-2014 13:57:43

gracias, he probado pero no funciona,
hace lo mismo que había puesto de simular los cliks,
pero está claro que de un modo más elegante y mejor ya que no mueves el ratón para nada.

Al hacer click en los ficheros de la filelist me sale el mensaje de que si quiero abrir o guardar pero no hace lo que haces
cuando arrastras por ejemplo un fichero kml al navegador cuando está esta web abierta http://ivanrublev.me/kml/.
Igual es que no se puede hacer por temas de seguridad.
De hecho al compilar tu ejemplo el programa compilado me salta el antivirus kaspersky como de una actividad sospechosa.

ecfisa 17-10-2014 17:18:51

1 Archivos Adjunto(s)
Hola cocute.

El ejemplo funciona correctamente en Delphi 7 y Windows 7 32 bits, en cuanto al antivirus... Configuralo en la sensibilidad adecuada o reporta el falso positivo.

No te adjunto imágenes de la ejecución ya que no reflejarían el movimiento de Drag & Drop, pero sí los archivos fuentes que están funcionando correctamente y, de no mediar modificaciones en él, debería seguir haciéndolo.

Por último te aclaro nuevamente que es un ejemplo de como podrías implementarlo, una guía y no una solución concreta a tu problema del cuál desconozco todos los pormenores.

Saludos :)

nlsgarcia 17-10-2014 17:25:34

cocute,

Cita:

Empezado por cocute
...De hecho al compilar tu ejemplo el programa compilado me salta el antivirus kaspersky como de una actividad sospechosa...

:rolleyes:

Te comento:

1- El código de Delphi esta tan optimizado a nivel de compilación que algunos antivirus detectan el ejecutable como un posible riesgo de seguridad.

2- Internet Security y Norton 360 también detectan posibles riesgos de seguridad con los ejecutables del Delphi 7, Delphi 2010 y Delphi XE6, asumo que lo mismo puede ocurrir con otras versiones de Delphi.

3- Revisa este código:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
   ShowMessage(Format('El ProcessID de la Aplicación es : %d',[GetCurrentProcessId]));
end;
El código anterior en Delphi 7, 2010 y XE6 es detectado por Norton 360 como : A program was behaving suspiciously on you computer. This program was removed. Threat name: SONAR.Heurist.120

Esto se debe a que la tecnología heurística de Norton 360 analiza la estructura y tipo de instrucciones del programa en Delphi y por su nivel de optimización y tipo de instrucciones determina una posible brecha de seguridad, sin embargo esto puede ser controlado a nivel de configuración en Norton 360, asumo que debe ser igual para Kaspersky Antivirus.

Espero sea útil :)

Nelson.

cocute 17-10-2014 20:17:16

gracias por tu tiempo,
pero lo que pretendo no funciona,
para que lo veas mejor te pongo el código modificado, que has enviado para que veas que no simula exactamente el dragdrop al arrastrar un fichero kml,
en cambio si pruebas a arrastrar un kml de los que pongo desde el explorador de archivos a la ventana del twebbrowser verás que si lo acepta:

https://www.dropbox.com/s/hyd0m54ao2...adrag.zip?dl=0
(incluyo el exe)

ecfisa 17-10-2014 20:34:43

Hola cocute.

Descargué y probé tu archivo. Sólo tuve que quitar del uses ", SHDocVw,system.Win.registry;" que no reconoce mi Delphi 7 y algo de código del evento OnCreate (que no hace al funcionamiento del Drag & Drop) quedando así:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  webbrowser1.navigate('http://ivanrublev.me/kml/');
  FileListBox1.Directory:= ExtractFilePath(Application.ExeName);
end;
y tál como lo esperaba, funciona correctamente:



Así que el error debe estar el el código que te comenté, revisa esos puntos.

Saludos :)

cocute 17-10-2014 20:41:55

El código del registro que pongo en el oncreate es para que pueda mostrar la web http://ivanrublev.me/kml/ correctamente en un webbrowser,
Todo este tema viene de este post:
http://www.clubdelphi.com/foros/showthread.php?t=86867

Al arrastrar el kml al webbrowser tendría que mostrar el mapa del fichero kml en la web,
no el código del kml.

No se si me explico bien?
Lo que pretendo que pase al hacer click en uno de los ficheros kml es esto:
https://www.dropbox.com/s/slfx3hh81j...34.13.png?dl=0


Pero lo que me ocurre, al menos en windows8 x64 es esto:
https://www.dropbox.com/s/wn5wf4bpt8...39.51.png?dl=0
Y si le doya a abrir me lo abre con el googleearth

ecfisa 17-10-2014 20:55:34

Hola cocute.
Cita:

Empezado por cocute (Mensaje 483285)
El código del registro que pongo en el oncreate es para que pueda mostrar la web http://ivanrublev.me/kml/ correctamente en un webbrowser,
Todo este tema viene de este post:
http://www.clubdelphi.com/foros/showthread.php?t=86867

Al arrastrar el kml al webbrowser tendría que mostrar el mapa del fichero kml en la web,
no el código del kml.

No se si me explico bien?
Lo que pretendo que pase al hacer click en uno de los ficheros kml es esto:
https://www.dropbox.com/s/slfx3hh81j...34.13.png?dl=0


Pero lo que me ocurre, al menos en windows8 x64 es esto:
https://www.dropbox.com/s/wn5wf4bpt8...39.51.png?dl=0
Y si le doya a abrir me lo abre con el googleearth

Pero ese problema no es causado por la automatización del Drag&Drop, motivo inicial de este hilo...

Acabo de incluir en el evento OnCreate el código correspondiente al registro y quitar la automatización del Drag&Drop dejándola manual (del modo normal) y sigue mostrando código html.

Saludos :)

Edito: Leyendo el enlace que menciona Neftali me pregunto... ¿ No tendrá que ver si IE es el navegador predeterminado ?

cocute 17-10-2014 21:11:30

Pero si arrastras un kml desde el explorador de archivos de windows a la ventana del navegador con esa web abierta que te ocurre?
igual es que hay que poner algo del tema OLE por algún lado.


La franja horaria es GMT +2. Ahora son las 16:09:05.

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