Aracılığıyla paylaş


Internet'te ActiveX Denetimleri

ActiveX denetimleri, OLE denetimi belirtiminin güncelleştirilmiş sürümüdür.

Önemli

ActiveX, yeni geliştirme için kullanılmaması gereken eski bir teknolojidir. Daha fazla bilgi için bkz . ActiveX Denetimleri.

Denetimler, İnternet'teki COM kullanan Web tarayıcıları da dahil olmak üzere çeşitli kapsayıcılarda kullanılabilecek programlanabilir yazılım bileşenleri geliştirmeye yönelik birincil mimaridir. Herhangi bir ActiveX denetimi bir İnternet denetimi olabilir ve bir Active belgesine işlevselliğini ekleyebilir veya bir Web sayfasının parçası olabilir. Web sayfasındaki denetimler betik kullanarak birbirleriyle iletişim kurabilir.

ActiveX denetimleri İnternet ile sınırlı değildir. Bir ActiveX denetimi, denetim bu kapsayıcının gerektirdiği arabirimleri desteklediği sürece herhangi bir kapsayıcıda da kullanılabilir.

ActiveX denetimlerinin aşağıdakiler gibi çeşitli avantajları vardır:

  • Önceki OLE denetimlerinden daha az gerekli arabirim.

  • Penceresiz ve her zaman yerinde etkin olma yeteneği.

ActiveX denetimi olmak için bir denetimin şunları yapması gerekir:

  • Arabirimi destekleyin IUnknown .

  • COM nesnesi olun.

  • DLLRegisterServer ve DLLUnRegisterServer'ı dışarı aktarın.

  • İşlevsellik için gereken ek arabirimleri destekleyin.

Mevcut Denetimlerinizi İnternet'e Uygun Hale Getirme

İnternet ortamında iyi çalışacak bir denetim tasarlamak, İnternet'teki nispeten düşük iletim hızları için dikkate alınması gerekir. Mevcut denetimlerinizi kullanabilirsiniz; ancak, kod boyutunuzu küçültmek ve denetim özelliklerinizin zaman uyumsuz olarak indirilmesini sağlamak için gerçekleştirmeniz gereken adımlar vardır.

Denetimlerinizin performansını geliştirmek için verimlilikle ilgili dikkat edilmesi gerekenler hakkında şu ipuçlarını izleyin:

  • ActiveX Denetimleri: İyileştirme makalesinde açıklanan teknikleri uygulayın.

  • Bir denetimin nasıl başlatılmış olduğunu düşünün.

  • Zaman uyumsuz olun; diğer programları tutmayın.

  • Küçük bloklardaki verileri indirin.

    Bit eşlemler veya video verileri gibi büyük akışları indirirken, kapsayıcıyla işbirliği içinde bir denetimin verilerine zaman uyumsuz olarak erişin. Verileri artımlı veya aşamalı bir şekilde alın ve veri almakta olabilecek diğer denetimlerle birlikte çalışma. Kod zaman uyumsuz olarak da indirilebilir.

  • Arka planda kod ve özellikleri indirin.

  • Kullanıcı arabirimini mümkün olan en kısa sürede etkin hale getirebilir.

  • Hem özellikler hem de büyük veri BLOB'ları (bit eşlem görüntüsü veya video verileri gibi) kalıcı verilerin nasıl depolandığını düşünün.

    Büyük bit eşlemler veya AVI dosyaları gibi önemli miktarda kalıcı veri içeren denetimler, indirme yöntemine dikkat edilmesi gerekir. Bir belge veya sayfa mümkün olan en kısa sürede görünür hale gelebilir ve denetimler arka planda verileri alırken kullanıcının sayfayla etkileşim kurmasına izin verebilir.

  • Kod boyutunu ve çalışma süresini azaltmayı korumak için verimli yordamlar yazın.

    Yalnızca birkaç bayt kalıcı veri içeren küçük düğme ve etiket denetimleri, İnternet ortamında kullanıma uygundur ve tarayıcıların içinde iyi çalışır.

  • İlerleme durumunun kapsayıcıya iletıldığını düşünün.

    Kullanıcının bir sayfayla etkileşime ne zaman başlayabildiği ve indirmenin ne zaman tamamlanabileceği de dahil olmak üzere zaman uyumsuz indirmedeki ilerleme durumunu kapsayıcıya bildirin. Kapsayıcı, kullanıcıya ilerleme durumunu (tamamlanma yüzdesi gibi) görüntüleyebilir.

  • Denetimlerin istemci bilgisayarda nasıl kaydediliyor olduğunu düşünün.

Yeni ActiveX Denetimi Oluşturma

Uygulama Sihirbazı'nı kullanarak yeni bir denetim oluştururken, zaman uyumsuz adlar ve diğer iyileştirmeler için desteği etkinleştirmeyi seçebilirsiniz. Denetim özelliklerini zaman uyumsuz olarak indirme desteği eklemek için şu adımları izleyin:

