HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0501
名も無き開拓者GetKey28解決


名も無き開拓者

リンク

2011/5/1(Sun) 20:45:34|NO.38823

ググれば簡単に見つかるものだと思っていたのですが見つからなかったため質問させていただきます

CtrlとZを押したらダイアログを表示するプログラムを作りたいと思っています

出来ればラベル毎に処理を分けたいと思っております

回答よろしくお願いします



この記事に返信する


ひらまる

リンク

2011/5/1(Sun) 20:52:27|NO.38824


repeat getkey Key, 90 if Key == 1 : ZKey ++ : else : ZKey = 0 getkey Key, 17 if Key == 1 : CtrlKey ++ : else : CtrlKey = 0 if ZKey > 0 && CtrlKey > 0 { dialog "Ctrl+Zが押されました" } await loop
getkeyのヘルプを見れば解決すると思います。
(ヘルプの見方は、見たい命令の上にカーソルを置いてF1キー)
逆に、どんなものならひとりで作れるのでしょうか……謎です(・ω・



名も無き開拓者

リンク

2011/5/1(Sun) 20:55:07|NO.38825

すいません 書き忘れていました
GetKeyだとrepeat~loopばかりで次の処理に進みません
出来れば(GetAsyncKeyState関数を使ったのを教えてほしいです
何度もすいません



test

リンク

2011/5/1(Sun) 21:10:18|NO.38826

次の処理に進むということはrepeat〜loopを抜ければいいということです。
どうやったらrepeat〜loopを抜けられるかは調べれば簡単に分かりますね。

GetAsyncKeyState関数の使い方についても、過去ログ検索とかサイト内検索をすれば簡単に分かります。
また、GetAsyncKeyState関数を使っても結局は基本的にはgetkeyと変わらずrepeat〜loopを使うことになると思います。



ORZ

リンク

2011/5/1(Sun) 21:14:49|NO.38827

どうにも基礎的な考え方が身についていないようなので。
キーボードが押されているか調べるには、repeat〜loopでgetkeyやstickを呼び出す方法と
キーボードイベントなる君にとって未知のものを補足してチェックする方法の二通りがある。
前者はゲーム的なものに向き、後者は普段止まってるツールなどに使うかもしれない。
repeat〜loopで次の処理に進まないというのはまるでトンチンカンな発想で、やりたいことは
ひらまる氏のコードで実装できる。
しかしあえてGetAsyncKeyStateなぞというものを持ち出して事態をややこしくしたいなら
もっと『こういうものを作るのに、前後にこういう処理があって、どうしてもGetAsyncKeyState
が必要なのです』と説明しておけば明確な回答があるかもしれない。

開拓に出かける前に地図や食糧等の準備を怠るのは無謀すぎる。あとせめて
現地のガイドと会話できるくらいの基礎言語能力を身につけておいた方がいい。今まで
おったてたスレのレスをガン無視すると損だぞ。



名も無き開拓者

リンク

2011/5/1(Sun) 21:56:20|NO.38833

ひらまる様の回答を参考にしてif命令を使って書いてみました
何とかrepeat~loop命令を抜けられました
ですがこのソースだとCtrlなどを指定出来ません;;
Ctrl+Aで何とかできないでしょうか?・・
回答よろしくお願いします


onkey gosub*push stop *push if wparam='A' : gosub*keycode01 return *keycode01 mes "決められた「A」キーが押されました" return



Cookies

リンク

2011/5/1(Sun) 22:00:23|NO.38834

getkeyのヘルプにあるキーコードはonkey先のwparamに使える。
getkeyのヘルプには
「65〜90 : [A]〜[Z]」とあるが、'A'==65である。

そこでCtrlを調べればおk。



名も無き開拓者

リンク

2011/5/1(Sun) 22:09:53|NO.38835

if wparam=17 : gosub*keycode01
とする事でCtrlを指定する事が出来ました
ありがとうございます!!
Ctrl+Aを組み合わせるにはどうすればいいのでしょうか?



Cookies

リンク

2011/5/1(Sun) 22:14:40|NO.38836

今教えたことをぶち壊すようだが、onkeyでキーが押されたことを感知したら、
getkeyで判定をするのが速いのではないだろうか。

onkey先にてgetkeyでCtrlとAを判定すれば。



てれてれ

リンク

2011/5/1(Sun) 22:15:02|NO.38837


onkey gosub*push stop *push if wparam='A' or wparam=17 : gosub*keycode01 return *keycode01 getkey key, 'A'+17-wparam if key == 1 : mes "決められた「A」キー+「Ctrl」キーが押されました" return
ひらまるさんので十分なんですけどね・・・



名も無き開拓者

リンク

2011/5/1(Sun) 22:20:27|NO.38839

ありがとうございます!!
出来ました!!
HSPの画面を最前面に出している時しか反応してくれないようです
これはどうにかならないんでしょうか?



Cookies

リンク

2011/5/1(Sun) 22:24:43|NO.38841

それはonkeyが原因。
onkeyはHSPウィンドウに送られたウィンドウメッセージの割り込みラベルを指定するものなので、
こればっかりはどうしようもない。

getkeyをrepeat〜loopとかしてもらうしかない。



ORZ

リンク

2011/5/1(Sun) 22:25:45|NO.38843

onkeyの仕様上一番上のウィンドウ(アクティブなウィンドウ)にしかメッセージが飛ばない。
のでonkeyを利用している限り難しい。両方getkeyでやりんさい。



名も無き開拓者

リンク

2011/5/1(Sun) 22:27:57|NO.38846


repeat getkey Key, 90 if Key == 1 : ZKey ++ : else : ZKey = 0 getkey Key, 17 if Key == 1 : CtrlKey ++ : else : CtrlKey = 0 if ZKey > 0 && CtrlKey > 0 { dialog "Ctrl+Zが押されました" } await loop

Keyを押したらどうにかしてどっかのラベルに飛ばせないでしょうか?



ORZ

リンク

2011/5/1(Sun) 22:31:35|NO.38847


repeat getkey Key, 90 if Key == 1 : ZKey ++ : else : ZKey = 0 getkey Key, 17 if Key == 1 : CtrlKey ++ : else : CtrlKey = 0 if ZKey > 0 && CtrlKey > 0 { dialog "Ctrl+Zが押されました" break } await loop goto *http://hsp.tv/make/enroll.html
頼む。いや、言葉づかいを改める。お頼み申しますからちったあ考えて。



たんす

リンク

2011/5/1(Sun) 22:33:42|NO.38848

>Keyを押したらどうにかしてどっかのラベルに飛ばせないでしょうか?
Ctrl+Zが押された処理に戻るのか、戻らないのかで飛ばし方が変わってきます。
どちらですか?



inovia

リンク

2011/5/1(Sun) 22:35:19|NO.38850

こういう方法もありますね。

RegisterHotKey 関数
http://msdn.microsoft.com/ja-jp/library/cc411006.aspx


#include "user32.as" #define MOD_ALT 0x0001 #define MOD_CONTROL 0x0002 #define MOD_SHIFT 0x0004 #define MOD_WIN 0x0008 #define WM_HOTKEY 0x0312 // ホットキーの識別子(0x0000〜0xBFFF の範囲の値を指定) id = 0xBFBF ; 適当に指定 // Ctrl+Z の場合 RegisterHotKey hwnd, id, MOD_CONTROL, 'Z' oncmd gosub *hotkey ,WM_HOTKEY // 終了時ホットキー割り当て解除 onexit *exit stop *hotkey if wparam = id{ mes "Ctrl+Z が押されたよ!" } return *exit UnregisterHotKey hwnd, id end



名も無き開拓者

リンク

2011/5/1(Sun) 22:41:05|NO.38851

>>inovia

おお!!これです!!
本当にありがとうございます1!
お蔭様で解決しました!!



名も無き開拓者

リンク

2011/5/1(Sun) 22:41:17|NO.38852

テスト



名も無き開拓者

リンク

2011/5/1(Sun) 22:57:55|NO.38855

解決といいながらまた質問してすいません

タイトルの内容とは少し話がずれていると思います

Ctrl+Zを押したらmes""でメッセージを表示出来ました

Ctrl+Zを1回押したらmes"ON"と表示し2回目は"mes"OFF"と同じ場所に表示したいです
(かさならないように2回目はONの表示を消す)
それで3回目押したらONという感じの繰り返しです

質問ばかりでほんと申し訳ないです 回答よろしくお願いします



Inu_osho

リンク

2011/5/1(Sun) 23:01:13|NO.38856

よくわからんけど押しっぱなしのフラグと、onとoffのフラグを作ればいいんじゃないかな?



てれてれ

リンク

2011/5/1(Sun) 23:09:24|NO.38857

これまでのレスとHSPの基本さえしっかりと理解していれば、
たとえ非効率的なスクリプトだとしても、そのスクリプトを組むことは出来るはずです。

もう少しよく考えてみてください。



mamo

リンク

2011/5/2(Mon) 06:00:31|NO.38864

自分で自分なりの物を作ればいいだけだよ?
変数の使い方は分かったでしょ?「IF」も分かったでしょ?
その他にも使って来たものを組み合わせて「自分で」作ればいい。

最後まで全部をみんなに作ってもらうのか?



ORZ

リンク

2011/5/2(Mon) 08:06:26|NO.38865

あまりの学習意欲のなさに、流石にみんなが呆れてきたぞ。
何故君に対してコードを張り付けるのを嫌がるかというと、貼りつける意味がないからだ。
君はこの質問が解決してもまたすぐ、まったく何も考えず下らない質問スレをぶったてるだろう。
少し考えればわかるはずの事を、延々ダラダラ言葉足らずに訊ね続けるだろう。いままでが
そうであったからだ。そんな質問厨にコードを張り付けたところでまったく身にならず
考えてコードを張り付けた方が損をする。今までがそうであったからだ。



ORZ

リンク

2011/5/2(Mon) 08:29:18|NO.38866

まあそんなわけでいくら名前を変えようが、中身が変わらなきゃすぐわかっちまうもんだ。
ソースコードや貼られたサンプルよりまず自分を見つめなおしてみるべきだな。わかったら
http://hsp.tv/play/pforum.php?mode=all&num=37093
このスレのように、自分の意志で閉じておけ。君の言う真っ当なレス=答えのコピペ
はもう貼られることは無いだろうからな。



Cookies

リンク

2011/5/2(Mon) 12:35:30|NO.38875

えぇーーー!あのスレ懐かしい。
凄く印象に残ってる人物だけど、もう来ないと思ってました。
また来たんだ…同一人物だったんだ…

http://hsp.tv/play/pforum.php?mode=all&num=37721
ここから来始めてたんですね。確かにくせが出てる。
最近「冒険者」や「開拓者」になってから癖は直ったようだけど、
相変わらずレスの仕方・内容は変わらない。
約一ヵ月間休んでたということか。



晩御飯

リンク

2011/5/2(Mon) 12:52:04|NO.38876

はーん、懐かしい。
一ヶ月の間に発狂しない姿勢だけは会得したらしい



名も無き開拓者

リンク

2011/5/2(Mon) 18:32:06|NO.38879

皆様回答ありがとうございました



backdrop

リンク

2011/5/2(Mon) 21:16:17|NO.38893

ついでに質問を変えるときは別スレ立てような



ONION software Copyright 1997-2023(c) All rights reserved.