Announcement

Collapse
No announcement yet.

Beispiel ActiveX Form

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

  • Beispiel ActiveX Form

    Hallo,

    ich möchte eine ActiveXForm erstellen und Eigenschaften und Ereignisse hinzufügen. Angeblich soll das ja alles ganz einfach sein. Mir gelingt es
    aber nicht. Neue Eigenschaften bzw. Ereignisse bleiben unsichtbar.

    Wer kann mir ein einfaches Beispiel senden ? Ich wäre Euch sehr dankbar !!
    E-Mails an [email protected]

  • #2
    Hallo,

    aus der HTML-Seite heraus kann auf die eigenen Interface-Methoden des ActiveForm zugegriffen werden, wobei dies auch für die Interface-Methoden des Events-Interfaces gilt. Das folgende Beispielprojekt demonstriert, wie<br>
    a) aus der HTML-Datei heraus der Text der TEdit-Instanz im ActiveForm gesetzt wird. <br>
    b) in der HTML-Datei auf das Anklicken der TButton-Instanz im ActiveForm reagiert wird, und <br>
    c) in der HTML-Datei der neue Inhalt der TEdit-Instanz im ActiveForm ausgelesen wird

    Nachdem die ActiveX-Bibliothek und das Grundgerüst für das ActiveForm vom Experten zusammengestellt wurde, werden m 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

    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 dem Refreshen der Implementierungs-Unit sieht das Ganze so aus (dabei muss nur die Zeile procedure OSButtonEvent(Sender: TObject); manuell eingefügt werden, die beiden Methoden für OSParameter hat Delphi angelegt):
    <pre>type
    TActiveFormDemoX = class(TActiveForm, IActiveFormDemoX)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    private
    { Private-Deklarationen }
    FEvents: IActiveFormDemoXEvents;
    procedure ActivateEvent(Sender: TObject);
    procedure ClickEvent(Sender: TObject);
    procedure CreateEvent(Sender: TObject);
    procedure DblClickEvent(Sender: TObject);
    procedure DeactivateEvent(Sender: TObject);
    procedure DestroyEvent(Sender: TObject);
    procedure KeyPressEvent(Sender: TObject; var Key: Char);
    procedure PaintEvent(Sender: TObject);
    // manuell eintragen
    procedure OSButtonEvent(Sender: TObject);
    protected
    { Protected-Deklarationen }
    procedure DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage); override;
    procedure EventSinkChanged(const EventSink: IUnknown); override;
    function Get_Active: WordBool; safecall;
    function Get_AutoScroll: WordBool; safecall;
    function Get_AutoSize: WordBool; safecall;
    function Get_AxBorderStyle: TxActiveFormBorderStyle; safecall;
    function Get_Caption: WideString; safecall;
    function Get_Color: OLE_COLOR; safecall;
    function Get_Cursor: Smallint; safecall;
    function Get_DoubleBuffered: WordBool; safecall;
    function Get_DropTarget: WordBool; safecall;
    function Get_Enabled: WordBool; safecall;
    function Get_Font: IFontDisp; safecall;
    function Get_HelpFile: WideString; safecall;
    function Get_KeyPreview: WordBool; safecall;
    function Get_PixelsPerInch: Integer; safecall;
    function Get_PrintScale: TxPrintScale; safecall;
    function Get_Scaled: WordBool; safecall;
    function Get_Visible: WordBool; safecall;
    function Get_VisibleDockClientCount: Integer; safecall;
    procedure _Set_Font(const Value: IFontDisp); safecall;
    procedure AboutBox; safecall;
    procedure Set_AutoScroll(Value: WordBool); safecall;
    procedure Set_AutoSize(Value: WordBool); safecall;
    procedure Set_AxBorderStyle(Value: TxActiveFormBorderStyle); safecall;
    procedure Set_Caption(const Value: WideString); safecall;
    procedure Set_Color(Value: OLE_COLOR); safecall;
    procedure Set_Cursor(Value: Smallint); safecall;
    procedure Set_DoubleBuffered(Value: WordBool); safecall;
    procedure Set_DropTarget(Value: WordBool); safecall;
    procedure Set_Enabled(Value: WordBool); safecall;
    procedure Set_Font(var Value: IFontDisp); safecall;
    procedure Set_HelpFile(const Value: WideString); safecall;
    procedure Set_KeyPreview(Value: WordBool); safecall;
    procedure Set_PixelsPerInch(Value: Integer); safecall;
    procedure Set_PrintScale(Value: TxPrintScale); safecall;
    procedure Set_Scaled(Value: WordBool); safecall;
    procedure Set_Visible(Value: WordBool); safecall;
    function Get_OSParameter: WideString; safecall;
    procedure Set_OSParameter(const Value: WideString); safecall;
    public
    { Public-Deklarationen }
    procedure Initialize; override;
    end;
    </pre>
    Alle neu deklarierten Methoden müssen nun implementiert werden. Die Ereignisbehandlungsmethode für das Anklicken der TButton-Instanz im ActiveForm ruft zuerst ShowMessage auf, um eine Rückmeldung im ActiveForm zu demonstrieren. Zusätzlich wird das eigene Event aufgerufen, indem indirekt die Interface-Methode OnOSButtonClick aufgerufen wird. Die beiden Get_- und Set_-Methode für OSParameter bilden nur die Verbindung zwischen der TEdit-Instanz im ActiveForm und dem Parameter bzw. dem Rückgabewert für die Eigenschaft OSParameter des ActiveForm. Aus der HTML-Datei heraus kann nur auf die Interface-Methoden des ActiveForm zugegriffen werden, so dass diese beiden Wrapper-Methoden notwendig sind.
    <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>
    Der Zugriff in der HTML-Seite sieht dann so aus:
    <pre>
    ...
    > < PARAM name="OSParameter" value="Der Text aus der HTML">
    < /OBJECT>
    < SCRIPT LANGUAGE="JavaScript" FOR="OSActiveForm" EVENT="OnOSButtonClick">
    alert(document.all.OSActiveForm.OSParameter);
    < /SCRIPT>
    </pre&gt

    Comment

    Working...
    X