AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Drag & Drop in TWebBrowser funtioniert nicht

Ein Thema von Erutan · begonnen am 10. Mär 2014 · letzter Beitrag vom 18. Mär 2014
 
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#6

AW: Drag & Drop in TWebBrowser funtioniert nicht

  Alt 17. Mär 2014, 14:18
Hallo,

Zitat:
[...] Beim Drag auf eine textarea stürzt das Programm mit einer Exception ab [...]
Tut mir leid, das war mein Fehler: Wenn Du was auf eine Textarea ziehst, dann ist das natürliche ein IHTMLTextAreaElement und kein IHTMLInputElement - und dann scheppert es bei der Zuweisung FDropTarget := i .

Zitat:
Das zweite Problem entsteht weil ich nicht nur ein Label verschieben will, sondern mehrere (nacheinander). Ich hatte gehofft, es würde ausreichen wenn ich die Label einfach alle nacheinander unter [...] eintrage aber dann wird nur der jeweils letzte Eintrag berücksichtig [...]
Naja, das ist schon klar, oder?

Zitat:
Mein Lösungsversuch war eine if-Weiche einzubauen und dabei abzufagen auf welches Label beim Verschieben aktuell geklickt wird [...]
Der Eventhandler DragDrop hat auch einen Parameter Source, den man auswerten kann.

Der Code dem angepasst sieht so aus:
Delphi-Quellcode:
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    procedure WebBrowser1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure WebBrowser1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
  private
    { Private-Deklarationen }
    FDropTarget : IDispatch; // <--- Aufpassen!
  public
    { Public-Deklarationen }
  end;

procedure TForm1.WebBrowser1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  i : IHTMLInputElement;
  t : IHTMLTextAreaElement;
begin
  if Assigned (FDropTarget) then
     begin
       if Succeeded (FDropTarget.QueryInterface (IHTMLTextAreaElement, t)) then
         t.value := TLabel (Source).Caption
       else
         if Succeeded (FDropTarget.QueryInterface (IHTMLInputElement, i)) then
           i.value := TLabel (Source).Caption;

       FDropTarget := nil
     end
end;

procedure TForm1.WebBrowser1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
var
  d : IHTMLDocument2;
  e : IHtmlElement;
  i : IHTMLInputElement;
  s, t : string;
begin
  FDropTarget := nil;
  if (Source is TLabel) and Assigned (WebBrowser1.Document) then
    begin
     d := WebBrowser1.Document as IHTMLDocument2;
     e := d.elementFromPoint (X, Y);
     if Assigned (e) then
       begin
         s := LowerCase (e.tagName);
         if (s = 'input') or (s = 'textarea') then
           begin
             if s = 'textareathen
               FDropTarget := e
             else
               begin
                 i := e as IHTMLInputElement;
                 t := LowerCase (i.type_);
                 if (t = 'text') or (t = 'password') then
                   FDropTarget := e
               end
           end
       end
    end;

  Accept := Assigned (FDropTarget)
end;
Vielleicht hilft 's weiter.

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz