Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2017/08/10 (木)

タートルグラフィックスをcanvasで使う!

| 14:20 | タートルグラフィックスをcanvasで使う! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - タートルグラフィックスをcanvasで使う! - 雪乃☆雫のなでしこ日和 タートルグラフィックスをcanvasで使う! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 前の課題の解決です。

 必要なのは、「カメ描画先」と「カメ画像URL」でした。


 まずは、

 https://nadesi.com/doc3/index.php?HTML%E3%81%B8%E3%81%AE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E6%96%B9%E6%B3%95

 にあるとうり、プラグイン追加

<!-- タートルグラフィックスを使うのに必要プラグイン  -->
<script src="https://nadesi.com/v3/0.1.0/release/plugin_turtle.js"></script>

 して、「描画開始で」描画先に指定したcanvasのIDを、「カメ描画先」に指定します。

 そうすると、描画は行われるのですが、カメさんが出てきません。

 どうやら、PCや違うサイトから使おうとゆう場合は、「カメ画像URL」に画像のURLを指定してやる必要あるみたい。

 捜索の結果、カメさんは「https://nadesi.com/v3/0.1.0/demo/turtle.png」にいましたので、コレを指定します。

 もちろん、自分の好きなカメでもウサギでも、自分のトコに画像を用意してもいいわけですけどね。

 しかし、ワタシ個人的には、ナコ様に描いて欲しいなぁ・・・

 これは勝手に使うと問題がありそうだから、公式サイトで用意してくれないかなぁwww


 ・・・それはともかく、んなこんなでこんな感じ。

 面倒なので、描くモノは相変わらず同じです;

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>なでしこ3てすと</title>
  </head>

  <body>
    <!-- なでしこを使うために必要なスクリプト -->
    <script src="https://nadesi.com/v3/0.1.0/release/wnako3.js?run"></script>
    <!-- タートルグラフィックスを使うのに必要プラグイン  -->
    <script src="https://nadesi.com/v3/0.1.0/release/plugin_turtle.js"></script>
    <!-- type="なでしこ" のスクリプトが実行される -->
    <script type="なでしこ">
      #--------------------------------------
      # ここになでしこのプログラムを記述
      #-----------------------------------------------------------
      「canvas#cv」のDOM要素取得。  #まずHTMLcanvasタグを設置し、IDを設定し、DOM要素取得。
      それへ描画開始。        #それを描画先に指定。
      カメ描画先=「cv」       #カメ描画先は、canvasのIDを指定する。
      カメ画像URL=「https://nadesi.com/v3/0.1.0/demo/turtle.png」  #ここにカメさんがいる!
      カメ作成。
      5に太設定。
      K=150。XX=155。YY=155。
      PX=1。PY=1。QX=-1。QY=1。RX=-1。RY=-1。SX=1。SY=-1。
      C=200
      8
        色=RGB(255,C,C)。C=C-20。
        色にカメペン色設定。
        PX2=PXとQXの中点。PY2=PYとQYの中点。
        QX2=QXとRXの中点。QY2=QYとRYの中点。
        RX2=RXとSXの中点。RY2=RYとSYの中点。
        SX2=SXとPXの中点。SY2=SYとPYの中点。
        [(K*PX2+XX),((-K)*PY2+YY)]へカメ起点移動。
        [(K*QX2+XX),((-K)*QY2+YY)]へカメ移動。
        [(K*RX2+XX),((-K)*RY2+YY)]へカメ移動。
        [(K*SX2+XX),((-K)*SY2+YY)]へカメ移動。
        [(K*PX2+XX),((-K)*PY2+YY)]へカメ移動。
        PX=PX2。PY=PY2。QX=QX2。QY=QY2。RX=RX2。RY=RY2。SX=SX2。SY=SY2。
      ここまで。
      カメ非表示。

      ●中点(AとBの)
        (A+B)/2で戻るここまで。
    </script>

    <H1>なでしこ3てすと~タートルグラフィックスを使う</H1>
    <HR>
    <FONT color="red">
    <H2>カメさんがバラを描く</H2>
    <canvas id="cv" width=320 height=320></canvas>
    <HR>
  </body>
</html>

 できた!

http://www.geocities.jp/snowdrops890/wnako3_test/wnako3_test02_turtle.html

 そうして、これならcanvasのサイズは自分で好きに変えられるから、広々としたところでのびのびとカメさんを歩かすことが出来るわけですね~♪

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

2017/08/08 (火)

canvasに図形を描画するよ!

