初めて作る C# プログラム - MyClock

プログラム電卓のためのC#プログラミング
e-Gadget

<トップページへ>


2017/01/31
大きく改訂 2017/02/20

更新: 最新版 MyClock Ver 1.17.3b、scClock Ver 3.01 を公開(ソース付き)


初めて作る C# プログラム - MyClock


無償で入手できる開発環境 Visual Studio Community 2015 の C# を初めて触ってみながら、具体的なプログラムを作ってみます。

プログラミングの習得に効果的なのは、自分が欲しいプログラムを作ること、そして人に説明すること。私の持論です。最初は簡単に作れそうで、機能追加で欲しいプログラムになりそうなものが良いですね。


はじめに

シンプルな時計から始めます。

というのも、10年以上前に、アクティブになっているウィンドウのタイトルバーに常に張り付く小さな時計 scClock を作り、いまだに愛用しています。番外編 - 小さな時計 - scClock をご参照。

ところが最近は、目が疲れてくると小さな時計のフォントの視認に困ることがあります。フォントを大きくするとタイトルバーには収まりそうにないので、半透明で大きなフォントの時計にすれば良いかも知れない...ということで、半透明でフォントが大きく、そして前面表示する時計を作ってみます。



[2017/02/14 追記]
10年以上前に Active Basic (Windows XP) で作った 小さな時計 - scClock を作って常用してきました。今回作ったMyClock のフォントや外観を小さくすることで scClock として作り直し、アクティブなキャプションバーに貼り付く機能を追加しました。これを Win 7 以降 (対象のフレームワークは .NT Framework 3.5) に対応する scClock Ver 3.01 としました。 

小さな時計 - キャプションバーに張り付く時計 (ソース付き)
scClock Ver 3.01



PC保護の警告について

自作プログラムや信頼できる入手先からダウンロードしたプログラムを実行しようとすると、Windows 8 以降ではPC保護の警告がでます。

最近は悪質なマルウェアやインターネットサイトがあるので細心の注意は必要ですが、汚染されていない自身のあるクリーンなPCで自分で作ったプログラムで、ほぼ確実にこの警告がでます。さらにセキュリティーソフトが追いうちをかけて、警告を出します。

対策については、こちらをご覧ください。

自作プログラムがPC保護警告に引っかかる



最新の MyClock

初めてC#で作るプログラムの最新の MyClock は C#学習を反映しています。ここに至る道筋を簡単に記事にします。さらに自分なりのプログラミングTipsも紹介する予定です。

==========

邪魔にならないデジタル時計 (アラーム機能付き)
MyClock Ver 1.17.3b  [更新 2017/02/20]
最新版 (ソース付き) Ver 1.17.3b のダウンロード
  • アラーム機能があります。
  • 時計の外観をカスタマイズできます。
  • ポータブルアプリです(フォルダにコピーするだけで使え、不要になればフォルダごと削除するだけです)。
動作に必要な最小限のファイル:
  • MyClock.exe
  • MyClock.exe.config
  • scClock.exe
一応 ReadMe.txt も入っています。

<MyClock>フォルダにソースファイルが入っています。MyClock.sln を実行するとVisual Studio で読み込んで起動します。Visual Studio Community 2015 で作ったものです。


シンプルなものから最新までの道筋

多分最も簡単に作れる時計アプリ

Ver1.00外観 

手始めに、前面表示する半透明でフォントの大きなのデジタル時計を作りました。
タイマーコントロール、フォームのプロパティ設定だけでできます。とは言っても初めてC#で作ったので、主にIDEの使い方やC#が自動生成するコードについて調べてみました。


クライアント領域のマウス操作、プロセスの排他処理

キャプションバーと枠を取り去ったデジタル時計に改造しました。そのためには、クライアント領域のマウス操作が不可欠になります。そこで、C#でマウスのイベントハンドラを使ってみました。

こんな感じになりました。
枠無し黄色半透明フォーム
 

