操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    icrosoft的ActiveX技術允許應用程序與其他應用程序或者庫提供的用戶接口組件一起工作。它構建于Microsoft的COM基礎上,為使用組件的應用程序定義了一套接口,并且為提供組件的應用程序和庫提供了另外一套接口。

    Qt/Windows桌面版(Qt/Windows Desktop Edition)提供了ActiveQt框架,用以為ActiveX和Qt提供完美結合。ActiveQt由兩個模塊組成:

    • QAxContainer模塊允許我們使用COM對象并且可以在Qt應用程序中嵌入ActiveX控件。
    • QAxServer模塊允許我們導出使用Qt編寫的自定義的COM對象和ActiveX控件。

    本文的例子將會在一個使用了QAxContainer模塊的Qt應用程序中嵌入一個Windows Media Player(如下圖所示)。這個Qt應用程序在Windows Media Player的ActiveX控件上添加了一個Open按鈕、一個Play/Pause按鈕、一個Stop按鈕以及一個滑動條。

    一.前期準備

    需要獲取所調用ActiveX控件的常用參數和成員函數。可通過如下方法獲取。

    (1)獲取控件的CLSID。比如調用WMP,首先需要知道WMP的CLSID,這里為:{22D6F312-B0F6-11D0-94AB-0080C74C7E95}。

    (2)Qt提供了dumpdoc命令來自動生成對應CLSID控件的說明文檔,打開編譯器命令行,輸入指令格式為:

    dumpdoc {CLISID} -o xxx.html

    (3)查看生成的.html文件,獲取參數、信號和槽函數。

    二. 新建項目

    (1)新建項目,名稱為“mediaplayer”。

    (2)在項目文件.pro中添加如下語句:

    QT +=axcontainer

    (3)新建C++類,名稱為“PlayerWindow”,基類為QWidget。

    (4)在代碼中添加如下頭文件:

    #include <QAxWidget> //用于顯示WMP
    #include <QAxObject> // 用于操作WMP對象

    三. PlayerWindow類的定義

    這個應用程序主窗口的類是PlayerWindow:

    class PlayerWindow : public QWidget
    {
    Q_OBJECT
    	Q_ENUMS(ReadyStateConstants)
    public:
      enum PlayStateConstants { Stopped=0, Paused=1, Playing=2 };
      enum ReadyStateConstants { Uninitialized=0, Loading=1,
      Interactive=3, Complete=4 };
      PlayerWindow();
    protected:
    	void timerEvent(QTimerEvent *event);
    private slots:
      void onPlayStateChange(int oldState, int newState);
      void onReadyStateChange(ReadyStateConstants readyState);
      void onPositionChange(double oldPos, double newPos);
      void sliderValueChanged(int newValue);
      void openFile();
    private:
      QAxWidget *wmp;
      QToolButton *openButton;
      QToolButton *playPauseButton;
      QToolButton *stopButton;
      QSlider *seekSlider;
      QString fileFilters;
      int updateTimer;
    };

    PlayerWindow類繼承了QWidget。這里的Q_ENUMS()宏(就像下面的Q_OBJECT一樣)是必需的,用來告訴moc:在onReadyStateChange()槽中使用的MPReadyStateConstants類型是一個枚舉類型。在private段,我們聲明了一個QAxWidget*的成員變量。

    四. PlayerWindow類的實現

    分段查看構造函數的代碼:

    PlayerWindow::PlayerWindow()
    {
      wmp=new QAxWidget;
      wmp->setControl("{22D6F312-B0F6-11D0-94AB-0080C74C7E95}");

    在構造函數中,我們從創建一個QAxWidget對象封裝Windows Media Player的ActiveX控件開始。QAxContainer模塊由三個類組成:QAxObject封裝一個COM對象,QAxWidget封裝一個ActiveX控件,而QAxBase則為QAxObject和QAxWidget實現了COM的核心功能。這三個類之間的關系如下圖所示。

    我們使用Windows Media Player 6.4控件的類的ID作為參數,對QAxWidget調用setControl()。這樣將會創建一個所需的實例。從那時起,這個ActiveX控件的所有屬性,事件和方法都可以通過QAxWidget對象而作為Qt的屬性、信號和槽來加以使用。

    如下圖中總結的那樣,COM數據類型可以自動轉換為相應的Qt類型。例如,一個類型為VARIANT_BOOL的輸入參數可以轉換成一個boo變量,并且一個類型為VARIANT_BOOL的輸出參數也可以轉換成一個bool &變量。如果結果類型是一個Qt類(比如像QString,QDateTime等),那么輸入參數的類型將會是一個常量引用(例如,const QString &)。

    我們繼續查看PlayerWindow的構造函數:

    wmp->setProperty("ShowControls", false);
    wmp->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    connect(wmp, SIGNAL(PlayStateChange(int, int)),
    	this, SLOT(onPlayStateChange(int, int)));
    connect(wmp, SIGNAL(ReadyStateChange(MPReadyStateConstants)),
    	this, SLOT(onReadyStateChange(MPReadyStateConstants)));

    在調用QAxWidget::setControl()之后,通過調用QObject::setProperty(),可以把這個Windows Media Player的ShowControls屬件設置為false,因為我們自己提供了用來操作這個組件的按鈕。函數QObject::setProperty()既可以用于COM屬性又可以用于普通的Qt屬性。它的第二個參數的類型是QVariant。

    接下來調用setSizePolicy(),讓這個ActiveX控件占有布局中所有可用的空間,并且把COM組件中的ActiveX事件連接到槽中。

    …
    stopButton=new QToolButton;
    stopButton->setText(tr("&Stop"));
    stopButton->setEnabled(false);
    connect(stopButton, SIGNAL(clicked()), wmp, SLOT(Stop()));
    …

    除了把一些Qt信號和這個COM對象提供的槽[Play() ,Pause()和Stop()]連接起來以外,Playerwindow構造函數中的其余部分都與我們在平常模式下的情況一樣。由于這些按鈕的功能實現都有相似性,所以這里只給出了Stop按鈕的實現代碼。

    讓我們離開這個構造函數,來看一看timerEvent()函數:

    void PlayerWindow::timerEvent(QTimerEvent *event)
    {
      if (event->timerId()==updateTimer) {
        double curPos=wmp->property("CurrentPosition").toDouble();
        onPositionChange(-1, curPos);
      } else {
      	QWidget::timerEvent(event);
      }
    }

    當正在播放一個多媒體片斷的時候,每隔一定時間就會調用函數一次。我們使用它推進滑動條的滑塊。通過調用ActiveX控件上的property()獲得CurrentPosition屬性的QVariant類型的值,然后調用toDouble()把它轉換成double值,就可以實現滑塊的推進。然后,我們調用onPositionChange()來執行更新。

    當拖動滑塊時,視頻當前位置通過下面的函數更新:

    void PlayerWindow::sliderValueChanged(int newValue)
    {
      seekSlider->blockSignals(true);
      wmp->setProperty("CurrentPosition", double(newValue) / 60);
      seekSlider->blockSignals(false);
    }

    這里調用了setProperty()函數對屬性進行設置。我們不再查看其余的代碼了,因為它們中的絕大多數都不直接和ActiveX相關。

    五. COM方法的調用

    在處理多個COM對象時,經常需要能夠直接調用一個COM方法(而不是把它連接到一個Qt信號上)。要做到這一點,最容易的方法就是使用這個方法的名字和簽名作為調用QAxBase::dynamicCall()的第一個形式參數,并且把這個方法的實際參數作為額外參數。例如:

    wmp->dynamicCall("TitlePlay(uint)", 6);

    這個dynamicCall()函數最多可以帶8個QVariant類型的參數,并且它可以返回—個QVariant。如果需要使用這種方法傳遞IDispatch *或者IUnkown *,就可以把這個組件封裝到一個QAxObject中,并且對它調用asVariant(),以將其轉換成一個QVariant()。如果需要調用能夠返問Dispatch *或IUnkown *的COM方法,或者如果需要訪問一個具有上述類型之一的COM屬性,那么就可以使用querySubObject()來代替:

    QAxObject *session=outlook.querySubObject("Session");
    QAxObject *defaultContacts=session->querySubObject("GetDefaultFolder(OlDefaultFolders)",
    	"olFolderContacts");

    如果我們希望調用一些函數,而這些函數的參數列表中還有一些不支持的數據類型,那么就可以使用QAxBase::querylnterface()來取得COM的接口并且直接調用這個函數。就像往常使用COM一樣,在我們已經完成了對COM接口的使用時,必須調用Release()。如果需要經常調用這樣的函數,那么可以派生QAxObject或者QAxWidget,并且再提供一些封裝這些COM接口調用的成員函數即可。需要注意的是,這些QAxObject和QAxWidget的子類不能定義它們自己的屬性、信號或槽。

    ——————————————————

    對于本文實例完整代碼有需要的朋友,可關注并在評論區留言!

    【分享成果,隨喜正能量】用最好的自己,活出最好的生命狀態,不必要事事都依靠別人,下雨天還是要自己多準備,懂得照顧自己,懂得愛護自己。一個人的人生,會因為努力而有意義,人可以平凡,但不可以平庸。

    《VBA之Excel應用》是非常經典的,是我推出的第七套教程,定位于初級。這套教程從簡單的錄制宏開始講解,一直到窗體的搭建,內容豐富,實例眾多。大家可以非常容易的掌握相關的知識,這套教程共三冊,十七章,都是我們在利用EXCEL工作過程中需要掌握的知識點,希望大家能掌握利用。今日講解的內容是“VBA之EXCEL應用”的第十五章“ActiveX控件(ActiveX Controls)”的第1節:在工作表中使用 ActiveX 控件

    第一節 在工作表中使用 ActiveX 控件

    在這套教程的開始部分,我曾經講解過在工作表界面中添加一個控件按鈕,然后點擊這個按鈕就可以執行我們的一些自定義操作,其實這個按鈕控件就是一個ActiveX 控件,如下面的工作表界面:

    這節中我們先來認識這個控件。

    1 ActiveX 控件

    ActiveX是Microsoft對于一系列策略性面向對象程序技術和工具的稱呼,其中主要的技術是組件對象模型(COM)。在有目錄和其它支持的網絡中,COM變成了分布式COM(DCOM)。

    ActiveX控件是Microsoft的ActiveX技術的一部分。ActiveX控件是可以在應用程序和網絡中計算機上重復使用的程序對象。創建它的主要技術是Microsoft的ActiveX技術,其中主要是組件對象模型(COM)。ActiveX控件可以以小程序下載裝入網頁,也可以用在一般的Windows和Macintosh應用程序環境中。一般說來,ActiveX 控件代替了原先的OCX,它與JAVAapplet的概念和功能差不多。ActiveX控件可以由不同的可以識別Microsoft的COM技術的語言開發,它是一個組件或自包含的軟件包,它可以在同一個或分布式的計算環境中開發或使用。COM的分布式支持技術稱為DCOM。在實現中,ActiveX控件是一個動態鏈接庫(DLL)模塊,它包括在容器(包括COM程序接口的應用程序)當中。這種可重復使用的組件技術可以加快開發速度和質量,Windows 95 /NT應用程序開發程序如Powerbuilder和Access都利用了ActiveX控件。

    2 如何添加ActiveX 控件

    我們在工作界面點擊“開發工具”(Developer tab),點擊“插入”,這個時候會出現下面的界面:

    我們點擊其中的命令按鈕,然后回到工作表界面,在工作表上拖動命令按鈕,這個時候工作表上就會出現這個控件了:

    3 ActiveX 控件的自定義修改

    右擊剛剛添加的按鈕(確保選擇了設計模式)。然后單擊“屬性”來更改控件的標題和名稱。

    更改命令按鈕的標題為“應用藍色文本顏色”。現在,我們將保留CommandButton1作為命令按鈕的名稱:

    4 給控件添加代碼

    我們右擊command按鈕(確保選擇了設計模式),選擇“查看代碼”

    這時就會進入VBE窗口:

    我們在其中添加下面的代碼:

    Selection.Font.Color=vbBlue

    如下截圖:

    5 控件的應用

    回到工作界面,確保選擇范圍A1:A7,確保退出設計模式。

    點擊命令按鈕:

    這個時候,選擇范圍的文本就變成了藍色。

    以上我以命令按鈕為例,講解了ActiveX 控件的添加、修改、應用,其他的控件與此類似,在后面的內容中會逐一講解。

    今日內容回向:

    1) 如何向工作表中添加ActiveX 控件?

    2) 如何修改ActiveX 控件的標題(名稱一般不做修改)?

    3) 如何給ActiveX 控件添加代碼?



    本講內容參考程序文件:工作簿15.xlsm

    分享成果,隨喜正能量

    • VBA的學習教程(初級、中級、高級):

    VBA是利用Office實現個人小型辦公自動化的有效手段(工具)。這是我對VBA的應用界定。在取代OFFICE新的辦公軟件沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重復我之前的經歷,我根據自己多年VBA實際利用經驗,推出了八部VBA專門教程,學習順序七、一(或者四)、三、二、六、五;或者七、八。其中七,一(或者四)是初級;三,二,八是中級;六,五是高級:

    第一套:VBA代碼解決方案 是VBA中各個知識點的講解,教程共147講,覆蓋絕大多數的VBA知識點,提供的程序文件更是一座不可多得的代碼寶庫,是初學及中級人員必備教程;目前這套教程提供的版本是修訂第二版,程序文件通過32位和64位兩種OFFICE系統測試。

    第二套:VBA數據庫解決方案 數據庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,適合中級人員的學習。目前這套教程提供的是修訂第一版教程,程序文件通過32位和64位兩種OFFICE系統測試。

    第三套:VBA數組與字典解決方案 數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習,是初級及中級人員代碼精進的手段。目前這套教程提供的版本是修訂第一版,程序文件通過32位和64位兩種OFFICE系統測試。

    第四套:VBA代碼解決方案之視頻 是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。這套教程是第一套教程(修訂一版)的視頻講解,視頻更易接受。

    第五套:VBA中類的解讀和利用是一部高級教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。這套教程的領會主要是讀者的領悟了,領悟一種佛學的哲理。目前這套教程提供的版本是修訂第一版,程序文件通過32位和64位兩種OFFICE系統測試。

    第六套教程:VBA信息獲取與處理,是一部高級教程,涉及范圍更廣,實用性更強,面向中高級人員。教程共二十個專題,包括:跨應用程序信息獲得、隨機信息的利用、電子郵件的發送、VBA互聯網數據抓取、VBA延時操作,剪切板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定制工作表信息函數等等內容。程序文件通過32位和64位兩種OFFICE系統測試。

    第七套教程:VBA之EXCEL應用 這是一部初級教程這部教程共三冊,從從創建宏、對話框、工作簿和工作表對象、單元格對象等基礎內容講起,到循環結構、錯誤處理、字符串操作、日期和時間、事件、數組應用,函數過程等方面,一直講解到控件和窗體對象的應用都是我們提高自己EXCEL水平的必須。

    第八套教程:VBA之WORD應用 是圍繞“面向對象編程”展開的講解,讓大家充分認識Word中VBA的對象,以及對象的屬性、方法及利用。教程共分三冊,十六章,其中前十五章是各種對象屬性、方法的講解,每節都有專門的實例說明這些屬性方法的具體應用,最后一章是結和具體應用場景的講解,詳細講解了二十八個實際工作中有代表性的實例,緊扣word數據的批量處理,發揮VBA的長處。本套教程實例眾多,大家可以拿來即用,或者修正后加以利用。由于這套教程是圍繞“面向對象編程”來展開,建議大家先學《VBA之Excel應用》,對VBA中的對象、屬性、方法、事件有一定認識后再來學習這套教程。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有