Einzelnen Beitrag anzeigen

Volker Z.

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

AW: Drag & Drop in TWebBrowser funtioniert nicht

  Alt 11. Mär 2014, 01:42
Hallo,

Zitat:
Das Problem: Es geht nicht. Dabei scheint das Problem beim Label zu liegen [...]
Nö, das Label ist sicher nicht das Problem. Ich würde eher auf die Bedingung Deiner if-Abfragen tippen - schau mal in die OH was da zu READYSTATE_INTERACTIVE und Konsorten steht. Ein if (Webbrowser1.ReadyState = READYSTATE_INTERACTIVE) or (Webbrowser1.ReadyState = READYSTATE_COMPLETE) then an der richtigen Stelle könnte vielleicht schon Wunder wirken.

Allerdings würde ich eher zu nachfolgendem Lösungsansatz tendieren:
Delphi-Quellcode:
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    labelHaupttext: TLabel;
    procedure FormCreate(Sender: TObject);
    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 : IHTMLInputElement;
  public
    { Public-Deklarationen }
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FDropTarget := nil
end;

procedure TForm1.WebBrowser1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if Assigned (FDropTarget) then
    begin
      FDropTarget.value := labelHaupttext.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
              i := e as IHTMLInputElement;
              if s = 'textareathen
                FDropTarget := i
              else
                begin
                  t := LowerCase (i.type_);
                  if (t = 'text') or (t = 'password') then
                    FDropTarget := i
                end
            end
        end
    end;
  Accept := Assigned (FDropTarget)
end;
Das sollte funktionieren.

Zitat:
Das Drag & Drop war eigentlich für solche Formularfelder gedacht, die in Fieldsets liegen oder sich aus irgendwelchen anderen Gründen nicht automatisch ausfüllen lassen.
Wenn Du mal mehr Infos gibst, dann könnte man da vielleicht was machen.

Gruß
Volker Zeller

Geändert von Volker Z. (11. Mär 2014 um 02:06 Uhr)
  Mit Zitat antworten Zitat