アプリ用のアイコンリソースの使い方も試しました。さらに二重起動禁止にするため、mutex を使ったプロセスの排他処理を C#で試してみました。VC++の感覚で扱えることが分かりました。


キー入力の取得とモーダルダイアログ

[Esc]キーを取得してモーダルダイアログを表示させる処理を作ってみました。

アプリの機能としては、こんな感じのフォームでアラームの設定を行います。
アラーム設定画面 

私の Windows 10 環境だと標準のフォントサイズが 9pt になっていますが、そもそも大きな文字の時計を作るコンセプトなので、12pt を基本のフォントサイズにしました。

過去の VC++ でも使ったことの無い DateTimeコントロールを初めて使ってみました。他には、ボタン操作やチェックボックスなどの練習もできました。クリックすると [▶前面] ⇒ [▶最大化] ⇒ [▶前面中央] と3フェーズを循環するボタンを実装。[OK]ボタンは[Enter]キーと連動、[Cancel]ボタンは[Esc]キーと連動させるのは、フォームのプロパテティの設定で実装できることも試しました。


Win32 APIの利用

アラームが発動した時、目立つように点滅させます。そこで、キャプションバーとボーダーフレームを点滅させるWin32 API の利用を試しました(.NET Framework にはウィンドウ点滅の機能が準備されていないようです)。

こんな感じで、点滅します。
アラーム発動時に、ウィンドウの最大化やスクリーン中央への移動などのオプションを作りました。

アラーム発動 


ピクチャーボックとテキストボックス、アセンブリ情報の活用

ピクチャーボックスにアイコンを表示し、テキストボックスにクイックマニュアルを表示するのを試してしました。

こんな感じのアプリ情報のダイアログを作り、[F1]キーを押して呼び出すようにしました。

Aboutダイアログ_ボタンなし 

ここでも 標準の9pt よりも大きなフォントで表示しています。
さらに、アプリに埋め込まれるバージョンとかアプリ名などのアセンブリ情報の取得も試みました。
アセンブリ情報を利用は初めてで、ここで表示している「アプリの説明」、「アプリ名 (MyClock)」、「バージョン」、「Copyright表示」は全てアセンブリ情報から取得して表示。バージョンアップ時にアセンブリ情報を変更するだけで良く、フォームの変更は不要です。


外部アプリを起動してみる

外部アプリとして、以前作った scClock (小さな時計) を起動する処理を作ってみました。Win32 APIを使わずに .NET Framework と C# だけで起動しているプロセスの列挙、プロセスの終了、例外処理ができました。


モードレスダイアログとプロパティグリッド

時計の外観をカスタマイズする機能を追加しました。外観の設定をリアルタイムに反映させるために、モードレスダイアログとプロパティグリッドの組み合わせが良さそうです。

プロパティグリッドは初めて使ってみましたが、非常に便利なものですね!
これを使うのは、C#らしいクラスの使い方を理解する良い題材になりました。基本的な使い方が分かれば、細かなユーザーインターフェースをコーディングする必要がありません。

今回作った時計は、その外観に "通常の外観"と"アラーム設定時の外観"の2セットあります。そこで、プロパティグリッドに表示するプロパティもそれぞれに併せて2セット用意します。2セットの外観と2つのプロパティセットを動的に連動させました。

さらに、プロパティグリッドの上にある外観変更ボタン (下の図では [通常の外観]ボタン) で2セットの外観を強制的に変更し、プロパティグリッドの表示をこれに連動させました。

このように、異なるクラスのフォーム間で互いのフォームの表示を双方向で制御するC#のコーディングが試せました。

通常の外観のカスタマイズは、こんな感じ...
通常 

アラーム設定時の外観のカスタマイズは、こんな感じ...
アラーム設定時 

極端に小さくして scClock のような外観にもできます。
 小さな外観 


読者の方からのコメントでヒントを頂き、MyClock にキャプションバーに常に貼り付く機能を選べるようにしました。
外観の設定の画面に追加したボタンを押すことで、貼り付く / 貼り付かないを選択できます。

