CVI の表を自動的にハイライトする機能を止めるには



使用ソフトウェア:
使用ソフトウェア・バージョン: N/A
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: N/A

問題: LabWindows/CVI 5.5.1 から 7.1 にアップグレードして気づいたのですが、表のセルがハイライト表示(青い枠線)されます。これは 5.5.1 では起こりませんでした。この機能を停止させる方法はありますか。

解決策: この枠線はコントロールにフォーカスがないときに表示されます(5.5 でもフォーカスがあるときは塗りつぶし表示されます)。表が編集モード (ATTR_TABLE_RUN_STATE = VAL_EDIT_STATE) のときには、枠線は表示されません。表にフォーカスがないときには動作状態は関係ないことを利用して、表からフォーカスがなくなったときに動作状態を変更すれば、枠線を表示させないようにできます。表のコールバックに以下のコードを追加してみてください。

case EVENT_GOT_FOCUS:
SetCtrlAttribute (panel, control, ATTR_TABLE_RUN_STATE, VAL_SELECT_STATE);
break;
case EVENT_LOST_FOCUS:
SetCtrlAttribute (panel, control, ATTR_TABLE_RUN_STATE, VAL_EDIT_STATE);
SetCtrlAttribute (panel, control, ATTR_DIMMED, 1);
SetCtrlAttribute (panel, control, ATTR_DIMMED, 0);
break;

このコードでは、ATTR_DIMMED を変更しています。動作状態属性の変更後、表を再描画させるためのトリックです(コントロールからフォーカスから外れたときに必要な作業です)。 ところで、このコールバックは、パネルがロードされてから、ユーザがフォーカスを変更したときに問題を修復するだけです。最初にパネルが開いたときに、表がアクティブでなければ適用できません。その場合には以下のような初期化コードを追加します。

SetCtrlAttribute (panel, control, ATTR_TABLE_RUN_STATE, VAL_EDIT_STATE);

また、元々 CVI 5.5.1 で作成された表(それを CVI 7.1 で開いている)を使う場合にはindicator モードのときに枠線は表示されません。これはバグで、将来のバージョンで修復される予定ですが、当面の回避策は以下のとおりです。

表は表示用の部品なので、どのセルかアクティブなのか問題にはなりません。使用していない列や行があれば、表示されない部分に空の行や列を追加し、その中のセルをアクティブにします。またスクロールバーを隠しておけば、ユーザにはその行や列が見えないので、枠線を表示せずに済みます。


関連リンク: KnowledgeBase 3209FK8O: How Can I Avoid a Row or Column To Be Selected When The User Clicks the Headers in CVI?

添付:





報告日時: 10/08/2004
最終更新日: 03/08/2005
ドキュメントID: 3E78FG29