Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2017/02/04 (土)

Juliusの音声認識を使ってみるよ!

| 12:39 | Juliusの音声認識を使ってみるよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - Juliusの音声認識を使ってみるよ! - 雪乃☆雫のなでしこ日和 Juliusの音声認識を使ってみるよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 突然ですけど、ちょっと面白そうだったので、ダウンロードしてみたよ!

 Juliusとゆうのは、音声認識システムの開発・研究のためのオープンソースの高性能な汎用大語彙連続音声認識エンジン…だそうです。

http://julius.osdn.jp/index.php

 読みは、ユリウス? ジュリアス?? どっちだ???


 なんか色々難しいですが、取りあえず、動かしてみるだけなら、カンタンです。

 上の、URLから、ディクテーションキットをダウンロードしてくるだけです。

 ネット上の情報を検索すると、たいがい、まず「最新版」をダウンロードし、しかる後に、「ディクテーションキット」と「文法認識キット」を入手せよとゆうことになっていますが、ディクテーションキットには必要の実行ファイルも入っているので、ひとまずこれだけで問題ありません。

 ムシロ、最新版だけをダウンロードした場合、「・・・でっ?!」この先どーしたらいいんすかと、途方に暮れること請け合いですw

 よく分かんないんで、zipを直でダウンロードしましたが、なかなかのサイズでした;

 コレを解凍して・・・まずは、「00readme.txt」だの「LICENSE.txt」だのにもようく目を通した方がいいんでしょうが、とりあえず「HOWTO.txt」にやり方が書いています。

 マイクをセットアップしたあとに、「run-win-dnn.bat」または「run-win-gmm.bat」をダブルクリックするだけでOK☆

 GMM版はDNN版に比べて精度が下がりますが,の分処理は軽く,処理が高速な