通常の外観をこんな感じにして、キャプションバーに貼り付いたところ...
貼り付き-通常


アラーム設定時の外観は、こんな感じにしてみます。
貼り付き-アラーム設定時

作ってみて初めて良い機能だと認識しています。

初めてC#を使って作ったアプリですが、かなり満足できる仕上がりになってきたと思います。



C#学習の履歴を以下にまとめます。

フォームを作り時刻を表示させる (Ver 0.10)

仕 様
  • フォントが大きい
  • 半透明で常に前面表示
試したこと
  • Visual Studio IDE の使い方と基本的な機能
 MyClock Ver 0.10 のページ



クライアント領域のマウス操作でアプリの終了と移動を行う (Ver 1.00)

更新履歴

 ・タイトルバーの無い小さな(邪魔にならない)外観に変更
 ・クライアント領域を左ダブルクリックで終了可能にする
 ・クライアント領域をマウスで掴んで移動可能にする
 ・マウス右クリックで最小化できるようにする

試したこと
  • イベントハンドラの作成と フォームデザイナーの挙動

 MyClock Ver 1.00 のページ



モーダルダイアログで設定し親ウィンドウを制御する

更新履歴

 ・アラーム機能を追加
  - [Esc]キーでアラーム設定
  - アラーム発動時マウスを左クリックで元に戻る

 MyClock Ver 1.10 のページ



MyClock Ver 1.11 にアップデート

更新履歴

 ・アラーム設置柄画面を時計の周りに重ならずに表示
 ・アラーム設定画面で、現在時刻をがが取得可能にした
 ・最小化からのアラーム発動では半透明最大化させる
 ・最前面に表示しないことがあったのを修正
 ・Alarm.exe 単独起動のエラーの場合メッセージを表示して終了。

 MyClock Ver 1.11 のページ


MyClock Ver 1.12 にアップデート

更新履歴

 ・以下を保存して再起動時に復元するようにした
  - アラーム設定時刻
  - アラーム解除設定状態
  - 時計の表示位置


 MyClock Ver 1.12 のページ


MyClock Ver 1.13 にアップデート

更新履歴

 ・終了時に補村して再起動時に復元する項目を追加
  - 終了時の時計のサイズ(ノーマル/最小化)
 
 MyClock Ver 1.13 のページ


MyClock Ver 1.14 にアップデート

更新履歴
 ・時計の表示状態ごとにアラーム発動時の外観を選択できます。
  - 時計の表示状態:前面表示 / 最小化
  - アラーム発動時の外観:前面表示 / 最大化
 ・アラーム発動時の外観設定を終了時に保存し再起動時に復元する。
 ・MyClock.exe から呼び出されず単独起動の場合の例外処理を追加。

 MyClock Ver 1.14 のページ


MyClock Ver 1.15 にアップデート

更新履歴

  2017/02/04 ・アラーム設定に「▶前面中央」を追加した。
        ・起動時に「MyClock の使い方」の表示ができるようにした。
         - 起動時の表示をするかどうかを設定できる





応援クリックをお願いします。励みになるので...


人気ブログランキングへ


FC2ブログランキングへ



    

keywords: プログラム関数電卓、Windowsプログラミング

リンク集 | ブログ内マップ
関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

コメントの投稿

非公開コメント

re:MyClock Ver 1.17.3a

