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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0422
初心者listboxの表示位置について6解決


初心者

リンク

2009/4/22(Wed) 12:43:03|NO.24760

先日、
リストボックスをマウスでの移動で質問させて頂いて
お返事頂いた方、ありがとうございました。

自分なりに調べたり、コピペしてみたりと、
色々やってみたんですが、
「listboxをマウスで自由に移動させたい」というのは、
書いて頂いたスクリプトを把握しきれなくて、
教えて頂いたのに申し訳ありません。

どうすることもできなかったので
考え方を変えようと、新たに質問を立ち上げました。

最初に画像を表示している別ウィンドウ(bgscr)をマウスで移動させても、
リストボックスを表示したとき、その移動させたウィンドウの真下に
リストボックスを表示させることはできないかなと考えています。

リストボックスを自由に移動させるスクリプトより、
こちらの方が自分にとってはわかりやすいんではないかと考えてます。

説明がうまくできなくてすいません。

教えてください。
宜しくお願いします。

ちなみに、
画像を右クリックでポップアップ
ポップアップの各項目クリックで該当リストボックス表示

というスクリプトになってます。


リストボックスのスクリプトは今現在こんな感じになってます。


;今のスクリプト

 bgscr 3,125,185,,100,100,,
 bgscr 2,300,300,2,100,100,100,158
 gsel 3,2
; WM_COMMAND
 oncmd gosub *command, $111
 onclick gosub *onjump1
 objsize 125,170
 font "" ,15,,
 objmode 2,,
 listbox a, 60, " \n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n10\n 終了"
  hListbox = objinfo(stat, 2)

stop

*command
 if lparam = hListbox {
 if HIWORD(wparam) = 2 {
 if a == 1 : bgscr 2,300,300,2,100,100,100,158 : picload "" ,1 : gsel 2,2
 if a == 2 : bgscr 2,300,300,2,100,100,100,158 : picload "" ,1 : gsel 2,2
 if a == 3 : bgscr 2,300,300,2,100,100,100,158 : picload "" ,1 : gsel 2,2
 if a == 4 : bgscr 2,300,300,2,100,100,100,158 : picload "" ,1 : gsel 2,2
 if a == 5 : bgscr 2,300,300,2,100,100,100,158 : picload "" ,1 : gsel 2,2
 if a == 6 : bgscr 2,300,300,2,100,100,100,158 : picload "" ,1 : gsel 2,2
 if a == 7 : bgscr 2,300,300,2,100,100,100,158 : picload "" ,1 : gsel 2,2
 if a == 8 : bgscr 2,300,300,2,100,100,100,158 : picload "" ,1 : gsel 2,2
 if a == 9 : bgscr 2,300,300,2,100,100,100,158 : picload "" ,1 : gsel 2,2
 if a == 10 : bgscr 2,300,300,2,100,100,100,158 : picload "" ,1 : gsel 2,2
 if a == 11 : gosub *exit

  return
  }
}
  return
*onjump1
  gsel 2, -1
  gsel 3, 2

return



この記事に返信する


hspail

リンク

2009/4/22(Wed) 13:22:11|NO.24761

>最初に画像を表示している別ウィンドウ(bgscr)をマウスで移動させても、
>リストボックスを表示したとき、その移動させたウィンドウの真下に
>リストボックスを表示させることはできないかなと考えています。
width で
表示位置を変更すればよいと思います。




スクリプトの意味がよくわからないのですが・・・
ところどころ省略しているのですか?


それと細かいとこ突っ込ませていただくと、、、


・WM_COMMANDはリストボックスのウィンドウスタイルに LBS_NOTIFY を追加しないと送られてきませんよ。すでに追加していたらすみません。

// スクリプトの最初に #include "user32.as" を追加して、 // hListbox = objinfo(stat, 2) の下に GetWindowLong hListbox, -16 SetWindowLong hListbox, -16, stat | 1;LBS_NOTIFY