バージョン…で、DNN版は高精度ですが,比較的処理が重く…なるそうです。


 がっ・・・

 ワタシがマイクの設定とゆうモノを全く分かっていないせいか、も、ノートPC内蔵のマイクがしょぼいからなのか、はたまた家の中がFF式ストーブのファンだの加湿器だのサーキュレーターだのメダカのブクブクのモーターだのといった騒音に満ちているせいか、なかなかうまく認識出来ないんだよね~ヽ(;´Д`)ノ

「衆院議員は,具体的にどう考えているのか」
  ↓ ↓ ↓
吸引議員が快適になにを考えているのか。
休眠人が具体的になにを案外いいのか。
衆院二幕は海域になにを考えているのか。
周囲にマグ帯域になにを考えにぴあ。
衆院議員が個体的になにを考えているのか。
衆院議員がふたり、一気になにを考えているのか。
衆院議員が食いたい、絶対的になにを考えているのか。

 こりゃひどい(爆)

 「具体的に」をワタシがしゃべれてナイとゆう可能性もあるが(爆2)


 でも・・・

「任意の読み上げ文発声(対象語彙数6万語)をほぼ実時で90%以上認識することができます」

 ・・・とうたっているのだからして、いかになんでも、まちっとマシにできるハズ。

 と言って、アマゾンでマイクなんか買って、やっぱりうまくいかなかった日にはショックだしぃ、だいたい旦那しゃんが色々買ってくれちゃったおかげでっ(`ヘ´)

 なななんと今月は、はやくも! お金が無いぃ~~Σ(゜д゜;えぇっ!!

 もっと認識精度を上げるべく頑張ってみるか、とりあえず、コレをなでしこから使えるよーにだけしてみるか、悩むね;;;

 なでしこも、TCP/IPの接続ができるから、この認識結果を取り込むことはできると思うんだよね。

めだかめだか2017/02/05 07:09こんにちは!(超早朝

雪乃さんが、僕がしてることと同じことしてて、ちょっと笑っちゃいましたw
一時期音声での、操作簡略化...とでも、言うべきでしょうか。そのようなことをしていましたw
例えば、「音楽を再生」というと、PC内から自動で音楽ファイルを開いてくれ
たり、「天気は」というと、天気をネットから引っ張ってきてくれたりと、色々ありますw(アイアンマンのジャービスに憧れてましたw


ただ、Windows標準搭載の音声認識はポンコツだったり、入力できるまでの過程が長かったりと絶望的でした。
ですが、スマホのGoogle音声認識を使えば、手軽に高精度の音声入力が出来たのですっ!スマホをPCのキーボードかわりにしてやれば、きちんと使えて、高精度な音声入力ができました。


ですが、なでしこを使うものとしてなるべく、外部ソフトに頼らず、なでしこを使って音声入力が出来たらいいなと思いながら、タイピングです( ; ; )

雪乃☆雫雪乃☆雫2017/02/05 16:36 めだかさん、こんにちは☆
 ウチは場合によっちゃ三時起きの日もあるので、七時は早朝のうちには入りませんよ~www

 Juliusは、今はやりの(?)raspberry Piで音声認識機能を組み込むのに使われている定番のソフトらしいんですが、なでしこからも使えそうだったので、ちょっとどうかなーと思ってダウンロードしてみたんですよ。
 とりあえず、なでしこで認識結果を取り込むまでは、成功しました。
 実用としてはどうだかなあと言ったところですが、なでしこを、おもちゃにしている者にとっては、まだまだ遊べる余地がありそうです♪

 こういった外部ソフトの音声認識をなでしこから使用するのではなく、なでしこでこういった音声認識プログラム自体を作りたいとゆうことなんですか?
 それはそれは、なかなかハードルの高い野望ですね!!
 ワタシなんか、Juliusのまにゅあるに書いてあるコトすら、いっこも理解出来ない。とても日本語とは思えん(*_*;
 しかしコレはオープンソースってコトですから(Cだそうですけど)なんらかの参考になるんじゃないですか?(@_@)

めだかめだか2017/02/06 16:56こんにちは~

3時起きですか・・・! 僕も一時期そんな時期がありましたー...w自分、朝苦手なんで、めっちゃきつかったですw

自分の場合は、ユリウス?を入れる時点で、めんどくさくなっちゃって、諦めました\(^o^)/


そうですねぇ・・・なでしこの命令のみでの作成をしてみたな~・・・とは思っていますwですが、以前ちょこっと音声認識のシステムを調べてみただけでも、頭がこんがらがっちゃう感じですぅ~(笑
果たして、これは作れるのだろうか・・・と、途方に暮れていましたw

雪乃さんのコードを拝見させていただいたところ、その方法があったか~と、悔しいというか、やられた思いです(笑


余談ですが、PCのスペックもそんなに高くないので、処理が遅くなったりしちゃうんで泣けてきます・・・
なので、はじめから完璧なコードを書かないと、出来ているはずのことも出来ないとなってしまうんですよねぇ~・・・

雪乃☆雫雪乃☆雫2017/02/07 16:44 めだかさんこんにちは。
 Juliusは、ワタシも当初、インストール・・めんどくさそう・・・。こっ、こんぱいる?!ヽ(;´Д`)ノ など思ってたんです。
 なにしろ、raspberryPiなところにばかり検索が引っかかるので、コマンドプロンプトだらけで、もーMS-DOSの時代のことなんか忘れたんだよ! 的な(爆)
 でも蓋を開けたら、ダウンロード→zip解凍→バッチファイルをダブルクリック・・・だけで行けましたw

 ディクテーションは正直、Windows標準の音声認識よりポンコツですwww
 でも、単語リストや文法辞書を使えば、(認識出来る語彙が少ないので当然っちゃあ当然ですが)なかなか良く認識するので、もう少し遊んでみる予定~☆

めだかめだか2017/02/07 18:16どうもです~

ラブベリーパイは、もともと知っていたのでそこで拒絶はおこらなかったのですが、その跡がめんどそうだったので、諦めました\(^o^)/

ネットにも、いくつかそういったファイルがあるそうですが、なんせめんごくさがりなんで、やめましたw


あ、それと軽い報告なのですが、画像から顔だけを検出するプログラムを考えていたのですが、やはり時間がかかってしまいます・・・
もう少し粘ってみてはみますが・・・

めだかめだか2017/02/07 20:49報告です!

無茶苦茶してなんとか1秒以内に処理をすることができましたw
ただし、検出精度が低い可能性がありそうですw

以上です!w

雪乃☆雫雪乃☆雫2017/02/08 21:27顔検出プログラムですか~、すごいですね!!

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170204

2017/02/01 (水)

動画を保存したい!

| 16:18 | 動画を保存したい! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 動画を保存したい! - 雪乃☆雫のなでしこ日和 動画を保存したい! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 さて、引き続きカメラです。

 折角、画面は動いているわけなんだから、静止画だけじゃなく、のまま動画で保存してみたいと思うのが人情ですよね~(?)

 調べてみると、「WM_CAP_SEQUENCE」が、ストリーミングビデオおよびオーディオキャプチャをファイルに開始…するラシイ。

 「WM_CAP_SEQUENCE」は「$400+62」とゆうことで、とりあえず、

メッセージ送信(CWハンドル,$400+62,0,0)

 のようにしてみたんだけど・・・

 一応、これだけで、出来たことは出来たんだけどね。

 デフォルトのファイル名は、「CAPTURE.AVI」のようなことが書いてあったんだけども、1が返ってきているのに、見当たらない

 一体、どこにあんのかと思ったら、検索しないとたどり着けないよーな深いところに「CAPTURE.AVI」が作られてました;

 これはよろしくないので、変更しなくては・・・

 っと、また具合わるくなりながら、ぐーぐる検索様のお力を借りて調べると、「WM_CAP_FILE_SET_CAPTURE_FILE」が、キャプチャーファイル名を設定するヤツらしい。

 これは、「$400+20」とゆうことで、

メッセージ送信(CWハンドル,$400+20,0,"{デスクトップ}CAPTURE.AVI")

 で行けるだろうと思ったら、行かなかった。

 これは、どうやら、最初に「WM_CAP_FILE_SAVEDIBA」が出来なかったのと同じ現象だね。

 ーとーうだうだ考えて、はまりまくった末にひらめいたのは、文字列が通ってないんじゃ? ってこと。

 本家のコードをようく眺めてみたら、「SendMessage」の引数は、wParamがShort、lParamがStringになってるんだね。

 なるほど。

 こうして置いて、数字的なヤツは最初のパラメーター、文字列は2番目のパラメーターで送ってるラシイ。

 とゆうわけで、メッセージ送信のパラメーターの引数の型を変えてみた。

●メッセージ送信(hWnd,Msg,wParam,lParam) =DLL("user32.dll",
"LRESULT SendMessageA(
HWND hWnd,      // 送信先ウィンドウのハンドル
UINT Msg,       // メッセージ
SHORT wParam,  // メッセージの最初のパラメータ
LPCSTR lParam   // メッセージの 2 番目のパラメータ
)")

 動いた!

 いや~、なんか、賢くなったんじゃないですか?

 でっ、いちおうこんな感じで、録画もできるようになりました♪

 ちなみに、[Esc]キーか、マウスボタンを押すことで保存終了です。

 終了ない限り、ディスクが一杯になるまで保存し続けますのでご注意ですw

キャプチャファイル設定とは整数=$400+20  # WM_CAP_FILE_SET_CAPTURE_FILE
シーケンスとは整数=$400+62     # WM_CAP_SEQUENCE

*動画保存
  ファイル名は「{今日} {}」を「yyyymmdd_hhnnss」に日時形式変換。
  ファイル名は「{デスクトップ}{ファイル名}.avi」
  メッセージ送信(CWハンドル,キャプチャファイル設定,0,ファイル名)
  メッセージ送信(CWハンドル,シーケンス,0,0)

 ああぁ・・・メッセージ送信が増えてくると・・・(+_+)

 それぞれ関数にした方が見やすかったかな。

めだかめだか2017/02/01 21:01お久しぶりで御座います。
雪乃さんはすっかりAPIマスターですねw
そんな雪乃さんに質問なのですが、

>「WM_CAP_SEQUENCE」は「$400+62」とゆうことで、

これが、わからないんですが...(>_<)
初歩的な質問で申し訳ないですが、ご教授お願いします...!

雪乃☆雫雪乃☆雫2017/02/02 00:08 えっと・・・そんなにマスターはしてないんだけど、参考にしたのはここです。
https://msdn.microsoft.com/en-us/library/windows/desktop/dd757696(v=vs.85).aspx
https://www.ecoop.net/coop/api/winmes.html

 最初のトコは、全部英語ですからご注意です。ワタシなんぞは、開いた瞬間めまいがして、次に具合わるくなりますwww
 しか~し、ガマンして、ぐーぐる翻訳さまに読んで頂くと、「WM_CAP_SEQUENCEメッセージは、ストリーミングビデオおよびオーディオキャプチャをファイルに開始…」するヤツだと言うことが分かります。
 コレを、SendMessageで送ってやれば、その機能が使えるよってコトです。
 でも、「WM_CAP_SEQUENCE」とゆう文字列を送るわけではなくって、定数として割り当てられてる数値があるので、今度はそれを探さなきゃならないんですよ~(´д`)(前のコードの場合は、参考にしたコードの中に宣言してあった数値を拾っただけなので、カンタンだったんですが)

 さてそこで、2番目のトコです。
 あんまよく分かんないケド、VFW的なメッセージの定義値が一覧表になっています。
 「WM_CAP_SEQUENCE」は「WM_CAP_START+62」となっています。
 この表には書いてないけど、参考にしたコードによると、なんか知らんけど、「WM_USER=WM_CAP_START=$400」とゆうことになるらしいんだよね。
 だから、「WM_CAP_SEQUENCE」は「$400+62」なのです。
(1086と書くことも出来るけど、$400+62のほうが見やすいでしょ? なんとなく)

めだかめだか2017/02/03 01:31返信有難う御座いますー

なるほどー...
WM_CAP_STARTは$400なんですねー...
確かに、1086よりもこっちの方がみやすいですねw

もち合わせでの知識だけでは、理解することが出来ない様な領域ですね...
時間さえあれば、ゆっくりと調べてながらも自力で理解も出来るのですが...


何はともあれ、有難うございます!

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170201

2017/01/29 (日)

母艦のスタイル指定ができない・・・

| 17:27 | 母艦のスタイル指定ができない・・・ - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 母艦のスタイル指定ができない・・・ - 雪乃☆雫のなでしこ日和 母艦のスタイル指定ができない・・・ - 雪乃☆雫のなでしこ日和 のブックマークコメント

 まず最初に違いを直しとく。

× キャプチャーウィンドウ作成("",CWスタイル,0,0,母艦の幅,母艦の高さ,母艦ハンドル,0)
   ↓ ↓ ↓
○ キャプチャーウィンドウ作成("",CWスタイル,0,0,母艦のクライアント幅,母艦のクライアント高さ,母艦ハンドル,0)

 学習能力が不足だから、なんか毎違うんだよねー;;;

 母艦の幅/母艦の高さでは、タイトルバーや枠の分も含まれてしまうんだよね。

 の場合、たいした問題は出ないけど、母艦の枠をちょっと動かしてみたら、なんか分かる;


 でも、枠は動かせない方がイイだろうと思って、母艦のスタイルを「枠固定」にしようとしてみたら、できなかった><

 エラーにはならないんですが、キャプチャーウィンドウが表示されず(ハンドルが返ってくるので作られてはいるっぽい)、カメラ接続にも失敗してしまう。

 試しに、カメラ起動後、映像が映ってから、スタイル設定を入れてみても、切断されて、っ白な母艦になってしまう。

 なぜ~~~(?_?)

 ちなみに、「枠なし」もダメだし、最大化、最小化ボタンの有効変更もダメでした。

 実は、「WM_CAP_SET_SCALE」で、キャプチャーウィンドウに合わせて映像を拡縮出来るラシイことが分かったので、フルスクリーン表示にしてみようかと思ってたんだけど・・・

 枠なしに出来ないと、フルスクリーン・・・っていうか・・・みたいな感じになっちゃいますよね~;;;

 しくしくしく。


 ちなみに、ウィンドウスタイルをようく学べば、母艦の子ウィンドウにしなくても、単体で枠付きのウィンドウにも出来るハズなんですが、それをやっちゃうと、キー押した時などのイベントが使えない・・・

 全部、APIのWindowMessageを使ってやっていかなきゃなくなるだろうから、めんどーじゃないですか? もーなでしこのプログラムのようじゃなくなるもねー(@_@)


 ・・・とっ、ところが!

 古いバージョンのなでしこでは、フツーに動いたんですよ、コレが!!

 ってことは、なでしこさんの問題なのかなー。むむむ。

 直った直る予定らしい、母艦フォームの位置の指定が変になっちゃう事件も、スタイル指定がある場合だけの現象だったし、何かスタイル指定には、ネックになるところがあるんですかね???

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170129

2017/01/27 (金)

なでしこでノートPCのカメラを使うよ!

| 17:32 | なでしこでノートPCのカメラを使うよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - なでしこでノートPCのカメラを使うよ! - 雪乃☆雫のなでしこ日和 なでしこでノートPCのカメラを使うよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 めだかさんから頂戴した課題です。

 課題を解決するのは、好きだよ☆

 もっとも、当初、ワタシの知恵では、到底ムリだろうと思われた、難題でしたが――

 色々調べてみた結果、capCreateCaptureWindowと、SendMessageの組み合わせで、出来そう感が出てきたので、ちょっとやってみました。

 元ネタは、こちら。

http://magayengineer.hatenablog.com/entry/2016/06/13/224309

 しかし、VBのコードが分かるわけでもなく(20年くらい前にちょこっと、本や雑誌のをまるっと打ち込んで「動いた~(喜)」とかしてただけなんで;)イメージで! 目的のAPIを使ってるトコをやっつけで!!(爆)

 んな、てきとーな感じなのに・・・

 ふつうだったら、もっとなんてことの無い簡単なモノでも、大体些細なことにはまりまくって何日も過ごしたりするもんなんだけど・・・


 ・・・あれれれれ??

 でっ、できたかも・・・?!?!


 上記のよーな感じなもので、もしかすると、不足のところがあるかも知れませんが、一応カメラの映像が画面に出て、スナップショットをファイルに保存出来るようになりました。


 APIは、3つ。(本家では4つ使われていますが、なんかよく分かんないので、割愛されています(えっ;))

・まずは、「capCreateCaptureWindow」で、キャプチャーウィンドウを作成します。

 ウィンドウ識別子がなんなのか、全く分かんないケド、0で良いようです;

 ウィンドウ名は、母艦の子ウィンドウとするため設定していません。

 ウィンドウスタイルは・・・とっ、とにかくコレで、母艦の中にキャプチャーウィンドウが入ります;

 あとは、見たとうりの感じ。

・「DestroyWindow」は、最後、作ったウィンドウは、ちゃんと破棄して終了すれってこってしょう。

して、「SendMessage」で、なんか色々送ることによって、VFW?が使えるとゆうことのようなんですが・・・とりあえず、数値を拾っただけです。

 他にも沢山種類があって、出来ることは色々ありそうではあるんですが・・・よくわからん。だって、英語なんだもん!(*_*)

 しかも、なぜだか「WM_CAP_FILE_SAVEDIBA」が、うまく出来ませんでした(?_?)

 でも、なでしこには窓キャプチャ画像保存の命令があるから、いいんだい!

 直で、pngでも保存できるもね~。

・ちなみに、割愛した「getTickCount」は、システムを起動した後の経過時を、ミリ秒(ms)単位で取得…するヤツで、カメラが準備できるまで少し待つ…場面で使われていましたが、よく分かんないので、待ちゃーいいんだろ?とばかりに、秒待つ命令をぶち込みましたが、動いたのでOK;;;


 さてさて、んなこんなで、こんな感じ。

#-----------------------------------------------------------------------
# なでしこでノート内蔵カメラをキャプチャ
#・ノートPCの内蔵カメラを起動してキャプチャ(プレビュー)
#・Enterキーでキャプチャ画像を保存(勝手にデスクトップの日時でファイル作ります)
#-----------------------------------------------------------------------
#※元ネタはこちら
#http://magayengineer.hatenablog.com/entry/2016/06/13/224309
#(VB.NETが分からんもので、正確な移植では無いです。なんか不備があったらゴメン)
#-----------------------------------------------------------------------
!母艦設計=「母艦の可視はオフ」

#-----母艦設計----------------------------------------------
母艦について
  位置は「0,0」
  クライアント幅は640。
  クライアント高さは480。
  閉じた時は~
    終了処理。
  キー押した時は~
    もし、押された仮想キー=13ならば、画面キャプチャ。
#-----------------------------------------------------------

#-----宣言--------------------------------------------------
CWハンドルとは整数=-1  #キャプチャーウィンドウのハンドル。
CWスタイルとは整数=$10000000+$40000000  #キャプチャーウィンドウのスタイル
#(WS_VISIBLE=$10000000(初期状態)/WS_CHILD=$40000000(子ウィンドウ))

カメラ接続とは整数=$400+10     # WM_CAP_DRIVER_CONNECT
カメラ切断とは整数=$400+11     # WM_CAP_DRIVER_DISCONNECT
カメラ接続状態とは整数オフ。

プレビューとは整数=$400+50     # WM_CAP_SET_PREVIEW
プレビューレートとは整数=$400+52  # WM_CAP_SET_PREVIEWRATE
フレームレートとは整数=60      #ミリ秒単位

#---GUI-----
処理用とはイメージの可視はオフ。
#-----------------------------------------------------------

#-----メイン------------------------------------------------
母艦の可視はオン。
カメラ起動。

*カメラ起動
  キャプチャーウィンドウ作成("",CWスタイル,0,0,母艦の幅,母艦の高さ,母艦ハンドル,0)
  CWハンドルはそれ。1秒待つ。
  5
    メッセージ送信(CWハンドル,カメラ接続,0,0)
    1秒待つ。
    もしそれはいならば、カメラ接続状態はオン抜ける。
  もし、カメラ接続状態がオフならば、
    ウィンドウ破棄(CWハンドル)
    「カメラに接続出来ませんでした」と言う。
    終わる。
  メッセージ送信(CWハンドル,プレビューレート,フレームレート,0)
  メッセージ送信(CWハンドル,プレビュー,オン,0)

*画面キャプチャ
  ファイル名は「{今日} {}」を「yyyymmdd_hhnnss」に日時形式変換。
  ファイル名は「{デスクトップ}{ファイル名}.png」
  CWハンドルを処理用へ窓内側キャプチャ。
  処理用をファイル名へ画像保存。

*終了処理
  メッセージ送信(CWハンドル,カメラ切断,0,0)
  ウィンドウ破棄(CWハンドル)
#-----------------------------------------------------------

#-----API---------------------------------------------------
#https://msdn.microsoft.com/ja-jp/library/cc428606.aspx
●キャプチャーウィンドウ作成(lpszWindowName,dwStyle,x,y,nWidth,nHeight,hWnd,nID) =DLL("avicap32.dll",
"HWND capCreateCaptureWindowA(
LPCSTR lpszWindowName,  // ウィンドウ名
DWORD dwStyle,          // ウィンドウスタイル
int x,                  // X
int y,                  // Y
int nWidth,             // W
int nHeight,            // H
HWND hWnd,              // 親ウィンドウのハンドル
int nID                 // ウィンドウ識別子…ってなんすか;
)")

#https://msdn.microsoft.com/ja-jp/library/cc411022.aspx
●メッセージ送信(hWnd,Msg,wParam,lParam) =DLL("user32.dll",
"LRESULT SendMessageA(
HWND hWnd,      // 送信先ウィンドウのハンドル
UINT Msg,       // メッセージ
WPARAM wParam,  // メッセージの最初のパラメータ
LPARAM lParam   // メッセージの 2 番目のパラメータ
)")

#https://msdn.microsoft.com/ja-jp/library/cc410763.aspx
●ウィンドウ破棄(hWnd) =DLL("user32.dll",
"BOOL DestroyWindow(
HWND hWnd   // 破棄するウィンドウのハンドル
)")
#-----------------------------------------------------------

 しっかし、テストするたびに、ワタシの抜けた顔が画面に映るから、テンション下がるわ~(爆)

 鏡代わりに使うには、いささか画像が粗いしね~w

めだかめだか2017/01/29 00:28ありがとうございます。とてもうれしいです。

私が持ち出したことに、わざわざ貴重な時間を割いて頂き....雪乃さんに相談して、間違いではなかったと思っております。(初めからそうでしたが(笑

ですが、時間が無く、今すぐに詳しくすることができないのが、残念で残念で・・・

ですが、今、動作確認してみたところ無事に動きました・・・!お見事です!

私一人では到底無理だと思っていた今回の件ですが、雪乃さんのご尽力もあり、無事、解決できました!有り難うございます!


雪乃さんが組んで組んでくださいました、コードをしっかりと理解したのち、そちらのコードを元に、こちらで手を加えながら、自分が目指すものに近づけれるコードを組んでいきたいと思っています。

また、失礼ながら、雪乃さんにはこれからも、バシバシ質問をさせてもらいます・・・(笑

それでは、今回の件については、雪乃さんの活躍のみで一件落着ということにさせてもらいます。
本当に有り難うございました!



追記;おそらく、数時間後にはもう既に質問をさせてもらっていると思います...(笑
その時は、また宜しくお願いします。

雪乃☆雫雪乃☆雫2017/01/29 17:44 いえいえ~。お役に立てて良かった❤
 これはもう、たまたまおあつらえ向きのコードが載ってるトコを発見出来たのが良かったです♪
 是非、頑張って下さい~☆

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170127

2017/01/19 (木)

脳トレ?! 2

| 16:52 | 脳トレ?! 2 - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 脳トレ?! 2 - 雪乃☆雫のなでしこ日和 脳トレ?! 2 - 雪乃☆雫のなでしこ日和 のブックマークコメント

 年前に引いた風邪が、正月過ぎても一向に治らないよ!

 もう、かれこれ一月にもなろうってのに、どうしたことだ(´д`;

 部屋の湿度が、30%を切るとゆう危機的な状況が、やはりよろしくないのでしょうか・・・><

 んななか(?)ちびっこと、こんな脳トレ!(カードゲーム? カルタ??)

 単に、床に散らばした数字のカードを順番に取っていくだけw


 ちびさんならば、普通に数を追っていくだけでも知育になりそうですが、しかし、最近の園児は、30くらいはよゆーで数えられるのだね。ワタシなんかは、んなに賢く無かった気がするんだけど・・・

 それはさておき、大人は極力視野を広く取り、目を動かす幅を少なくして、早く解いていけるよう頑張りましょう。


 単に、ランダムに1~30までの数字を出すだけなんだけど、ただ乱数で取得した点に、数字を出していくと、結構数字が重なってしまい、よろしくありません。

 考えとしては、前に取得した点を中心に上下左右、表示する数字の幅と高さの分は、取得出来ないようにしていけば、いいんだろうけれど・・・

 床にカード散らばしたりするのはカンタンなのに、それをプログラムにやらそうとすると、なんかめちゃくちゃ頭使うよねー; むしろこっちが脳トレ;;

 効率の良い方法が、ひらめかない。相変わらず、基本的な部分で頭悪いよね(--;


 とりあえず、画面を6*5に30分割し、配列シャッフルで重複しないようランダムに、どの窓に表示するかを決定し、乱数の窓のランダムな位置に数字を描画するようにしてみた。

 これで、一応重なることはないし、一つところに偏らず、画面全体に数字が散ってる感じにもなるので、まあいっかー・・・

#-----------------------------------------------------------------------
# 数字選び
#-----------------------------------------------------------------------

#-----母艦設計----------------------------------------------------------
!母艦設計=「母艦の可視はオフ」

#---母艦----
母艦のタイトルは「数字選び」
母艦白色画面クリア母艦のスタイルは「枠固定」
母艦オフに最大化ボタン有効変更。
母艦のクライアント幅は800。母艦のクライアント高さは600。
母艦中央移動
#-----------------------------------------------------------------------

#-----宣言--------------------------------------------------------------
表示位置とは配列文字書体は「|32|太字」
文字幅=「あ」の文字幅取得
文字高=「あ」の文字高さ取得
#-----------------------------------------------------------------------

#-----メインルーチン----------------------------------------------------
母艦の可視はオン乱数初期化表示位置設定。
新規ゲーム。

*新規ゲーム
  表示位置を配列シャッフル。

#---問題作成----
  母艦白色画面クリア。
  30
    x=(母艦のクライアント幅/6-文字幅)の乱数。
    x=x+表示位置¥(回数-1),0
    y=(母艦のクライアント高/5-文字高)の乱数。
    y=y+表示位置¥(回数-1),1
    母艦のx,yへ回数文字表示。
#-----------------------------------------------------------------------

*表示位置設定
  30
    表示位置¥(回数-1),0=((回数-1)%6)*(母艦のクライアント幅/6)を切り下げ。
    表示位置¥(回数-1),1=((回数-1)/6を切り下げ)*(母艦のクライアント高/5)を切り下げ。
#-----------------------------------------------------------------------

 これのうち、マウスクリック答出来るようにする予定~。

 実際にカードを手で散らばしたみたいにするなら、数字に枠を付けて、ランダムで縦書きでやったように文字を傾けていくといいのかな?

 あと、数字を大きいのや小さいのやにも、したいんだよね。そうすると、むしろよくある脳トレ問題っぽくなるでしょう。

 文字サイズ乱数にすればいいだけなんだけど・・・マウスでクリック出来る範囲にも反映させなきゃなんだよね。

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170119

2017/01/03 (火)

なこみくじ

| 17:20 | なこみくじ - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - なこみくじ - 雪乃☆雫のなでしこ日和 なこみくじ - 雪乃☆雫のなでしこ日和 のブックマークコメント

 あけましておめでとうございます☆

 新年のご挨拶代わりに、おみくじでも引いていって下さい。

 たいしたヤツじゃありませんが、ちょこっと縦書きにしてみたり、こないだまでやってたAnimateWindowなど使って遊んでいます。

 いちおう乱数ではなく、「」から風水的な吉凶数を算出しています。

 ※吉凶数は二十年ごとに変動があるため、有効期限は2024年2月3日まで。

#なこみくじ
#-----------------------------------------------------------------------
!母艦設計=「母艦の可視はオフで吉凶数算出。1秒待つそれで御神籤表示。

*吉凶数算出(Sで)
 A=0
 Sの文字数
  BはSの回数から1文字抜き出し、整数変換。
  AにBを直接足す。
 もし、A>9ならば、Aで吉凶数算出。
 違えば戻る。

*御神籤表示(Aで)
 Aで条件分岐。
  1ならば、吉凶は「大吉」。神託は「健康運、金運、仕事運、すべて吉。{~}特に愛情運は吉。」。文字色赤色。
  2ならば、吉凶は「凶」。神託は「特に健康には注意。{~}暴飲暴食、無駄遣いは厳に慎むべし。」。文字色青色。
  3ならば、吉凶は「末吉」。神託は「争いを避け和を重んずれば吉。{~}関係の綻びは災厄の元。」。文字色水色。
  4ならば、吉凶は「吉」。神託は「試験、恋愛などは吉。{~}日頃のみ重ねが実を結びます。」。文字色紫色。
  5ならば、吉凶は「凶」。神託は「事故や病気、詐欺に注意。{~}思わぬ災厄に見舞われそう。」。文字色青色。
  6ならば、吉凶は「大吉」。神託は「健康運、金運、愛情運、すべて吉。{~}特に仕事運は吉。」。文字色赤色。
  7ならば、吉凶は「末吉」。神託は「口を慎み和を重んずれば吉。{~}喧嘩は事故や破財を招きます。」。文字色水色。
  8ならば、吉凶は「大吉」。神託は「健康運、仕事運、愛情運、すべて吉。{~}特に金運は吉。」。文字色赤色。
  9ならば、吉凶は「吉」。神託は「結婚、出産などは吉。{~}火の用心(色々な意味で!)」。文字色紫色。
  違えば、吉凶は「神」。神託は「大吉にして大凶。{~}運を使い果たさないように!」。文字色黄色。

 母艦について
   幅は150。高さは480。テキストは「なこみくじ」。スタイルは「枠固定」
 オフ母艦の最大化ボタン有効変更。オフ母艦の最小化ボタン有効変更。
 母艦を閉じた時は~母艦を「下から上」へ窓ロールアウト。
 母艦を$FFFFCCで画面クリア。
 文字書体は「MS 明朝|40|太字」。
 母艦の((母艦の幅)-(吉凶の文字幅取得))/2,10へ吉凶を文字描画。
 文字色黒色文字書体は「@MS 明朝|16|太字」。行=2。
 母艦の85,85へ神託を縦書文字描画。
 母艦中央移動母艦を「上から下」へ窓ロールイン。。
#-----------------------------------------------------------------------
●縦書文字描画({グループ=?}OBJのX,YへSを)
  YYは整数。YY=Y。
  処理用をイメージとして作成。処理用→可視はオフ。
  処理用→幅は「あ」の文字幅取得。
  処理用→高さは「あ」の文字高さ取得。
  もし、行<1ならば、行=1。
  もし、文字隔<1ならば、文字隔=1。

  (Sの文字数
    Sの回数から1文字抜き出す。
    文字はそれ。
    もしそれ=「{CHR(10)}」ならば、
      X=X-(「あ」の文字幅取得)*行。
      Y=YY。
      続ける。

    処理用を$FFFFCCで画面クリア。
    処理用の0,0へ文字を文字描画。
    処理用を画像右回転。
    処理用をOBJのX,Yへ画像コピー。

    Y=Y+(「あ」の文字高さ取得)*文字隔。
  VCL_FREE(処理用)
#-----------------------------------------------------------------------
# https://msdn.microsoft.com/ja-jp/library/cc430257.aspx
#-----------------------------------------------------------
●AniWin(hwnd,dwTime,dwFlags) =DLL("user32.dll",
"BOOL AnimateWindow(
  HWND hwnd,     // アニメーション化するウィンドウのハンドル
  DWORD dwTime,  // アニメーションの時
  DWORD dwFlags  // アニメーションの種類
)")
#-----------------------------------------------------------
●窓ロールイン({グループ=?}OBJを{整数=500}Timeで{文字列=「」}Aへ)
  窓アニメーション(OBJ,Time,A,オン,オフ)

●窓ロールアウト({グループ=?}OBJを{整数=500}Timeで{文字列=「」}Aへ)
  窓アニメーション(OBJ,Time,A,アウト,オフ)
#-----------------------------------------------------------
●窓アニメーション({グループ=?}OBJ,Time,A,OffOn,Slide)
  もし、(A=「左から右」)ならば、Flag=$1
  違えばもし、(A=「右から左」)ならば、Flag=$2
  違えばもし、(A=「上から下」)ならば、Flag=$4
  違えばもし、(A=「下から上」)ならば、Flag=$8
  違えばもし、(A=「中央」)ならば、Flag=$10
  違えばもし、(A=「左上から右下」)ならば、Flag=$1+4
  違えばもし、(A=「右上から左下」)ならば、Flag=$2+4
  違えばもし、(A=「左下から右上」)ならば、Flag=$1+$8
  違えばもし、(A=「右下から左上」)ならば、Flag=$2+$8
  違えば、Flag=$1
  もし、OffOn=オフならば、Flag=Flag+$10000
  違えば、Flag=Flag+$20000
  もし、Slide=オンならば、Flag=Flag+$40000

  ハンドルはOBJ→ハンドル。
  AniWin(ハンドル,Time,Flag)
  OBJ→可視はオン。
#-----------------------------------------------------------

めだかめだか2017/01/17 01:01突然ですが、コメントすみません。
初めまして。なでしこ歴2、3年の新人です・・・^^;
いつも参考にさせてもらっています!


さて、早々で悪いのですが、いくつかご教授をお願いしたいのですが・・・

・なでしこでノートPC搭載のカメラの映像を映す・キャプチャする。
・音声の認識(しゃべった言葉を文字に起こす、その他諸々)
・他言語同等の画像処理の速度(特に、ピクセル値の検出)(可能ならば、opencvの様な処理速度の実現)


以上の事について、ご教授を願いたいところです。

カメラの映像は、他のソフトで映した映像をキャプチャしながらの処理になるためかなりのタイムラグがでてしまいます。これを解決するためにも、できる限り、他のソフトには頼らずなでしこのみでの処理としたいのですが・・・

音声の認識はかなりの高いスキルと知識が必要になるため、半分諦めかけてます(笑)これは、当面の目標となりそうですが、ここらで一つアドバイスをと思い、質問させてもらいました。

画像処理などに関しては、以前作ろうとしていたプログラムの際に、技術不足と速度につまづき難航中です・・・
色々と試してはみましたが、やはりリアルタイムの処理となるとかなりの負荷がPCにもかかり、目的の作業自体ができない状態となったり、それを回避するにはやはり、プログラム事態の性能を落とすしかなく今に至ります・・・何かいい方法はありますでしょうか?

是非とも、ご教授の程をお願いいたします。

雪乃☆雫雪乃☆雫2017/01/17 22:58 めだかさん、はじめまして!
 コメントありがとうございます☆
 いつも参考に・・・だなんて、あわわわわ;;;

 でもでも、ワタシってば、そんな有能な人じゃないんですよ~(ToT)
 ぷろぐらむのコトも、こんぴゅーたぁのコトも、全く詳しくないのですぅ。
 お役に立てるようなことであれば、いかようにも立ちたいところなのですが・・・しくしくしく。

 だって、なにしろ、ノートPCのカメラの使い方がわからんもねー(爆)
(なでしこがどうこう以前の問題として、全く使ってみたコトない~。使い方も分からない~~・・・というようなレベルの人間なのよw)

 画像処理などについても、ほとんど知識の持ち合わせは無いのですが、なでしこは処理が遅いというような話は聞いたことあります。
 もっとも、他の言語をよく知らないから、自分ではあまり分からないし、そんなに速度を必要とするようなヤツは作ってないですからねー;

 どう考えても絶対に、めだかさんの方が、ワタシなんかよりも数段賢くて、すごそうな物を作られているように思います。
 なんかもう、ほんとスミマセン・・・
 でもでも、是非頑張ってください!!!

めだかめだか2017/01/21 17:49早々のお返事有難う御座います^^

いえいえw私なんか初歩の初歩が出来ていない様な、まだまだ素人です(笑


なでしこが、画像に対して弱いことを確認出来たので、自力でどうにかしてみますw
そこで、質問なのですが、なでしこでAPI・DLLを使う方法などはご存知でしょうか?宜しければ、そちらをご教授願いたいのですが...
もしかすると、そちらに解決のヒントがあるかもしれないです...!

雪乃☆雫雪乃☆雫2017/01/22 02:36 なでしこで、APIやDLLを使う方法は、ここに書かれています。
http://nadesi.com/doc/system/sys-1-DLL-WindowsAPI.htm

 ・・・でっ、コレ見て何か分かりますかねー?
 分かるのであれば、ワタシなどより、絶対的に賢いのです。
 ワタシは、全く分かりませんでした。今もなお、あんまりよく分かりません。人様が使えるようにしてくださったAPIを利用させてもらったことはあっても、長い間ずっと、APIなんてムリ~と思っていたのですが、急にひらめいていろいろやってみたのが、本当につい最近の出来事。
 ひらめいたからって、人に教えられるようなものではとうてい無く、直近のスクリーンセーバーからAnimateWindowまでの辺りのくだりが、リアルにぎりぎり精一杯といったところなのですよ。

 よければ、そこらへんの記事を読んでみてください。何かの参考になったりならなかったりするかもしれません。
 読む人のことを考えずに書き散らしいている上に、もともとの語学力も不足なので、書いてる意味がよくわからんとか、ここをもっと詳しく説明してくれいという質問になら、自分がやったことなので、たぶん、ある程度応じられますw

 あとは・・・
 具体的に、コレを動くようにしたいんだけどというようなことなら、解決するかしないかは別にして、一緒にうむむと悩んでみることも、可能かとは思うんですけれどね;

めだかめだか2017/01/25 02:55お返事有難う御座います。

そちらの記事は、既に読ませて頂いてます。頑張って理解をしたつもりです(笑

ですが、DLLとAPIの違いがあやふやなので、理解しようにも、理解が出来ていない状態です(T-T)
時間がなく、実際に組むことも出来ていない状態なので、なんとも言えないですが...


そうですねぇ...今やってみたいことは、なでしこ上で、カメラをうつすことですかね...
ですが、なでしこの命令にはカメラに関するものがなく、今回、API・DLLに頼ってみようかと思いました。(最悪、外部ソフトのキャプチャ画像をキャプチャするつもりです。

後は、自分なりに調べてはみましたが、どうやらJavaとHTML5(のはず)で動かすのが主流らしく、それ以外の方法となると、少し難しくなってしまう感じがしました・・・


最終的な目標としましては、プログラムの起動→カメラの起動→キャプチャを行う をとりあえずは完成させてはみたいなとは思っています。


なでしこユーザーが少なく、なでしこでカメラの接続を試みた方々はおまりおらず、ネットにも情報があまりありませんし、周りにもやっている人がおらず、1人の限界とは言いませんが、ある程度の苦しさを痛感していたところです...TT
なので、もし、ご一緒に考えてもらえれるのであれば、大歓迎です!ぜひとも、宜しくお願いします!

雪乃☆雫雪乃☆雫2017/01/26 08:34うぅんと、ワタシもあんまりよく分かりませんがWindowsAPIってのはようするに、user32.dllとかkernel32.dllとかとかの中の関数を使うって事で、おんなじ事なんじゃないんですかねー?(@_@)

取りあえず、ワタシのノートパソコンにもカメラのレンズらしきモノがついてるんだけど、使えるのかどうかもよく分からんって言うねヽ(;´Д`)ノ

でも、なんか、ここは参考にならないかな?
http://magayengineer.hatenablog.com/entry/2016/06/13/224309
ああ、見てるだけでお熱が出そう・・・(+_+)
だけど、capCreateCaptureWindowで作ったウィンドウハンドルに、SendMessageでなんか色々送る的なこったろうと思うんだよね。

もし、なんかひらめいたら、発表します~。
でも、あんま、期待しないで((((^^;

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170103

2016/12/26 (月)

フォント名、フォントサイズ、フォントスタイルを一括で指定するよ!

| 07:50 | フォント名、フォントサイズ、フォントスタイルを一括で指定するよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - フォント名、フォントサイズ、フォントスタイルを一括で指定するよ! - 雪乃☆雫のなでしこ日和 フォント名、フォントサイズ、フォントスタイルを一括で指定するよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 通常時は、人様のお役に立つことなんか一切考えずに、ムシロ人様のめーわくも省みずに一人で勝手にバカバカしく大騒ぎを繰り広げ、それを書き散らしているわけですが・・・

 たまには、少しは世の人のためになるかもしないよーなTipsなどを書いてみようと思う。


 以前、「文字書体」命令で、フォントスタイルの指定も出来る事を知ったときには、世紀の大発見をしたような気になったもんでした;

https://nadesiko.g.hatena.ne.jp/snowdrops89/20090524/1243170894

 当時の記事は読み返すと、バカだな自分;;;って感じですが(んなに変わってない!)


 しかし、この機能は、もなお、あんまり周知されてないみたいなんですよね。

 なにしろ、マニュアルの命令一覧なんかを見ても、用例どころか、フォント名の事しか書かれてないんです。なんでだ。


 「文字書体」は、実はフォント名だけではなく、「|」で区切って、

文字書体は「フォント名|フォントサイズ|フォントスタイル」

 のように、三ついっぺんに設定できるんですよね~。

 ワタシのプログラムコードの中では多用してるんだけど、これは広めていきたい便利機能なので、単独の記事としてUPしてみるるる~。

 こんな感じ。

文字書体は「MS 明朝|20|太字」
「いろはにほへと」を表示

 カンタンですね♪

・フォント名は一応省略可能で、省略すれば、それまでのフォント名が引き継がれます。

・フォントサイズは、「文字サイズ」命令と同様の機能ですが、ここを変更しても、「文字サイズ」の値は変わらないので、もし文字サイズの値を参照してなんかかんかしようとしてる場合は注意が必要です。

 ここの値だけは、省略すると何故かそれまでのサイズが引き継がれず、標準(10)に戻ってしまうのも要注意です。

 さらに、この形式で文字書体を設定した場合、たとえここを省略しても、以降の「文字サイズ」命令が無視されてしまいます。(りゃー、これでいっぺんに設定出来るんだから、もはや文字サイズ命令はいないくらいなもんだけど、これってやっぱりバグと言って過言じゃないんじゃないかと思う今日この頃; でも、マニュアルに記載されてない機能だから、考慮されてないのかな?

※うぇいく様に教えを頂き、これは、フォントを実際に使うときに値を参照し設定するようになっているためである事が分かりました(コメント欄参照)

 いや~、マニュアルにの辺りの優先順位などの記載があれば、いうモノと思って使うので問題なかったのですが・・・最初に文字書体で全部設定した後、後の方で文字サイズだけ変えようと思ったら反映されなくて延々はまった事が!><

 基本的には、「文字書体」でスタイルやサイズの指定を行う場合は、「文字サイズ」は使わない方が良いようです。

・フォントスタイルに設定できるのは、「太字」「斜体」「下」「打消」の4種類で、「太字斜体」みたいに複数指定できます。(ワタシは続けて書いていましたが、この単語が入ってさえいればOKで、どんな区切り文字も使えるそうです!)

 省略するとそれまでのスタイルが引き継がれます。

 上記四種類の単語がいっこも入ってない文字列は全て、標準に戻るようなんですが、意図的に戻す場合はやっぱり無難に「標準」とでもしておくのがイイと思います。(では省略扱いになり、それまでのスタイルが引き継がれるので、標準に戻りません)


 ・・・とりあえず、こんなところ?

うぇいくうぇいく2016/12/28 01:33これは、「文字なんとか」に値を設定した時ではなく、それを使おうとしたときにそれぞれの変数の内容を参照して使うフォントを決定しているためで、「変数を設定した順序」によらず、値の組み合わせが同じならば、同じ結果になるというメリット(動作の明確さ)もあります。
その、実際にフォントを参照するときの処理順序は、以下です。
・文字書体のフォント名
・文字サイズのサイズ
・文字書体のサイズ(欄があれば。空欄は10)
・文字書体のスタイル(欄があれば。)
そうしないと、サイズは常に文字サイズの設定で上書きされてしまい、フォント名へのサイズ指定が有効にならないので、難しいところですね。
(文字スタイルの変数が無いのはなぜなんだろう)

スタイルについては、欄がある場合、標準の状態を基準に、それぞれの単語が含まれていたら、含まれている単語の属性を付加して組み合わせてゆく という動作をするため、どの単語もない=基準の標準のまま という感じになります。

雪乃☆雫雪乃☆雫2017/01/03 16:36あけましておめでとうございます。
いつもありがとううございます☆
なるほど~、使うときに参照しているから、順番は関係なかったんですね(.. )ψメモメモ
なんでこんなことがおこるのか、ようく分かりました!
この情報も広めていきたいですね!!

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20161226

2016/12/11 (日)

フェードアウトも出来たっぽい~

| 19:07 | フェードアウトも出来たっぽい~ - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - フェードアウトも出来たっぽい~ - 雪乃☆雫のなでしこ日和 フェードアウトも出来たっぽい~ - 雪乃☆雫のなでしこ日和 のブックマークコメント

 うぇいくさまに教えを頂き、取りあえずここをのぞいてみたところ・・・

https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms632669(v=vs.85).aspx

 なんてこった。どこで調べたらいいか分からんと言っていた、オプションの値の数値が、ふつーにちゃんと書いてあるじゃん!

 して、ぐーぐる翻訳さまの力を借りて内容を確認してみると・・・

値の意味

AW_ACTIVATE
0x00020000
ウィンドウをアクティブにします。 AW_HIDEでこの値を使用しないでください。

AW_BLEND
0x00080000
フェード効果を使用します。このフラグは、hwndがトップレベルのウィンドウである場合にのみ使用できます。

AW_CENTER
0x00000010
AW_HIDEが使用されている場合はウィンドウを内側に折りたたんで表示し、AW_HIDEを使用しない場合は外側に展開するようにします。さまざまな方向フラグは効果がありません。

AW_HIDE
0x00010000
ウィンドウを隠す。デフォルトでは、ウィンドウが表示されます。

AW_HOR_POSITIVE
0x00000001
ウィンドウを左から右にアニメーション表示します。このフラグは、ロールアニメーションまたはスライドアニメーションで使用できます。 AW_CENTERまたはAW_BLENDとともに使用すると無視されます。

AW_HOR_NEGATIVE
0x00000002
ウィンドウを右から左にアニメーション表示します。このフラグは、ロールアニメーションまたはスライドアニメーションで使用できます。 AW_CENTERまたはAW_BLENDとともに使用すると無視されます。

AW_SLIDE
0x00040000
スライドアニメーションを使用します。デフォルトでは、ロールアニメーションが使用されます。このフラグは、AW_CENTERとともに使用する場合は無視されます。

AW_VER_POSITIVE
0x00000004
ウィンドウを上から下にアニメーション表示します。このフラグは、ロールアニメーションまたはスライドアニメーションで使用できます。 AW_CENTERまたはAW_BLENDとともに使用すると無視されます。

AW_VER_NEGATIVE
0x00000008
ウィンドウを下から上にアニメーション表示します。このフラグは、ロールアニメーションまたはスライドアニメーションで使用できます。 AW_CENTERまたはAW_BLENDとともに使用すると無視されます。

 こんな感じ。

 あれれ~? AW_BLENDの所、別にAW_HIDE フラグと同時にセットするなとは書いてない~。

 して、代わりに「hwndがトップレベルのウィンドウである場合にのみ使用できます」と書いてるるる。要するに、親ウィンドウにしか使えない的な?

 ってことは、フェードが使えるのはメインのフォームのみで、ボタンなどには使えなさそう

 試してみると、確かに、ボタンのロールイン、スライドインは出来ましたが、フェードインは利かず、パッと現れます。

 んなコト日本語のページには書いてなかったよ!

 ……というわけで、やっぱりこっちの情報が正しそう

 それなら!というわけで、恐る恐る窓フェードアウトも作ってみた。(やるなと言われたら、素直にやらない、ビビリなのです;)

 ちなみに前の窓フェードインは、アクティブにするのを忘れていたので、オプションを追加した。

#-----------------------------------------------------------
●窓フェードイン({グループ=?}OBJを{整数=500}Timeで)
  ハンドルはOBJ→ハンドル。
  AniWin(ハンドル,Time,$80000+$20000)
  OBJ→可視はオン。

●窓フェードアウト({グループ=?}OBJを{整数=500}Timeで)
  ハンドルはOBJ→ハンドル。
  AniWin(ハンドル,Time,$80000+$10000)
  OBJ→可視はオフ。
#-----------------------------------------------------------
●窓アニメーション({グループ=?}OBJ,Time,A,OffOn,Slide)
  もし、(A=「左から右」)ならば、Flag=$1
  違えばもし、(A=「右から左」)ならば、Flag=$2
  違えばもし、(A=「上から下」)ならば、Flag=$4
  違えばもし、(A=「下から上」)ならば、Flag=$8
  違えばもし、(A=「中央」)ならば、Flag=$10
  違えばもし、(A=「左上から右下」)ならば、Flag=$1+4
  違えばもし、(A=「右上から左下」)ならば、Flag=$2+4
  違えばもし、(A=「左下から右上」)ならば、Flag=$1+$8
  違えばもし、(A=「右下から左上」)ならば、Flag=$2+$8
  違えば、Flag=$1
  もし、OffOn=オフならば、Flag=Flag+$10000
  違えば、Flag=Flag+$20000
  もし、Slide=オンならば、Flag=Flag+$40000

  ハンドルはOBJ→ハンドル。
  AniWin(ハンドル,Time,Flag)
  OBJ→可視はオン。
#-----------------------------------------------------------
●AniWin(hwnd,dwTime,dwFlags) =DLL("user32.dll",
"BOOL AnimateWindow(
  HWND hwnd,     // アニメーション化するウィンドウのハンドル
  DWORD dwTime,  // アニメーションの時
  DWORD dwFlags  // アニメーションの種類
)")
#-----------------------------------------------------------
#以下はテスト
!母艦設計=『母艦の可視はオフ』

0.5秒待つ
文字サイズは25

母艦白色画面クリア基本Xは10。基本Yは10。
『フェードイン・アウトの実験』と表示母艦を1000で窓フェードイン。
2秒待つ母艦を1000で窓フェードアウト。
2秒待つ終わる。
#-----------------------------------------------------------

 とりあえず、できた~♪

 ・・・のですが、母艦ボタンなどの部品が乗ってた場合、ボタンなどはフェードせず、母艦表示されてからパッと出てくるみたい。(フェードアウトの時は、母艦と一緒にじわじわ消えてく)

 これはおらく仕様で、しょうが無いんだろうと思う。

 それはまあいいんだけど、母艦を(どの方法ででも)アウトした後、再びフェードインすると、ボタンが消えたまま出てこないんだよね~。(ロールやスライドでは無問題)

 なんでだ;

chocochoco2016/12/11 22:13WindowsAPIを調べるのは大変ですが、ぜひ頑張ってください。
私も今、Windows終了時に更新プログラムを入れて終了させる所で唸ってます(

気が付いたら、もうクリスマスがあって、新年ですねぇ。
来年もよろしくお願いします!

雪乃☆雫雪乃☆雫2016/12/12 17:30choco さま、コメントありがとうございます☆
なんかもう一年があっという間ですね~><
しかし、今年は、みなさまのお影で急に賢くなった一年でした♪
来年もよろしくお願いします~!!

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20161211

2016/12/09 (金)

WindowsAPI・・・!!

| 14:36 | WindowsAPI・・・!! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - WindowsAPI・・・!! - 雪乃☆雫のなでしこ日和 WindowsAPI・・・!! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 ちょこっと現実逃避のつもりで、軽いノリで着手したスクリーンセーバーでしたが、WindowsAPIを使ってなんだかんだしなきゃないいう、予想外に手強いシロモノでした;

 しかも、久々に熱中して毎日更新して、なんか疲れた(^▽^;

 がっ、の結果、WindowsAPIなんてムリ~・・・っと思っていたワタシですが、色々とひらめいてきましたよ~!

 だいぶ、賢くなったんじゃないですか?

 必要は、ひらめきの母!!(なんか違;)

 とっ、とにかく、なんか自分で出来そうな気がしてきた!


 ・・・さて、んな中、発見したのがAnimateWindowって関数

 これは、文字通りウィンドウをアニメーション効果付きで出したり消したり出来るというヤツです。

 なにかの役に立つのかといえばそうでも無いケド、見た目ちょっと面白いとゆう、バカバカしいモノが大好きなワタシに最適じゃないですか?w

 こーいった無駄な小技を利かせると、ゲームっぽさがUPするのですよ~♪

 ちょっとこれを、使えるようにしてみたいと思います。

 っていうか、エディタの左っかわの行動タブの中に、WindowsAPI利用支援とゆうのがあって、MSDNからコピペしただけで、なでしこで使える関数に変換してくれるのですよ。すばらしい☆

 ってわけで、こんだけ。

●AniWin(hwnd,dwTime,dwFlags) =DLL("user32.dll",
"BOOL AnimateWindow(
  HWND hwnd,     // アニメーション化するウィンドウのハンドル
  DWORD dwTime,  // アニメーションの時
  DWORD dwFlags  // アニメーションの種類
)")

 しか~し、本当の問題は、パラメーターの意味やらオプションの意味やら、日本語で書いてあってさえ読解不能な頭の悪さを誇るワタシなのです(ーー;

 でもまあ、これはパラメーターも3つだけだし、んなにややこやしくはないですね。

 して次なる問題は、オプションの値の実際の数値がよく分からんってコト。

 BitBltのらすたおぺれーしょん(?)とか、ShowWindowの表示状態とかもね。

 いったい何で調べるのが正解なんだろう;;;


 とりあえず実験したり、検索しまくったりした結果、アニメーションの種類はこういうことになっています。

 順番通りじゃ無いってのがまたなんともヤな感じ~w

AW_SLIDE       =$40000  #スライドアニメーションを使う。規定値はロールアニメーション。
AW_ACTIVATE    =$20000  #ウィンドウをアクティブにする。※AW_HIDEと同時不可
AW_BLEND       =$80000  #フェードイン。※AW_HIDEと同時不可
AW_HIDE        =$10000  #ウィンドウを隠す。※AW_ACTIVATEとAW_BLENDは同時不可。
AW_CENTER      =$00010  #中心から広がる。AW_HIDEの時は中心へ向けて折り畳む。
AW_HOR_POSITIVE=$00001  #左から右。
AW_HOR_NEGATIVE=$00002  #右から左。
AW_VER_POSITIVE=$00004  #上から下。
AW_VER_NEGATIVE=$00008  #下から上。

 AW_BLENDがAW_HIDEと同時にセット不可ってことは、フェードインは出来てもフェードアウトはできんとゆうことなのかね? なんでだ。


 さて、賢い方々なら、あとはこんな感じ・・・

#AnimateWindowの実験
#-----------------------------------------------------------
!母艦設計=『母艦の可視はオフ文字サイズは30
「AnimateWindowの実験」と表示。

AniWin(母艦ハンドル,500,$1)
2秒待つ。
AniWin(母艦ハンドル,200,$10001)
終わる。
#-----------------------------------------------------------
●AniWin(hwnd,dwTime,dwFlags) =DLL("user32.dll",
"BOOL AnimateWindow(
  HWND hwnd,     // アニメーション化するウィンドウのハンドル
  DWORD dwTime,  // アニメーションの時
  DWORD dwFlags  // アニメーションの種類
)")
#-----------------------------------------------------------

 ・・・でふつーに使っていけるのでしょうが、何しろワタシは、なでしこ的にラクに書けないとダメな人だから!


 とゆうわけで、ムダに行数使いまくって、こんなふうにしてみた。

#窓アニメーション
#-----------------------------------------------------------
# AnimateWindow
# ウィンドウを表示したり隠したりするとき、アニメーションを使った特殊効果を出すことができます。
# アニメーションには、ロール(巻き取り)アニメーションとスライドアニメーションの 2 種類があります。
# https://msdn.microsoft.com/ja-jp/library/cc430257.aspx
#-----------------------------------------------------------
# Aは(左から右|右から左|上から下|下から上|左上から右下|右上から左下|左下から右上|右下から左上|中央)
#-----------------------------------------------------------
●窓ロールイン({グループ=?}OBJを{整数=500}Timeで{文字列=「」}Aへ)
  窓アニメーション(OBJ,Time,A,オン,オフ)

●窓ロールアウト({グループ=?}OBJを{整数=500}Timeで{文字列=「」}Aへ)
  窓アニメーション(OBJ,Time,A,アウト,オフ)

●窓スライドイン({グループ=?}OBJを{整数=500}Timeで{文字列=「」}Aへ)
  窓アニメーション(OBJ,Time,A,オン,オン)

●窓スライドアウト({グループ=?}OBJを{整数=500}Timeで{文字列=「」}Aへ)
  窓アニメーション(OBJ,Time,A,アウト,オン)

●窓フェードイン({グループ=?}OBJを{整数=500}Timeで)
  ハンドルはOBJ→ハンドル。
  AniWin(ハンドル,Time,$80000)
  OBJ→可視はオン。
#-----------------------------------------------------------
●窓アニメーション({グループ=?}OBJ,Time,A,OffOn,Slide)
  もし、(A=「左から右」)ならば、Flag=$1
  違えばもし、(A=「右から左」)ならば、Flag=$2
  違えばもし、(A=「上から下」)ならば、Flag=$4
  違えばもし、(A=「下から上」)ならば、Flag=$8
  違えばもし、(A=「中央」)ならば、Flag=$10
  違えばもし、(A=「左上から右下」)ならば、Flag=$1+4
  違えばもし、(A=「右上から左下」)ならば、Flag=$2+4
  違えばもし、(A=「左下から右上」)ならば、Flag=$1+$8
  違えばもし、(A=「右下から左上」)ならば、Flag=$2+$8
  違えば、Flag=$1
  もし、OffOn=オフならば、Flag=Flag+$10000
  違えば、Flag=Flag+$20000
  もし、Slide=オンならば、Flag=Flag+$40000

  ハンドルはOBJ→ハンドル。
  AniWin(ハンドル,Time,Flag)
  OBJ→可視はオン。
#-----------------------------------------------------------
●AniWin(hwnd,dwTime,dwFlags) =DLL("user32.dll",
"BOOL AnimateWindow(
  HWND hwnd,     // アニメーション化するウィンドウのハンドル
  DWORD dwTime,  // アニメーションの時
  DWORD dwFlags  // アニメーションの種類
)")
#-----------------------------------------------------------
#以下はテスト

!母艦設計=『母艦の可視はオフ文字サイズは25

母艦白色画面クリア基本Xは10。基本Yは10。
『「右から左」へ窓ロールイン。
「右から左」へ窓ロールアウト。』と表示母艦を「右から左」へ窓ロールイン。
2秒待つ母艦を「右から左」へ窓ロールアウト。
2秒待つ母艦白色画面クリア基本Xは10。基本Yは10。
『「上から下」へ窓ロールイン。
「下から上」へ窓ロールアウト。』と表示母艦を「上から下」へ窓ロールイン。
2秒待つ母艦を「下から上」へ窓ロールアウト。
2秒待つ母艦白色画面クリア基本Xは10。基本Yは10。
『「左上から右下」へ窓ロールイン。
「右下から左上」へ窓ロールアウト。』と表示母艦を「左上から右下」へ窓ロールイン
2秒待つ母艦を「右下から左上」へ窓ロールアウト
2秒待つ母艦白色画面クリア基本Xは10。基本Yは10。
『「左から右」へ窓スライドイン。
「左から右」へ窓スライドアウト。』と表示母艦を「左から右」へ窓スライドイン。
2秒待つ母艦を「左から右」へ窓スライドアウト。
2秒待つ母艦白色画面クリア基本Xは10。基本Yは10。
『「中央」へ窓ロールイン。
「中央」へ窓ロールアウト。』と表示母艦を「中央」へ窓ロールイン。
2秒待つ母艦を「中央」へ窓ロールアウト。
終わる。
#-----------------------------------------------------------

 これは、母艦フォームだけじゃ無く、ボタンとか、ウィンドウハンドルを持つヤツにはみんな使えるっぽいです(ボタンしか試してないけど;)

 色々と、面白いコトができそうな予感?

うぇいくうぇいく2016/12/09 23:23msdnでの、AnimateWindowのapiの説明、日本語と英語で結構食い違っている気がします。
どうも、普通に検索すると、異なるバージョンのページにたどり着くようです。
当方がたどり着いた日本語のページでコンテンツを上位にたどるとWindows2000相当のページでした。英語の方は最新っぽい感じです。
なので、1度、英語のページで制限やエラーとなる条件を確認してみてください。
フラグの種類は一緒(9種)でした。

雪乃☆雫雪乃☆雫2016/12/11 00:47うぇいくさま、いつもありがとうございます☆
なななんと、そんなことが・・・
またまた英語ですね~(*_*)
やはり、英語からは逃れられないんですかね~(/ω\)
まいくろそふとさまが日本の企業で無い以上、致し方ないのでしょうね。
またちょっと、がんばってみます~!

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20161209

2016/11/27 (日)

いちおう完成~♪

| 18:07 | いちおう完成~♪ - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - いちおう完成~♪ - 雪乃☆雫のなでしこ日和 いちおう完成~♪ - 雪乃☆雫のなでしこ日和 のブックマークコメント

 おかげさまで、結構ちゃんとスクリーンセーバーらしく出来ました☆

 プレビュー画面は、特に動かす必要は無かったんだけど、折角だからちょこっとだけ動くようにしてみました。

 で、とりあえず、こんな感じ~。

#-----------------------------------------------------------------------
# プログラミング講座?.nako
#-----------------------------------------------------------------------

#-----母艦--------------------------------------------------
!母艦設計=「母艦の可視はオフ母艦のタイトルは「ぷろぐらみんぐ講座?」
母艦のクライアント幅はデスクトップW母艦のクライアント高さはデスクトップH母艦のスタイルは「枠なし」
母艦の位置は「0,0」
母艦デスクトップ色画面クリア。
#------------------------------------------------------------

#-----宣言--------------------------------------------------
# INI
設定ファイル名とは文字列=「{母艦パス}ぷろぐらみんぐ講座?.ini」

# 設定
ナデシコパスとは文字列=「{PROGRAMFILESパス}nadesiko_lang\」  #なでしこのインストールフォルダ
科白表示隔とは整数=5
シナリオ隔とは整数=科白表示隔。
設定読み込み。

# 色指定
透明色とは整数=$00FF00。肌色とは整数=$FFDDCC。帽子とは整数=$EECC77。ネクタイとは整数=$FF6666。眼鏡とは整数=$CCDDEE。
うさぎとは整数=$EEBBCC。青服とは整数=$77BBBB。赤服とは整数=$EE7777。黄服とは整数=$EEDD77。橙服とは整数=$FF9966。緑服とは整数=$66CC99。

キャラ設定とは配列
キャラ設定=「{ナデシコパス}doc\kouza\sensei.gif,0/0/{透明色},0/80/{透明色},89/0/{透明色},89/80/{透明色},75/85/{透明色},50/25/{肌色},60/50/{肌色},60/80/{青服},40/35/{眼鏡},70/35/{眼鏡}
{ナデシコパス}doc\kouza\seito.gif,0/0/{透明色},80/80/{透明色},50/40/{肌色},50/80/{赤服}
{ナデシコパス}doc\kouza\game\usagi.gif,0/0/{透明色},45/45/{肌色},45/80/{うさぎ},50/30/{うさぎ},15/20/{うさぎ},80/20/{うさぎ}
{ナデシコパス}doc\kouza\game\ufo.gif,0/0/{透明色},50/40/{肌色},50/80/{黄服}
{ナデシコパス}doc\kouza\stereotype\jousi.gif,0/0/{透明色},89/0/{透明色},10/30/{肌色},40/30/{肌色},77/32/{肌色},40/65/{ネクタイ},40/80/{ネクタイ},30/80/{青服},50/80/{青服}
{ナデシコパス}doc\kouza\stereotype\buka.gif,0/0/{透明色},50/40/{肌色},50/80/{橙服}
{ナデシコパス}doc\kouza\gui\toolman.gif,0/0/{透明色},50/20/{帽子},50/40/{肌色},50/80/{緑服}」をCSV取得。

# 検索項目
追加検索項目とは配列=「class="code"{~}class="menuG"{~}.gif"{~}.png"」
キャラ名とは配列。
キャラ設定で反復。
 キャラ名に(それ¥0のファイル列挙し、「.」まで切り取ったもの)を配列追加追加検索項目で反復
  キャラ名にそれ配列追加。

# シナリオ
マニュアルとは配列=「{ナデシコパス}doc\kouza\*.htm」の全ファイル列挙。
シナリオとは配列。シナリオ行数とは整数。
HTMLとは配列。HTML行数とは整数。
Dとは整数。

# マスコット
キャラNoとは整数。
mxとは整数デスクトップW/2-115。
myとは整数デスクトップH/2-100。

# 吹き出し
吹出方向とは文字列。
fxとは整数。fyとは整数。
minWとは整数=150。minHとは整数=100。   #吹出し最小幅と高さ。
cxとは整数。cyとは整数。
#-----------------------------------------------------------

#-----GUI------------------------------------------------
#---コンフィグ画面用-----
ラベル1とはラベルの可視はオフ。
Eとはエディタの可視はオフフォルダ選択ボタンとはボタンの可視はオフラベル2とはラベルの可視はオフ。
Bとはバーの可視はオフバージョンボタンとはボタンの可視はオフ。
OKボタンとはボタンの可視はオフキャンセルボタンとはボタンの可視はオフラベル3とはラベルの可視はオフ。

#---マスコット作成-----
処理用とはイメージの可視はオフ。
*キャラ作成
  キャラ設定を反復
    Cとは整数。C=回数-1
    処理用の画像はそれ¥0
    処理用を32に画像ビット数変更。
    線色は透明色。
    もし、キャラ名\C=「jousi」ならば、
      処理用の18,89へ透明色を点描画。   #上司のみ
    違えばもし、キャラ名\C=「buka」ならば、
      処理用の32,87から58,87へ。    #部下のみ
    対象反復。
      色指定とは配列。色指定=それを「/」で区切ったもの。
      x=色指定\0。y=色指定\1。指定色=色指定\2
      処理用のx,yを指定色で塗る。
    マスコット[C]をフォームとして作成。
    マスコット[C]→スタイルは「枠なし」。
    マスコット[C]→画像は「処理用」。
    マスコット[C]→画像通り変形。
    マスコット[C]→ポケットは指定色。  #ふきだしの色になる。
    マスコット[C]→ドラッグ移動オフ。
    マスコット[C]→タイトルは「マスコット{C}」  #最前面にするのに必要。
    マスコット[C]→ダブルクリックした時は~終了。

  #---吹き出し作成-----
  2
    C=回数-1
    吹出[C]をフォームとして作成。
    吹出[C]→ドラッグ移動オフ
    吹出[C]→タイトルは「吹出{C}」。
  
  #---コード表示用-----
  コードをフォームとして作成。
  コードのスタイルは「枠なし」。
  コードのタイトルは「コード」。
  コードのドラッグ移動オフ。
#-----------------------------------------------------------

//設定画面開く
//メイン
#-----メイン------------------------------------------------
*メイン
  キャラ作成
  母艦最前面。
  母艦の可視はオン。
  乱数初期化。
  メインループ。

*メインループ
  ファイル名はマニュアル¥(マニュアルの要素数乱数)
  シナリオ作成。
  マスコット表示
  シナリオ解析
  (シナリオ隔*10)
    0.1秒待つ。
  メインループ。
#-----------------------------------------------------------

#-----シナリオ作成------------------------------------------
#マニュアルのHTMLから無理矢理系で科白を取得。
*シナリオ作成
  シナリオ=。D=0。
  HTMLにファイル名を開く。HTML=HTMLの「,」を「/;/」へ置換。
  HTMLからキャラ名の画像検索。
  シナリオの要素数
    シナリオ行数=(回数-1)-D。
    もし、シナリオ¥シナリオ行数,0=「code」ならば、
      HTML行数=シナリオ\シナリオ行数,1。
    違えば、
      HTML行数=(シナリオ\シナリオ行数,1)+1。
    シナリオ\シナリオ行数,1=。
    HTMLのHTML行数から科白抜き出し。
#-----------------------------------------------------------
*画像検索({参照渡し 配列=?}HTMLからキャラの)
  C1とは整数。C2とは整数。C3とは整数。C3=0
  HTML要素数
    C1=回数-1
    キャラで反復。
      C2=回数-1。
      HTML\C1で0から対象文字検索。
      もしそれが0でなければ、
        もし対象=「class="code"」ならば、シナリオ\C3,0=「code」。
        違えばもし対象=「class="menuG"」ならば、
          シナリオ\C3,0=「code」。HTML\(C1-1)に「」を追加。
        違えばもし対象=「.gif"」または対象=「.png"」でなければ、
          シナリオ\C3,0=C2。HTML\C1=HTML\C1の「.gif」を「」に置換。
        違えば、シナリオ\C3,0=「@」。
        シナリオ\C3,1=C1。   #HTML行数。
        C3=C3+1。

*科白抜き出し({参照渡し 配列=?}HTMLの{参照渡し 整数=?}行数から)
  一時とは文字列。一時=HTML\(行数)を空白除去。
  一時をシナリオ\シナリオ行数,1に追加。
  シナリオ\シナリオ行数,1=シナリオ\シナリオ行数,1の「
」を『/~/』へ置換。   もし、シナリオ\シナリオ行数,0=「code」でなければ、  # キャラ画像の横にコードがある場合     一時で0から「class="code"」を文字検索。     もしそれが0でなければ、シナリオのシナリオ行数配列削除。D=D+1。戻る。   一時で0から「/TD」を文字検索。   もしそれが0でなければ、     シナリオ\シナリオ行数,1=シナリオ\シナリオ行数,1のタグ削除。     もし、(それ=「上司」)または(それ=「部下」)または、   # キャラ画像の下に名前がある場合     (それ=「実行ボタン」)または(それ=「実行結果」)ならば、       シナリオ\シナリオ行数,1は。       HTML行数=HTML行数+1。       HTMLの(HTML行数)から科白抜き出し。戻る。   一時で0から「/TR」を文字検索。   もしそれが0でなければ、     シナリオ\シナリオ行数,1=シナリオ\シナリオ行数,1のタグ削除。       もし、(それ)または(それ=「/~/」)ならば、         シナリオのシナリオ行数配列削除。D=D+1。戻る。  #科白が無い場合   違えば、     HTML行数=HTML行数+1。     HTMLの(HTML行数)から科白抜き出し。 #----------------------------------------------------------- #-----マスコット表示---------------------------------------- *マスコット表示   シナリオの要素数     C=(回数-1)     もし、(シナリオ\C,0=「@」)または(シナリオ\C,0=「code」)でなければ、       キャラNo=シナリオ\C,0。抜ける。   マスコット[キャラNo]→位置は「{mx},{my+(100-自身→高さ)}」   もし、キャラNo=6でなければ、マスコット[キャラNo+1]→位置は「{mx+130},{my+(100-自身→高さ)}」   マスコット浮上。 *マスコット浮上   マスコット[キャラNo]→可視はオン。   「マスコット{キャラNo}」を窓最前面。   もし、キャラNo=6でなければ、     マスコット[キャラNo+1]→可視はオン。     「マスコット{キャラNo+1}」を窓最前面。 #----------------------------------------------------------- #-----科白表示---------------------------------------------- *シナリオ解析   Cとは整数。C=0。科白=   シナリオで反復     Noは対象¥0     科白は対象¥1の「/;/」を「,」へ置換したもの。     科白は科白を「/~/」で区切ったもの。     もし、No=「code」ならば、       科白は100で行揃え。       コード表示。吹出[0]→可視はオフ。吹出[1]→可視はオフ。     違えばもし、No%2=0ならば、       吹出方向=「左上」。塗り色=マスコット[No]→ポケット       科白は科白を46で行揃え。       0の吹出表示。吹出[1]→可視はオフ。コードの可視はオフ。     違えばもし、No%2=1ならば、       吹出方向=「右上」。塗り色=マスコット[No]→ポケット       科白は科白を46で行揃え。       1の吹出表示。吹出[0]→可視はオフ。コードの可視はオフ。     違えば、       吹出方向=「左上」。塗り色=マスコット[No]→ポケット       科白は科白を46で行揃え。       0の吹出表示。吹出[1]→可視はオフ。コードの可視はオフ。     科白=。C=C+1。     (科白表示隔*10)       0.1秒待つ。   マスコット[キャラNo]→可視はオフ。コードの可視はオフ。   吹出[0]→可視はオフ。吹出[1]→可視はオフ。   もし、キャラNo=6でなければ、マスコット[キャラNo+1]→可視はオフ。 #----------------------------------------------------------- #-----吹き出し---------------------------------------------- *吹出表示({整数}Noの)   吹出[No]に科白を吹出方向へminW,minHで吹出セリフ表示。   もし、No=0ならば、     fx=mx-吹出[No]→クライアント幅。     fy=my-吹出[No]→クライアント高さ。   違えば、     fx=mx+230     fy=my-吹出[No]→クライアント高さ。   もし、fy<0ならば、      # 吹き出しの上端がデスクトップからあふれる場合     もし、吹出方向=「左上」ならば、吹出方向=「左」。fx=fx-50     違えば、吹出方向=「右」。     fy=(デスクトップH-吹出[No]→クライアント高さ)/2-50。     吹出[No]に科白を吹出方向へminW,minHで吹出セリフ表示。   吹出[No]→位置は「{fx},{fy}」   吹出[No]→ドラッグ移動オフ。   吹出[No]→可視はオン。   「吹出{No}」を窓最前面。   マスコット浮上。 *コード表示   コードの可視はオフ。   Aとは文字列=。Bとは文字列=。   科白で反復     Bはそれ。     もし(Aの文字数)<(Bの文字数)ならば、A=B。   コードの幅=Aの文字幅取得+40*2。   コードの高さ=(科白の文字高さ取得)*(科白の要素数)+10*2   cx=(デスクトップW-コードの幅)/2   cy=デスクトップH/2+5。   コードを$009900で画面クリア。   塗り色は$FFFFCC。線色は$009900。線太さは2。   コードの2,2から(コードの幅-1),(コードの高さ-1)へ四角。   コードの可視はオン。   コードの位置は「{cx},{cy}」   コードの10,10へ科白を文字表示。   「コード」を窓最前面。   マスコット浮上。 #----------------------------------------------------------- #----------------------------------------------------------------------- ●吹出セリフ表示({グループ=?}FにSを{整数=100}minW,{整数=50}minHで{文字列=「」}方向へ)   Aとは文字列=「」。Bとは文字列=「」。   Sで反復     Bはそれ。     もし(Aの文字数)<(Bの文字数)ならば、A=B。   swとは整数=Aの文字幅取得shとは整数=(Sの文字高さ取得)*(Sの要素数)   fwとは整数=(Aの文字幅取得)*1.5。fhとは整数=(Sの文字高さ取得)*(Sの要素数)*1.8   もしfw<minWならば、fw=minW。</pp>   もし、fh<minHならば、fh=minH。</pp>   sxとは整数fw/2-sw/2-10   syとは整数=fh/2-sh/2   もし、方向=ならば、方向=F→ポケット。   もし、方向=ならば、方向=左上。   もし、方向=右ならば、sx=sx+fw/10  #矢印の長さ分   もし、方向=下ならば、sy=sy+fh/10   Fをfw,fhで方向へ吹出作成。   Fのsx,syへSを文字表示。 #----------------------------------------------------------- ●吹出作成({グループ=?}FをW,Hで方向へ)   xx=0。yy=0。ww=0。hh=0。   方向で条件分岐     右上ならば、  #矢印は左下       Fのポケットは「右上」       x1=0。y1=H。x2=W/8。y2=H/4*3。x3=W/4。y3=H/8*7。     右下ならば、  #矢印は左上       Fのポケットは「右下」       x1=0。y1=0。x2=W/4。y2=H/8。x3=W/8。y3=H/4。     左上ならば、  #矢印は右下(吹出し変形と同じ)       Fのポケットは「左上」       x1=W。y1=H。x2=W/4*3。y2=H/8*7。x3=W/8*7。y3=H/4*3。     左下ならば、  #矢印は右上       Fのポケットは「左下」       x1=W。y1=0。x2=W/4*3。y2=H/8。x3=W/8*7。y3=H/4。     上ならば、  #矢印は下向き       hh=H/10。Fのポケットは「上」       x1=W/2。y1=H+hh。x2=W/2-W/20。y2=H-H/100。x3=W/2+W/20。y3=H-H/100。     下ならば、  #矢印は上向き       hh=H/10。yy=hh。Fのポケットは「下」       x1=W/2。y1=0。x2=W/2-W/20。y2=hh+H/100。x3=W/2+W/20。y3=hh+H/100。     左ならば、  #矢印は右向き       ww=W/10。Fのポケットは「左」       x1=W+ww。y1=H/2。x2=W-W/100。y2=H/2-H/20。x3=W-W/100。y3=H/2+H/20。     右ならば、  #矢印は左向き       ww=W/10。xx=ww。Fのポケットは「右」       x1=0。y1=H/2。x2=ww+W/100。y2=H/2-H/20。x3=ww+W/100。y3=H/2+H/20。   Fの可視はオフ。   FのクライアントWはW+ww。FのクライアントHはH+hh。   Fを$00FF00で画面クリア。   線スタイルは透明。   Fのxx,yyからxx+W,yy+Hへ。1秒待つ。   Fの「{x1},{y1},{x2},{y2},{x3},{y3}」へ多角形。   F→画像通り変形。 //  Fの可視はオン。 #----------------------------------------------------------------------- #-----設定画面---------------------------------------------- *設定画面作成   母艦について     スタイルは「枠固定」。     タイトルは「{母艦のタイトル}の設定」     幅は300。高さは200。     オフに最小化ボタン有効変更。     オフに最大化ボタン有効変更。     閉じた時は~終わる。   母艦ウィンドウ背景色画面クリア。   母艦最前面。   ラベル1のテキストは「なでしこのインストールフォルダ:」   ラベル2のテキストは「セリフの表示隔:」   Eについて     幅は270。テキストはナデシコパス。   フォルダ選択ボタンについて     高さはEの高さ。幅は70。Xは210。Yは58     文字書体は「MS Pゴシック|9|」。テキストは「フォルダ選択」     クリックした時は~       ナデシコパスでフォルダ選択。       もしそれでなければ、Eのテキストはそれ。   Bについて     最小値は1。最大値は10。値は科白表示隔。     位置はラベル2の右側。幅は135。   ラベル3について     テキストは「短い             長い」     位置はBの下側。幅はBの幅。     文字書体は「MS Pゴシック|8|」。     文字位置は「中央」。   バージョンボタンについて     文字書体は「MS Pゴシック|10|」。     クリックした時は~       ダイアログタイトルは「ぷろぐらみんぐ講座?」       「{二重カッコ}ぷろぐらみんぐ講座?{改行} スクリーンセーバー二重カッコ閉じ}{改行}   Version 2.00{改行}{改行}   by 雪乃☆雫」と言う。   OKボタンについて     Xは130。YはバージョンボタンのY。     クリックした時は~       ナデシコパスはEのテキスト。       科白表示隔はBの値。       設定記録。       終わる。   キャンセルボタンについて     文字書体は「MS Pゴシック|10|」。     位置はOKボタンの右側。     クリックした時は~終わる。   ラベル1の可視はオンラベル2の可視はオンラベル3の可視はオン。   Eの可視はオン。Bの可視はオンフォルダ選択ボタンの可視はオン。   OKボタンの可視はオンキャンセルボタンの可視はオンバージョンボタンの可視はオン。 *設定画面開く   設定画面作成。   母艦のXは((デスクトップW)-(母艦の幅))/2   母艦のYは((デスクトップH)-(母艦の高さ))/2   母艦の可視はオン。 #----------------------------------------------------------- *設定読み込み   もし、設定ファイル名が存在するならば     設定ファイル名のINI開いて設定に代入。     設定で「スクリーンセーバーの設定」の「なでしこパス」をINI読んでナデシコパスに代入。     設定で「スクリーンセーバーの設定」の「科白表示隔」をINI読んで科白表示隔に代入。     シナリオ隔=科白表示隔。     設定のINI閉じる。   違えば、設定記録。 *設定記録   設定ファイル名のINI開いて設定に代入。   設定で「スクリーンセーバーの設定」の「なでしこパス」にナデシコパスをINI書く。   設定で「スクリーンセーバーの設定」の「科白表示隔」に科白表示隔をINI書く。   設定のINI閉じる。 #----------------------------------------------------------- #----------------------------------------------------------------------- # スクリーンセーバーの雛形.nako #----------------------------------------------------------------------- !母艦設計=「母艦の可視はオフ」 //!「ぷろぐらみんぐ講座?.nako」を取り込む。 #別ファイルにする時はコメントを外す。 #-----テスト用---------------------------------------------- //コマンドライン¥1は「/S」。 //コマンドライン言う。 #-----宣言-------------------------------------------------- OPとは文字列。        #起動オプション。 PWHとは整数。        #プレビューウィンドウのウィンドウハンドル。 Sxとは整数。Syとは整数。Swとは整数。Shとは整数。 #「スクリーン セーバーの設定」画面の位置サイズ。 Tとはタイマーの値は10。 裏画面とはイメージの可視はオフ。 初期マウスXとは整数=-1。初期マウスYとは整数=-1。 #----------------------------------------------------------- #コマンドラインで取得した起動オプションで、動作を選択。 #----------------------------------------------------------- OP=コマンドライン¥1の2文字左部分。  #起動オプション もし、OP=「/p」または、OP=「/P」ならば、              #プレビュー(ミニ画面)   PWH=コマンドライン¥2       #プレビューウィンドウのウィンドウハンドル   プレビュー。 違えばもし、OP=「/c」または、OP=「/C」ならば、コンフィグ。    #コンフィグ(設定画面) 違えばもし、OP=「/s」または、OP=「/S」ならば、フルスクリーン。  #フルスクリーン(本体) 違えば終わる。 #----------------------------------------------------------- #----------------------------------------------------------- *プレビュー   HDCとは整数=PWHのDC取得。   #「スクリーン セーバーの設定」画面内のプレビューウィンドウ(ミニ画面)の情報を取得。   PSとは配列=PWHの窓ハンドル内サイズ取得。   #描画用のイメージにプレビューウィンドウのサイズを設定。   裏画面の幅はPS¥0,2。   裏画面の高さはPS¥0,3。   #プレビューウィンドウの表示。   処理用の画像はキャラ設定¥0,0   処理用を32に画像ビット数変更。   (キャラ設定¥0)を反復。     色指定とは配列。色指定=それを「/」で区切ったもの。     x=色指定\0。y=色指定\1。指定色=色指定\2     処理用のx,yを指定色で塗る。   処理用の透明色をデスクトップ色画像色置換。   文字色白色文字書体は「MS ゴシック|10|太字」。   x=裏画面の幅。   PWHの窓ハンドル表示状態!=オフ     もし、x+(「ぷろぐらみんぐ講座?」の文字幅取得)<0ならば、       x=裏画面の幅。     裏画面をデスクトップ色画面クリア。     「ぷろぐらみんぐ講座?」を裏画面のx,0へ文字描画。     処理用を裏画面の((裏画面の幅-処理用の幅)/2),(裏画面の高さ-処理用の高さ)へ画像コピー。     (裏画面のハンドル)をHDCへ窓ハンドル画像転送。     x=x-3     0.05秒待つ。   終わる #----------------------------------------------------------- # 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得します。 # https://msdn.microsoft.com/ja-jp/library/cc428664.aspx ●DC取得(ハンドルの)=DLL("user32.dll", "HDC GetDC( HWND hWnd // ウィンドウのハンドル )") #----------------------------------------------------------- # デバイスコンテキストを解放し、他のアプリケーションからつかえるようにします。 # https://msdn.microsoft.com/ja-jp/library/cc410542.aspx ●DC解放(hWnd,hDC)=DLL("user32.dll", "int ReleaseDC( HWND hWnd, // ウィンドウのハンドル HDC hDC // デバイスコンテキストのハンドル )") #----------------------------------------------------------- # 指定されたウィンドウの表示状態を調べ、0かそれ以外を返す。 # https://msdn.microsoft.com/ja-jp/library/cc364819.aspx ●窓ハンドル表示状態(ハンドルの)=DLL("user32.dll", "BOOL IsWindowVisible( HWND hWnd // ウィンドウのハンドル )") #----------------------------------------------------------- # ビットブロック転送を行います。 # コピー元からコピー先のデバイスコンテキストへ、 # 指定された長方形内の各ピクセルの色データをコピーします。 # https://msdn.microsoft.com/ja-jp/library/cc428944.aspxBitBlt(hdcDest,nXDest,nYDest,nWidth,nHeight,hdcSrc,nXSrc,nYSrc,dwRop)=DLL("gdi32.dll", "BOOL BitBlt( HDC hdcDest, // コピー先デバイスコンテキストのハンドル int nXDest, // コピー先長方形の左上隅の x 座標 int nYDest, // コピー先長方形の左上隅の y 座標 int nWidth, // コピー先長方形の幅 int nHeight, // コピー先長方形の高さ HDC hdcSrc, // コピー元デバイスコンテキストのハンドル int nXSrc, // コピー元長方形の左上隅の x 座標 int nYSrc, // コピー元長方形の左上隅の y 座標 DWORD dwRop // ラスタオペレーションコード )") ●窓ハンドル画像転送({整数}コピー元ハンドルを{整数}コピー先ハンドルへ)   WHとは配列コピー先ハンドルの窓ハンドル内サイズ取得。   Wとは整数WH\0,2。Hとは整数WH\0,3。   BitBlt(コピー先ハンドル,0,0,W,H,コピー元ハンドル,0,0,$00CC0020) #----------------------------------------------------------- #----------------------------------------------------------- *コンフィグ   #「スクリーン セーバーの設定」画面の情報取得。   SWHとは整数=「スクリーン セーバーの設定」の窓ハンドル検索。   SSとは配列=SWHの窓ハンドル内サイズ取得。   Sw=SS¥0,2。Sh=SS¥0,3。   Sxyとは配列=SWHの0,0を窓ハンドル画面座標計算。   Sx=Sxy¥0,0。Sy=Sxy¥0,1。 //  母艦のクライアント幅はSw。 //  母艦のクライアント高さはSh。 //  母艦の位置は「{Sx},{Sy}」。 #---------------------------------------*/   設定画面作成。   母艦のXは(Sx)+((Sw)-(母艦の幅))/2   母艦のYは(Sy)+((Sh)-(母艦の高さ))/2   母艦の可視はオン #----------------------------------------------------------- #----------------------------------------------------------- *フルスクリーン   母艦について     スタイルは「枠なし」     クライアント幅はデスクトップW。     クライアント高さはデスクトップH。     位置は「{0},{0}」。     キー押した時は~終わる。     クリックした時は~終わる。     マウス移動した時は~       もし、(初期マウスX=-1)かつ(初期マウスY=-1)ならば、         初期マウスX=母艦のマウスX。初期マウスY=母艦のマウスY。       違えば、(初期マウスX=母艦のマウスX)または       (初期マウスY=母艦のマウスY)でなければ、終わる   オフにマウスカーソル表示設定。  #マウスカーソルオフ #---------------------------------------   メイン。 #----------------------------------------------------------- # マウスカーソルを消したり出したり出来る。 # 「A」= オンorオフ # なでしこライブラリ~ http://www26.atwiki.jp/isoroku_be/pages/122.html ●マウスカーソル表示設定(Aに)=DLL("user32.dll","int ShowCursor(BOOL bShow)") #-----------------------------------------------------------

 万一、試してみようとゆう奇特な方がいたらですけど、ただコピペして実行しても動きません。

 一度実行ファイルにして、拡張子をscrにリネームして、右クリックでインストールです(Win7の場合)

 

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20161127