日本語プログラミング言語なでしこの公式掲示板

なでしこ の 掲示板

トップ 最新 新規 検索 公式

2019-06-10 20:15:34 -月 曜-

690 : Re:Re:ごめんなさい、やっぱり駄目でした - TKI さん


「イメージ1をMyImageとして作成」を2回実行すると名前がかぶってなでしこの想定外の動作になるんですかね。

「イメージ1[0]をMyImageとして作成」だと大丈夫っぽいです。
配列にすると名前が_AUTO1924とかになるためでしょうか。

#ここから 
■MyImage +イメージ
 ・{=1}開くフラグ
 ・内容展開~
   自身の0,0を赤色で$10101まで塗る
   もし、開くフラグが0と等しいならば
    自身の5,-5へ"+"を文字表示
    開くフラグは1
   違うならば
    自身の5,-5へ"-"を文字表示
    開くフラグは0
 ・クリックした時は~
   内容展開

■話題項目
 ・イメージ1
 ・作る~
   イメージ1[0]をMyImageとして作成
   イメージ1[0]→X=0
   イメージ1[0]→Y=0
   イメージ1[0]→W=500
   イメージ1[0]→H=50
   
   文字サイズは50
   線色は$10101; 線太さは1
   イメージ1[0]の50,0から50,50へ線
   イメージ1[0]の0,0を赤色で塗る
   イメージ1[0]の60,30を$F5D2D2で塗る
   イメージ1[0]の5,-5へ"+"を文字表示

テスト1とは話題項目
テスト2とは話題項目
テスト2→イメージ1[0]→Yは60
#ここまで


配列の[0]の部分が気になるなら、グループ参照コピーするとすっきり?

#ここから 
■MyImage +イメージ
 ・{=1}開くフラグ
 ・クリックした時は~
   X=X+10
   
■話題項目
 ・{配列}イメージ1b  //←部品いれ
 ・イメージ1
 ・作る~
   イメージ1b[0]をMyImageとして作成 //←
   イメージ1b[0]をイメージ1にグループ参照コピー //←
   イメージ1→Hは40
   イメージ1を赤色で画面クリア

テスト1とは話題項目
テスト2とは話題項目
テスト2→イメージ1→Yは60
#ここまで

(編集パスワード送信)

子記事

親記事 (No.676)
返信した記事(元) (No.689)

この内容(No.690)に返信

この内容(No.690)をダウンロード

この内容(No.690)のテキスト表示


2019-06-10 16:30:23 -月 曜-

689 : Re:ごめんなさい、やっぱり駄目でした - UNOパパ さん


これはなでしこのバグの様な気もするんですけど

#---ここから---
■MyImage +イメージ
 ・内容展開~
  自身の0,0を赤色で$10101まで塗る
 ・クリックした時は~
  内容展開

■話題項目
 ・イメージ1
 ・作る~
   イメージ1をMyImageとして作成

テスト1とは話題項目
テスト2とは話題項目
テスト2→イメージ1→Y = 60
#---ここまで---

とした場合、テスト1とテスト2のインスタンスの中にそれぞれ「イメージ1」が作られてはいるん
ですが、イベントのハンドリングが最初に作った「イメージ1」だけになってしまって、テスト2の
中のハンドラは無効になってる気がしますね。なので質問で載せてもらったプログラムのテスト2
の「+」をクリックするとテスト1の方が「-」になっちゃう。(XとかYとか位置情報に関しては
テスト1、テスト2のそれぞれのMyImageインスタンについて独立したものになってるのに、
イベントハンドラは一緒になってる)。

それぞれのインスタン内の「イメージ1」と言う名前が違えばうまく行く様なので、あまりキレイな
対処方法ではないですが

#---ここから---
■MyImage +イメージ 
 ・{=1}開くフラグ
 ・内容展開~ 
   自身の0,0を赤色で$10101まで塗る 
   もし、開くフラグが0と等しいならば
    自身の5,-5へ"+"を文字表示 
    開くフラグは1
   違うならば
    自身の5,-5へ"-"を文字表示 
    開くフラグは0
 ・クリックした時は~ 
   内容展開 

■話題項目
 ・作る~ 
   イメージ1[n]をMyImageとして作成
   イメージ1[n]→X=0 
   イメージ1[n]→Y=0 
   イメージ1[n]→W=500 
   イメージ1[n]→H=50 

   文字サイズは50 
   線色は$10101; 線太さは1 
   イメージ1[n]の50,0から50,50へ線 
   イメージ1[n]の0,0を赤色で塗る 
   イメージ1[n]の60,30を$F5D2D2で塗る 
   イメージ1[n]の5,-5へ"+"を文字表示 
   
   n = n + 1

n = 0 #これをグループの外部に宣言

テスト1とは話題項目 
テスト2とは話題項目
イメージ1[1]→Y=60
#---ここまで---

としては駄目でしょうか。一応、想定どおりの動きにはなります。ただし、最後の
「テスト1[1]→Y=60」部分を見てもらったら分かる通り、グループ内で作成している
「イメージ1[n]」はそのスコープがグローバルになります(グループ内で作成している
だけで、グループの外で宣言してるのと一緒)。

しかしなんでイベントハンドラだけインスタンス化されないんだろう…

(編集パスワード送信)

子記事

親記事 (No.676)
返信した記事(元) (No.687)

この内容(No.689)に返信

この内容(No.689)をダウンロード

この内容(No.689)のテキスト表示


2019-06-10 07:40:09 -月 曜-

