2011-03-08 4 views
0

C++。 Borland Developer Studioのフレーバーですが、ここでそれが適切かどうかはわかりません。ダブルバッファリングの場合でも、フォーム上のActiveXビデオコントロールのサイズを変更すると、C++で望ましくないフリッカーが発生します

カメラからのビデオを表示するActiveXコントロール(Axis Communicationsから)があります。通常の操作ではうまく動作しますが、問題を引き起こしている小さな調整を行いたいと思います。

プログラマチックに、コンポーネントをフォームの周り(x、y座標のみ)に移動すると、すべてが問題ありません。ビデオの四角形はちらつきのない滑らかな動きをします。

ただし、コンポーネントのサイズを変更しても(コード内で)、右端の下端がちらつきます(&)。そして、フリッカーによって、私はそれがそれらのエッジに白い境界線を生じさせ、実際の画像の上に成長し、ちらつくことを意味する。

私はDoubleBufferingを試しましたが、それは修正されません。

これはActiveXの問題ですか? Axis Componentの問題が考えられますか?

フリッカーなしでサイズ変更できる方法はありますか?


EDIT:

さらなる試験:

(残念ながら、私が何をしたいのかである、私はコントロールのサイズを変更すると同時に、コントロールを移動すると、これはのみ発生していることと思われます私は拡大縮小しています)。

Visual BasicでActiveXコントロールを使用して簡単なテストを行い、正常に動作します。

Borland C++の正確な(変換された)同じコードには、ちらつきがあります。 (ちょうどコンポーネントのサイズを変更し、静的な中心点を維持する)

C++テストコード:(うまくいけば教育を受けた)

for (int i = 0; i < 100; i++) 
{ 
    AxisMediaControl1->Width = AxisMediaControl1->Width - 2; 
    AxisMediaControl1->Height = AxisMediaControl1->Height - 2; 
    AxisMediaControl1->Top = AxisMediaControl1->Top + 1; 
    AxisMediaControl1->Left = AxisMediaControl1->Left + 1; 
    Sleep(50); 
} 

答えて

0

これは、BorlandとActiveXコントロールのレンダリング/サイズ変更の問題と思われます。

コンポーネントのサイズを変更するだけでなく、 'SetWindowPos' APIを使用するようにコードを変更したところ、問題は解決しました。

0

私の推測では、それが軸成分との問題だということでしょう。つまり、アプリケーションはresizeコマンドをActiveXコンポーネントに送信します。コンポーネントには、内部的に格納されているジオメトリに基づいてペイントを行うイベントループがあり、ジオメトリを正しく更新していません。

簡単な例を作成してAxisの技術サポートに送信することをお勧めします

+0

残念ながら、Axisはポリシーの問題として積極的にソフトウェアテクニカルサポートを拒否しているようですので、私はここに来ています(私は3つのクエリでこれを説明することを拒否しました)。彼らの助けを得るための唯一の方法は、パートナーシップ契約などにサインアップする会社を得ることです。 – Dave

関連する問題