2011年12月15日木曜日

[akinoboard] ver.1.12を公開しました

先日の投稿でまだかかると書きましたが、少しまとまった時間がとれたのでakinoboardの方を更新しました。
ダウンロードはこちらからどうぞ。
主な変更点を以下に記します。

  1. IMEのON/OFFによってIME(半角/全角)ボタンの背景色を変更するようにしました
    • ボタンサイズを変える予定でしたが、変化が分かりにくかったため背景色の変更
  2. akinoboardからマウスを離すとトグルキー(shift,ctrl,alt,win)の状態をリセットするようにしました
  3. 背景の初期値を「画像」に変更しました(今回からデフォルトの画像ファイルを含めるようにしました)
  4. 最前面に表示されなくなる問題に対応しました
    • ホールド、スイング、「ウィンドウを表示する」(タスクトレイ上)の選択時に、再度最前面化する処理を追加しました
    • この問題自体が再現性が低くて私の方では確認しきれなかったので、まだ問題が起こるようなら報告していただけると有り難いです
IME ON時はIMEボタンと外枠が明るくなります
IME OFF時はIMEボタンと外枠が暗くなります
要望、不具合報告などございましたら、ブログへコメントを是非宜しくお願いします。

P.S.
 IMEチェッカー(名称未定)の方はまだ暫くお待ち下さい。。。

2011年12月8日木曜日

各種(という程多くないけど…)ソフトの公開は遅れます

