Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Embedded WB Ftp Laufwerk (https://www.delphipraxis.net/187437-embedded-wb-ftp-laufwerk.html)

ScharfeMietze 29. Nov 2015 23:21

Embedded WB Ftp Laufwerk
 
Hey
Ich habe eine Frage.
Ich habe heute mit embdw1 erfolgreich zu einem FTP verbunden.
Dort bekomme ich ein Explorerfenster angezeigt mit allen was so enthalten ist. Aber wie mache ich den Automatisch weiter?
Wie würde ich den nun einen Ordner ansteuern oder eine Datei laden?
Z.B.
Delphi-Quellcode:
embdwb1.ViewPageSourceHtmlToStrings(list);
bleibt leer ?!?
Eure SM
:)

zeras 30. Nov 2015 05:23

AW: Embedded WB Ftp Laufwerk
 
Ist nicht ganz das, was du vorgeschlagen hast.
Ich nutze die Indy Komponenten und da habe ich keine derartigen Probleme.

win568 30. Nov 2015 06:31

AW: Embedded WB Ftp Laufwerk
 
Hi

Den Download mit UrlDownloadToFile und das Ansteuern mit Navigate. Hänge dich in die Links rein (EventListener) und führe selbst das Navigate aus.

ScharfeMietze 30. Nov 2015 06:35

AW: Embedded WB Ftp Laufwerk
 
In dem Fall geht es um den Embedded WB und ich würde gerne wenn möglich damit arbeiten.

Mit dem Download hab ich verstanden.
Wie lasse ich mir die Ordner/Files den Auflisten, um sie zu durchsuchen/laden?

Grüße
SM

win568 30. Nov 2015 06:58

AW: Embedded WB Ftp Laufwerk
 
Hi

Der EmbeddedWB bietet eine Menge Events für solche Zwecke an. Wenn das Dokument geladen ist, dann wird das DocumentComplete gefeuert. Dort kannst du auf alle geladenen HTML Elemente per Doc2 zugreifen und diese erweitern/manipulieren. Um z.b. eine Liste aller geladenen Links zu erhalten, kannst du so vorgehen:

Code:

var
  lDispatch: IDispatch;
  lHTMLCollection: IHTMLElementCollection;
  lHTMLElement: IHTMLElement;
  i: Integer;
begin
  Result := nil;
  if Doc2 = NIL then begin
    Exit;
  end;

  // Ermittle alle Elemente
  lDispatch := Doc2.all;
  if Assigned(lDispatch) then begin
    lDispatch.QueryInterface(IHTMLElementCollection, lHTMLCollection);
    if Assigned(lHTMLCollection) then begin
      // Gehe alle Elemente durch
      i := 1;
      while (i <= lHTMLCollection.length) do begin
        // Ermittle mal das HTMLElement
        lDispatch := lHTMLCollection.item(pred(i), 0);
        lDispatch.QueryInterface(IHTMLElement, lHTMLElement);
        if Assigned(lHTMLElement) then begin
          if (CompareText(lHTMLElement.TagName, 'A') = 0) then begin
            -> Hier weisst du, eigenes Verhalten implementieren
          end;
        end;
        inc(i);
      end;
    end;
  end;
Willst du eigenes Verhalten einbauen, dann erweitere das HTML Element. Du kannst z.b. die Einträge aus dem FTP auslesen und das OnClick auf ein eigenes Event umbiegen (Jedes HTML Element hat ein OnClick Event).

ScharfeMietze 30. Nov 2015 09:30

AW: Embedded WB Ftp Laufwerk
 
Danke für die Antwort.
Nachdem ich MSHtml in die Uses geschmissen habe und davon ausgehe das "doc2" ein "IHTMLDocument2" ist, bekomme ich die Fehlermeldung: "Interface wird nicht unterstützt."
Wo liegt mein Fehler?

Grüße
SM


Delphi-Quellcode:
var
  lDispatch: IDispatch;
  lHTMLCollection: IHTMLElementCollection;
  lHTMLElement: IHTMLElement;
  i: Integer;
  doc2: IHTMLDocument2;