| 23:37 | canvasに図形を描画するよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - canvasに図形を描画するよ! - 雪乃☆雫のなでしこ日和 canvasに図形を描画するよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 しかし、canvasって、何?!(っからか;)

 まず、「描画開始」命令の「描画先にCanvasを指定して描画API(2D)の利用準備する」とゆう説明からして分かりません;;

 描画系の命令を使うためには、とりあえず最初にこの「描画開始」で利用準備することが必要ラシイことは分かるのですが・・・

 ・・・と思っていたら、HTMLに<canvas>とゆうタグがあるのでした(バカ;)

 して、簡易エディタエラーメッセージによると、「描画を行うためには、HTML内にcanvasを配置し、idを振って『描画開始』命令に指定します。」とのこと。

 ソレを命令の説明の所にも書いて置いて欲しいの~~~。

 して、さらにもう一つ、落とし穴がありました。

 HTML内に、canvasを設置して、IDをつけたら、まずは、「DOM要素取得」です。

 しかるのちに、それへ「描画開始」とゆうことになります。

 ここが非常にわかりにくくて苦労しました。

 たぶん、Javascriptなどの分かっている方には、アレをやる代わりにコレか~・・・みたいな感じに、説明がなくともすんなり理解出来ることなのかも知れないんですが(?)なにしろ全体的に何も知らないので、さっぱりですヽ(;´Д`)ノ

 でも、コレさえ分かったら、後は意外とすんなり行きました。

 あと、canvasはなにも指定しないと、300*150くらいのサイズのようなので、widthとheightを設定してやります。

 でも・・・度はタートルグラフィックスの使い方が分からなんだ(+_+;

 https://nadesi.com/doc3/index.php?HTML%E3%81%B8%E3%81%AE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E6%96%B9%E6%B3%95

 に記載の通りにタートルグラフィックスを使うのに必要プラグイン追加してみたけれど・・・なんか、うまくいかないんだよね。

 カメ作成しても出てこない

 まあ、それはまた後の課題として、描画で前同様バラを描くヤツ。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>なでしこ3てすと</title>
  </head>

  <body>
    <!-- なでしこを使うために必要なスクリプト -->
    <script src="https://nadesi.com/v3/0.1.0/release/wnako3.js?run"></script>
    <!-- type="なでしこ" のスクリプトが実行される -->
    <script type="なでしこ">
      #--------------------------------------
      # ここになでしこのプログラムを記述
      #-----------------------------------------------------------
      「canvas#cv」のDOM要素取得。  #まずHTMLcanvasタグを設置し、IDを設定し、DOM要素取得。
      それへ描画開始。        #それを描画先に指定。
      5に太設定。

      K=150。XX=155。YY=155。
      PX=1。PY=1。QX=-1。QY=1。RX=-1。RY=-1。SX=1。SY=-1。
      C=200
      8
        色=RGB(255,C,C)。C=C-20。
        色に線色設定。
        PX2=PXとQXの中点。PY2=PYとQYの中点。
        QX2=QXとRXの中点。QY2=QYとRYの中点。
        RX2=RXとSXの中点。RY2=RYとSYの中点。
        SX2=SXとPXの中点。SY2=SYとPYの中点。

        [(K*PX2+XX),((-K)*PY2+YY)]から[(K*QX2+XX),((-K)*QY2+YY)]まで描画。
        [(K*QX2+XX),((-K)*QY2+YY)]から[(K*RX2+XX),((-K)*RY2+YY)]まで描画。
        [(K*RX2+XX),((-K)*RY2+YY)]から[(K*SX2+XX),((-K)*SY2+YY)]まで描画。
        [(K*SX2+XX),((-K)*SY2+YY)]から[(K*PX2+XX),((-K)*PY2+YY)]まで描画。
        PX=PX2。PY=PY2。QX=QX2。QY=QY2。RX=RX2。RY=RY2。SX=SX2。SY=SY2。
      ここまで。

      ●中点(AとBの)
        (A+B)/2で戻るここまで。
    </script>

    <H1>なでしこ3てすと~canvasに図形を描く</H1>
    <HR>
    <FONT color="red">
    <H2>バラが咲いた(内部自己相似形)</H2>
    <canvas id="cv" width=320 height=320></canvas>
    <HR>
  </body>
</html>

 ちゃんと、見れた~♪♪♪

http://www.geocities.jp/snowdrops890/wnako3_test/wnako3_test02_canvas.html

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

2017/08/04 (金)

カメさんで遊ぶよ!

| 22:25 | カメさんで遊ぶよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - カメさんで遊ぶよ! - 雪乃☆雫のなでしこ日和 カメさんで遊ぶよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 こうゆう、プログラムで図形を描く的なコトは、大の苦手なんだけど、カメさんが描いてくれるだけで、なんか和むねえ~♪


 しかし~、例によってまたぼやきからスタートですよ;;;

 たとえばこんな簡単な四則計算。

 -5*2+10を表示

 コレは当然、なでしこ1でもなでしこ3でも、正しく計算されて、0とゆうことになるんですが・・・

 この、5の部分を、変数にしたいと思ってこうしたところ・・・

 A=5
 -A*2+10を表示

 なでしこ1では問題の無いこのコードですが、なでしこ3ではえらーとなります><;

 しかしまあ、コレは仕方ありません。なでしこ1でも、計算部分を括弧で括ってやらないとエラーになっちゃう場面は時々あります

 でっ、括弧で括るじゃないですか。

 A=5
 (-A*2+10)を表示

 あれれ~?

 この計算結果が-20って、おかしくないですか?!?!

 どうやら、Aにつけたつもりのマイナスの符号だけど、「(-(A*2+10))」のようについてしまうんだね。

 それって、どうなの???

 ・・・まあ、ちゃんと「((-A)*2+10)」と括りなさいよということで・・・


 さてさて、気を取り直して・・・

 いつかどこかで見たヤツ。

#バラが咲いた(内部自己相似形)
#-----------------------------------------------------------
カメ作成。
K=150。XX=155。YY=155。
PX=1。PY=1。QX=-1。QY=1。RX=-1。RY=-1。SX=1。SY=-1。

C=200
8
  色=RGB(255,C,C)。C=C-20
  色にカメペン色設定。
  PX2=PXとQXの中点。PY2=PYとQYの中点。
  QX2=QXとRXの中点。QY2=QYとRYの中点。
  RX2=RXとSXの中点。RY2=RYとSYの中点。
  SX2=SXとPXの中点。SY2=SYとPYの中点。
  [(K*PX2+XX),((-K)*PY2+YY)]へカメ起点移動。
  [(K*QX2+XX),((-K)*QY2+YY)]へカメ移動。
  [(K*RX2+XX),((-K)*RY2+YY)]へカメ移動。
  [(K*SX2+XX),((-K)*SY2+YY)]へカメ移動。
  [(K*PX2+XX),((-K)*PY2+YY)]へカメ移動。
  PX=PX2。PY=PY2。QX=QX2。QY=QY2。RX=RX2。RY=RY2。SX=SX2。SY=SY2。
ここまで。
カメ非表示。

●中点(AとBの)
  (A+B)/2で戻るここまで。
#-----------------------------------------------------------

お試しはタートルグラフィックスようのエディタで。

https://nadesi.com/doc3/index.php?%E3%81%AA%E3%81%A7%E3%81%97%E3%81%933%E7%B0%A1%E6%98%93%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF-%E3%82%BF%E3%83%BC%E3%83%88%E3%83%AB%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%82%B9%E7%94%A8

 しかし、お絵かきの出来る範囲が、意外と狭いんだよね。

 縦が400はまあ妥当として、横がなぜか枠の端っこまで描けず300で切れてしまうんだね。(スマホ対応のサイズなんですね。PCようにもう少し広く描けるところがあると、うれしいね)

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

2017/07/23 (日)

なでしこ3をJavaScriptの代わりに使う?

| 01:58 | なでしこ3をJavaScriptの代わりに使う? - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - なでしこ3をJavaScriptの代わりに使う? - 雪乃☆雫のなでしこ日和 なでしこ3をJavaScriptの代わりに使う? - 雪乃☆雫のなでしこ日和 のブックマークコメント

 代わり・・・って言ったって、JavaScript自体がまったくわからん、いやむしろ、HTMLだって、あんまりわからん。

 でも、果敢にお試ししてみるるるるwww


 HTMLに、なでしこ3を取り込む術はここに書いてあります

https://nadesi.com/doc3/index.php?HTML%E3%81%B8%E3%81%AE%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E6%96%B9%E6%B3%95

 コレによれば・・・

<!-- なでしこを使うために必要なスクリプト -->
<script src="https://nadesi.com/v3/0.1.0/release/wnako3.js?run"></script>

<!-- type="なでしこ" のスクリプトが実行される -->
<script type="なでしこ">
「こんにちは」と言う。
</script>

 こうゆうことなのですが、どうもうまくいきません。

 さすがにこれだけじゃダメかと、<HTML>や<HEAD><BODY>などのタグを追加してみましたけれどダメで、やっぱりHTML5からようく学ばないとムリですか?! と思っていたのですが、なんと実は単に文字コードの問題でした。しくしくしくしく。

 UTF-8」で保存ないとダメだったんですね。

 具体例のソースを見たら、確かにちゃんと「<meta charset="utf-8">」と。(このタグ自体が、ワタシの知らない呪文だけどね;;;)

 これまで一度も文字コードなんて気にして生きては来なかったけど、ウチのテキストエディタで何の指定もせずふつーに保存をしたら、「SHIFT-JIS」になるので、文字コード指定して保存してやらなきゃだったのですよ。

 これってわりと、モノスゴク、重要な情報じゃないですか?

 それとも、ワタシの頭が悪いだけで、世の中の方々にとってはフツー知ってるでしょ?!レベルのことだったのですかね。め


 さて、気を取り直して・・・

 とりあえず、「こんにちは」と言ってもらえました♪

 これで、JavaScriptがいっこも分からなくても、なでしこのコードで色々できるということでしょうか。素晴らしい!

 しかし、DOMナントカって、一体なんすか(´д`;

 わからんことばっか(@_@)


 それでも、見よう見まねで取りあえずこんな感じ?

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>なでしこ3てすと</title>
  </head>

  <body>
    <!-- なでしこを使うために必要なスクリプト -->
    <script src="https://nadesi.com/v3/0.1.0/release/wnako3.js?run"></script>
    <!-- type="なでしこ" のスクリプトが実行される -->
    <script type="なでしこ">
      #--------------------------------------
      # ここになでしこのプログラムを記述
      #-----------------------------------------------------------
      時は「{}」の2だけ文字左部分整数変換もし、時≧0と時<4のANDならば、挨拶=「こんばんは。夜更かしですね。」
      違えばもし、時≧4と時<11のANDならば、挨拶=「おはようございます。」
      違えばもし、時≧11と時<18のANDならば、挨拶=「こんにちは。」
      違えばもし、時≧18と時≦23のANDならば、挨拶=「こんばんは。」
      「p#a」のDOM要素取得。
      「  {挨拶}」をDOMテキスト設定。

      年=「{今日}」の4だけ文字左部分。
      月=「{今日}」の6から2をMID。
      日=「{今日}」の2だけ文字右部分。
      「p#b」のDOM要素取得。
      「  今日は{年}年{月}月{日}日です。」をDOMテキスト設定。
      #-----------------------------------------------------------
    </script>

    <H1>なでしこ3のてすと</H1>
    <P id="a">はろー</P>
    <P id="b">日付表示</P>
    <HR>
  </body>
</html>

 定番の(?)時でメッセージが変わるヤツと、単に今日の日付を表示するヤツ。

 なでしこ3では、「かつ」が使えないんですね。

 「AとBのAND」・・・って、なんかすごく妙;

 でも、文字左部分なども助詞の付き方が変わって、v1非互換となっているから、なにか元のようには出来ない事情があるのでしょう。

 それと、なぜか「文字抜出」が使えない。なんでだ;

 とりあえず、MIDが使えたから良いけど。


 んなこんなで・・・

http://www.geocities.jp/snowdrops890/wnako3_test.html

 ちゃんと動いてるっぽい!(喜)

 (これはインターネット上でもちゃんと動くのを確認したいだけのためにジオシティーズに登録したので、他にはなんにもありませんw)

 ああ、スマホからもいちおう見れた!(≧▽≦)

めだかめだか2017/07/25 17:58お久しぶりです。ジャンク物を漁っていたら、いつの間にかPCが5、6台になっちゃっためだかです←

自分も、一時期なでしこがHTMLに埋め込みができる!!!と思い、サイトを作ってみようかと思いましたが、挫折しましたwだって、難しいじゃないですか~
そりゃ、大半をなでしこで作ってしまえば楽だとは思いますけど、メンテナンスや変更を入れるときに、複雑でわかりにくそう・・・って、なりません!?(笑

なでしこ3自体も、通常版のなでしことは違い、使える文字も限られてくるので、かなーり使いにくそうですね^^;
自分はお手上げですw


そうでした。この前、教えて頂いたディスクトップの話ですが、専用のソフトをみつけ、そちらにゾッコンです・・・wなでしこで作るのは、諦めちゃったですw

でです、次なる目論見で・・・w
MMDって、ご存知ですか・・・?3Dモデルを動かすものなのですが・・・
普通は、マウスを使ってモデルを動かすのですが、これをパソコンのカメラと連動させて、現実で体を動かすとそれに連動してパソコン内のモデルも動くといったものです。

また、無理だった場合、なでしこでそういった環境を構築することになりますが、なでしこでそこまでできる???て、なりました。
やはり、3Dモデルとなると、unityやC++やjavaになってくるのでしょうか?

できたところで、果たして実用レベルまでのものになるのかは、とりあえず置いときましょう・・・wロマン優先ですっ!

雪乃☆雫雪乃☆雫2017/07/28 12:43 お久しぶりです。お返事が遅くなりまして、スミマセン。何しろ、ナゾ解明しなきゃならないとゆう新たな任務(ゲーム;)が発生していたりして、何かと忙しいのですよw
 なでしこ3は、まだまだベータ版の公開とゆう段階だし、実用のことを考えるのはもうちょっと先かもね。なにかと、ナゾ現象も多いですし><;
 サイトを作ってみようだの、あまつさえ大半をなでしこでどうこうしようなんて大それた野望はないのですぅ~。だって、もともとHTMLもJavascriptもよく分からない上に、今回のことでようく分かったのですが、多少知ってたはずのことも、もはや時代遅れすぎて何の役に立たないっぽい!(ToT)
 でも、折角なので、色々お試しして遊んでいます♪
 ムカシ、内容なんていっこも分からず貼り付けていた、定型のちっちゃなJavascriptが、今なら移植できるかも~・・というレベルw
 だけど、ムカシのJavascriptはもはや今時のJavascriptとは、もはやまるっきり違っているみたいなんだよね、コレが;;;


 ででで?
 次々と、見たことも聞いたこともないヤツを出してこられますねぇ~。
 毎回、野望が大きいですよね♪
 しかし、ちょっとダウンロードしてみたけれど、まださっぱり使い方も分かりませぬヽ(;´Д`)ノ
 3Dの時代の人じゃないですしね~(ToT)
 ちなみに、コレとなでしことで、なんらかの連携が可能かというコトでしょうかね?
 なでしこ自体で3Dモデルというのはなかなか大変そう。Directなんちゃらとか、使えないですしね・・・

めだかめだか2017/08/01 22:11お返事遅くなりました~
あまりの暑さに思考停止です・・・w

もう一回、ちゃんとweb制作を頑張ってみようかな~・・・とか思う今日このごろですwなんとしても、なでしこ3を使うために・・・!w
javaScriptも、どんどん新機能を追加しており、web製作者を悩ませているとか・・・w


す、すいませ~ん(笑
わからないことは、雪乃さんに投げておけば解決するかも???とか思っちゃってますw
野望が大きいのも、反省です・・・w

で、話を戻しますとそうですね・・・もっと詳しく言いますと、

なでしこで、動きを検出→なでしこでそれを処理する→処理した内容をMMDに送る→MMDにて反映

みたいな感じでしょうか・・・
ただ、なでしこがDirectなんちゃらを嫌っている(使えない)となると、なでしこで3Dを処理することは、「
ほぼ」無理になったことでしょうね・・・
正直話、3Dモデルの処理にはかなりの技術がいるらしいですし、それなりの言語も・・・らしいですので、なでしこで3Dを扱えないことがわかって安心(?)しています。

なにはともあれ、この野望を叶えるべく、なでしこからMMDを操作?できるようにはなりたいです!

雪乃☆雫雪乃☆雫2017/08/03 14:47 えっと、まず、「なでしこからMMDを操作したい」とゆうことに関して、その方法に関して何らかのビジョンがあるのでしょうか?
 たとえばカメラはね、ハードですから、Windowsのプログラムからそれを操作できるようにするための関数が、もともとWindowsに用意されてありました。
 Juliusは、Juliusの側に、他のプログラムと連携するための機能がありましたから、その仕様に従って、なでしこでTCP接続してそれを受信する方法を考えるだけで良かった。
 MMDに、そういった連携の機能があって、それをなでしこでも行えるのかどうかとか、他言語で実際にこうゆうことをしてる実例があるが、なでしこでも同様のことが出来るのかというような、明確なビジョンがなくちゃ、考えてみようもないでございますよヽ(;´Д`)ノ

 完全な連携とゆうことでなければ、ポーズデータ(.vpd)などは開いてみるとテキストだから、その内容の意味を知れば、静止画から、なでしこで、MMDで使えるポーズデータを作成することなどは可能なのかも知れない。
 モーションデータ(.vmd)なども、CSV形式に変換したり元に戻したりできるフリーソフトがあるようなので、CSV形式ならなでしこからもいじれるかも・・・? などと思ったり思わなかったりするところなんですけど・・・
 ・・・しかし、カメラの時のことを考えれば、結局、「なでしこで動きを検出」がまず、速度的に難しいんじゃないですか。

 どうやらMMDではKinectが使えるラシイので、なんだかそれが一番手っ取り早いみたいな・・・w

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

2017/07/11 (火)

なでしこ3でしりとり

| 11:12 | なでしこ3でしりとり - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - なでしこ3でしりとり - 雪乃☆雫のなでしこ日和 なでしこ3でしりとり - 雪乃☆雫のなでしこ日和 のブックマークコメント

 とりあえず、末尾語を引数で渡すことでできるようになったから載せとく。

 だけど別に、関数内で使う変数は全部そうしなきゃない仕様になったとゆうわけではないようなので、ナゾはナゾのままなんだよねぇ~;

#なでしこ3でしりとり3
#-----------------------------------------------------------
除去音=「ー-~・‥….。,、?!」。
変換音=「がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽぁぃぅぇぉゃゅょゎっをゐゑ」
変換後=「かきくけこさしすせたちつてとはひふへほはひふへほあいうえおやゆよわつおいえ」
#-----------------------------------------------------------
●先頭語取得(Sから)
  先頭語はSの1だけ文字左部分の変換音変換。
ここまで

●末尾語取得(Sから)
  S=Sから除去音除去。
  末尾語はSの1だけ文字右部分の変換音変換。
ここまで
#-----------------------------------------------------------
●除去音除去(Sから)
  除去音を文字列分解反復
    S=Sの対象置換。
  ここまで
  Sで戻るここまで

●変換音変換(Sの)
  回数=0
  変換文字=変換後を文字列分解。
  変換音を文字列分解反復
    もし、S=対象ならば、S=変換文字@回数
    回数回数+1
  ここまで
  Sで戻るここまで
#-----------------------------------------------------------

#-----テスト------------------------------------------------
ルール=「【ルール説明】
・小さい文字(拗促音)は大きくするよ(カボチャ→やさい)
・濁音半濁音は清音と同様に繋げられるよ(りんご→こまつな)
・長音は無視できるよ(チーター→たぬき)」
ルールと言う。
ルールと表示。

開始語=「なでしこ」
先頭語=。
末尾語=開始語から先頭語取得。

末尾語と開始語でシリトリする。

●シリトリ(MとSで)
  先頭語はSから先頭語取得。
  末尾語=M。
  もし、先頭語=末尾語でなければ、
    「負け!」と言う終わる。
  ここまで。
  末尾語はSから末尾語取得。
  もし、末尾語=「ん」ならば、
    「負け!」と言う終わる。
  ここまで。
  ダイアログIME=「IMEオン」
  「『{S}』{改行}{改行}全角ひらがなで続く単語を入力してね。」と尋ねる。
  もしそれでなければ、
    末尾語とそれでシリトリする。
  違えば、
    「負け!」と言う終わる。
  ここまで。
ここまで
#-----------------------------------------------------------

https://nadesi.com/doc3/index.php?%E3%81%AA%E3%81%A7%E3%81%97%E3%81%933%E7%B0%A1%E6%98%93%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF

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

2017/07/06 (木)

なでしこ3

| 23:58 | なでしこ3 - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - なでしこ3 - 雪乃☆雫のなでしこ日和 なでしこ3 - 雪乃☆雫のなでしこ日和 のブックマークコメント

 なでしこ3の0.1.0をリリースとゆうことで、まにゅあるもせっせと更新されてる風味だったのでちょっと学んでみようと思ったのです。

 前のしりとりくらいなら、簡単に移植できそうに思ったけど、甘かったorz

 なにしろ、参考に出来る物も少ないから、自分が違ってるのか、3の仕様なのか、まだベータ版ゆえの不備なのかすらわかんないコト多数;;;

 なんとしてもうまくいかず、取りあえずこんな感じ。

 しりとりのルールについて考える前の、とりあえず最後の一文字と先頭の一文字でつないでいくだけのしりとりです。

 は「なでしこ3」なので、万一奇特にもお試ししてみようとゆう方は、ここから。

https://nadesi.com/doc3/index.php?%E3%81%AA%E3%81%A7%E3%81%97%E3%81%933%E7%B0%A1%E6%98%93%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF

#なでしこ3でしりとり
#-----------------------------------------------------------
ルール=「【ルール説明】
・最後に『ん』のつく単語を入力したら負け!
・濁音半濁音はのまま(りんご→ごりら)
・小さな文字は大きな文字で入力してね(紅茶=こうちや)
・長音は読みの通りの母音で入力してね(チーター=ちいたあ)」
ルールと言う。
ルールと表示。

開始語=「なでしこ」
先頭語=。
末尾語=開始語の1だけ文字左部分。

開始語でシリトリする。

●シリトリ(Sで)
  先頭語はSの1だけ文字左部分。
  もし、先頭語=末尾語でなければ、
    「負け!」と言う終わる。
  ここまで。
  末尾語はSの1だけ文字右部分。
  もし、末尾語=「ん」ならば、
    「負け!」と言う終わる。
  ここまで。
  ダイアログIME=「IMEオン」
  「『{S}』{改行}{改行}全角ひらがなで続く単語を入力してね。」と尋ねる。
  もしそれでなければ、
    それでシリトリする。
  違えば、
    「負け!」と言う終わる。
  ここまで。
ここまで。
#-----------------------------------------------------------

 まず変わったのは、もしや繰り返しや関数の終わりに「ここまで」が必要になったことで、めんどくさいけど、色々のことを考えるとこれはこのほうがイイですよね。

 何しろ、なでしこはインデント一つ狂っただけでも事件が起きるのに、掲示板なんかじゃ当然のよーにタブや半角スペースが消えたり、全角スペースに置き換わったりされてしまうから厄介が起きまくりだけど、ブロックを明示できれば、の心配がないもねー。

 あと、配列も変わってるので、よく確認しないと。

 でもまあ、こはまず問題ないとして・・・


 「終わる」で、エラー表示になるって、一体なんで~?

 まあ、終わるからいいけど;


 「カッコ閉じ」「波カッコ閉じ」が、「undefined」となってしまう。

#-----------------------------------------------------------
「{カッコ}なでしこ3{カッコ閉じ}」と表示。
「{波カッコ}なでしこ3{波カッコ閉じ}」と表示。
#-----------------------------------------------------------

 「カッコ」「波カッコ」はこれでいけるのだから、従来どうりの記述でいいハズだと思うんだけど・・・よくわからん~。

 てゆうか、undefinedってなんすか・・・「定義されていない」・・・・・・むむむ~?

 定数として定義されてないって意味なんでしょうか(?_?)

 二重カギ括弧がふつーに使えるようになっていたから、取りあえずそれにしといたけどねーw(いいのか?!)


 して「反復」の時には、「回数」のカウンター機能が働かなくなったんですかね?

 またまた「undefined」が発生~。

 ところが、「」の時には従来どおりっぽい。

#---------------------------
Aは[1,2,3]
Aを反復
  回数言う
  対象表示
ここまで
#---------------------------
3
  回数言う
  「ワン」と表示ここまで
#---------------------------

 まあ、自分でカウンターせばいいだけなんだけど・・・

 ・・・ここで結構はまったんだよ(>_<)


 して、何よりの最大のナゾは・・・

 直前で、「開始語から先頭語取得」している「末尾語」が、「シリトリ」関数の中で参照できないこと。

 これは、いまだにナゾが解明してません(ToT)

#なでしこ3でしりとり2
#-----------------------------------------------------------
除去音=「ー-~・‥….。,、?!」。
変換音=「がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽぁぃぅぇぉゃゅょゎっをゐゑ」
変換後=「かきくけこさしすせたちつてとはひふへほはひふへほあいうえおやゆよわつおいえ」
#-----------------------------------------------------------
●先頭語取得(Sから)
  先頭語はSの1だけ文字左部分の変換音変換。
ここまで

●末尾語取得(Sから)
  S=Sから除去音除去。
  末尾語はSの1だけ文字右部分の変換音変換。
ここまで
#-----------------------------------------------------------
●除去音除去(Sから)
  除去音を文字列分解反復
    S=Sの対象置換。
  ここまで
  Sで戻るここまで

●変換音変換(Sの)
  回数=0
  変換文字=変換後を文字列分解。
  変換音を文字列分解反復
    もし、S=対象ならば、S=変換文字@回数
    回数回数+1
  ここまで
  Sで戻るここまで
#-----------------------------------------------------------

#-----テスト------------------------------------------------
ルール=「【ルール説明】
・小さい文字(拗促音)は大きくするよ(カボチャ→やさい)
・濁音半濁音は清音と同様に繋げられるよ(りんご→こまつな)
・長音は無視できるよ(チーター→たぬき)」
ルールと言う。
ルールと表示。

開始語=「なでしこ」
先頭語=。
末尾語=開始語から先頭語取得。

開始語でシリトリする。

●シリトリ(Sで)
  先頭語はSから先頭語取得。
  もし、先頭語=末尾語でなければ、
    「負け!」と言う終わる。
  ここまで。
  末尾語はSから末尾語取得。
  もし、末尾語=「ん」ならば、
    「負け!」と言う終わる。
  ここまで。
  ダイアログIME=「IMEオン」
  「『{S}』{改行}{改行}全角ひらがなで続く単語を入力してね。」と尋ねる。
  もしそれでなければ、
    それでシリトリする。
  違えば、
    「負け!」と言う終わる。
  ここまで。
ここまで
#-----------------------------------------------------------

 シリトリ関数内では末尾語が「undefined」になってしまっているため、実行するといきなり「負け!」と言われてしまいます(´д`;

 シリトリ関数自体は、冒頭のものとほとんど変わってないですよ?

 「先頭語取得」関数の方が良くないのかと思いきや、先頭語取得せず、最初のと同様に「末尾語=開始語の1だけ文字左部分」としてもダメ、さらには、末尾語=「な」などとしてもやっぱりダメなんですからね。

 むむむむむ~(@_@)

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

2017/07/02 (日)

しりとりのルール

| 00:00 | しりとりのルール - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - しりとりのルール - 雪乃☆雫のなでしこ日和 しりとりのルール - 雪乃☆雫のなでしこ日和 のブックマークコメント

 しりとりのルールなんて、決まり切っているだろうと思われるところですが、検索してみると色々出てきてなかなか難しい!(@_@)

 主に、濁音・半濁音や、長音・拗音・促音の扱いですかね。

●濁音半濁音は、通常はのままですけど(りんご→ごぼう)、より易しいルールで清音化して扱える場合もあります(りんご→こまつな)

●長音は、通常は無視しますけど(チーター→たぬき)、長音の前の文字の母音を使うというルールもあります(チーター=ちいたあ→あしか)。また、いっこ前の文字とセットでという、より難しいルールもあります(チーター→ターキー)

●拗音は、それを通常の文字として扱える場合(カボチャ→やさい)と、いっこ前の文字とセットで(カボチャ→チャーハン)という場合があります

●促音(ちっちゃい「っ」)で終わる単語って、何かありますかね? 通常の日本語的には、擬音や感嘆詞としてしか無いような気がするんだけど・・・もしあった場合、拗音同様大きくするか、前の文字とセットにするか、長音同様無視するか・・・の三択のように思われます。


 さらに、「ぢ」「づ」「を」「ん」などの扱いをどうするかの問題があります

●「ぢ」「づ」などは、清音化する場合は問題ないんですが(はなぢ→ちりとり)、のままの場合、本当にのままだとかなりキビシイので、あと、「コレは一体どっちなんだ?!」・・・とゆうギロンに発展し、しりとりが中断されかねないので、聞いた音の通り「じ」「ず」でOKという場合もあります

●「を」も同様で、も現代語だと助詞の扱いだから固有名詞しかないと思うんだけど、しかもそれを言ったら、「ゐ」「ゑ」も入ってきちゃうんじゃ?! ってことにもなるので、よっぽどな人達じゃない限り、聞いた音の通り「お」「い」「え」で良いことになってると思います。

●近頃「ん」で始まる語もあるじゃーないか!という話もあるらしいんですが(外国語)、それを認めると、逆に「ん」を言ったもん勝ちみたいな感じになっちゃうじゃないですか? 「ん」で終わる単語は、「ぢ」「づ」「を」の比では無く多いので。

 これは、続けられるかどうかではなく、「ん」は禁止ワードであるいう縛りと考えるべきものだと思うんだよね。


 さて・・・

 面目にしりとりのプログラムを作るなら、これらの色々のルールに対応できるべく作っていった方が良いのだろうと思いますが、の最大の問題は、単語リストつくんの面倒! ってところなんで(爆)

 少ない単語で長く続けられるよう、

1,濁音半濁音は清音化。

2,長音は無視。

3,拗音促音は大文字化。

4,「を」などで終わる単語なんか登録しない!(爆)

 ・・・とゆう方針でやっていきたい。

 こんな感じ?

#しりとりテスト
#-----------------------------------------------------------
除去音=「ー-~・‥….。,、?!」。
変換音=「がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽぁぃぅぇぉゃゅょゎっをゐゑ」
変換後=「かきくけこさしすせたちつてとはひふへほはひふへほあいうえおやゆよわつおいえ」
#-----------------------------------------------------------
*先頭語取得(Sから)
  先頭語はSの1文字左部分の変換音変換。

*末尾語取得(Sから)
  S=Sから除去音除去。
  末尾語はSの1文字右部分の変換音変換。
#-----------------------------------------------------------
*除去音除去(Sから)
  (除去音を文字列分解)を反復
    S=Sの対象置換。
  Sで戻る。

*変換音変換(Sの)
  変換文字=変換後を文字列分解。
  (変換音を文字列分解)を反復
    もし、S=対象ならば、S=変換文字¥(回数-1)
  Sで戻る。
#-----------------------------------------------------------

#-----テスト------------------------------------------------
ルール=「【ルール説明】
・小さい文字(拗促音)は大きくするよ(カボチャ→やさい)
・濁音半濁音は清音と同様に繋げられるよ(りんご→こまつな)
・長音は無視できるよ(チーター→たぬき)」
ルールと言う。
ルールと表示。

開始語=「しりとり」
先頭語=。
末尾語=開始語から先頭語取得。

開始語でシリトリする。

*シリトリ(Sで)
  先頭語はSから先頭語取得。
  もし、先頭語=末尾語でなければ、「負け!」と言う終わる。
  末尾語はSから末尾語取得。
  もし、末尾語=「ん」ならば、「負け!」と言う終わる。
  ダイアログIME=「IMEオン」
  「{カッコ}{S}{カッコ閉じ}{改行}{改行}全角ひらがなで続く単語を入力してね。」と尋ねる。
  もしそれならば、「負け!」と言う終わる。
  違えばそれでシリトリする。
#-----------------------------------------------------------

 一人で延々しりとりが続けられますw

 除去音と変換音を、もう少し丁寧に分けて登録して、フラグによって処理を振り分ければ、様々なパターンのルールに対応できるんだろうけど。

 登録しない!なんて言い張らなくても、濁音半濁音や拗促音同様に変換音に突っ込めば、「を」「ゐ」「ゑ」もふつーに変換できたなあwww

 促音を拗音同様大きな文字に変換とゆう取り扱いで良いのか、長音同様除去してしまうかは、悩むところ。

 いや、んな単語は登録しないっ!(爆)

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

2017/06/20 (火)

お休み中・・・

| 23:58 | お休み中・・・ - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - お休み中・・・ - 雪乃☆雫のなでしこ日和 お休み中・・・ - 雪乃☆雫のなでしこ日和 のブックマークコメント

 訳あって、しばらく平行して遊んでいた、カメラとJuliusは、お休み中となっています。

 わっ訳ですか?! それを聞きますか?!?!(誰も聞いてないよ!)

 まあ・・・話せば長い深い深い事情があって(嘘)・・・・パソコンが変わったんですけど・・・・・のノートにはカメラもマイクも内蔵されてないからなんですよ~。しくしくしく。

 もともと、んな物があるいう認識も無く、長年一度も使ったことの無かった機能だったんだけどさぁ~。

 んなわけで、一旦保留にして、しようがないから純粋にしりとりとかオセロとかについて考えていきましょうかねえ。

 できてしまえばJuliusで音声入力に対応させるの自体は別に難しいことじゃないんで。


 さて・・・

 しりとりはまあ、すぐ出来るだろうとは思うんだよね。

 単語リスト作んのがめんどーになってただけで;;;

 でも、いちおう辞書ユーティリティは、だいたいできていた気がする実際にしりとりしながら学習させれるようにしたらいいんじゃ? ・・・みたいなw


 オセロ(リバーシ)は、昔々の大昔に一度作ったことがあります

 N88-日本語Basicで!(爆)

 してコレも、本のとうりにやったら動いたよ! というだけのことですが;

 しかも、の思考ルーチンたるや、ちょっと評価表で角や辺、星の辺りに重みをつけて、あとは、とにかく石が沢山取れるところを選択というものだったので、何しろ信じられないほど弱かったです。

 だいたい、ものの本によれば石を沢山取っていくとゆうのは最悪の戦法で、序盤なんかは取れる石の少ないところを選んでいった方がまだマシという感じらしいんですよ。

 まあ、当時はパソコン自体遅かったので、強いオセロのプログラムはモノスゴク遅かった;

 人の長考は平気でも、こんぴゅーたーのそれは待てないっていうのは、一体なぜなんだろう・・・

 ともかくーゆうわけなので、こはまったく一から考え直さなければなりません。

 でも、ワタシ自体が弱すぎなんで、どうかなあ?

 しかも、結局いまだに、ミニもマックスもアルファもベータもよくわからなんだ;;;


 それにしても、んなムカシからプログラムっぽいコトして遊んでいたのに、本のとうりじゃないプログラムができるようになったのは、なでしこが初なんだよね!

 して、そうしたら、以前に本のとうりに作ったプログラムの意味も、分かるようになった。

 まさに神だね!!(≧▽≦)

めだかめだか2017/06/26 08:01お久しぶりですぅぅぅ

パソコンかえましたかーwいいですねw

とか言ってますが、実は自分もかえました(笑
後は、自分でジャンクを漁ってきたりして組み立てとかしてます(笑


なので、全く同じ状況となります。カメラないです(泣
前のノートがないわけではないですが、今はディスクトップのみ使っている状態ですねー...悲しい←


でですが、壁紙に動画を設定できたら面白そうと思って調べるとめんどくさそうなのばっかだったんで、自分で作ろう!となったわけですが、プログラムの流れとしては...

動画再生

画面内キャプチャ

そのイメージを壁紙として設定


という、流れです。

やはり、キャプチャの部分でかなりのラグが出来てしまいますかね...?
枠なしウィンドウでどうにかして再生するっていう方法しか思いつきませんですた\(^o^)/

違和感なく動画を壁紙にするいい方法はないでしょうかね...w

雪乃☆雫雪乃☆雫2017/06/27 04:21 お久しぶりでした~。
 いやいや、パソコン変えたと言っても、事件あるいは事故なので、ちっともいいことありません。しくしく。

 それはそうと、パソコン起動中ずっと窓内側キャプチャ→壁紙設定を延々ループし続けるってことですかΣ(゜д゜;
 キャプチャの部分でラグとかいう問題以前に、モノスゴク負荷が掛かりませんかね(涙)
 それと、こうゆう用途に、窓内側キャプチャはまったく使えないと思いますよ。
 遅いとか以前に、この命令って文字通り、目的の窓の内側をそのままキャプチャするヤツなんで、動画を再生しているウィンドウを小さくしたら、その分しかキャプチャされないし、そのウィンドウの上に、別のウィンドウやタスクバーなんかがかぶると、それも一緒にキャプチャされてしまうので。
 カメラの時に窓内側キャプチャを見捨てたのは、ワタシ個人のことで言えば、主にそっちの問題でした;

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

2017/05/09 (火)

Julius用辞書ユーティリティ

| 01:54 | Julius用辞書ユーティリティ - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - Julius用辞書ユーティリティ - 雪乃☆雫のなでしこ日和 Julius用辞書ユーティリティ - 雪乃☆雫のなでしこ日和 のブックマークコメント

 さて、長らく放置していたナコ様。

 しりとりは、プログラム自体は難しいことは無いんだけど、単語リストを作るのが、なかなか大変な作業じゃないですか?

 それがなんかもうめんどーでめんどーで・・・;;;

 しかも、Julius用のリストの他に、同じ内容でしりとり用のリストを作らなきゃならない

 しりとり用の読みと、Julius用の音素列に変換する用の読みは、ほとんど同じだけどちょっと違うしさー。(「さくらそう」と「さくらー」みたいな)

 AquesTalk用の音声記号列なんかに至っては、アクセント記号を入れてはいちいち聞いてみなくちゃぁ、どんなもんだか分かんないしさー。(しかも、田舎者だから、ようく調整して「よし、コレだ!」と思った発音が、実は訛ってるんじゃないかってゆう不安(爆))


 とにかくまー、最初エクセルで作ってたんだけど、なでしこで辞書ユーティリティでもつくってみようかということになった。

 読みを入れてボタンを押したらの場で音素列に変換してくれたり、音声記号列を入れてボタンを押したら喋ってくれたりで確認しながら作業を進めたい。

 して、Julius用としりとりようの二つのファイルとして保存できる的な?(Julius用の単語リストは、余計なモノが入ってるとJuliusさんが起動すらしなくなるので、どうしてもファイルを分けなければならないんだけど、万一齟齬があるとしりとりにならなくなっちゃうんで、一つのファイルから自動的に二つにして保存したい)

 何かと評判のイマイチな(?)なでしこのグリッドですけど、実はIMEATOKの辞書ユーティリティが、同じような仕様なんです。

 おらく、エクセルなどのようなののグリッドとは、用途の異なるグリッドなんだろうね。辞書ユーティリティなんかには最適・・・なのかもしない(どうだろ;)


 んなこんなでとりあえず、前に作った変換辞書を使い、Julius用単語リスト入力が出来るところまで作って、またまたひらめき脇道へ逸れました(^▽^;

 カテゴリの項目を作って、vocaファイルとしても出力できるようにしてみたらどうだろう(って、やってみたことも無いのに無謀;)

 でも、なんとなくこんな感じかなあ?とゆうのができました☆

 しか~し、の機能を自分で使う日が来るのかは不明!(爆)

 Perlをインストールしてないからコンパイルできないんで(入れろよ!)、出力したvocaファイルが使えるかどうかは未確認です(えっ;)

 あああ、誰か使ってみてくれないかなあ・・・www

#-----------------------------------------------------------------------
# Julius用辞書ユーティリティ
#
# 「大語彙連続音声認識エンジン Julius」http://julius.osdn.jp/index.php
# で使用する、単語リスト及びVOCAファイルを作成できます。
#-----------------------------------------------------------------------

#-----宣言--------------------------------------------------
ファイル形式とは文字列=「タブ区切り(*.tsv;*.yomi)|*.tsv;*.yomi|テキストファイル(*.txt)|*.txt|すべて(*.*)|*.*」
列見出しとは文字列=「単語        ,読み(ひらがな)  ,Julius音素列    ,vocaカテゴリ 」
ファイル名とは文字列。
辞書データとは文字列保存データとは文字列。
カテゴリデータとは配列。
編集行とは整数=0
新規フラグとは整数オフ。
変換辞書とは配列。変換辞書設定。
無音用エントリとは配列=「## 無音用エントリ
% NS_B	# 文頭無音
 	silB
% NS_E	# 文末無音
。	silE
% NOISE	# 文中ショートポーズ
、	sp」

列_単語とは整数=0。
列_読みとは整数=1。
列_音素列とは整数=2。
列_カテゴリとは整数=3。
#-----------------------------------------------------------

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

#---メニュー----
『#親部品名,部品名,テキスト,ショートカット,オプション,イベント
なし,ファイルメニュー,ファイル(&F),,,
 -,新規メニュー,新規作成(&N),Ctrl+N,,新規作成。
 -,開くメニュー,開く(&O),Ctrl+O,,ファイル開く。
 -,-,,,,
 -,JDICメニュー,Julius用単語リスト出力(&D),,,JDIC出力。
 -,VOCAメニュー,Julius用vocaファイル出力(&V),,,VOCA出力。
 -,-,,,,
 -,閉じるメニュー,閉じる(&X),Ctrl+X,,終わる
なし,編集メニュー,編集(&E),,,
 -,単語登録メニュー,新規単語登録(&N),,,(辞書データの要素数)で登録編集開始。
 -,単語編集メニュー,編集(&E),,,(辞書グリッドの値-1)で登録編集開始。
 -,-,,,,
 -,読みソートメニュー,読みでソート(&S),,,読みソート。
 -,カテゴリソートメニュー,カテゴリでソート(&C),,,カテゴリソート。
 -,-,,,,
 -,単語削除メニュー,削除(&D),Ctrl+D,,単語削除。
 -,-,,,,
 -,一括メニュー,読み→音素列一括変換(&A),,,音素列一括変換。
なし,ヘルプメニュー,ヘルプ(&H),,,
 -,操作説明メニュー,操作説明(&H),Ctrl+H,,操作説明
 -,-,,,,
 -,バージョンメニュー,バージョン情報(&A),Ctrl+A,,バージョン
』をメニュー一括作成。

#---母艦----
母艦について
  タイトルは「Julius用辞書ユーティリティ」
  クライアント幅は640。
  クライアント高さは480。
#------------------------------------------------------------

#-----GUI-------------------------------------------------
#---グリッド-----
辞書グリッドとはグリッド
これについて
  レイアウトは全体
  文字サイズは10。
  アイテムは「{列見出し}{改行}{辞書データ}」
  自動ソートはオフ。
  ダブルクリックした時は~(辞書グリッドの値-1)で登録編集開始。

#---単語登録/編集フォーム-----
編集フォームとはフォームこれについて
  可視はオフ。タイトルは「単語登録/編集」
  クライアント幅は400。クライアント高さは250。
  オフに最大化ボタン有効変更。
  オフに最小化ボタン有効変更。
  キー押した時は~
    もし、(シフトキー=CTRL)かつ(押された仮想キー=83)ならば、次単語。  #CTRL+S
編集フォームウィンドウ背景色画面クリア。

#編集用
部品間隔は20
カテゴリラベルとはラベルこれについて
  親部品は編集フォーム。
  テキストは「カテゴリ:」
  位置は「15,15」

単語ラベルとはラベルこれについて
  親部品は編集フォーム。
  テキストは「単 語:」
  位置はカテゴリラベルの下側。

読みラベルとはラベルこれについて
  親部品は編集フォーム。
  テキストは「読 み:」
  位置は単語ラベルの下側。

音素列ラベルとはラベルこれについて
  親部品は編集フォーム。
  テキストは「音素列:」
  位置は読みラベルの下側。

部品間隔は0
カテゴリコンボとはコンボこれについて
  親部品は編集フォーム。幅は180。
  位置はカテゴリラベルの右側。
  アイテムはカテゴリデータ。値は0。

単語エディタとはエディタこれについて
  親部品は編集フォームIMEIMEオン。
  位置は単語ラベルの右側。幅は300。

読みエディタとはエディタこれについて
  親部品は編集フォームIMEIMEオン。
  位置は読みラベルの右側。幅は300。

音素列エディタとはエディタこれについて
  親部品は編集フォームIMEIMEオフ。
  位置は音素列ラベルの右側。幅は300。
  有効はオフ。背景色はウィンドウ背景色部品間隔は5
カテゴリ追加ボタンとはボタン
これについて
  親部品は編集フォーム。
  位置はカテゴリコンボの右側。幅は100。
  クリックした時は~
    カテゴリコンボを注目。
    ダイアログタイトルは「カテゴリ追加」
    ダイアログIMEは「IMEオフ」
    「追加するカテゴリを入力して下さい。{改行}(%は自動的に付与されます)」と尋ねる。
    もしそれでなければ、
      カテゴリデータは「{カテゴリデータ}{改行}%{それ}」
      カテゴリコンボのアイテムはカテゴリデータ。
      カテゴリコンボの値は(カテゴリデータの要素数-1)

#変換設定
音素列入力フラグとはチェック
これについて
  親部品は編集フォーム。
  位置は音素列エディタの下側。幅は250。
  テキストは「音素列を手入力する」
  値はオフ。
  クリックした時は~
    もし、音素列入力フラグの値がオンならば、
      音素列エディタの有効はオン。
      音素列エディタの背景色は白色。
      音素列自動変換ボタンの有効はオフ。
    違えば、
      音素列エディタの有効はオフ。
      音素列エディタの背景色はウィンドウ背景色。
      音素列自動変換ボタンの有効はオン。

音素列自動変換ボタンとはボタン
これについて
  親部品は編集フォーム。
  位置は「70,165」。幅は250。
  テキストは「読み→音素列自動変換」
  クリックした時は~音素列自動変換。

自動変換注意ラベルとはラベル
これについて
  親部品は編集フォーム。
  位置は音素列自動変換ボタンの下側
  テキストは「(自動変換すると手入力の内容は上書きされます)」

#ボタン
次単語ボタンとはボタンこれについて
  親部品は編集フォーム。
  位置は「10,220」。テキストは「次へ(S)」
  クリックした時は~次単語。
*次単語
  もし、単語エディタのテキスト=ならば、登録キャンセル。
  違えば、
    「次」で登録編集結果反映。
    辞書グリッドの値=辞書グリッドの値+1。
    (辞書グリッドの値-1)で登録編集開始。

OKボタンとはボタンこれについて
  親部品は編集フォーム。
  位置は「230,220」
  クリックした時は~
    もし、単語エディタのテキスト=ならば、登録キャンセル。
    違えば、
      「OK」で登録編集結果反映。

部品間隔は10。
キャンセルボタンとはボタン。。
これについて
  親部品は編集フォーム。
  位置はOKボタンの右側。
  クリックした時は~登録キャンセル。
*登録キャンセル
  もし、新規フラグ=オンならば、辞書データの(辞書グリッドの値-1)を配列削除。
  編集フォームを閉じる。
#-----------------------------------------------------------

#-----メイン------------------------------------------------
母艦の可視はオン。
ファイル開くもし、ファイル名がならば、
  「新規作成しますか?」で二択。
  もしそれはいならば、新規作成。
  違えば終わるもし、ファイル名がならば終わる。
#-----------------------------------------------------------
*新規作成
  「無題.tsv」でファイル形式の保存ファイル選択。
  ファイル名はそれ。
  もしそれでなければ、をファイル名に保存。
  違えば戻る。
  辞書データは。
  母艦のタイトルは「{ファイル名からファイル名抽出} - Julius用辞書ユーティリティ」
  辞書グリッドのアイテムは「{列見出し}{改行}{辞書データ}」

*ファイル開く
  ファイル名はファイル形式のファイル選択。
  もしそれでなければ、それ開く。
  違えば抜ける。
//  辞書データはそれの「{タブ}+」を「{タブ}」に正規表現置換。
//  辞書データはそれの「  +」を「{タブ}」に正規表現置換。
  辞書データはそれTSV取得。
  母艦のタイトルは「{ファイル名からファイル名抽出} - Julius用辞書ユーティリティ」
  辞書グリッドのアイテムは「{列見出し}{改行}{辞書データ}」
  カテゴリデータは「{改行}{辞書データの列_カテゴリを表列取得}」
  カテゴリデータはカテゴリデータの0で表重複削除。
  カテゴリデータ¥0=「(なし)」
  カテゴリコンボのアイテムはカテゴリデータ。

#-----------------------------------------------------------
*登録編集開始(Aで)
  もし(辞書グリッドの値)>(辞書データの要素数ならば、新規フラグ=オン。
  違えば、新規フラグ=オフ。
  編集行=A。
  単語エディタのテキストは辞書データ¥編集行,列_単語。
  読みエディタのテキストは辞書データ¥編集行,列_読み。
  音素列エディタのテキストは辞書データ¥編集行,列_音素列。
  もし、(辞書データ¥編集行,3)=ならば、カテゴリコンボの値は0
  違えば、カテゴリコンボの値はカテゴリデータの1から(辞書データ¥編集行,列_カテゴリ)を配列検索。
  単語エディタを注目。
  もし、編集フォームの可視=オフならば、編集フォームをモーダル表示。

*登録編集結果反映(Fで)
  辞書データ¥編集行,列_単語は単語エディタのテキスト。
  辞書データ¥編集行,列_読みは読みエディタのテキスト。
  辞書データ¥編集行,列_音素列は音素列エディタのテキスト。
  もし、カテゴリコンボの値≦0ならば、
    辞書データ¥編集行,列_カテゴリ=
  違えば、
    辞書データ¥編集行,列_カテゴリはカテゴリデータ¥(カテゴリコンボの値)
  編集結果保存。
  もし、F=「OK」ならば、編集フォームを閉じる。
#-----------------------------------------------------------
*編集結果保存
  辞書グリッドのアイテムは「{列見出し}{改行}{辞書データ}」
  保存データは辞書データを表TSV変換。
  保存データは保存データの「"」を置換。
  保存データをファイル名に保存。
#-----------------------------------------------------------
*単語削除
  ダイアログタイトルは「削除」
  「単語:{辞書データ¥(辞書グリッドの値-1),列_単語}{改行}読み:{辞書データ¥(辞書グリッドの値-1),1}{改行}{改行} を削除します。よろしいですか?」で二択。
  もしそれはいならば、
    辞書データの(辞書グリッドの値-1)を配列削除。
    編集結果保存。
#-----------------------------------------------------------
*音素列自動変換
  一時は読みエディタのテキスト。
  変換辞書で反復
    一時は一時の(対象¥0)を(対象¥1)へ正規表現置換。
  音素列エディタのテキストは一時。

*音素列一括変換
  ダイアログタイトルは「一括変換」
  「一括変換を行うと、手入力した音素列データも{改行}全て上書きされます。よろしいですか?」で二択。
  もしそれはいならば、
    辞書データで反復。
      一時は対象¥1。
      変換辞書で反復
        一時は一時の(対象¥0)を(対象¥1)へ正規表現置換。
      辞書データ¥(回数-1),列_音素列は一時
    編集結果保存。
#-----------------------------------------------------------
*読みソート
  辞書データの列_読みを表ソート。
  編集結果保存。

*カテゴリソート
  もし、辞書データの列_カテゴリで「%*」を0から表曖昧検索=-1でなければ、
    辞書データの列_カテゴリを表ソート。
    編集結果保存。
#-----------------------------------------------------------
*JDIC出力
  JDICファイル名はファイル名を「.jdic」に拡張子変更。
  もし、JDICファイル名の存在はいならば、
    「{JDICファイル名からファイル名抽出}は既に存在します。{改行}上書きしますか?」で二択。
    もしそれいいえならば戻る。
  JDICデータ¥0は辞書データの列_単語を表列取得。
  JDICデータ¥1は辞書データの列_音素列を表列取得。
  JDICデータはJDICデータを表行列交換。
  JDICデータはJDICデータを表TSV変換。
  JDICデータはJDICデータの「"」を置換。
  JDICデータをJDICファイル名に保存。
  「{JDICファイル名からファイル名抽出}を作成しました。」と言う。

*VOCA出力
  VOCAファイル名はファイル名を「.voca」に拡張子変更。
  もし、VOCAファイル名の存在はいならば、
    「{VOCAファイル名からファイル名抽出}は既に存在します。{改行}上書きしますか?」で二択。
    もしそれいいえならば戻る。
  カテゴリ整理。
  一時データ¥0は辞書データの列_単語を表列取得。
  一時データ¥1は辞書データの列_音素列を表列取得。
  一時データ¥2は辞書データの列_カテゴリを表列取得。
  一時データは一時データを表行列交換。
  一時データは一時データの列_カテゴリを表ソート。

  VOCAデータは。
  カテゴリデータで反復。
    もし対象=「(なし)」ならば続ける。
    VOCAデータは「{VOCAデータ}{対象}{改行}」。
    VOCAデータは「{VOCAデータ}{一時データの2から対象表完全一致ピックアップ}{改行}{改行}」
  VOCAデータは「{VOCAデータ}{無音用エントリ}」
  VOCAデータはVOCAデータの2を表列削除。

  VOCAデータはVOCAデータを表TSV変換
  VOCAデータはVOCAデータの「"」を置換。
  VOCAデータをVOCAファイル名に保存。
  「{VOCAファイル名からファイル名抽出}を作成しました。」と言う。

*カテゴリ整理
  一時データはカテゴリデータ。
  一時データで反復。
    もし対象=「(なし)」ならば続ける
    もし、辞書データの列_カテゴリで対象を0から表検索=-1ならば、
      カテゴリデータの(回数-1)を配列削除。
  カテゴリコンボのアイテムはカテゴリデータ。

#-----------------------------------------------------------------------
*操作説明
  ダイアログタイトルは「せつめい」
  「・起動すると、{カッコ}開く{カッコ閉じ}から始まるので、編集したいファイルを選択。
 {カッコ}キャンセル{カッコ閉じ}すると、ファイルの新規作成になります。
 ファイルの形式はTSVで、拡張子は{カッコ}*.tsv{カッコ閉じ}{カッコ}*.txt{カッコ閉じ}{カッコ}*.yomi{カッコ閉じ}など。{改行}
・項目をダブルクリックすると、単語登録/編集フォーム開くので、
 {カッコ}単語{カッコ閉じ}と{カッコ}読み{カッコ閉じ}を入力して、{カッコ}音素列自動変換{カッコ閉じ}するだけ。
 (音素列は編集メニューから、まとめて一括変換もできます)
 [CTRL+S]で、次の単語の編集に移れます。
 セーブは都度自動的に行われますが{カッコ}単語{カッコ閉じ}は必須でだと保存されません。{改行}
・入力が完了したら、ファイルメニューから{カッコ}Julius用単語リスト出力{カッコ閉じ}
 拡張子は{カッコ}*.jdic{カッコ閉じ}としています。{改行}
・{カッコ}カテゴリ{カッコ閉じ}の項目を追加し、VOCAファイル作成にも対応しました。
 ファイルメニューから{カッコ}Julius用vocaファイル出力{カッコ閉じ}
 無音用エントリは自動挿入されます。不要の場合は削除して下さい。
 (vocaの中にgrammarで使用してない項目があるとコンパイルが失敗するらしい)
」と言うバージョン
  ダイアログタイトルは「バージョン情報」
  「{二重カッコ}Julius用{改行} 辞書ユーティリティ{二重カッコ閉じ}{改行}    Version 1.11{改行}{改行}   by 雪乃☆雫」と言う。
#-----------------------------------------------------------------------
*変換辞書設定
  # ひらがな -> Julius 標準モデル用変換辞書(yomi2voca.plより抽出)
  変換辞書=「う゛ぁ," b a"{~}う゛ぃ," b i"{~}う゛ぇ," b e"{~}う゛ぉ," b o"{~}う゛ゅ," by u"
ぅ゛," b u"{~}あぁ," a a"{~}いぃ," i i"{~}いぇ," i e"{~}いゃ," y a"{~}うぅ," u:"{~}えぇ," e e"{~}おぉ," o:"
かぁ," k a:"{~}きぃ," k i:"{~}くぅ," k u:"{~}くゃ," ky a"{~}くゅ," ky u"{~}くょ," ky o"{~}けぇ," k e:"{~}こぉ," k o:"
がぁ," g a:"{~}ぎぃ," g i:"{~}ぐぅ," g u:"{~}ぐゃ," gy a"{~}ぐゅ," gy u"{~}ぐょ," gy o"{~}げぇ," g e:"{~}ごぉ," g o:"
さぁ," s a:"{~}しぃ," sh i:"{~}すぅ," s u:"{~}すゃ," sh a"{~}すゅ," sh u"{~}すょ," sh o"{~}せぇ," s e:"{~}ぉ," s o:"
ざぁ," z a:"{~}じぃ," j i:"{~}ずぅ," z u:"{~}ずゃ," zy a"{~}ずゅ," zy u"{~}ずょ," zy o"{~}ぜぇ," z e:"{~}ぞぉ," z o:"
たぁ," t a:"{~}ちぃ," ch i:"{~}つぁ," ts a"{~}つぃ," ts i"{~}つぅ," ts u:"{~}つゃ," ch a"{~}つゅ," ch u"{~}つょ," ch o"
つぇ," ts e"{~}つぉ," ts o"{~}てぇ," t e:"{~}とぉ," t o:"
だぁ," d a:"{~}ぢぃ," j i:"{~}づぅ," d u:"{~}づゃ," zy a"{~}づゅ," zy u"{~}づょ," zy o"{~}でぇ," d e:"{~}どぉ," d o:"
なぁ," n a:"{~}にぃ," n i:"{~}ぬぅ," n u:"{~}ぬゃ," ny a"{~}ぬゅ," ny u"{~}ぬょ," ny o"{~}ねぇ," n e:"{~}のぉ," n o:"
はぁ," h a:"{~}ひぃ," h i:"{~}ふぅ," f u:"{~}ふゃ," hy a"{~}ふゅ," hy u"{~}ふょ," hy o"{~}へぇ," h e:"{~}ほぉ," h o:"
ばぁ," b a:"{~}びぃ," b i:"{~}ぶぅ," b u:"{~}ふゃ," hy a"{~}ぶゅ," by u"{~}ふょ," hy o"{~}べぇ," b e:"{~}ぼぉ," b o:"
ぱぁ," p a:"{~}ぴぃ," p i:"{~}ぷぅ," p u:"{~}ぷゃ," py a"{~}ぷゅ," py u"{~}ぷょ," py o"{~}ぺぇ," p e:"{~}ぽぉ," p o:"
まぁ," m a:"{~}みぃ," m i:"{~}むぅ," m u:"{~}むゃ," my a"{~}むゅ," my u"{~}むょ," my o"{~}めぇ," m e:"{~}もぉ," m o:"
やぁ," y a:"{~}ゆぅ," y u:"{~}ゆゃ," y a:"{~}ゆゅ," y u:"{~}ゆょ," y o:"{~}よぉ," y o:"
らぁ," r a:"{~}りぃ," r i:"{~}るぅ," r u:"{~}るゃ," ry a"{~}るゅ," ry u"{~}るょ," ry o"{~}れぇ," r e:"{~}ろぉ," r o:"
わぁ," w a:"{~}をぉ," o:"{~}う゛," b u"{~}でぃ," d i"{~}でぇ," d e:"{~}でゃ," dy a"{~}でゅ," dy u"{~}でょ," dy o"
てぃ," t i"{~}てぇ," t e:"{~}てゃ," ty a"{~}てゅ," ty u"{~}てょ," ty o"{~}すぃ," s i"
ずぁ," z u a"{~}ずぃ," z i"{~}ずぅ," z u"{~}ずゃ," zy a"{~}ずゅ," zy u"{~}ずょ," zy o"{~}ずぇ," z e"{~}ずぉ," z o"
きゃ," ky a"{~}きゅ," ky u"{~}きょ," ky o"{~}しゃ," sh a"{~}しゅ," sh u"{~}しぇ," sh e"{~}しょ," sh o"
ちゃ," ch a"{~}ちゅ," ch u"{~}ちぇ," ch e"{~}ちょ," ch o"{~}とぅ," t u"{~}とゃ," ty a"{~}とゅ," ty u"{~}とょ," ty o"
どぁ," d o a"{~}どぅ," d u"{~}どゃ," dy a"{~}どゅ," dy u"{~}どょ," dy o"{~}どぉ," d o:"
にゃ," ny a"{~}にゅ," ny u"{~}にょ," ny o"{~}ひゃ," hy a"{~}ひゅ," hy u"{~}ひょ," hy o"
みゃ," my a"{~}みゅ," my u"{~}みょ," my o"{~}りゃ," ry a"{~}りゅ," ry u"{~}りょ," ry o"
ぎゃ," gy a"{~}ぎゅ," gy u"{~}ぎょ," gy o"{~}ぢぇ," j e"{~}ぢゃ," j a"{~}ぢゅ," j u"{~}ぢょ," j o"
じぇ," j e"{~}じゃ," j a"{~}じゅ," j u"{~}じょ," j o"{~}びゃ," by a"{~}びゅ," by u"{~}びょ," by o"
ぴゃ," py a"{~}ぴゅ," py u"{~}ぴょ," py o"{~}うぁ," u a"{~}うぃ," w i"{~}うぇ," w e"{~}うぉ," w o"
ふぁ," f a"{~}ふぃ," f i"{~}ふぅ," f u"{~}ふゃ," hy a"{~}ふゅ," hy u"{~}ふょ," hy o"{~}ふぇ," f e"{~}ふぉ," f o"
あ," a"{~}い," i"{~}う," u"{~}え," e"{~}お," o"{~}か," k a"{~}き," k i"{~}く," k u"{~}け," k e"{~}こ," k o"
さ," s a"{~}し," sh i"{~}す," s u"{~}せ," s e"{~}," s o"{~}た," t a"{~}ち," ch i"{~}つ," ts u"{~}て," t e"{~}と," t o"
な," n a"{~}に," n i"{~}ぬ," n u"{~}ね," n e"{~}の," n o"{~}は," h a"{~}ひ," h i"{~}ふ," f u"{~}へ," h e"{~}ほ," h o"
ま," m a"{~}み," m i"{~}む," m u"{~}め," m e"{~}も," m o"{~}ら," r a"{~}り," r i"{~}る," r u"{~}れ," r e"{~}ろ," r o"
が," g a"{~}ぎ," g i"{~}ぐ," g u"{~}げ," g e"{~}ご," g o"{~}ざ," z a"{~}じ," j i"{~}ず," z u"{~}ぜ," z e"{~}ぞ," z o"
だ," d a"{~}ぢ," j i"{~}づ," z u"{~}で," d e"{~}ど," d o"{~}ば," b a"{~}び," b i"{~}ぶ," b u"{~}べ," b e"{~}ぼ," b o"
ぱ," p a"{~}ぴ," p i"{~}ぷ," p u"{~}ぺ," p e"{~}ぽ," p o"{~}や," y a"{~}ゆ," y u"{~}よ," y o"
わ," w a"{~}ゐ," i"{~}ゑ," e"{~}を," o"{~}ん," N"{~}っ," q"{~}ー,":"
ぁ," a"{~}ぃ," i"{~}ぅ," u"{~}ぇ," e"{~}ぉ," o"{~}ゎ," w a"{~}ぉ," o"{~}"^ ([a-z])","$1"{~}"\:+",":"」をCSV取得。
#-----------------------------------------------------------------------

 そうそう、またまたナゾが発生し、それは一応解決できたんだけど、これまで知らなかった事実が発覚したので記しておきます。

 編集フォームを開いた時、単語エディタを注目させるようにしたら、それまでは問題なかったカテゴリ追加時の、ダイアログIME=「IMEオフ」が効かなくなってしまったんです。

 どうやら、エディタに設定しているIMEオンが優先されてしまうらしいです。

 ダイアログを開く前に、IMEの設定をしていないカテゴリコンボにフォーカスを合わせるようにしたらうまく行きました。

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

2017/04/21 (金)

フルスクリーンにしたい!2

| 16:35 | フルスクリーンにしたい!2 - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - フルスクリーンにしたい!2 - 雪乃☆雫のなでしこ日和 フルスクリーンにしたい!2 - 雪乃☆雫のなでしこ日和 のブックマークコメント

 以前、出来そうな気はしてたけど、着手しなかった、APIによるフルスクリーン。

 「SetWindowLong」とゆうので、ウィンドウスタイルの設定が出来るようなので、やってみます。

#-----------------------------------------------------------
#https://msdn.microsoft.com/ja-jp/library/cc411203.aspx
●SetWindowLong(hWnd,nIndex,dwNewLong) =DLL("user32.dll",
"LONG SetWindowLongA(
  HWND hWnd,       // ウィンドウのハンドル
  int nIndex,      // 設定する値のオフセット
  LONG dwNewLong   // 新しい値
)")
#-----------------------------------------------------------

 設定する値の・・・おふせっとってなんすか;;;

 ・・・どんなデータを書き換えるかを、まずここで指定するってコトらしい。

 どんなデータが書き換えられんのかとゆうと・・・MSDNに色々書いてあっても、何のことやらさっぱりわからない;・・・けど、とりあえずウィンドウスタイルを設定するには「GWL_STYLE」を指定すればよさそう

 GWL_STYLE=-16のようです。

 相変わらず、英語版にだけ値が載ってるとかヤメテ><

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


 そうして、最後の「新しい値」の部分に、「WS_VISIBLE」的なフラグを設定していく。

 論理和でねwww

https://msdn.microsoft.com/ja-jp/library/czada357.aspx

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


#-----------------------------------------------------------
!GWL_STYLEとは整数=-16     # ウィンドウスタイル
●窓ハンドルスタイル設定(ハンドルをスタイルに)
  SetWindowLong(ハンドル,GWL_STYLE,スタイル)

母艦のハンドルをWS_VISIBLEに窓ハンドルスタイル設定。
#-----------------------------------------------------------

 これで行けるかと思ったら、行かなかった。

 MSDNをようく読むと・・・

ウィンドウデータの中には、キャッシュされており、SetWindowLong 関数を使って
変更しても SetWindowPos 関数を呼び出すまでは有効にならないものもあります。
特に、フレームスタイルを変更した場合は、SWP_FRAMECHANGED フラグをセットして
 SetWindowPos 関数を呼び出すさなければ、キャッシュが正しく更新されません。

 ・・・なんて?ヽ(;´Д`)ノ

 ようするに、SetWindowLongでウィンドウの属性を変更しても、SetWindowPos関数を呼んで反映させるまでは、変更されない・・・的な。

 ここで、前フルスクリーンをやった時に、なんだか分かんないから取りあえず無視した「ウィンドウ位置のオプション」が発生。ここに「SWP_FRAMECHANGED」を指定するとゆうことのようです。

 どうやら、SWP_FRAMECHANGED=$20のようです。

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

#-----------------------------------------------------------
!GWL_STYLEとは整数=-16     # ウィンドウスタイル
!SWP_FRAMECHANGEDとは整数=$20  # SetWindowLong関数を使用後に新しいフレームスタイルの設定を適用
●窓ハンドルスタイル設定(ハンドルを{数値=0}X,{数値=0}Y,{数値=0}W,{数値=0}Hでスタイルに)
  SetWindowLong(ハンドル,GWL_STYLE,スタイル)
  SetWindowPos(ハンドル,0,X,Y,W,H,SWP_FRAMECHANGED)
  # SetWindowLongによるウィンドウの属性変更を反映させるには、SetWindowPosでSWP_FRAMECHANGEDを指定して反映させる必要ある。
#-----------------------------------------------------------

 できた!

 でもこれは、なでしこ標準のスタイル設定とは併用出来ないもよう。

 なんで、「枠固定」のウィンドウも、SetWindowLongを使って設定してやらなければならない

 何も無いウィンドウにフラグを追加して、足していくイメージ

 最大化ボタンや最小化ボタンはわざわざ外していたくらいだから、このくらいで行けそう

!WS_VISIBLEとは整数=$10000000  # 初期状態(枠なし)で表示。
!WS_CAPTIONとは整数=$C00000   # タイトルバーを持つ。
!WS_SYSMENUとは整数=$80000   # システムメニューボタン母艦のハンドルを0,0,640,480でWS_VISIBLE||WS_CAPTION||WS_SYSMENUに窓ハンドルスタイル設定。

 できた♪

#窓ハンドルスタイル設定
#-----------------------------------------------------------
!母艦設計=「母艦の可視はオフ母艦黒色画面クリア母艦枠固定中央表示。
2秒待つ母艦枠無全画面表示。
2秒待つ母艦枠固定中央表示。
#-----------------------------------------------------------
!WS_VISIBLEとは整数=$10000000  # 初期状態(枠なし)で表示。
!WS_DISABLEDとは整数=$8000000    # 初期状態で非表示。
!WS_CAPTIONとは整数=$C00000   # タイトルバーを持つ
!WS_SYSMENUとは整数=$80000   # システムメニューボタン母艦枠固定中央表示
  母艦の可視はオフ。
  母艦ハンドルをWS_DISABLED||WS_CAPTION||WS_SYSMENUに窓ハンドルスタイル設定。
  母艦のクライアント幅は640。母艦のクライアント高さは480。
    母艦ハンドルを(デスクトップW-母艦の幅)/2,(デスクトップH-母艦の高さ)/2,母艦の幅,母艦の高さでWS_VISIBLE||WS_CAPTION||WS_SYSMENUに窓ハンドルスタイル設定。
  母艦の可視はオン。  #オンにしなくてもウィンドウは表示されるけど、タスクバー表示されなくなる!

*母艦枠無全画面表示
  母艦の可視はオフ。
  母艦ハンドルを0,0,デスクトップW,デスクトップHでWS_VISIBLEに窓ハンドルスタイル設定。
  母艦の可視はオン。
#-----------------------------------------------------------
#https://msdn.microsoft.com/ja-jp/library/cc411203.aspx
●SetWindowLong(hWnd,nIndex,dwNewLong) =DLL("user32.dll",
"LONG SetWindowLongA(
  HWND hWnd,       // ウィンドウのハンドル
  int nIndex,      // 設定する値のオフセット
  LONG dwNewLong   // 新しい値
)")

!GWL_STYLEとは整数=-16     # ウィンドウスタイル
!SWP_FRAMECHANGEDとは整数=$20  # SetWindowLong関数を使用後に新しいフレームスタイルの設定を適用
●窓ハンドルスタイル設定(ハンドルを{数値=0}X,{数値=0}Y,{数値=0}W,{数値=0}Hでスタイルに)
  SetWindowLong(ハンドル,GWL_STYLE,スタイル)
  SetWindowPos(ハンドル,0,X,Y,W,H,SWP_FRAMECHANGED)
    # SetWindowLongでウィンドウスタイルを変更した後は、SetWindowPosでSWP_FRAMECHANGEDを指定して反映させる必要ある。
#-----------------------------------------------------------
#https://msdn.microsoft.com/ja-jp/library/cc411206.aspx
●SetWindowPos(hWnd,hWndInsertAfter,X,Y,cx,cy,uFlags) =DLL("user32.dll",
"BOOL SetWindowPos(
HWND hWnd,             // ウィンドウのハンドル
HWND hWndInsertAfter,  // 配置順序のハンドル…?
int X,                 // 横方向の位置
int Y,                 // 縦方向の位置
int cx,                // 幅
int cy,                // 高さ
UINT uFlags            // ウィンドウ位置のオプション
)")

●窓ハンドル位置サイズ設定(ハンドルをX,Y,W,Hに)
  SetWindowPos(ハンドル,0,X,Y,W,H,0)
#-----------------------------------------------------------

※重要!(ワタシ的にw)

 クライアント幅、クライアント高さでウィンドウのサイズを設定したい場合、まずウィンドウスタイルを変更してから設定しないと、枠幅やタイトルバー分サイズがずれてしまう。

母艦枠固定中央表示
  母艦のクライアント幅は640。母艦のクライアント高さは480。
  母艦ハンドルを(デスクトップW-母艦の幅)/2,(デスクトップH-母艦の高さ)/2,母艦の幅,母艦の高さでWS_VISIBLE||WS_CAPTION||WS_SYSMENUに窓ハンドルスタイル設定。
  母艦の可視はオン

 コレじゃダメだったんです。

 API的には、SetWindowLongでスタイル設定後にSetWindowPosでサイズを設定しているんだけど、やっぱりSWP_FRAMECHANGEDするまでは見た目だけじゃ無く反映されてないようで、母艦の幅と高さは元のウィンドウのサイズのままなので、このあとクライアント幅、クライアント高さを言わせると、サイズが変わってしまっている。

 (枠なしからの場合、タイトルバー分があるから顕著だけど、枠可変から枠固定の場合も、枠の幅がちょこっと違うんだよね、コレが;)

 さらに、最初からVISIBLEに設定すると、クライアント幅と高さを設定した時に、違う位置にチラッと見えてしまうため、なんだかムダっぽいけど一旦非表示でスタイルだけ設定した後、再び位置サイズとともにVISIBLEにしてみている。

 の場合、母艦の可視はオフを入れないと、全画面からウィンドウ表示戻る時、全画面の表示が残って(?)おかしなことになるみたい。

(なんでのようにしたんだったか、後からすぐ忘れるので、このように記しておく(爆))

 何か、もっと、無駄の無い手立てがあるかなあ・・・?

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