/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
    \page qaxserver-demo-simple.html

    \title A standard ActiveX and the "simple" ActiveQt widget

    \raw HTML
    <object ID="QSimpleAX" CLASSID="CLSID:DF16845C-92CD-4AAB-A982-EB9840E74669"
    CODEBASE="http://www.qt-project.org/demos/simpleax.cab">
        <PARAM NAME="text" VALUE="A simple control" />
        <PARAM NAME="value" VALUE="1" />
    [Object not available! Did you forget to build and register the server?]
    </object>

    <FORM>
        <INPUT TYPE="BUTTON" VALUE="About..." onClick="QSimpleAX.about()" />
    </FORM>

    <object ID="Calendar" CLASSID="CLSID:8E27C92B-1264-101C-8A2F-040224009C02">
    [Standard Calendar control not available!]
        <PARAM NAME="day" VALUE="1" />
    </object>

    <FORM>
        <INPUT TYPE="BUTTON" VALUE="Today" onClick="Calendar.Today()" />
    </FORM>

    <SCRIPT LANGUAGE="VBScript">
    Sub Calendar_Click()
        MsgBox( "Calendar Clicked!" )
    End Sub

    Sub QSimpleAX_TextChanged( str )
        document.title = str
    End Sub
    </SCRIPT>

    <SCRIPT LANGUAGE="JavaScript">
    function QSimpleAX::ValueChanged( Newvalue )
    {
        Calendar.Day = Newvalue;
    }
    </SCRIPT>
    \endraw
*/

/*!
    \example activeqt/simple
    \title Simple Example (ActiveQt)

    \brief The Simple example demonstrates the use
    of QAxBindable and QAxFactory.

    The Simple example demonstrates the use of
    QAxBindable::requestPropertyChange() and QAxBindable::propertyChanged(),
    and the use of QAxFactory through the \c QAXFACTORY_BEGIN(),
    \c QAXCLASS() and \c QAXFACTORY_END() macros.

    The ActiveX control in this example is a laid out QWidget with a
    QSlider, a QLCDNumber and a QLineEdit. It provides a
    signal/slot/property interface to change the values of the slider
    and the line edit, and to get notified of any property changes.


    The Qt implementation of the ActiveX for this example is
    \snippet activeqt/simple/main.cpp 0

    The control is exported using the default QAxFactory
    \snippet activeqt/simple/main.cpp 1

    To build the example you must first build the QAxServer library.
    Then run qmake and your make tool in \c examples/activeqt/simple.

    The \l{qaxserver-demo-simple.html}{demonstration} requires your
    WebBrowser to support ActiveX controls, and scripting to be enabled.

    The simple ActiveX control is embedded using the \c <object> tag.

    \input doc/src/examples/simple-demo.qdocinc 0

    A simple HTML button is connected to the ActiveQt's about() slot.

    \input doc/src/examples/simple-demo.qdocinc 1

    A second ActiveX control - the standard Calendar Control - is instantiated

    \input doc/src/examples/simple-demo.qdocinc 2

    Events from the ActiveX controls are handled using both Visual Basic Script
    and JavaScript.

    \input doc/src/examples/simple-demo.qdocinc 3
*/