688 : Re:ごめんなさい、やっぱり駄目でした - 雪乃☆雫 さん


 ですよね~?
 グループの中でイメージ1を作ってる以上、そうなるんじゃないかなと思っていましたよ。
 だからこその継承だったんですけれどね。(678では、複数作っても動くことを念頭にお試しをしています)
 でも、それが不可ということになると、どうしたらいいのかなあ・・・
 ちょっと、あまりイメージが湧いていないんだけど、複数のGUIを組み合わせて一つの部品を作ろうとしてる的な・・・?

 そういえば質問の仕方とゆうお話でしたね。私は別にそんなエラそうなこと言えるようなアレじゃ無いですけどw
 今回のように、質問者がある程度問題となる箇所を特定し、最小限のプログラムを作って質問し、複数の人がそれぞれ異なるアプローチを示し、その中から使えるものを選択するとゆうのは、一つの理想的な形じゃないかと思いましたよ☆
 しかし、残念ながら解決に至らなかったので、今度はさらにもう一歩突っ込んで、今こそ他のGUIを組み合わせてどんなのを作り、どんな風に動かしたいのかとゆうのを発表し、さらなる別のアプローチを模索するってところじゃないでしょうか。

(編集パスワード送信)

子記事

親記事 (No.676)
返信した記事(元) (No.687)

この内容(No.688)に返信

この内容(No.688)をダウンロード

この内容(No.688)のテキスト表示


2019-06-09 18:58:25 -日 曜-

687 : Re:Re:Re:Re:ごめんなさい、やっぱり駄目でした - ゲイン さん


■MyImage +イメージ
 ・内容展開~
  自身の0,0を赤色で$10101まで塗る
 ・クリックした時は~
  内容展開

■話題項目
 ・イメージ1
   
 ・作る~

   イメージ1をMyImageとして作成
   イメージ1→X=0
   イメージ1→Y=0
   イメージ1→W=500
   イメージ1→H=50

   文字サイズは50
   線色は$10101; 線太さは1
   イメージ1の50,0から50,50へ線
   イメージ1の0,0を赤色で塗る
   イメージ1の60,30を$F5D2D2で塗る
   イメージ1の5,-5へ"+"を文字表示

テストとは話題項目

#----------------
 すみません、一度解決済みとしたのですが実際に作っていると意図した動きをしてくれませんでした😢
バグかもしれません

#ここから
■MyImage +イメージ 
 ・{=1}開くフラグ
 ・内容展開~ 
   自身の0,0を赤色で$10101まで塗る 
   もし、開くフラグが0と等しいならば
    自身の5,-5へ"+"を文字表示 
    開くフラグは1
   違うならば
    自身の5,-5へ"-"を文字表示 
    開くフラグは0
 ・クリックした時は~ 
   内容展開 

■話題項目 
 ・イメージ1 
 ・作る~ 
   イメージ1をMyImageとして作成 
   イメージ1→X=0 
   イメージ1→Y=0 
   イメージ1→W=500 
   イメージ1→H=50 

   文字サイズは50 
   線色は$10101; 線太さは1 
   イメージ1の50,0から50,50へ線 
   イメージ1の0,0を赤色で塗る 
   イメージ1の60,30を$F5D2D2で塗る 
   イメージ1の5,-5へ"+"を文字表示 

テスト1とは話題項目 
テスト2とは話題項目 
テスト2→イメージ1→Yは60
#ここまで

 上のプログラムのように複数のインスタンスを作り、実行してイベントが発生すると一番目に作った部品だけしか変更されません


(編集パスワード送信)

子記事

親記事 (No.676)
返信した記事(元) (No.683)

この内容(No.687)に返信

この内容(No.687)をダウンロード

この内容(No.687)のテキスト表示


2019-06-09 11:31:18 -日 曜-

686 : Re:イベントの仕組みについて教えてください - UNOパパ さん


■イベントについて
Windowsの場合、例えば「ボタンを押した」とか「マウスをクリックした」と言うユーザーの挙動は
一旦WindowsのOSカーネルがその情報を検知し、各アプリケーション(プロセス)にその情報をメッセージと
して伝達します。これがイベントです。

イベントが発生したときに実施したい処理は、通常「イベントハンドラ」として実装します。例えば
前回のプログラムで「クリックしたと時は~」と実装したのがハンドラです。これを実装しておくと
実際にマウスでイメージがクリックされたときに、その処理が呼ばれます。

「イメージ」のグループはなでしこをインストールしたフォルダの「\lib\vnako.nako」に実装されていて
中身を見てみると「・{イベント}クリックした時」と言う記述があると思います。つまり、このイメージ
グループは、「クリックした時」と言うイベントを持ちますよ、と言うことが予め定義されていて、
これを実装しておけばクリックされたときに何かしら挙動が起こります。(Windowsから来たメッセージは
一旦dnako.dllで受信して、各アプリケーションの「クリックした時」ハンドラを呼んでいるんだと
思います)。

■エラーになった原因

で、エラーになった原因ですが、前回エラーになっていたのは、多分「内容展開」メソッドの引数に
指定してたオブジェクトが生成されてないからかなあ…と言う気がします。いろいろ試してみて
うまく行くのは前回提示した方法だけだったので、言語仕様に大きく依存してる気がするんですが
詳細までは私も分かってないです。すみません。

(編集パスワード送信)

子記事

親記事 (No.685)
返信した記事(元) (No.685)

この内容(No.686)に返信

この内容(No.686)をダウンロード

この内容(No.686)のテキスト表示


戻る < < < > > > 次へ




www.eznavi.net