begin
 doc2 := embdwb1.document as IHTMLDocument2;


  lDispatch := Doc2.all;
  if Assigned(lDispatch) then
  begin
    lDispatch.QueryInterface(IHTMLElementCollection, lHTMLCollection);
    if Assigned(lHTMLCollection) then
    begin
      i := 1;
      while (i <= lHTMLCollection.length) do
      begin
        // Ermittle mal das HTMLElement
        lDispatch := lHTMLCollection.item(pred(i), 0);
        lDispatch.QueryInterface(IHTMLElement, lHTMLElement);
        if Assigned(lHTMLElement) then
        begin
          if (CompareText(lHTMLElement.TagName, 'A') = 0) then
          begin
            mmo1.Lines.Add(lHTMLElement.tagName);
          end;
        end;
        inc(i);
      end;
    end;
  end;
end;

win568 30. Nov 2015 10:05

AW: Embedded WB Ftp Laufwerk
 
Probier mal embdwb1.Doc2. Der EmbeddedWB hat bereits alles drinnen :-D

p80286 30. Nov 2015 10:32

AW: Embedded WB Ftp Laufwerk
 
[OT]
auch wenn ich mich jetzt als Ignorant oute, was ist (Embedded) WB ?
Gruß
K-H
[/OT]

win568 30. Nov 2015 10:47

AW: Embedded WB Ftp Laufwerk
 
Der EmbeddedWB ist ein Wrapper um das ActiveX Control des IE. Es gibt zwar auch den TWebbrowser von Delphi, nur wrappt der TEmbeddedWB eine Unmenge mehr an Interfaces. Er ist so ziemlich die Komponente, die die Möglichkeiten des IE am besten in Delphi abbildet:

github Master

p80286 30. Nov 2015 11:32

AW: Embedded WB Ftp Laufwerk
 
Danke!

K-H

ScharfeMietze 30. Nov 2015 19:14

AW: Embedded WB Ftp Laufwerk
 
Könntest du das etwas genauer ausführen? Alle varianten, die ich bisher versucht habe, endeten entweder mit Zugriffsverletzungen, oder wie vorher schon erwähnt
"Interface wird nicht unterstützt." duch das lDispatch
Hätt ich ne Maus, würd ich sie Melken
Liebe Grüße
SM

ScharfeMietze 5. Jan 2016 11:38

AW: Embedded WB Ftp Laufwerk
 
Auch hier würde ich mich wenn jemand Rat weiß freuen.
Gruß

Bernhard Geyer 5. Jan 2016 11:46

AW: Embedded WB Ftp Laufwerk
 
Wenn das Browsercontrol sich mit einem FTP-Server verbunden hast wirst du kein IHTMLDocument2 vorfinden. ist ja auch kein HTML-Dokument.

Wäre es nicht besser sich wenn man mit einem FTP-Server arbeitet mit einer FTP-Komponenten das zu versuchen?
Ein Hammer ist ja auch nicht unbedingt das beste einen Schraube in die Wand zu bekommen.

nahpets 5. Jan 2016 14:02

AW: Embedded WB Ftp Laufwerk
 
Hallo,

habe mir den "Spaß" mal angeschaut, der Embedded WB scheint beim Zugriff über FTP den Explorer zu kapseln.

Nachdem ich ein paarmal per Embedded WB auf 'ne FTP-Seite zugegriffen hatte, dachte ich mir, schau doch mal, was der Explorer da so macht, also per Copy&Paste die URL dort rein und siehe da, er kannte sie schon und bot sie mir dort in seiner Auswahl an.

Die Frage, die sich hier stellt ist also eher: Wie kommt man aus dem Embedded WB an das Listviewdingens des Explorers ran und kann von dort aus (wie auch immer) weiter arbeiten.

Eigentlich hat man bei 'ner FTP-Seite im Embedded WB das, was man (zumindest unter Delphi 7) als TShellListView zur Verfügung hat.

Embedded WB und TShellListView nutzen die Unit ShlObj, allerdings habe ich mir jetzt nicht die Mühe gemacht herauszufinden, ob und wo es da eine gemeinsame Schnittstelle geben könnte.

