2013年12月7日土曜日

7 セグ(電卓表示)のコンポーネントを作成する。

Delphi Programing

Gitta.comより、お越しいただいた皆様ありがとうございます。
7セグがつくりたくて、7日は頂きました。こんにちは やましょうです。

さて、まず7セグって何??って思われるかたも多いと思います
写真(SL-1274)です。ずばりこれです。これは7セグが2つ+ドット付です。










年末ですし。。
こんな感じの表示で、ビンゴ抽選をしてみたい。。

これをTRectangleとかで作成するととても面倒なことなわけです。
いくら動的に配置しても”めんどくせー” ってあまちゃん気分で言いたくなってしまいます。
まさに電卓の10ケタ表示とかだったら狂気の沙汰です。


早速、設計です。
図を簡単でもよいので書いておくと便利ですね。
”こんな感じに作る!!”とイメージが膨らみます。
(レポート用紙はいただきものです。字が下手です。。)

あとは、各a,b,c,d,e,f,gのデジットに対応してペイントをすれば
良いのです。
設計終了です。




FMX用に作成します。基本的にはVclの時と何も変わらない筈さ!!とつくり始めたのですが、InvalidDataがFmxではない。。Repaintでいいのかな?と思っていろいろやります。
そして、プログラムとは極論、置換でございまして、
置換をすればなんとかなるのです。
Rectangleを真似して作成するのですよ。。。
なぜか、設計時にFillが効かないよ。。。何故??
と思っていろいろ調べたのですが。。。
TRectangleは、プロパティーを引数になっている。。ムム。。。
Canvas.FillRect(R, XRadius, YRadius, FCorners, AbsoluteOpacity, FFill, CornerType);
さて、ここは、カンで。CanvasにFillでFillしちゃえばよいのさ

Canvas.Fill.Assign(Fill);
上記を追加してOK!


できあがったソースはこちらにあります。



さて、これだけ覚えれば、使えるプロパティ

Num 0-15までを入れば数字か文字がでます。16以上では、現在状態保持となります。
10~15はでないだろうと思う方は一度いれてみてください。

SEG_A...F 1Seg毎につけたい方このプロパティをTrue/False 変更してください。また
(Num値を16以上にすれば完璧です16以上で前置保持。)

私は実は、Firemonkeyのコンポーネントはじめて作りましたが、慣れれば、
Vclの時よりプロパティが多くて楽かもと思っちゃいました。
初めて適当に作ったので、誤り等ありましたら御指摘ください。

さて、サンプルを動かすと。。
Windowsですと。。
macでもok

と言う事で動いていますね。
ですが、
シャッフル機能:一度、抽選したらもう終了するまでその数値は選ばれない。
が未実装なので、未だです。
その為
ファイル名がGingoになっています。Bingoになっていない一つ手前なので。
次回その機能の実装を行いたいと思います。

(XE4でサンプルを動かす場合一度ボタンを貼り付けて削除して実行してください。
なぜかエラーが発生。)私は何故かXE3で作成。。。


それでは。。次回、またお会いいたしましょう。


0 件のコメント:

コメントを投稿