Announcement

Collapse
No announcement yet.

Zugriff auf IE / Session Variablen aus ActiveXForm

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

  • Zugriff auf IE / Session Variablen aus ActiveXForm

    Hallo

    Ich habe eine Delphi ActiveXForm definiert und habe diese in einer ASP-Page integriert. Nun möchte ich aus dem ActiveX auf die Eigenschaften des Internet Explorers zugreifen (z.B. die Statusleiste ein-/ausschalten, die Titelzeile anpassen, den Browser schliessen).

    Zusätzlich brauchen wir Zugriff auf die Session-Variablen der ASP-Page.

    Für eine kurzfristige Hilfe wäre ich sehr dankbar.

    Grüsse
    Bernd

  • #2
    Hallo,

    man muss an dieser Stelle zwischen <B>Server-Script</b> und <b>Client-Script</b> unterscheiden. Die ASP-Seite kann nur dann auf das <b>Session</b>-Objekt zugreifen, wenn die Script-Aufrufe (VBScript/JScript) auch auf dem Server ausgeführt werden. Liefert die ASP jedoch eingeschachtelte Client-Script-Aufrufe über HTML an den Internet Explorer zurück, so ist vom Client-Rechner aus kein Zugriff auf das Session-Objekt von ASP möglich.

    Das folgende Beispiel demonstriert, wie man auf Eigenschaften und Events des ActiveForm direkt aus der HTML-Seite heraus zugreifen kann:
    <pre>
    < HTML >
    < H1 > Delphi 5 ActiveX Test Page < /H1>< /pre>
    < p >
    You should see your Delphi 5 forms or controls embedded in the form below.
    < HR >< center>< P>
    < OBJECT ID="OSActiveForm"
    classid="clsid:5D5C9EC6-DB6E-44D1-86A5-E9DE4823C5FC"
    codebase="http://localhost/OssiSoft/Test/ActiveFormDemo.cab#version=1,0,1,0"
    width=314
    height=138
    align=center
    hspace=0
    vspace=0
    > < PARAM name="OSParameter" value="Der Text aus der HTML">
    < /OBJECT >
    < SCRIPT LANGUAGE="JavaScript" FOR="OSActiveForm" EVENT="OnOSButtonClick">
    alert(document.all.OSActiveForm.OSParameter);
    < /SCRIPT >
    < /HTML >

    </pre>

    Nachdem die ActiveX-Bibliothek und das Grundgerüst für das ActiveForm vom Delphi-Experten zusammengestellt wurde, werden im Typbibliothekseditor sowohl das ActiveForm-Interface als auch das Events-Interface um die eigene Methode erweitert: <br>
    - IActiveFormDemoX: property OSParameter: WideString read Get_OSParameter write Set_OSParameter; <br>
    - IActiveFormDemoXEvents: procedure OnOSButtonClick <br>
    Das Read/Write-Property <i>OSParameter</i> wird von Delphi automatisch in die beiden Set_- und Get_-Methoden umgesetzt. Das eigene Event <i>OnOSButtonClick</i> soll immer dann ausgelöst werden, wenn der Button im ActiveForm angeklickt wird.

    Nach diesen Vorbereitungen werden die neuen Interface-Methoden mit Leben gefüllt:
    <pre>
    procedure TActiveFormDemoX.Button1Click(Sender: TObject);
    begin
    ShowMessage('Der Button im ActiveForm wurde angeklickt');
    OSButtonEvent(Self);
    end;

    function TActiveFormDemoX.Get_OSParameter: WideString;
    begin
    Result := Edit1.Text;
    end;

    procedure TActiveFormDemoX.Set_OSParameter(const Value: WideString);
    begin
    Edit1.Text := Value;
    end;

    procedure TActiveFormDemoX.OSButtonEvent(Sender: TObject);
    begin
    if FEvents <> nil then
    FEvents.OnOSButtonClick;
    end;
    </pre&gt

    Comment


    • #3
      Zunächst mal Danke für die prompte Antwort - sie hat mir schon weitergeholfen.

      Vielleicht kann mir jetzt noch jemand einen Tipp geben, wie ich von der eingebetteten ActiveForm den Internet-Explorer "fernsteuern" kann.

      Beispiele:
      **********
      Durch Drücken eines Buttons in der ActiveForm ...
      * die aktuelle URL bestimmen
      * eine neue URL an den Browser übergeben
      * den Browser schliessen

      Ansatz:
      *******
      Importieren der Typbibliothek "Microsoft Internet Controls". Dies bietet einem dann das benötigte Interface (Beispiels siehe unten).

      Mein Problem ist z.Zt. die zum ActiveForm zugehörige Instanz des Internet Explorers zu bestimmen (via Parent?).
      Hier brauche ich Eure Hilfe!

      ************************************************** *********
      Das Instanzieren/Oeffnen einer "neuen" Internet Explorers
      und das Navigieren an eine bestimmte Adresse konnte ich
      bereits lösen:

      var
      vIE : OleVariant;
      begin
      vIE := CreateOleObject('InternetExplorer.Application');
      vIE.Visible := True;
      vIE.StatusBar := true;
      vIE.ToolBar := false;
      vIE.Navigate('http://localhost/WebAppl/Test.asp');
      ....

      ************************************************** *********

      Gruss & Danke
      Bern

      Comment


      • #4
        Hallo,

        dieses Problem wurde bereits hier im Forum unter der Überschrift "<i>Mit gestarteten Internet-Explorer verbinden</i>" behandelt. Ich habe damals so geantwortet:

        Die Suche in der MSDN Library hat den Knowlegdebase-Artikel Q176792 "HOWTO: Connecting to a Running Instance of Internet Explorer" als Quelle dieses C-Beispiels gefunden: <i>Normally, an application connects to a running instance of another application using the Running Object table. Because Internet Explorer 4.0 does not register itself in the running object table, another method is necessary. </i> <br>
        Anstelle der ROT (Running Object Table) wird das <b>ShellWindows Object</b> empfohlen, um dort nach dem gesuchten Interface zu fragen. Im Knowlegebase-Artikel ist für Visual Basic und für C++ ein Beispiel aufgeführt, das VB-Beispiel habe ich einmal zum Test nachgebaut. Und hier kann ich tatsächlich den bereits laufenden IE auf eine andere URL "umbiegen":
        <pre>
        unit ConnectToIEFrm;

        interface

        uses
        Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
        StdCtrls, SHDocVw_TLB, OleServer;

        type
        TForm1 = class(TForm)
        Button1: TButton;
        InternetExplorer1: TInternetExplorer;
        ShellWindows1: TShellWindows;
        procedure Button1Click(Sender: TObject);
        private
        { Private-Deklarationen }
        public
        { Public-Deklarationen }
        end;
        var
        Form1: TForm1;
        implementation
        {$R *.DFM}

        { Typbibliothek von Microsoft Internet Controls installieren:
        - TShellWindows für IShellWindow
        - TInternetExplorer }

        procedure TForm1.Button1Click(Sender: TObject);
        var
        aBrowserObj : IWebBrowser2;
        i : Integer;
        begin
        for i := 0 to ShellWindows1.Count - 1 do
        begin
        aBrowserObj := ShellWindows1.Item(i) as IWebBrowser2;
        if aBrowserObj.LocationURL = 'http://www.entwickler-forum.de/' then
        begin
        InternetExplorer1.ConnectTo(aBrowserObj);
        InternetExplorer1.GoHome;
        InternetExplorer1.Disconnect;
        end;
        end;
        end;
        end.
        </pre>
        P.S: Die Konfiguration von TShellWindow und TInternetExplorer sieht in der DFM wie folgt aus:
        <pre>
        object InternetExplorer1: TInternetExplorer
        AutoConnect = False
        ConnectKind = ckRunningOrNew
        Left = 32
        Top = 64
        end
        object ShellWindows1: TShellWindows
        AutoConnect = True
        ConnectKind = ckRunningOrNew
        Left = 64
        Top = 64
        end
        </pre&gt

        Comment

        Working...
        X