なでしこを明後日の方向に

日本語プログラム言語なでしこを応援しています

なでしこのCOPYDATA送信命令を使ってみる

なでしこに「COPYDATA送信」という命令があるので解説してみます。

【名前】COPYDATA送信 (COPYDATAそうしん)
【引数】AにSを|Aへ
【説明】ウィンドウハンドルAにSというメッセージでCOPYDATAを送信する

簡単にいうと「COPYDATA送信」は別のウィンドウに文字列を送ることができるらしいです。
送られたほうのウィンドウではイベント「母艦のCOPYDATA受けた時は~」が発生します。
受け取ったメッセージは「母艦のCD文字列」に入ります。

似た命令で「COPYDATA詳細送信」がありますが送る情報が増えただけでほぼ同じ。

通常の用途では別ウィンドウにメッセージを送るところですが、
ひとまず実験で自分のウィンドウにCOPYDATA送信してみます。

//受信した時のイベントを書く
母艦COPYDATA受けた時
 母艦CD文字列表示

//メッセージを送信
5回
 母艦ハンドル「あいうえお」COPYDATA送信

結果:「あいうえお」が5回表示される

上記を別々のプログラムに書くことで他のウィンドウにメッセージを送ることができます。

実用的なシチュエーションは?

たとえばHTTPダウンロード中も処理が止まらないプログラムを作ってみます。

処理順はこんな感じ。
・ダウンロードするプログラムを生成して保存する  (HTTPダウンロード後に母艦にCOPYDATA送信する)
・母艦から生成したプログラムを起動しつつ、変数「結果」が変化するまでループ
・ダウンロードするプログラムが母艦にCOPYDATA送信
・母艦のCOPYDATA受けた時は~のイベントが発生したら変数「結果」を書き換え。
・変数「結果」をみてループから抜ける

//ダウンロードが終わったら母艦にCOPYDATA送信するプログラムを生成する
//ダウンロード後に母艦にCOPYDATA送信する
URL「http://以下略」
DL先「{母艦パス}ファイル名.txt」
ハンドル母艦ハンドル
スクリプト「
 エラー監視
  『{URL}』を『{DL先}』へHTTPダウンロード
  {ハンドル}へ『DL完了』をCOPYDATA送信
 エラーならば
  {ハンドル}へ『DL失敗』をCOPYDATA送信
 おわり
」
スクリプト「temp.nako」保存


結果//受信時のイベントで「結果」を変更
母艦COPYDATA受けた時
  結果母艦CD文字列  //メッセージは「母艦のCD文字列」に入る

//ダウンロードの実行(ダウンロード中も処理が止まらない)
「temp.nako」起動 //→上記のスクリプトを別プロセスで実行
1ループ
  0.1秒待つ //ここでダウンロード中...のアニメとかを動かす
  もし結果でなければ抜ける  //結果が「DL完了」か「DL失敗」になったら抜ける
結果表示

よいサンプルを作る発想が足りない!