MFC ActiveX Denetim Sihirbazı'nı kullanarak projenizi oluşturmak için

  1. Dosya menüsünde Yeni'ye tıklayın.

  2. Visual Studio C++ projelerinden MFC ActiveX Denetim Sihirbazı'nı seçin ve projenizi adlandırın.

  3. Denetim Ayarlar sayfasında Özellikleri zaman uyumsuz olarak yükler'i seçin. Bu seçeneğin seçilmesi, hazır durum özelliğini ve hazır durum değiştirme olayını sizin için ayarlar.

    Ayrıca, ActiveX Denetimleri: İyileştirme bölümünde açıklanan Penceresiz etkinleştirme gibi diğer iyileştirmeleri de seçebilirsiniz.

  4. Projeyi oluşturmak için Son'u seçin.

CDataPathProperty'den türetilen bir sınıf oluşturmak için

  1. öğesinden CDataPathPropertytüretilmiş bir sınıf oluşturun.

  2. Denetiminizin üst bilgi dosyasını içeren kaynak dosyalarınızın her birinde, bu sınıfın üst bilgi dosyasını ondan önce ekleyin.

  3. Bu sınıfta, geçersiz kılın OnDataAvailable. Bu işlev, görüntüleme için kullanılabilir veriler olduğunda çağrılır. Veriler kullanılabilir hale geldikçe, verileri istediğiniz şekilde, örneğin aşamalı olarak işleyerek işleyebilirsiniz.

    Aşağıdaki kod alıntısı, verileri düzenleme denetiminde aşamalı olarak görüntülemeye yönelik basit bir örnektir. Düzenleme denetimini temizlemek için bayrak BSCF_FIRSTDATANOTIFICATION kullanımına dikkat edin.

    void CMyDataPathProperty::OnDataAvailable(DWORD dwSize, DWORD bscfFlag)
    {
       CListCtrl list_ctrl;
       CEdit *edit = list_ctrl.GetEditControl();
       if ((bscfFlag & BSCF_FIRSTDATANOTIFICATION) && edit->m_hWnd)
       {
          edit->SetSel(0, -1);
          edit->Clear();
       }
    
       if (dwSize > 0)
       {
          CString string;
          LPTSTR str = string.GetBuffer(dwSize);
          UINT nBytesRead = Read(str, dwSize);
          if (nBytesRead > 0)
          {
             string.ReleaseBuffer(nBytesRead);
             edit->SetSel(-1, -1);
             edit->ReplaceSel(string);
          }
       }
    }
    

    AFXCMN eklemeniz gerektiğini unutmayın. Sınıfını kullanmak CListCtrl için H.

  4. Denetiminizin genel durumu değiştiğinde (örneğin, yüklemeden başlatılmış veya kullanıcı etkileşimlisine) çağrısı yapın COleControl::InternalSetReadyState. Denetiminizde yalnızca bir veri yolu özelliği varsa, kapsayıcıya indirme işleminin tamamlandığını bildirmek için BSCF_LASTDATANOTIFICATION kod ekleyebilirsiniz. Örnek:

    if (bscfFlag & BSCF_LASTDATANOTIFICATION)
    {
       GetControl()->InternalSetReadyState(READYSTATE_COMPLETE);
    }
    
  5. öğesini geçersiz kılın OnProgress. içinde OnProgress, maksimum aralığı gösteren bir sayı ve geçerli indirmenin ne kadar ilerler olduğunu gösteren bir sayı geçirilir. Kullanıcıya tamamlanma yüzdesi gibi bir durum görüntülemek için bu sayıları kullanabilirsiniz.

Sonraki yordam, az önce türetilen sınıfı kullanmak için denetime bir özellik ekler.

Özellik eklemek için

  1. Sınıf Görünümü'nde, kitaplık düğümünü altındaki arabirime sağ tıklayın ve Ekle'yi ve ardından Özellik Ekle'yi seçin. Bu işlem Özellik Ekleme Sihirbazı'nı başlatır.

  2. Özellik Ekleme Sihirbazı'nda, Set/Get Methods radyo düğmesini seçin, Özellik Adı'nı yazın (örneğin, EditControlText) ve Özellik türü olarak BSTR'yi seçin.

  3. Finish (Son) düğmesine tıklayın.

  4. Türetilmiş sınıfınızın CDataPathPropertyüye değişkenini ActiveX denetim sınıfınıza bildirin.

    CMyDataPathProperty EditControlText;
    
  5. Get/Set Yöntemlerini uygulayın. için Getdizesini döndür. için Setözelliğini yükleyin ve öğesini çağırın SetModifiedFlag.

    BSTR CMFCActiveXControlCtrl::GetEditControlText(void)
    {
       AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
       CString strResult;
       strResult = EditControlText.GetPath();
       return strResult.AllocSysString();
    }
    
    void CMFCActiveXControlCtrl::SetEditControlText(LPCTSTR newVal)
    {
       AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
       Load(newVal, EditControlText);
       SetModifiedFlag();
    }
    
  6. DoPropExchange'te aşağıdaki satırı ekleyin:

    PX_DataPath(pPX, _T("DataPath"), EditControlText);
    
  7. Bu satırı ekleyerek özelliğin denetimini sıfırlamasını bildirmek için ResetData'yı geçersiz kılın:

    EditControlText.ResetData();
    

