04-19-2016 11:27 PM
実行中、タブ制御器の中にある制御器(例:数値制御器)の背景色を変更したいですが、
方法があるでしょうか。
04-20-2016 01:04 AM
coco1104様、こんにちは
いま手元にLabViewが無いので確認できないのですが、
ブロックダイアグラム画面で右クリックして出てくるメニューで「プロパティ」で検索してみてください。
「プロパティノード」(だったかな?)が出てくるので、それに変更したい制御器のリファレンスを繋げてみて下さい。
プロパティノードの項目をクリックすると変更できる項目一覧が出てきますので「背景色」を選び、変更したい色を繋げれば実行中に変更されます。
(ただし、実行後に最初の色に戻らないので注意が必要です)
04-20-2016 01:05 AM
coco1104 様
タブ制御器の中/外問わずプロパティノードで変更できると思います。
(例:数値制御器)プロパティノード→数値テキスト→テキストカラー→背景色
04-20-2016 01:37 AM
toffy様、su-sann5073様
早々ご回答頂きありがとうございます。
お二人おっしゃっていたことが承知しております。
質問について、わかりにくかったようで申し訳ございません。
作りたい動作としては、
タブ制御器にいくつかの数値制御器があって、それらの制御器についてループで検索をかけ、
その中に制御条件に引っかかる数値制御器の背景色だけを変えたいです。
そこで、変更したい数値制御器は不明のため、プロパティノードの項目に「背景色」を変える選択肢が出てこないです。
その選択肢を出せるいい方法があればぜひ教えていただきたいです。
よろしくお願いいたします。
04-20-2016 02:06 AM
coco1104様
同じような数値制御器がたくさんあって、それらの背景変更するしないを手軽にやりたい。という感じでしょうか
ベストな方法では無いかもしれませんが自分でやるとしたら
1.(手間ですが…)全ての制御器のリファレンスを作成する
2.配列で全てのリファレンスをまとめる
3.ループ内で指標ごとに条件判断をしてTrueになったリファレンスだけ色を変更。Falseなら何もしない。
としてみます。
同じ制御器のリファレンスの配列の場合だと、プロパティノードで背景色を選べるんじゃないかなぁと思いますが
選べない場合は特定のクラスに変換したりする必要があるかもしれません。
04-21-2016 12:49 AM
toffy様
返事が遅くなりすみませんでした。
アドバイスありがとうございました。
制御器のリファレンス配列を作る方法で問題解決しました。
作り上ちょっと手間で画面上が見にくくなるですが、効果が抜群でした。
助かりました。
ありがとうございました。
04-22-2016 09:47 AM
横槍恐縮です。
既に解決されているので大丈夫と思いますが、制御器リファレンスの配列については、
「タブ制御器」の中の各ページの制御器・表示器のリファレンスはタブ制御器自身のプロパティノードから得ることができます。
添付のviは、実行すると、タブ制御器内の「単独の数値制御器」について、正なら白地・青字、負なら黄地・赤字になります。
内容は、タブ制御器の「Pages」プロパティから、タブ制御器自身の値(=開いているタブのページ番号)の要素を取り出して
「開かれているタブのページ」のリファレンスを取り出し、さらにそのプロパティから「ページ上の制御器群(Controls on Page)」の
プロパティを取り出すと、それが「そのページ内にある全ての制御器のリファレンスの配列」です。
タブ内の制御器全部について、というのであれば、そのままそのリファレンスの配列が使えます。
今回、「単独の数値制御器はすべて」値に応じて背景色を変えるとすると、
Forループで、各リファレンスの「TypeDescriptor」プロパティの所定のフィールドが1~11であるものだけ抜き出して
(これは型が単独の整数or実数制御器を意味する)、その値が正なら背景と文字色を何色に、負なら背景と文字色を何色に・・・
としています。
値については、数値制御器にも色々ありますが「Value」プロパティのバリアントを強制的にEXTなどにしてしまって
比較しても大丈夫でしょう。
(U64・I64も、EXTが仮数部を64bit持っているはずなので上位コンパチで表現しきれるはず)
この方法だと、タブ制御器のタブ内の制御器が増減しても、ある程度そのまま何もしないで対応できると思います。
「特定の制御器について」何かをするのであれば、やはり個別にリファレンスの配列を自前で作らないといけないですが・・
04-25-2016 01:20 AM
M.Shiraishi様
こんにちは。
メッセージありがとうございます。
教えていただいた方法について、私もそれが理想の方法として試してみたんですが、
できなかったです。
理由として、
「ページ上の制御器群(Controls on Page)」のプロパティを取り出して、
リファレンス配列を利用して、ループで処理するとき、
各リファレンスの「TypeDescriptor」プロパティの選択肢が出てこないのです。
その選択肢が出てこない原因がわかないので、ご存知でしたら、是非教えていただきたいです。
よろしくお願いいたします。
04-25-2016 10:36 PM
タイプデスクリプタが見えないのは、VIスクリプトがオンになっていないからかもしれません。LabVIEW開発環境のツール⇨オプションからVIスクリプトをオンにすることができると思いますが、それを試してみることをお勧めします。それでも出てこなかったら他の原因だと思われます。
04-25-2016 11:01 PM
TailOfGon様
メッセージありがとうございました。
私のLabview環境ではVIスクリプトがオンの状態で設定しています。
それでもタイプデスクリプタが見えない状況です。
よろしくお願いいたします。