情報詳細Q複数のHALCONウインドウでそれぞれ別々にホイール操作させる方法を教えてください。AC#にてHALCONのサンプルプログラムを作成しました。(test_program.zip)処理内容・ボタン操作による画像出力・グレーに塗りつぶす領域をCreateDrawingObjectRectangle1で指定・マウスホイールを追加・SetPartにより画面調整1)SetPartのオペレータについてDispObjの前にSetPartのオペレータで設定することによりWindow全体に表示が可能になります。画像のheightとwidthを使用する。記入例)HOperatorSet.SetPart( BlockIcon_1.HalconWindow, 0, 0, height, width);2)ハルコンウインドウのマウスホイールイベント設定について通常、HSmartWindowControlクラスにマウスホイールイベント(HSmartWindowControl_MouseWheel)をご利用いただくことをお勧めいたします。表示画面が1つの場合はマウスホイールイベントを追加する場合は初期化(InitializeComponent();)を行った直後下記のようなコードを記載いたします。//////////////////////////////// public Form1() { InitializeComponent(); //マウスホイールイベントを追加 this.MouseWheel += hSmartWindowControl1.HSmartWindowControl_MouseWheel; }////////////////////////////////※上記の方法は表示画面が一つの場合に有効な手段複数画面がある場合には、上記の方法を使用するとどこにマウスカーソルがあった場合でも画像が動いてしまう。そこで複数画面表示の場合には、マウスホイールがWindowの上に存在するかをハンドルで返すことにより取得し、制御する必要がある。*********************************************************マウスホイールイベントを使用しない場合には this.MouseWheel -= hSmartWindowControl1.HSmartWindowControl_MouseWheel;に設定マウスホイールイベントを使用する場合には this.MouseWheel += hSmartWindowControl1.HSmartWindowControl_MouseWheel;に設定*********************************************************上記のように設定することによりマウスホイールイベントを切り替えることが可能になります。そこで例を示すとwiondowを2つ用意して、それぞれマウスカーソルがそれぞれのウインドウの上に来た場合にハンドルを返し、window1上にマウスカーソルがあった場合は、下記のコードを実行********************************************************* this.MouseWheel += hSmartWindowControl1.HSmartWindowControl_MouseWheel; this.MouseWheel -= hSmartWindowControl2.HSmartWindowControl_MouseWheel;*********************************************************window2上にマウスカーソルがあった場合は、下記のコードを実行********************************************************* this.MouseWheel -= hSmartWindowControl1.HSmartWindowControl_MouseWheel; this.MouseWheel += hSmartWindowControl2.HSmartWindowControl_MouseWheel;*********************************************************となるようにイベントハンドルを作成することで可能となる。■変更点(例)1)Form1.Designer.csのCSファイルの変更デザインによってウインドウ画面(hSmartWindowControl)を2つ生成し、hSmartWindowControl1とhSmartWindowControl2の設定項目が存在しているとする。その際に、Form1.Designer.csファイルの設定項目のそれぞれに下記のコードが入力されているかを確認。ない場合には下記コードを追加する。(hsmartWindowControl2も同様に確認し、なければ追加する)********************************************************************************//マウスポインタを移動した時に発火するイベントの生成this.hSmartWindowControl1.HMouseMove += new HalconDotNet.HMouseEventHandler(this.hSmartWindowControl1_HMouseMove);//マウスポインタが離れた時に発火するイベントの生成this.hSmartWindowControl1.MouseLeave += new System.EventHandler(this.hSmartWindowControl1_MouseLeave);//マウスホイールが動作した時に発火するイベントの生成this.hSmartWindowControl2.HMouseWheel += new HalconDotNet.HMouseEventHandler(this.hSmartWindowControl_HMouseWheel);********************************************************************************2)Form1.csファイルの変更下記のコードを public partial class Form1 : Formの中に入力する。********************************************************************************//ウインドウを番号で管理するための設定enum KindOfHSmartWindowCotrolInst { NO_SELECT = -1, // どのHSmartWindowCotrolでもない HWINDOW1 = 0, // 1つ目のHSmartWindowCotrol HWINDOW2 = 1, // 2つ目のHSmartWindowCotrol }; KindOfHSmartWindowCotrolInst curSelectInst = KindOfHSmartWindowCotrolInst.NO_SELECT;//マウスポインタの移動イベントが発生した際の処理(hSmartWindowControl1) private void hSmartWindowControl1_HMouseMove(object sender, HMouseEventArgs e) { if (curSelectInst != KindOfHSmartWindowCotrolInst.HWINDOW1) { this.MouseWheel += hSmartWindowControl1.HSmartWindowControl_MouseWheel; this.MouseWheel -= hSmartWindowControl2.HSmartWindowControl_MouseWheel; curSelectInst = KindOfHSmartWindowCotrolInst.HWINDOW1; } }//マウスポインタの移動イベントが発生した際の処理(hSmartWindowControl2) private void hSmartWindowControl2_HMouseMove(object sender, HMouseEventArgs e) { if (curSelectInst != KindOfHSmartWindowCotrolInst.HWINDOW2) { this.MouseWheel -= hSmartWindowControl1.HSmartWindowControl_MouseWheel; this.MouseWheel += hSmartWindowControl2.HSmartWindowControl_MouseWheel; curSelectInst = KindOfHSmartWindowCotrolInst.HWINDOW2; } }//マウスポインタがウインドウから離れたイベントが発生したときの処理(hSmartWindowControl1) private void hSmartWindowControl1_MouseLeave(object sender, EventArgs e) { this.MouseWheel -= hSmartWindowControl1.HSmartWindowControl_MouseWheel; curSelectInst = KindOfHSmartWindowCotrolInst.NO_SELECT; }//マウスポインタがウインドウから離れたイベントが発生したときの処理(hSmartWindowControl2) private void hSmartWindowControl2_MouseLeave(object sender, EventArgs e) { this.MouseWheel -= hSmartWindowControl2.HSmartWindowControl_MouseWheel; curSelectInst = KindOfHSmartWindowCotrolInst.NO_SELECT; }//マウスホイールイベントが発生したときの処理(どの程度ホイールが動作したかを確認することができる) private void hSmartWindowControl_HMouseWheel(object sender, HMouseEventArgs e) { System.Diagnostics.Debug.WriteLine(string.Format("e.X : {0} e.Y : {1} e.Delta{2}", e.X, e.Y, e.Delta)); }********************************************************************************上記の方法によりそれぞれのウィンドウで表示が可能。(添付資料:Multiple_window_mouse_wheel.zip) 添付ファイルC#_program.zipタイトルC#HALCONのサンプルプログラム(複数画面でそれぞれ別々にホイール操作するためのプログラム設定)URL 名C-HALCONのサンプルプログラム-複数画面でそれぞれ別々にホイール操作するためのプログラム設定公開状況公開済み検証状況公開済み