CDataPathProperty veya CCachedDataPathProperty'den Türetilip Türemeyeceğine Karar Verme

Önceki örnekte, denetiminizin özelliğini 'den CDataPathPropertytüretme adımları açıklanmaktadır. Sık sık değişen ve tüm verileri değil yalnızca geçerli değeri tutmanız gerekmeyen gerçek zamanlı verileri indiriyorsanız bu iyi bir seçimdir. Hisse senedi değerleyici denetimi örnek olarak verilmiştir.

'den CCachedDataPathPropertyde türetebilirsiniz. Bu durumda, indirilen veriler bir bellek dosyasında önbelleğe alınır. İndirilen tüm verileri (örneğin, bit eşlemi aşamalı olarak işleyen bir denetim) saklamanız gerekiyorsa bu iyi bir seçimdir. Bu durumda, sınıfın verilerinizi içeren bir üye değişkeni vardır:

CMemFile m_Cache;

ActiveX denetim sınıfınızda, verileri görüntülemek için içindeki OnDraw bu bellek eşleme dosyasını kullanabilirsiniz. ActiveX denetimi CCachedDataPathPropertytüretilmiş sınıfınızda, üye işlevini OnDataAvailable geçersiz kılın ve temel sınıf uygulamasını çağırdıktan sonra denetimi geçersiz kılın.

void CMyCachedDataPathProperty::OnDataAvailable(DWORD dwSize, DWORD bscfFlag)
{
   CCachedDataPathProperty::OnDataAvailable(dwSize, bscfFlag);
   GetControl()->InvalidateControl();
}

ActiveX Denetimlerini Kullanarak Verileri Zaman Uyumsuz olarak İndirme

Ağ üzerinden veri indirme işlemi zaman uyumsuz olarak yapılmalıdır. Bunu yapmanın avantajı, büyük miktarda veri aktarılırsa veya bağlantı yavaşsa indirme işleminin istemcideki diğer işlemleri engellememesidir.

Zaman uyumsuz takma adlar, verileri ağ üzerinden zaman uyumsuz olarak indirmenin bir yolunu sağlar. İşlem tamamlanmamış olsa bile Zaman Uyumsuz bir takma ad üzerinde Okuma işlemi hemen döndürülüyor.

Örneğin, kullanılabilir yalnızca 10 bayt varsa ve Okuma 1K dosyasında zaman uyumsuz olarak çağrılırsa, Okuma engellemez, ancak şu anda kullanılabilir 10 bayt ile döndürür.

sınıfını kullanarak CAsyncMonikerFile zaman uyumsuz adlar uygularsınız. Ancak ActiveX denetimleri, zaman uyumsuz denetim özelliklerinin uygulanmasına yardımcı olmak için öğesinden CAsyncMonikerFiletüretilen sınıfını kullanabilirCDataPathProperty.

Web Sayfasında Denetim Görüntüleme

Web sayfasına denetim eklemeye yönelik bir nesne etiketi ve öznitelik örneği aşağıda verilmiştir.

<OBJECT
  CLASSID="clsid:FC25B780-75BE-11CF-8B01-444553540000"
  CODEBASE="/ie/download/activex/iechart.ocx"
  ID=chart1
  WIDTH=400
  HEIGHT=200
  ALIGN=center
  HSPACE=0
  VSPACE=0>
  <PARAM NAME="BackColor" value="#ffffff"/>
  <PARAM NAME="ForeColor" value="#0000ff"/>
  <PARAM NAME="url" VALUE="/ie/controls/chart/mychart.txt"/>
</OBJECT>

Mevcut OLE Denetimini Yeni ActiveX Denetimi Özelliklerini Kullanacak Şekilde Güncelleştirme

OLE denetiminiz 4.2'den önceki bir Visual C++ sürümüyle oluşturulduysa, performansını geliştirmek ve işlevselliğini geliştirmek için izleyebileceğiniz adımlar vardır. Bu değişikliklerin ayrıntılı bir tartışması için bkz . ActiveX Denetimleri: İyileştirme.

Mevcut bir denetime zaman uyumsuz özellik desteği ekliyorsanız hazır durum özelliğini ve ReadyStateChange olayı kendiniz eklemeniz gerekir. Denetiminizin oluşturucusunda şunları ekleyin:

m_lReadyState = READYSTATE_LOADING;

Kodunuz indirilirken hazır durumu COleControl::InternalSetReadyState çağrısıyla güncelleştirirsiniz. Çağırabileceğiniz InternalSetReadyState bir yer, türetilmiş sınıfın geçersiz kılınmış olmasıdır OnProgressCDataPathProperty.

Ayrıca bkz.

MFC Internet Programlama Görevleri
MFC Internet Programlama Temelleri