akinoboardの更新及びIMEチェッカー(名称未定)の公開は早くても12月ぎりぎりになりそうです。
いるのかどうか分かりませんが、待っていて下さった方がいらっしゃったら、申し訳ありませんがもう少しお待ち下さい。。。
何かとプライベートが忙しかったりPCが触れなかったりと、予定通りに進められませんでした(>_<

IMEチェッカー(名称未定)の方はコメントにもチラッと書きましたが、大枠の動作部分はできてますが、演出と言うか外観部分で手こずってる感じです。
具体的には、IMEのオンオフを【スパ4の昇竜拳やセビの軌跡エフェクトのような毛筆線】(分かる方だけ分かって下さいw)で表現したいと考えています。
グラフィックを描けたらいいのですが如何せん絵描き才能ゼロなんで、その上でどう実現できるかを模索しているところです。

という訳で、宜しければ気長に待っていて貰えると有り難いですーm(_ _)m

-----
次は場繋ぎと言うか、少数ですがakinoboardの掲載情報を紹介しようと思います。

2011年11月21日月曜日

IMEのON/OFFを表示するソフトを作っています

先日の投稿でちょろっと書きましたが、IMEのオン・オフを表示するソフトを作っています(と言うかその事前調査を終えたところ)。
同様のソフトは普通にあるのですが、テキスト入力時だけ表示して欲しいとか、状態がマウスの横に表示されるのは邪魔だ等、自分の好みにあったものが見つからなかったのが動機になります。
ちなみにakinoboardを常時表示していても事足りる部分もあるのですが、まぁ単なるこだわりですねw
公開は12月半ば頃にできればいいかなぁ?

2011年11月10日木曜日

テンプレートを変更しました

何となくブラウザをFirefoxからChromeへと変更してみた。
するとこのページのスクロールが何故か激重だったため、これも同じく何故かテンプレートを変更すると大丈夫だったのでちょこっと変更してみました。
簡単に見直してみたところ、ソースコードのレイアウトが崩れてしまうようになってしまっていたんだけど読めるから良いか(^^;
あとChromeではカレンダーが表示されないんだけど、何が原因かなぁ?

話は変わって、これまではソフトの動作確認はFirefoxで行なっていましたが、今後はChromeでやっていこうと思います。
まだ調べてないけど、Firefoxみたいに独自描画バリバリじゃなければいいんだけどなー。
Firefoxで愛用していたIME Areaのような拡張機能が見つからなかったので、時間があればakinoboardからIME監視の部分だけ取り出して作ろうかなぁ。
#非拡張機能
#邪魔くさければ既存のIME監視系ソフトを普通に使っていそうw

2011年11月8日火曜日

[akinoboard] ver.1.11を公開しました

ひっそりとakinoboard ver.1.11を公開しました。
ダウンロードは右の公開ソフト一覧からどうぞ。
機能的にはほぼ変わっておらず、スキャンコード入力に対応したバージョンになります。
DirectInputを使っているアプリケーションで入力できるようになっているはずなんですが、実は対応アプリを持っていないので確認できていなかったりします…。
内容的にver.1.1で特に問題がない方は、ver.1.11に更新する必要はないかと思います。

akinoboardについては想定していた機能や要望の実装がほぼ終了したので、次のver.1.12で一段落付けたいと思います。
#新しく要望や不具合があれば勿論対応しますよー 
ver.1.12では以下の2点を更新する予定です。
  • IME On/OffによってIMEキーの大きさを変更させる
  • Ctrlなどのトグル状態をマウスがakinoboardから離れたら解除する
akinoboardは汎用的に利用できるように設計しました(つもり(^^;))が、今後はタッチ入力、もしくは日本語入力に特化した入力手法、ソフトウェアキーボードを開発していこうと考えています。
個人的にはWindowsPhone7にかなり興味が有るのですが、如何せん実機がないとどうしようもないので、akinoboardと同じく通常のWindows環境向けとなる予定です。

最後にakinoboard推奨デバイスと言いますか、私が愛用しているトラックボールのLOGICOOL M570をご紹介しておきます。
これ以前は普通のマウスを使っていたのですが、M570を使ってからは断然トラックボール派です。
是非機会があれば、椅子の背もたれににもたれかかりながら肘置きに置いたM570でakinoboardを使ってみて下さいー。
以前にも書きましたが、わざわざ体を起こしてキーボードに手を伸ばさずに上記状態で快適に文字入力したい!と言うのがakinoboard開発動機です。
そのため、上記状態での使用を念頭において、色々と使いやすく、便利になるような機能を実装しています。


2011年10月25日火曜日

[akinoboard] ver.1.10を公開しました

akinoboard ver.1.10を公開しました。
ダウンロードはこちらからどうぞ(ソフト詳細説明も更新しています)。

ver.1.10の主な更新項目を以下に抜粋します。
先日の投稿で述べた設定値の保存に関する問題も修正済みです
全部書くとブログだと見るの億劫な感じになるので、詳細は「はじめに.pdf」の更新履歴の項をご覧下さい。

  1. IME ON/OFFによって背景を変更できるようになりました
    • IMEの状態を間違えたまま文字入力することを防ぎます
    • 背景を変更しない場合でも外枠の色が変わります
  2. スイング機能を実装しました
    • スイングを判定するとホールドと同様にマウス付近にakinoboardを移動/表示することができます
    • 左ボタンを押下したままマウスを左右に指定回数振ってからボタンを離すことでスイングと判定します
  3. キー表示文字にひらがな表記を選択できるようになりました
    • IME ON時のみひらがな表記になります(OFF時は意味がないため)
    • IMEがかな入力でない場合にはひらがな表記でも入力自体はアルファベットになります(あくまでも表記が「かな」なだけ)
  4. ホールドの仕様を変更しました(誤判定リスクを抑える)
    • 左ボタン押下直後のみホールド判定するようになりました
    •  ホールド後に左ボタン押下したままマウスを移動した場合に再透明化するようにしました
  5. ホールド/スイングでの移動位置を調整しました
    • 画面外に出ないように
    • IMEの変換ウィンドウにできるだけ被らないように
  6. トグルキー(Shift,Ctrl,Alt,Win)の押下状態の仕様を変更しました
    • 右シングルクリックで押下状態にすると、他のキーを左クリックした後に自動的に押下状態は解除されます
    • 右ダブルクリックで押下状態にすると、上記の自動解除は行われずに再度右クリックするまで押下状態が維持されます
  7. 透明状態で起動できるようになりました
  8.  キーを押し続けている間、キーが連続で入力されるようになりました
IME ON時は暖色系の背景がオススメです
IME OFF時は寒色系の背景がオススメです

なお、ver.1.00の設定はそのまま使えます(ver.1.00のconfig.xmlをコピー)が、新しく実装した機能の多くがオフ状態になっていますのでご注意下さい。
細かく設定していたのでやり直すのは大変などの事情がなければ、初期状態で起動してもらった方が分かりやすいかなと思います。

使い方や更新内容で不明な点がありましたら、コメントやメールで遠慮無くお尋ね下さい。
要望も受け付けておりますので、併せてコメントの方にお願いします。

2011年10月24日月曜日

[akinoboard] 更新版が公開されていますが…

akinoboard ver.1.10が公開されました。
ただ、先日の投稿にあった設定値保存の修正はされていないバージョンになります。
修正版(こちらもver.1.10(差し替え前は公開されないと思っていたのでバージョン変更していませんでした))は明日か明後日には公開されると思います。(※10.25追記 修正版が公開されました)
ver.1.10の更新内容などの詳細は、本来のver.1.10(上記修正版)が公開されてからここに載せます。

なお、都合により明後日から週末までブログの更新ができません。
もしver.1.10の公開が明後日以降になった場合には、こちらの更新は少し遅れることになりますがご了承下さい。

2011年10月22日土曜日

[akinoboard] 設定値の保存について

現在の仕様では設定値はすぐに反映されますが、保存自体はakinoboard終了時に行われます。
akinoboardを終了するにはタスクトレイから「終了」を選択します。
しかし、akinoboardを実行したままWindowsをシャットダウンするなど「終了」を選ばなかった場合には設定値が保存されない問題があります。
私は動作確認がてら設定値を変更してはakinoboardを終了して確認することが多く、上記問題について今日気付いた次第です(>_<;
申し訳ございませんが、設定値を変更した際は一度タスクトレイから「終了」を選択して下さるようにお願いします。
特に不具合報告や苦情は来ていませんが、利用者の皆さんにご迷惑をかけていなければ良いのですが…。

公開申請中のVer.1.10は修正版に差し替えましたので次からは大丈夫なのですが、それまではお手数ですが上記応急処置でお願いします。

2011年10月21日金曜日

[akinoboard] Vectorに公開申請しました

akinoboard ver.1.10をVectorに公開申請しました。
公開できるようになったらこちらの方で連絡します。
#来週中には公開になるのではないかと思います

2011年10月20日木曜日

[akinoboard] 管理者権限で動いているアプリケーションへの文字入力

Windows Vista以降では、プロセスは自身より高い権限で動いている他プロセスとメッセージをやりとりすることはできない。
詳細はこちらを参照。
何を言っているかというと、管理者権限で動いているアプリケーションへakinoboardから入力するには、akinoboardも管理者権限で実行する必要がある、ということです。
そうしないと文字を入力できないだけでなく、ホールドもおかしな挙動をしちゃうんですよね、ふぅ…。
これはVista以降の仕様ですので、akinoboardだけでなく他アプリでも何か動作がおかしい場合はこれを試してみると良いかもしれませんね。

akinoboardを管理者権限で実行するには、akinoboard.exeのプロパティ→互換性→管理者としてこのプログラムを実行する、にチェックを入れて下さい。
ショートカットをスタートアップに入れて利用している場合は、ショートカットで同様のチェックを入れるとOKです。

2011年10月17日月曜日

[akinoboard] ひらがな表記について

akinoboard次バージョンでは、ひらがな表記時にはアルファベットとひらがなの併記で進める旨を書かせてもらいました。
その後、実装を進めていく上でIMEのOn,Off状態をakinoboardで取得して、その結果に応じてUIを変更するようにしています。
そこで、ひらがな表記はIME On時のみとし、Off時はアルファベット表記にすることで、併記ではなくそれぞれ単記とすることにしました。
取り急ぎ、仕様変更の旨をここに記しておきます。
#特にコメント欄で利用者の方とのやり取りで進めていた事項なので…

なお、実装の方はほぼ終了しており、あとはテキストファイルの更新やVectorへの投稿(投稿後承認まで暫くかかります) だけになります。

2011年10月15日土曜日

[akinoboard] ver.1.01β 微人柱版

先日のブログに書いたように、akinoboardのアップデート版を開発中(正式公開ではver.1.10の予定)ですが、要望がありましたので現段階で実装済みのバージョン1.01βを一時公開します。
ダウンロードはこちらから(有効期限7日間) 。
ただ、一通りの動作検証はしていますが、微人柱版であることを理解した上でご利用下さい。
#通常はver.1.00の方をダウンロードして下さい
ver.1.10は特に問題がなければ今月末から来月の頭あたりに公開できる予定です。
なお、更新項目の詳細については「はじめに.txt」の下の方に「更新履歴」として記していますので、そちらをお読み下さい。
  • ホールド機能調整(意図しないホールド対策)
  • スイング機能追加(クリックしながらマウスを左右に振ることでホールドと同様の動作)
  • 起動時自動透明化
  • キーを押し続けている間は連続入力

2011年10月8日土曜日

[akinoboard] 今後の予定

先日窓の杜様にご紹介頂いたのですが、やっぱり凄いですね、アクセスが急増しました。
akinoboardをご利用いただいている皆様、窓の杜様、有難うございます。

そこで幾つかご要望を頂戴したこともあり、近々akinoboardをアップデートしようと考えています。
アップデート案は今のところ以下のように考えていますが、他に思いつけば適宜追加していきます。
他にご要望がございましたら、コメントおよびメールにて是非お願いします。
コメントの方がやり取りがオープンになり話題重複を避けられるので良いかとも思いますが、勿論メールでもウェルカムです!
なお、順調に進めば今月中の公開を予定しています。
#設計思想や私の技術によっては実装できないことも(多々)ある点をご了承下さい

【機能面】
  • IMEのOn/Offが分かるように
  • アルファベット/かな表示を切り替えられるように
  • Shift,Alt,Ctrlトグル時は一文字打つと解除されるように
  • これらの上で右ダブルクリックでこれまで通りずっとトグル
【外観面】
  • ホールド移動/表示時は画面からはみ出ないように
  • 透明状態で起動を選択できるように(本ソフトをあまり分かっていない人が戸惑わないように、初期設定ではなくユーザが設定できるように)
  • ホールド移動/表示後に指を挙げずに一定時間経過 or マウスを移動すると、意図しない呼び出しと判断して再び透明化
  • テキストエリアでのみホールド移動/表示ができるように(ただしFirefoxのように独自描画しているアプリでは正常に動かない)(やはり一部動かないアプリがあるのは気持ちが悪いため代わりに直下の案に入れ替え)
  • 左クリック後に一度でもマウスを移動した時には押上までホールド判定を行わない(誤判定で呼び出される頻度は低くなるはず)
  • ホールドに代わる移動/表示操作の追加(実装するかどうかは浮かんだアイディア次第)
  • 縦横比固定の解除(個人的には固定の方が好きなので要望があった場合のみ) 

あ、ちなみに今回アップデートしたら、次は(Windows7)タッチ環境向けのソフトウェアキーボードを作る予定です。
その後はWindowsPhone向けにも作りたいんだけど環境と言うか実機がないんだよねぇw

2011年10月6日木曜日

[akinoboard] XPでも使えそうです

k本的に無料ソフト・フリーソフト管理人様からWindows XP SP3(32bit)での動作確認についてご報告頂きました。
次回アップデート時に動作環境を更新しようと思ってたのですが、取り急ぎこちらに記しておきます。
私のところにはXPの環境が無いので非常に助かります(^^
k本的に無料ソフト・フリーソフト様はakinoboardもご紹介下さっており、大変感謝しております。

2011年10月1日土曜日

Windows Phone SDK 7.1が公開されましたね

RCは何となく見送っていたけど、RTWが出たんだったら一応手を出してみたいと思っています。
#ダウンロード先はこちら
IMEを作ってみたいんだけど、シングルタスクっぽいし(ちゃんと調べてないので間違っている可能性大)コピペでのなんちゃってIMEになるのかなー。
まだ何も調べずに独りごちてるだけなので、世の中的にはAndroidでのWnnのようにオープンなIMEがWP7上でも公開されているのかも。
そろそろどっかのコミュニティにでも入ろうかなぁ。。。

2011年9月29日木曜日

[akinoboard] akinoboardの紹介

akinoboardは、日本語入力時に必要な作業量を軽減することで、手軽に文字を入力できることを特徴とするソフトウェアキーボード(スクリーンキーボード)です。
(ダウンロードはこちら(Vector)からどうぞ)
特に、ウェブサーフィン中に検索キーワードを入力するなど、短文や単語をたまに入力しては元の作業に戻るような作業に最適です。
同時に、背景に画像ファイルを指定できるなど、外観的にも楽しめるように設計しています。
具体的には以下の特徴的な機能を持ちます。
  • マウス右クリックで漢字変換候補を選択
  • マウスホイールで予測変換候補を選択
  • 候補選択後にマウス左クリックで変換候補を確定
  • 候補確定後にマウス左クリックでエンター入力(例えば検索ボックス入力時には検索開始)
これらの機能によって、文字入力後にわざわざマウスをエンターキーなどに移動させることなく、効率的に所望の作業を進めることができます。

また、文字入力以外の部分では以下のような特徴があります。
  • マウスが離れている間はakinoboardを自動で透明・非表示化
  • マウス左ホールド(押しっぱなし)位置にakinoboardを表示・移動
  • サイズは自由に変更可能(縦横比は固定)
  • 任意の色、画像ファイルを背景に指定可能(画像ファイルは各自で用意して下さい)

風景写真にしても良し
お気に入りのキャラにしても良し
背景とキー部分は個別に透明度を設定することが可能
ちびっと萌え系にしても良し

『利用シナリオ例(どちらもIMEオン時を前提)』
  • フォルダ名を「フリーウェア」から「ソフトウェア」に変更したい
  1. フォルダから名前の変更を選択
  2. "フリー"の部分を選択(文字選択)してそのまま左ホールド(ver.1.1以降はスイングしながら選択 or ホールドして3.後に文字選択)
  3. akinoboardが付近に移動・表示
  4. "s" "o" "f" "u" "t" "o"を入力
  5. "o"からマウスを動かさずそのまま右クリックで漢字変換候補を選択
  6. 左クリックで「ソフト」を確定
  7. 続けて左クリックで名前の変更を確定
  • ウェブサーフィン中に「京都御所」を検索したい
  1. ブラウザの検索ボックスを左ホールド
  2. 検索ボックスにキャレットが移動&akinoboardが付近に移動・表示
  3. "k" "y" "o" "u" "t" "o" "g"を入力
  4. IMEの予測候補の2番目に「京都御所」が表示されたならば…
  5. "g"からマウスを動かさずそのままマウスホイールで予測候補から「京都御所」を選択
  6. 左クリックで「京都御所」を確定
  7. 続けて左クリックで「京都御所」で検索開始
以上、akinoboardの簡単な紹介でした。

----------
私は適当にウェブサーフィンをしている時には、椅子に背もたれながら肘置きにトラックボールを置いて操作するという、ぐーたら全開スタイルな人間です。
その中でたまーに検索などで文字を打たなければならない場合に、いちいち体を起こしてわざわざキーボードを打たなければならいのが、本当に面倒なんですよねw
Windows付属や他のソフトウェアキーボードも使ってみたのですが、マウスの移動が多いのが面倒だったり、ソフトウェアキーボードのウィンドウがいちいち邪魔だったり、どうも私には合いそうにありませんでした。
そこで、一層のこと欲しい機能を盛り込んでしまえと開発したのがakinoboardになります。
そのため、ここに書いたのと同じような作業の仕方をしている方にはとても利便性の高いソフトウェアキーボードになったのではないかと思っています。
ぶっちゃけ文書作成時以外は文字入力は検索がほとんどなので、Ctrl-Fのショートカットキーなども搭載しようと思いましたが、要望があればまた次回以降にでも…。

2011年9月22日木曜日

[akinoboard] akinoboardを公開しました

このブログでも当初から述べていたソフトウェアキーボードをやっと公開できました。
これから入力手法も含めて色々と新しい手法を提案、実装していくつもりですが、まず原型としてのソフトウェアキーボードをakinoboardと名付けて公開しています。
ダウンロードはVectorのページからどうぞ。
ご感想などございましたらコメントをいただけると励みになります。
ついでに興味があれば広告もぽちっとしていただけると…w
要望があれば、ブログの方でもっと詳しい使い方と言うか、私が想定している利用シナリオ例のようなものも紹介していくつもりです。
なお、WindowsPhoneにも手を出したいんだけど勉強する時間があまりないので、暫くは通常のWindows向けに進めていくつもりです(予定は未定)。

2011年9月11日日曜日

デバイス非依存ピクセル

最近はまった事例を少し。
コンピュータ上でのピクセル表現には、ハードウェアピクセルとデバイス非依存ピクセルの2種類がある。
詳しいことは書かないけど(そもそも厳密に分かってはいない…)、OSの設定でDPI(dot per inch)を変更するとデザインに狂いが生じる可能性があるため、DPIに影響されないピクセル表現としてデバイス非依存ピクセルがあるみたい。
#間違っていたらご指摘下さい
で、Win32API等一昔前のAPIだとハードウェアピクセル、WPF等最近のAPIだとデバイス非依存ピクセルが基本となっている。
それぞれ単独で使う分には問題ないんだけど、相互運用時には少し注意しなければならない。
例えば、Win32APIで座標(100,100)とWPFでの座標(100,100)では結果としてデスクトップ上の異なる座標を指すことがある。
WPFでも96DPIの場合(Windows7では「テキストやその他の項目の大きさの変更」で「小–100% (既定)」を選んでいる場合)には同じ座標を指すことになるけど、その他の設定(96DPI以外)にしている場合には一致しなくなる。
そのため、両者間で橋渡しするためには座標変換が必要になる。
私が利用している基本コードは以下の通り。

// hardwarePointはハードウェアピクセル
Point HardwareToWpf(Point hardwarePoint)
{
    PresentationSource pSource = PresentationSource.FromVisual(Visualオブジェクト);
    CompositionTarget cTarget = pSource.CompositionTarget;
    Matrix hardwareToWpfMatrix = cTarget.TransformFromDevice;
    return hardwareToWpfMatrix.Transform(Point hardwarePoint);
}

ただし、SourceInitialized以降でないときちんと動かないのでご注意を。
参照を増やしたくないからこのような手法を取ってるけど、そうでないならこちらで紹介されている手法の方が理解しやすいかも知れないなぁ。

2011年9月5日月曜日

備忘録:WPFレイアウト関係

WPFのレイアウトについて、基礎的なところだけどきちんと確認していなかったので、改めて調べた結果を備忘録として記入。

・HorizontalAlignment, VerticalAlignment.Stretch
コントロールのWidth, Heightが設定されていた場合そちらが優先される。その場合は親の中央に配置される。Stretchを有効にするためにはこれらのプロパティにはDouble.NaN(自動サイズ)を設定すること。

・自動サイズ変更
Stretch以外のAlignmentを設定している場合には、そのコントロール全体(子を含む)が表示される最小限のサイズを上限として自動変更が実行される。たとえば、BのルートがAとして、Bが含む子の中で一番右に配置される子の右端=80の場合、A.Width=60ではB.Width=60となるが、A.Width=100ではB.Width=80となり、残りの20は余白となる。

・配置位置とマージン
マージン以下の座標にコントロールが配置される場合には表示されない。たとえば、左マージンが50の場合に、幅100のコントロールの右座標が120に設定されると、コントロール右部分30~100の部分のみ描画される。

ここに書いてあることは完全に私的な備忘録レベルで文章的にも書き散らしているので、信頼性は申し訳ありませんが保証できません。。。
厳密にリファレンスを読み込んだ結果ではないので、あくまでも一個人意見の参考だと思っていて下さい。

話は変わりますが、現在ソフトウェアキーボードの開発をやっとのことで進めております。
まずは機能をあまり詰め込まずに素直なキーボードを作っています。
完全に普通のキーボードだとつまらないので、少しだけ他のソフトとは異なる機能を盛り込んでいます。
完成したらベクターあたりでの公開を考えていますので、もし興味がありましたら使っていただけると幸いです。

2011年7月27日水曜日

更新できていません…

かな~り間が空いてしまったけど、ちょっと忙しくて中々更新できない状況です。
8月には更新とソフトウェア公開できたらいいなと考えているけど、予定は未定な今日この頃です。。。

2011年6月25日土曜日

タイトルバーを持たない&透明なウィンドウを作成する

先日の投稿でそろそろ文字やキーの送信処理について書いていこうと言ってたんだけど、表題の設定を前提にしていたため、まずはその説明を取り敢えずしとかないとまずいかなとも思ったので、それについて書きます。
ほーんのわずかだけど検索で飛んできてくれてる人もいるみたいだしね。
ちなみに、ここが足りないとかもう少し詳細にとかあれば、遠慮無くコメント付けてもらえると嬉しいです。

  • タイトルバーを持たないウィンドウ
これは単純にWindowクラスのWindowStyleプロパティをWindowStyle.Noneに設定するだけ。
ちなみにその他のWindowStyle列挙体はこちらを参照。
なお、後述するAllowsTransparencyプロパティをtrueにしている場合にはNone以外は設定できないので注意。

  • (背景が)透明なウィンドウ
WPFになってからとても簡単になったね、ここの項目は。
WindowクラスのAllowsTransparencyプロパティをtrueに設定して、Backgroundでアルファ値、もしくはOpacityを調整すれば、それだけでもう透明なウィンドウが作れちゃいます。

ちなみに先日の変形ウィンドウについての投稿で、タイトルバーを持ってかつ透明でないウィンドウだと以下のようになります。
クリップしたところが黒くなって、わざわざ手間をかけて変形させたことがマイナスにしか働かないねw


まったく関係ないですが、本投稿はShadowloo Showdown 2011を見ながら書いています。
格ゲーの腕はへっぽこぴーですが、盛り上がっていって欲しいですねー!
弱春風後の小Kを失敗しないようになりたい今日この頃…。

2011年6月21日火曜日

ウィンドウやコントロールの形状を変更する

 一般的な通常のウィンドウ(の形状)を持ったソフトウェアキーボードでも何も問題ないんだけど、少し形状に手を加えることで使う側として何だか楽しくなると個人的に感じています。
WPFではウィンドウを含むコントロールの変形が非常に簡単にできるんだけど、私がよく使う手法は以下の2つ。

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    // ウィンドウの形状を変更
    RectangleGeometry r = new RectangleGeometry(new Rect(0, 0, this.ActualWidth, this.ActualHeight), 30, 30);
    this.Clip = r;

    // ボタンの変形
    button1.RenderTransform = new RotateTransform(10, 45, 45);
}

Clipプロパティに望む形状のGeometryを設定して形を変更する方法と、RenderTransformプロパティに望む変形に対応するTransformクラスを設定する方法です。
用意されているTransformのサブクラスはこちらを参照
このような角が丸みを帯びたウィンドウや傾いたボタンを簡単に作成できます。

よく考えればソフトウェアキーボードの本筋とは少しずれた話ばかりしている気もしないでもないので、次はアプリケーションに文字やキー情報を送る方法でも書くつもり。
ただこのブログはほぼ備忘録orチラ裏なので、予定は未定が前提となっております故、ご了承下さい。

それ以前に、最近暇ができてもスパ4AE比翼恋理のだーりんばかりで、肝心のソフトウェアキーボードの作成があまり進んでいなかったりする…w



2011年6月6日月曜日

家庭用ジャングルジム&ブランコ

半年以上前に家庭用のジャングルジム&ブランコのアンパンマン NEW ブランコパークDXを買ったんだけど、当時1歳程度のうちの娘は殆ど見向きもしませんでした(-_-;
しかし、最近になって急に覚醒して登るは潜るわの大はしゃぎ(娘は1歳半)。
勉強代として半ば諦めていたんだけど、こういうおもちゃは急ぎすぎてはダメなんだな、と学んだ次第でございます。
ちなみにこのブランコパークDXは作りもしっかりしていてお値段もそこまで高くないのでオススメですよ。


2011年6月5日日曜日

プロパティ名の表示がトリミングされすぎる

以前からそうだったのか不明だが、プロパティウィンドウ内のプロパティ名が横幅に完全に余裕があるのに無意味にトリミングされる。
例えば"height"と表示する横幅が十分にあるにも関わらずが"hei..."と省略記号付きになるのね。
そろそろきちんとソフトウェアキーボードの作成を始めようと腰を上げた分、余計に気になったのかも知れない。

開発的には問題ないけども喉の奥に小骨が刺さったような歯がゆさがあったので、仕方なくVSを再インストールするも治らず(>_<
何回かアンインストール、インストールを繰り返してみたけど症状は何も変わらず。。。

試行錯誤の結果、ディスプレイ設定のテキストの大きさが原因でした。
この項目は大中小がデフォルトで選択できるんだけど、細かい値をカスタムできる。
ここで大中小以外の値でカスタムしていると、上記の症状が出るみたい。

再インストールする前には勿論ネットを検索してみたんだけど、クエリが上手く設定できなくて碌な情報が手に入らなかったこともあって、無駄に労力がかかってしまった…。

2011年6月4日土曜日

タイトルバーのドラッグ以外でウィンドウを移動する

ソフトウェアキーボードではタイトルバーを持たない形(WindowStyle.None)を取ることが多いです。
その場合にはタイトルバーをドラッグしてウィンドウを移動すると言う一般的な方法は使えません。

その代替として有効な手段が、領域内を左クリックドラッグでウィンドウを移動する方法です。
WPFではWindowクラスのDragMove()を使うことで非常に簡単に実装することができます。
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
    base.OnMouseLeftButtonDown(e);

    this.DragMove();
}

ただ、先日の投稿の方法でアクティブにならないウィンドウを作った場合には、ドラッグ中のフィードバックが行われません。
#マウスアップまでウィンドウが移動しない
これはタイトルバーを残していた場合にも同様です。

私は見かけ的に好きではないので、以下のようにしてマウスドラッグ時にウィンドウを移動しています。
bool dragFlag;
Point offset;

private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    dragFlag = true; // ドラッグ開始
    offset = e.GetPosition(this); // 開始位置の記録
}

private void Window_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
    if (dragFlag) // ドラッグ時のみ
    {
        Point p = e.GetPosition(this); // 現在のマウス座標
        // ウィンドウを移動
        this.Left += p.X -offset.X;
        this.Top += p.Y - offset.Y;
    }
}

private void Window_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    dragFlag = false; // ドラッグ終了
}

この方法だとマウスムーブに合わせてきちんとウィンドウが移動されます。
今回だけに言えることじゃないですが、これがベストの方法とは限らないことを理解いただいた上で、参考にしていただけると幸いです。

2011年6月3日金曜日

Windows APIリスト

頑張って投稿を続けているけど確実に頻度は下がっていくだろうなw

窓の杜に『主要なWindows APIのドキュメントをリスト化した“Windows APIリスト”が公開』の記事が公開されています(リストの場所はこちら)。
今後私が紹介する予定のAPIも沢山載っているので参考にされては如何でしょうか。
MSDNを普通に検索するよりも、利用されるジャンルで分類されているため分かりやすいと思います。

育児系も書いてみる

ソフトウェア系もそうなんだけど、育児系は完全にチラシの裏です。
お暇でしたら、あぁこいつの近況はこんなんなんか、と流し読んで下さいw

と言うことで、1歳半になる娘がいるわけなんですが、最近トイレに勝手に入っては蓋をチョンチョンと叩く。
そして、子供ちゃれんじで送られてきたトイレのおもちゃ、と言っても20cm四方のぬいぐるみを置くものなのですが、それに座ってしーしー言って自己主張。
ただ、まだいらんだろうと「おまる」は買っていなかったんだけど、逆に娘のやりたい心に親がついて行けてないのではないかと凹んで、急遽おまるを探してみた。

それで一番上に出てきたのが「ポッティス イス型おまる」。
アマゾンだけど楽天で探してみてもランキング1位でした。
今っておまるでも足を横に出すのではなく、普通の洋式トイレでする時みたいに前に出すタイプになってるんだねぇ。
もちろん横タイプも多いですが、びっくりしたので取り敢えず育児一発目の記事にしてみましたー。
ちなみに今からちょうどこれを買いますので、感想も後日ここに載せたいと思います♪

でも初めから分かっていたことだけど、ソフトウェア系と育児系を同じブログに載せるのは、割と違和感があるなぁ(^^;



2011年6月2日木曜日

フォーカスを奪わないウィンドウ

まず、ソフトウェアキーボードのウィンドウは他ウィンドウからフォーカスを奪わないようにしなければなりません。
ソフトウェアキーボードのデザインは多種多様にあるけど、 私が想定している動作は、自作ソフトウェアキーボードからフォーカス(キャレット)を持つコントロールへ仮想キーコード、もしくは文字コードを送信するパターンになります。
これらを前提としてブログを書き進めていきますので、ご了承下さい。

私が調べたところ、上記を実装する手段は大まかに次の通り。
  1. ウィンドウがアクティブにならないようにする
  2. フォーカス遷移を記録しておいて、コード送信時にフォーカスを以前のウィンドウに戻す
  3. フォーカスメッセージをフックして、受け取らない(元フォーカスがあったウィンドウに再送)
 何通りか試してみたけど、やはり一番上手く想定通りの動作をするのは1.のやり方でした。
2.も「ソフトウェアキーボード上で操作して情報を元のウィンドウに送る」と言う動作自体は問題ありませんでした。
ただ、タスクバーやウィンドウの外観がアクティブウィンドウが変わる度に変化(フィードバック)するので見かけ上気持ち悪いんだよね。
3.は上手くやればできるのかもしれないけど、(私の力量では)安定性が低かったり、グローバルフックは将来的に公開するときに色々と面倒そう、と感じたので却下。

無駄な文を長々と書いてしまったけど、私は次のようにして1.を実装することにしました。

[DllImport("user32.dll")]
static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
[DllImport("user32.dll")]
static extern int GetWindowLong(IntPtr hWnd, int nIndex);

private const int GWL_EXSTYLE = -20;
private const int WS_EX_NOACTIVATE = 0x08000000;

protected override void OnSourceInitialized(EventArgs e)
{
    base.OnSourceInitialized(e);

    WindowInteropHelper helper = new WindowInteropHelper(this);
    SetWindowLong(helper.Handle, GWL_EXSTYLE, GetWindowLong(helper.Handle, GWL_EXSTYLE) | WS_EX_NOACTIVATE);
}

(ソフトウェアキーボードの)メインウィンドウにSetWindowLong()でWS_EX_NOACTIVATEを設定することで、アクティブにならないウィンドウの作成が可能。
なおWPFで実装しているため、ウィンドウハンドルを取得する部分がその前段となります。
ちなみにタスクバーやAlt-tabで選択した場合にはアクティブになるので、扱いには一工夫必要かな。

このようなブログを書くのは始めてなので、折角見ていただいてもよく分からない説明になっているかも知れません…。
もし詳しく説明してくれって人がいたらコメントでもして下さい。
#それ以前のページビューだけどねw

2011年6月1日水曜日

当面の開発テーマ

取り敢えず、ソフトウェアキーボードを作っていこうと思います。
今更感があるかもしれないけど、Windows7のマルチタッチ環境を想定します。
iPhone、Androidなど携帯端末向けに作成しようとも考えたんだけど、MAC持ってないし、Javaももう10年以上触ってない。
ただででもあまり時間がないので言語やクラスライブラの把握から始めるのは面白いけれども厳しいということで、Windows環境を対象に選んでみました。
将来的にはWindowsPhone7に向けて考えていきたいけど、WP7は生き残り以前に少しでも日本市場で流行るのかなぁ?w

と言うことで、基礎から調べながら実装していく予定なので、まずは普通のソフトウェアキーボードを作っていくつもりです。
タッチでもマウスでも操作はできるようにはするつもりだけど、タッチならではのインタラクションを検討したりするのは次の段階かな。
本命は新しい文字入力手法を開発すること。
たとえば、ShapeWriterなどに代表されるような、従来とは異なる、よりユーザに取って使いやすく効率的なシステムを開発していきたいな。

ある程度は調べ始めているので、次からはソフトウェアキーボードを作る上で私が必要だと判断したAPI(性格上Win32APIが多い)を紹介しつつ、完成したら公開する予定です。
このブログを見てくれる人がいるのか分からないけど、取り敢えず公開だけはしとこうw

2011年5月31日火曜日

ブログを始めてみる

はじめまして。aKINOと申します。
思うところがあって、ブログを始めてみることにしました。
現在は趣味グラマですので、大したことは書けないかもしれませんが、しばらくは頑張ってみます。
偶然に本ブログをご覧になった方で興味のある情報がございましたら、遠慮無くコメントやメールで情報共有させていただけると有り難いと思います。

なお、私の開発環境は基本的に.NetFramework(C#)となります。
興味をもつ分野的にWin32APIが必須になりますので、そのあたりの情報も書くつもりですが、前提は.Netでの利用です。

現在は育児がメインですので、その合間を縫って諸々調べたり開発していきますので更新頻度は怪しいところですが、宜しければ御覧下さい。

あ、育児のことも所々はさんでいくよ。
(気づいたらそっちメインになってるかも…)