Bernhard Geyer 5. Jan 2016 19:51

AW: Embedded WB Ftp Laufwerk
 
Zitat:

Zitat von nahpets (Beitrag 1326067)
Hallo,

habe mir den "Spaß" mal angeschaut, der Embedded WB scheint beim Zugriff über FTP den Explorer zu kapseln.

Nachdem ich ein paarmal per Embedded WB auf 'ne FTP-Seite zugegriffen hatte, dachte ich mir, schau doch mal, was der Explorer da so macht, also per Copy&Paste die URL dort rein und siehe da, er kannte sie schon und bot sie mir dort in seiner Auswahl an.

Die Frage, die sich hier stellt ist also eher: Wie kommt man aus dem Embedded WB an das Listviewdingens des Explorers ran und kann von dort aus (wie auch immer) weiter arbeiten.

Eigentlich hat man bei 'ner FTP-Seite im Embedded WB das, was man (zumindest unter Delphi 7) als TShellListView zur Verfügung hat.

Embedded WB und TShellListView nutzen die Unit ShlObj, allerdings habe ich mir jetzt nicht die Mühe gemacht herauszufinden, ob und wo es da eine gemeinsame Schnittstelle geben könnte.

Du siehst das hier eh schon was anderes verwendet wird.
Und wieso verwendest du nicht auch was anderes? Es gibt einige Delphi FTP-Komponenten mit (fertigen?) FTP-Client-Beispielimplementierungen.
Nimm doch diese.

nahpets 5. Jan 2016 20:36

AW: Embedded WB Ftp Laufwerk
 
Na, ich spekuliere jetzt mal:

Gehen wir davon aus, dass ein eigenes Programm entstehen soll, mit dem (auch) Webseiten angesehen werden können. Egal ob die jetzt nun aus dem großen weiten Netz kommen oder selbsterstellt von einem (eigenen) Webserver.

Hier den Embedded WB zu nutzen ist eigentlich eine sinnvolle Entscheidung. Ok, je nach Anspruch tut's der TWebBrowser auch.

Wenn man nun auf einer Webseite 'nen Link auf 'ne FTP-Seite hat, so kann man getrost im Embedded WB bleiben und dort weiter navigieren.

Schön wäre es (finde ich jedenfalls), wenn man dann von dortaus auch alle die Möglichkeiten hat, die man für das Ansehen, Laden, Editieren... der Dateien auf dem Webserver hat, die man sich so wünscht.

Nach meinen (bisherigen) Erkenntnissen scheint das aber nicht möglich zu sein, schade.

Da muss dann ein eigener FTP-Client her.

Oder man müsste versuchen (für den Anwender unsichtbar) den Embedded WB gegen 'n TShellListView auszutauschen, um dann die Oberfläche damit zu gestalten.

Bin aber (bisher) daran gescheitert, dem TShellListView beizubringen (ohne zusätzliche Komponente(n)) mal zu 'ner FTP-Adresse zu navigieren.

Wenn sich die Aufgabe mit dem Embedded WB lösen lassen sollte, ggfls. zusammen mit 'nem TShellListView, wird das vermutlich ein unsägliches Gefrickel.

Das würd' ich mir nicht freiwillig antuen wollen.

Webseiten kann man halt recht gut per Embedded WB "fernsteuern". Gerade bei per Javascript vervollständigten Seiten kommt man mit TIdHTTP (oder Ähnlichem) nicht weit. Und möchte man von sonner Seite dann 'nem FTP-Link automatisiert folgen, wird's wohl schwierig.

Die Möglichkeit der Fernsteuerung von FTP-Seiten scheint es mit dem Embedded WB (so befürchte ich) nicht zu geben.

ScharfeMietze 11. Jan 2016 07:54

AW: Embedded WB Ftp Laufwerk
 
Man kann einfach gut und fix mit einer sichtbaren Komponente durch UNC Pfade navigieren und zu kopieren auf PW geschützen ftp.
Ich habe bisher keine gute Möglichkeit in Delphi gefunden um das umzusetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 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