管理人様、こんにちは!
ちょこっとバタバタ続きですみません(^^;

MyClock Ver 1.16.9 ~1.17.3aしっかりいただいております。(^^)

外観設定が出来るようになったのがなかなかよいですね。
ここまで来ると私的には必要にして十分というところで常用体制に入ってるところですが、
相変わらず仕様外挙動とバグには全然気が付かなかったというか、普通に使っているだけではとくに問題になるようなことはなかったのが幸いでした。(^^)

MyClockとscClockは現在併用中ですが、MyClockとscClockでどちらか1つだけしか使えないとなればscClockになるかもしれません。

通常はバーに張り付くscClock仕様が個人的にはお気に入りで、アラーム時にMyClockというのが良さげな感じです。(^^)

機能追加 - MyClock Ver 1.17.3b をリリース

sentaro様


> ちょこっとバタバタ続きですみません(^^;

C.Basic の大幅機能追加、お疲れ様です。これについては UCF への対応をします。


> MyClock Ver 1.16.9 ~1.17.3aしっかりいただいております。(^^)

ありがとうございます。

> 外観設定が出来るようになったのがなかなかよいですね。
> ここまで来ると私的には必要にして十分というところで常用体制に入ってるところですが、
> 相変わらず仕様外挙動とバグには全然気が付かなかったというか、普通に使っているだけではとくに問題になるようなことはなかったのが幸いでした。(^^)

良かったです。自分でも常用していますが、自分の使い方は結構固定してしまうので、ついつい見逃してしまいます。



> MyClockとscClockは現在併用中ですが、MyClockとscClockでどちらか1つだけしか使えないとなればscClockになるかもしれません。
>
> 通常はバーに張り付くscClock仕様が個人的にはお気に入りで、アラーム時にMyClockというのが良さげな感じです。(^^)


良いお題を頂きましたので、MyClock にキャプションバーに常に貼り付く機能をサクッと追加しました。


邪魔にならないデジタル時計 (アラーム機能付き)
Ver 1.17.3b

http://egadget2.web.fc2.com/archives/Src_files/C_Sharp/MyClock_Ver1.17.3b.html

外観の設定にボタンを追加し、キャプションバーに常に貼り付けるかとうかを選べるようにしました。
現在の設定状況はボタンテキストに表示しています。

なお、貼り付く位置は時計の右上を基準にしています。 こうすると大きめの時計でもウィンドウに収まりがよくなるだろうと思って、scClock では右下だったのを変えていています。

今回も ダウンロードした MyClock.exe だけをコピーすれば外観設定はそのまま引き継がれます。
Ver表記は 1.17.3 のままです。


実際に使ってみると、これがなかなか便利です。ありがとうございます。scClockは不要になりそうです(^^;

Win10 だとキャプションバー周りは結構スペースがあるので、半透明にしておけば、大きめの外観でも見やすく、邪魔にならないです。

貼り付く設定になっている時は、scClockの起動を抑制してます。


Re:機能追加 - MyClock Ver 1.17.3b をリリース

管理人様、こんにちは!

Ver 1.17.3b、 早速にいただいております。

>良いお題を頂きましたので、MyClock にキャプションバーに常に貼り付く機能をサクッと追加しました。

これはとっても◎な機能追加です!
scClockの大きさやフォントを変えられるといいなという感じで思っていたのですが、MyClockを貼り付けるという発想は、さすが管理人様です!
最初にこういう感じになればいいかなと思っていたことが遂に実現という感じですね。(^^)


>実際に使ってみると、これがなかなか便利です。ありがとうございます。scClockは不要になりそうです(^^;

はい!
MyClockが張り付くとなれば、scClockの存在価値はかなり微妙になってしまいますね。(^^;



>C.Basic の大幅機能追加、お疲れ様です。これについては UCF への対応をします。

従来のプログラムチェックにて、エラーが出るのを発見しましたので修正後、差し替えました。(^^;

久々の基本仕様に関わる大幅バージョンアップなのでバグがかなり残っていそうですが、このあたりはまた地道に潰していくことになりそうです。
最新記事
最新コメント
カテゴリ
C# (3)
検索フォーム
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム関数電卓は、プログラムを作り・使ってナンボ!

実際に触って気づいたこと、自作プログラム、電卓プログラミングについて書いています

おもしろい・役に立つならクリックしてください。励みになります。

人気ブログランキングへ


FC2ブログランキングへ


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

RSSリンクの表示
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

QRコード
QR