Announcement

Collapse
No announcement yet.

Mausklick an Button auf HTML-Seite schicken

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mausklick an Button auf HTML-Seite schicken

    <p><strong>Wie kann ich ein Mausklick auf einer HTML-Seite an ein
    Button bzw. an ein Bild (*.gif) senden?<br>
    So klappts nicht, der Klick wird an das Fenster unter dem Button
    geschickt.</strong><br>
    var wnd :HWnd;<br>
    pt :TPoint;<br>
    begin<br>
    GetCursorPos(pt);<br>
    wnd:=WindowFromPoint(pt);<br>
    SendMessage(wnd, WM_LBUTTONDOWN,VK_LBUTTON ,0);<br>
    SendMessage(wnd, WM_LBUTTONUP,VK_LBUTTON ,0);<br>
    end</p>

  • #2
    <p>Hallo,<br>
    <br>
    schau Dir einmal <b>ChildWindowFromPoint</b> an. Möglicherweise ist es das, was Du suchst.<br>
    <br>
    Gruß Thomas</p&gt

    Comment


    • #3
      Hallo,

      dieser Weg kann zwar funktionieren, aber er ist nicht der offziell dafür vorgesehene Weg. Ab dem IE 4 kann man über Automation auf das Objektmodell (COM-Objekte) des IE zugreifen. Wenn eine HTML-Seite angezeigt wird, steht das <b>Documents</b>-Objekt zur Verfügung. Dort wird in der <b>Forms</b>-Kollektion eine Liste aller Input-Elemente (die selbst wiederum auch COM-Objekte sind) geführt. Über diesen Weg kann man die Eigenschaften jedes einzelnen Elements auslesen bzw. setzen. Der IE lässt sich also genauso "fernbedienen" wie Microsoft Word - allerdings benötigt man die Dokumentation des Objektmodells. Im Fall des IE bedeutet dies, dass man im MDSN nachschauen muss (oder in der Hilfedatei des Platform SDK).

      Das folgende Beispiel ermittelt über die <b>Links</b>-Kollektion alle Links im aktuellen HTML-Dokument:
      <pre>
      uses ActiveX, MSHTML_TLB;

      { TWebBrowser benötigt einige Zeit, um das Document-Objekt zu
      initialisieren. }

      procedure TForm1.FormCreate(Sender: TObject);
      begin
      WebBrowser1.Navigate('http://localhost/Ossisoft/frInhalt.htm');
      end;

      { Aufgabe 1: Alle Links der aufgerufenen Seite ermitteln }

      procedure TForm1.ToolButtonLinksClick(Sender: TObject);
      var
      aHTMLDoc : IHTMLDocument2;
      iCount : Integer;
      aHTMLLink : IHTMLElement;
      begin
      if not VarIsEmpty(WebBrowser1.Document) then
      begin
      aHTMLDoc := WebBrowser1.Document as IHTMlDocument2;
      for iCount := 0 to aHTMLDoc.Links.Length - 1 do
      begin
      aHTMLLink := aHTMLDoc.Links.Item(iCount, 0) as IHTMLElement;
      Memo1.Lines.Append(aHTMLLink.ToString);
      end;
      end;
      end;
      </pre&gt

      Comment


      • #4
        <p>Hallo,</p>

        <p>Danke für den heißen Tipp. Verstehen tue ich allerdings (noch)
        nicht alles. Zumal der Compiler meckert, dass die MSHTML_TLB.dcu
        fehlt. Da hat er ja auch recht, aber er sagt mir leider nicht
        woher ich die DCU bekomme, oder das Package. Kann ich da vielleicht nochmal Nachhilfe bekommen?</p>

        <p>Danke und Gruss,</p>
        <p>Jörg</p&gt

        Comment


        • #5
          Hallo,

          diese Unit wird von Delphi selbst angelegt, wenn über <i>Projekt | Typbibliothek importieren</i> die Typbibliothek von <b>Microsoft HTML object library</b> importiert wird (Button <i>Unit anlegen</i>). Eine Typbibliothek ist die Schnittstellenbeschreibung der COM-Objekte. Wenn diese Unit in das eigene Projekt eingebunden ist, "kennt" der Compiler und die Programmierhilfe alle Methoden und Parameter.

          Die Details zu COM-Objekten, Interfaces und Automation können in meinem Buch <i>COM/DCOM mit Delphi</i> nachgelesen werden.
          &#10

          Comment


          • #6
            Hallo,

            ich habe ein Beispielprojekt für das programmgesteuerte Ausfüllen eines HTML-Formular im <b>Download</b>-Bereich des Delphi-Forums abgelegt

            Comment


            • #7
              <p>Hallo,</p>

              <p>danke für die hilfreichen Beiträge und frohes Schaffen
              allerseits.</p&gt

              Comment

              Working...
              X