2009 . 04 . 14

Calc(計算処理)を活用したスキンの作り方

Smiley

CPUの状態をスマイリー(顔文字)が知らせると、いうRainmeterスキンを作りました。

一見、ショーもないスキンに見えますが、中身の方は案外凝ってますので、そこら辺の解説を交えて紹介していきたいと思います。


このスキンの最大の特徴は、取得した値を計算処理して一定の値に変換したものを、利用するところにあります。

1から100%までの間でいくつかに範囲を区切って、その範囲内にCPUの値がある時に指定した文字を表示するという仕組みです。

例えば、CPUの値が0%以上15%未満に合致する場合は1を返し、そうでない場合は0を返す計算式を作った上で、「Substitute」を使って0は無に変換してしまい、1をその範囲で表示させたい文字(顔文字)に置き換えて表示させるわけです。

具体的には下のコードのようになります。



メジャーで処理された値は、最終的に[(smiley)]セクションのストリングメーターで、一つに連結されて表示されます。

ただし、理論的にどれか一つ以外はすべて「無」に変換されているので、結果的に表示されるのは常に一つということになります。


前述のとおり、このスキンは取得したCPUの値を計算によって、いくつかのブロックに区分けする処理をしているわけですが、それを可能にしているのが条件演算子です。

条件演算子とは以下のような構文で、条件に指定した値のときに「真」、そうでない時に「偽」を返す演算子の一種です。

<条件> ? <真の場合の値> : <偽の場合の値>

上の例で見ると、[CPU]セクションで取得した値が、0以上15未満の時に1を、そうでない時に0を返すという形で使っています。

(0<=CPU) && (15>CPU) ? 1 : 0

ところで、この条件部分は0以上15未満なので、簡単に
0 <= CPU > 15と表したいところですが、これはどうも通用しないようです。

そこで理論演算子の&&(AND)を使って、「0以上かつ15未満」とすることで同様の動作をさせています。

ちなみに、理論演算子について触れておくと、以下のようなものがあります。

  • > (超過)
  • < (未満)
  • >= (以上)
  • <= (以下)
  • = (等しい)
  • <> (等しくない)
  • && (かつ)
  • || (または)

さて、このような手法を用いた作例で、簡単なものをもう一つご紹介しましょう。

「Fuzzy Clock」として有名な、おおざっぱな時間を示す時計をスキンにしたものです。



基本的にはスマイリーの時と同じで、現在の分が0から14までなら「ごろ」を付け足し、15から29までなら「15分すぎ」、30から44までなら「半ごろ」、45以上なら「ちょっと前」という風な感じです。

少し異なるところといえば、45以上になったら現在時に1を足して次の時に繰り上げることです。

が、ここで気を付けなければならないのが、23時の時だけは例外で0にしたいことです。

そこで、基本的には[HOUR_b]で1を足す処理を行い、23時の時だけ[HOUR_a]によって-1を返し、これが[HOUR_b]に送られ結果0になるという仕組みです。

  • もうちょっとスマートな計算方法もあるかと思いますし、また、内容自体も、もう少し手を加えないと実用的ではありません。あくまで説明のための作例と理解してください。

さて、こういった計算を活用していくと、およそRainmeterでは不可能と思われるようなスキンも可能になります。

今回はCalcを使った初歩的な実例を取り上げましたが、こういった手法を取り入れることで一味違ったスキンが作れるので、興味を持った方は試してみてはいかがでしょう。

  • 残念ながら、数学が嫌いな当方ではここら辺が関の山ですが...