2011年5月27日金曜日

初納品

法人化して早2ヶ月が経ちました。

法人としての初案件の成果物を発注元に納品しました。

(今後も継続してブラッシュアップする成果物なので一次納品ってところかなぁ)

これまでサラリーマン時代に何度も納品は行ってたのですが、すべてを一人で納めたのは初めてでした。

自画自賛ですが成果物に対する自信もあったため「緊張」とか「不安」はなく、晴れ晴れとした「達成感」や「充実感」が非常に強かったことは新鮮でした。


別件の打ち合わせもあり、久しぶりに発注元の社長に飲みに連れてってもらいました。


社長!今後ともよろしくお願いします! m(_ _)m

2011年5月25日水曜日

しばらくお待ちください。

Windowsアプリケーションに限らず、重たい処理や時間のかかる処理を実行させる際、利用者にストレスを感じさせないように、『Now Loading』『しばらくお待ちください。』的な画像を表示させることがよくある。

砂時計やプログレスバー、クルクル回る画像等々、単純にアニメーションGIF形式の画像ファイルを表示していることが多い。

(画像ファイルの素材は"Loading"で検索すればいっぱい出てくる ⇒ こんな感じ


現在取り組んでいる案件においても、この『しばらくお待ちください。』処理を取り入れることになった。

単純に Form 上に PictureBox を張り付けて、Image プロパティにアニメーションGIFを設定し、この Form を単体で表示(Show)させると、期待通りの動きをした。

よしよし。

実際の重たい処理を行う直前でこの Form を表示(Show)し、処理の直後で非表示(Close)してみた。

ん?

Form は表示されるが、アニメーションGIFが動かない・・・。
処理の継続中は制御が戻らないからアニメーションGIFが動かない・・・。

で、

重たい処理の所々に、

System.Windows.Forms.Application.DoEvents();

を加えてみる。

動いた。でも・・・あれ?・・・。ぎこちない・・・。重たい処理がいっそう遅くなった気がする。

よくよく考えてみたら、同一スレッド内で重たい処理とアニメーションGIFの表示処理を行っているのだから、DoEvents でアニメーションGIFの表示処理に制御が戻っている分、重たい処理が遅くなってしまっているのだ。


ってことで、

アニメーションGIFの表示を別スレッドで行ってみることにした。
具体的には、以下のような実装になります。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//別スレッド用メンバ変数を用意
Thread m_nowLoading = null;

・・・

//コンストラクタ内で変数を初期化
m_nowLoading = new Thread(new ThreadStart(NowLoadingProc));

m_nowLoading.IsBackground = true;

・・・

//アニメーションGIFを張り付けた Form (frmLoading)の表示処理
private void NowLoadingProc()
{
    frmLoading frmLoad = new frmLoading();
    try
    {
        frmLoad.ShowDialog();
        frmLoad.Dispose();
    }
    catch(ThreadAbortException)
    {
        frmLoad.Close();
    }
}


・・・

//重たい処理の直前でスレッドを開始
m_nowLoading.Start();

<重たい処理>

//重たい処理の直後でスレッドを終了
m_nowLoading.Abort();

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Form の TopMost プロパティは true にしてます。
表示させる位置の調整のための処理や、スレッドを終了(Abort)した後、再度呼び出す際のスレッドの初期化処理は省略しています。

以上

2011年5月12日木曜日

RibbonComboBoxのSelectionChangedイベント

とある案件で、Windows Ribbon for WPF を使ったユーザーインターフェイスでアプリケーションを構築することになったのですが、これまで WPF は触ったことがないうえに参考になるサイトや書籍が少なく、開発環境を整えるだけでも一苦労しました。

(この辺の苦労話の詳細は割愛します・・・)

WPFリボン プログラミング」とか「ハンズオン ラボ: WPF の活用 ~ WPF Ribbon コントロール ~」を参考にしました。

四苦八苦しながらなんとかアプリケーションの形ができてきたのですが、Ribbon コントロールの中のひとつで、気に入らない挙動をするものがあります。

『RibbonComboBox』クラスです!

こいつはいわゆるコンボボックスで、アイテムをドロップダウンしたリストの中から選択するユーザーインターフェイスを提供するものです。
選択状態を検知するために用意されているイベントとしては『SelectionChanged』があり、アイテムが変更された際に発生します。

しか~~~し!

この『SelectionChanged』が曲者で、イベントプロシージャ内の処理が完了するまでドロップダウンのリストが表示されたままになります。
イベント処理が完了する前にマウスカーソルがリストの枠外に移動してしまうと、強制的に選択がキャンセルされてしまいます。
なので、時間のかかる処理を行うときは、選択がキャンセルされてしまい、意図した動きになりません。

いろいろと試行錯誤した結果、『SelectionChanged』イベントは使わずに、『System.Windows.Forms.Timer』クラスで処理させるようにします。

具体的には、以下のような実装になります。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//Timerクラスのメンバ変数を用意
private System.Windows.Forms.Timer m_timer = null;

//コンストラクタ内で変数を初期化
m_timer = new System.Windows.Forms.Timer();
m_timer.Tick += new EventHandler(TimerProc);
m_timer.Interval = 1000;
m_timer.Enabled = false;


//処理を行う関数の定義
private void TimeProc(object sender, EventArgs e)
{
    //1回だけ処理するので先にTimerを無効化

    m_timer.Enabled = false;

    //時間のかかる処理をここで実行

}

//コンボボックスのアイテムのクリックイベントの定義
private void item_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    //Timerを有効化

    m_timer.Enabled = true;
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
コンボボックスのアイテムには『RibbonGalleryItem』クラスを使っているので、『Click』イベントではなく、『PreviewMouseLeftButtonDown』イベントで実装してます。

以上

2011年5月9日月曜日

続・再就職手当

先日、『再就職手当』の申請は行ったのですが・・・。
自営した場合は、継続して経営が成されているかどうかの審査が必要だそうです。

で、

何を以って『経営が成されているかどうか』を判断するかというと・・・。
申請後の約1ヶ月の間に締結した『契約書』や、『見積書』『注文書』『注文請書』『納品書』『請求書』『領収書』等の経営状況が分かる資料を窓口で職員に提示(コピーされる)及び内容の説明をした後、内部審査を経て約1ヶ月で支給の認定が下りるそうです。

申請から1ヶ月経ってないのですが、いくつかの資料が集まってきたのでハローワークに行ってきました。
(GW遊びすぎて日焼けで真っ黒な顔して窓口に行ったら笑われた・・・)


これでもうハローワークに出頭する必要はなくなりました。

法人口座③

GW明け、先日開設した『法人口座』の『キャッシュカード』を受け取りに銀行へ。

窓口で必要になるのは、
 ①『受け取り申込書』(窓口で記入)
 ②『登記簿謄本』(提出したのとは別のものが必要!後で返してくれる)
 ③代表者の『身分証明書』(免許証や保険証)
 ④『届出印』
です。

2011年5月8日日曜日

GWの悲劇


GW最終日。。。昨年買った「GOODE 9900SL MID-Ride」が割れた。

1ブイのターン後のセット時、スラッグしたラインの反動に耐え切れずバーを離した。
解放されたバーは勢い良く、板に向かって激突、その衝撃で割れた。

「折れた」わけではないが、こうなってしまってはいつ折れるか分からない。
滑走中に折れるのは非常に危険なので、この板はもう使えない。