・リストボックスの項目がクリックされたときに画像を表示したいのですよね?
それでしたら、
if HIWORD(wparam) = 2 {
のところは
if HIWORD(wparam) = 1 {
だと思うのですが違いますか?



・bgscr は最初に一回だけ初期化すればOKです。if のあとの bgscr は消して大丈夫ですよ。

if a == 1 : picload "" ,1 : gsel 2,2 if a == 2 : picload "" ,1 : gsel 2,2 ・ ・ ・


・if で多数の値を比較していくときは switch を使った方がきれいです。
gsel 2, 2 もreturn で戻る前に一回だけ呼び出してあげればよいですね。

switch a case 1 : picload "" ,1 : swbreak case 2 : picload "" ,1 : swbreak ・ ・ ・ swend gsel 2, 2 return




見当外れだったら申し訳ありません。
長文失礼しました。



初心者

リンク

2009/4/22(Wed) 15:07:49|NO.24763

お返事ありがとうございます。

bgscrウィンドウがどこに移動するかわからない場合でも
width で表示したらよいのでしょうか?

>ところどころ省略しているのですか?
省略というか、別のスクリプトに
#include "user32.as"
#define ctype HIWORD(%1) (%1 >> 16 & $FFFF)
#define WM_NCLBUTTONDOWN $000000A1
#define HTCAPTION 2

が、あります。

>WM_COMMANDはリストボックスのウィンドウスタイルに LBS_NOTIFY を追加しないと送られてきませんよ。
知りませんでした。色々なページを見たんですがLBS_NOTIFYを初めてみました。
F5で表示されていたので気にしてませんでした。付け足します。

>・リストボックスの項目がクリックされたときに画像を表示したいのですよね?
すいません;;クリックではなくWクリック判定です;;2であってますよね?

>bgscr は最初に一回だけ初期化すればOKです。if のあとの bgscr は消して大丈夫ですよ。
そうでしたか;;すいません。ありがとうござます。消します。

>if で多数の値を比較していくときは switch を使った方がきれいです。
>gsel 2, 2 もreturn で戻る前に一回だけ呼び出してあげればよいですね。
switchを初めて見ました。調べながら使ってみます。ありがとうございます。

沢山の指摘ありがとうございます。
少しづつ改善してみます。



hspail

リンク

2009/4/22(Wed) 15:19:05|NO.24764

> bgscrウィンドウがどこに移動するかわからない場合でも
> width で表示したらよいのでしょうか?
すみません、質問の意味がまだよくわかりません。

1.リストボックスをあらかじめ表示させておき、bgscr を移動させたらそれに連動してリストボックスを移動させたい
2.bgscr がクリックされたらそのbgscrの下にリストボックスを表示したい

↑のどちらかであっていますでしょうか?
間違っていたらもう一度説明して下さい。



初心者

リンク

2009/4/22(Wed) 20:28:46|NO.24770

1のスクリプトでbgscrウィンドウにメイン画像を表示していて、
そのメイン画像を左クリックで移動、
右クリックでポップアップ表示、

2のスクリプトでポップアップの項目をクリックしたときに
表示する為のリストボックス内容が記述してあります。

動きとしては、
アイコンWクリックでメイン画像が表示されて、
ユーザーがそのメイン画像を移動させたとして、
メイン画像右クリックでポップアップ、
項目クリックでリストボックス表示させたいので、

リストボックスを表示するときにはすでにメイン画像(bgscr)は表示されています。
リストボックスを表示してしまうとメイン画像は移動できない状況です。

そのメイン画像をリストボックスを表示するまえに
ユーザーがどこへ移動するかわからない状況で、
リストボックスを表示したときにそのメイン画像の真下に、
どうしたら表示できるだろう。

と、いうのが質問なんですが。。。
なんかわかりにくいですね・・・すいません;;

どこの座標に置かれる(移動する)か、わからないウィンドウの真下に
リストボックスを表示できるんでしょうか・・・

の方がわかりやすいですかね・・・;;



hspail

リンク

2009/4/23(Thu) 08:47:20|NO.24772

width でできますよ。パラメータには固定値(100とか200とか)だけでなく変数も指定できますので。


リストボックスを表示する前にあらかじめ、 リストボックス を表示する位置を計算しておきます。
今回はメイン画像の真下に配置したいので、メイン画像のウィンドウの位置を取得する必要がありますね?

そこで使うのが ginfo です。ginfoではいろいろ取得できるのですが、
とりあえず ginfo_wx1 と ginfo_wy2 をヘルプでしらべてみてください。

ここで忘れてはならないのは、ginfoを使う前に、gsel で 「ginfoで取得したいウィンドウ(今回はメイン画像)」のIDを指定しておくことです。


それで、

xpos = ginfo_wx1 ypos = ginfo_wy2
のように代入します。位置を調整したかったら xpos = ginfo_wx1 + 100 のようにして調整します。


↑で位置を計算したので、あとはリストボックスを表示する前に(後でもできますが、) width で座標を変更します。

width , , xpos, ypos
みたいな感じでやります。



今回の質問を見ると、根本的に経験が足りないと思います。
もっと経験を積むと自然とわかるようになるでしょう。
がんばってください。



初心者

リンク

2009/4/24(Fri) 19:20:23|NO.24780

できましたーーーーーーーー

最初記述場所にすごい悩んでしまって。。。

ゆっくり考えながら、

どうするときどうしたいのか整理しながらやったら

できましたーw


ホントにホントにホントにありがとうございましたーーーーーー



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