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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0211
coinllmod3について/配列変数について/タスクトレイについて7解決


coin

リンク

2008/2/11(Mon) 12:54:24|NO.13513

 質問したいことが3つあり、それぞれ別の記事を投稿するのはご迷惑かと思い、一つにまと
めてしまいました…わかりにくくしてごめんなさい…。

 音楽プレイヤーのプレイリスト整理支援のプログラムを作っています。大きなカテゴリを作
り("music""movie"等)、その下にカテゴリ名・プレイリスト名・プレイリストの場所をそれ
ぞれ配列変数に入れたものを従属させます(ファイルからの読み込みの際にrepeatを使ってお
り、Cnum.cnt,Pnan.cnt,Ppth.cntのように別の配列変数にそれぞれ含ませます)。設定ファイ
ルからの読み込み、新規カテゴリの追加、新規プレイリストの追加まではできました。表示順
は設定ファイルに書き込んである順番で、ソートはせずに後から追加したものが後に表示され
ます。
 で、ここで詰まってしまいました。

 * *

1.llmod3.hsp

 カテゴリやプレイリストの表示の順番を変えるのに、ツリービューを使うのがいいかと思い、
この公式サイトのリンク集からllmod3の配布場所に伺って頂いてきました。で、試しに
#include "llmod3.hsp"
#include "listview.hsp"
と入力してF5してみたのですが、
 listview.hsp(688) : error 2 : 文法が間違っています (688行目)
 --> create_imglist@_listview _v3@_listview,_v3@_listview,1 | 4,v2@_listview
と言われてしまい。他にこうなられた方、いらっしゃるでしょうか…何がいけなかったんでしょう…。

 * *

2.配列変数

 新規カテゴリ・プレイリストの追加は簡単に出来たのですが、削除をしようとして困りました。
 BigNという変数にカテゴリ数、Bigc(配列変数)にカテゴリ名、Cnum(配列変数)にカテゴ
リ番号(この番号とBigcの配列の順番とが結びつきます)、Pnam、Ppthがプレイリスト名・プ
レイリスト場所、というのは先ほど申し上げたとおりです。
 削除の際に、選択された配列を消せばいいんだな、と思っていたんですが、配列の一部を消
すという命令が見当たらず。

配列変数:(0) (1) (2) (3) (4) 内容  : A B C D E ↓(2)を消す 配列変数:(0) (1) (2) (3) 内容  : A B D E
のようになって頂きたいのですが…。私が見落としてただけでしたらすみません、どなたか良
い方法をご存じないでしょうか。

 * *

3.タスクトレイに収納

 こちら(http://blog.goo.ne.jp/hiro239415/e/1a7ab9222957c7c023d95cfcef915148)のサイ
トで、タスクトレイに収納しつつ、右クリックでメニューが出せる方法があると知り、よしこ
れを使わせていただこう、と思ったのですが、こちらで拝見した例は一層だけのメニュで("
赤""青""緑"のように)、子メニューがありませんでした("赤"にカーソル合わせたら、"赤1"
"赤2""赤3"と表示されるような)。ここで何が行われているのか、自分でちゃんと解れば改造
できるのですが、もう何をどうすれば良いのか…。子メニューの作り方って、どうすればいいの
でしょうか…。

 * *

 訊いてばかりですみません、どなたかご教授をどうかお願いいたします。



この記事に返信する


coin

リンク

2008/2/11(Mon) 13:36:33|NO.13514

 参考までに、現在のソースをアップロードしました。
http://www.dotup.org/uploda/www.dotup.org2051.txt.html

 ダウンロードされた上記のファイルと同じフォルダに、一行目に「0」と入れただけの
「settings.txt」というファイルを作っていただくと動作いたします。



GENKI

リンク

2008/2/11(Mon) 13:36:59|NO.13515

3つに分けたほうがすっきりするんですが…。
とりあえず分かるやつだけこたえます。

> 2.配列変数

ご希望のように配列の要素の一部だけを消すことは出来ません。
要素数を変えるにはdimで再度初期化するしかありません。
 コピー→dimで再初期化→コピー
だと時間かかるんで次のような方法はどうでしょうか?

配列変数:(0) (1) (2) (3) (4) 内容  : A B C D E ↓「(2)を消す」 ↓(2)=(3) ↓(3)=(4) ↓(4)=end 配列変数:(0) (1) (2) (3) (4) 内容  : A B D E end
このように変数の内容をシフトします。
読むときはendが出たら参照するのを止めるとか、(3)まで有効ということを覚えておいて、
(3)までしか読まないようにするとかです。

こういう場合モジュール変数使ったほうがいいのかもしれませんが…私自身あまりよく
理解できていないので安易にお勧めできないところです。分かる方お願いします。



Kpan

リンク

2008/2/11(Mon) 14:40:30|NO.13517

>1.llmod3.hsp
img.hspをインクルードしてください。あるいは、listview.hsp内の
listicon命令の定義部分をコメントアウトする。

>3.タスクトレイに収納
ちょくとさんのページ(スクリはHSP2用)をチェックしてください。
Win32APIをある程度知っておかないと難しいです。
http://yokohama.cool.ne.jp/chokuto/urawaza/menu1.html
サンプル。
http://lhsp.s206.xrea.com/hsp_menu.html#1



Megane

リンク

2008/2/11(Mon) 15:13:12|NO.13518


#define sv 4 ;Size of a Value(?) 数値変数は4バイト m= 10 ;配列要素の数(0からm-1まで) x = 4 ;消し始めの番号(最初は0) n = 3 ;消す数 dim val , m ;確保と初期値代入 repeat m val.cnt = cnt loop color ,,255 : gosub *out memcpy val , val , (m-x-n)*sv , x*sv , (x+n)*sv memset val , 0 , n*sv , (m-n)*sv color 255,, : gosub *out stop *out ;表示 repeat m mes val.cnt loop return

バッサリと大量に消すなら速いかもしれない。
それに文字列変数では無理だったような…。



coin

リンク

2008/2/12(Tue) 21:16:20|NO.13547

 GENKIさん、Kpanさん、Meganeさん、ご返答ありがとうございました!
>3つに分けたほうがすっきりするんですが…。
 やっぱりそうですよね…わかりにくくしてしまい、すみませんでした…。

1.llmod3
 img.hspインクルードしたらできました、ありがとうございました!おかげさまで試行錯誤
していけます。

2.配列変数
 やっぱり配列の一部を消すのは無理なんですか…。
 今のソースでは、GENKIさんのやり方がよさそうで、そうさせて頂きます。でもMeganeさんの
やり方も、とても参考になります!これからに活かさせて頂きます!

3.タスクトレイ
 Win32API、知っておいた方が良いよな…と思いつつ逃げ回ってきたんですが、ちゃんと勉強
させていただきます…。しかしあまりなんとかなる気がしません…。イメージとしては、
ちょくとさんの「メニューバー」「タスクトレイにアイコンを表示してみる」とLet's HSPさんの
「右クリックメニューの表示」を足すような感じでしょうか。しかしなんでトレイアイコン上の
右クリックでメニュが出るのか…。うーん、泣き言いってないで勉強してきます!

 お三方、ありがとうございました!



a

リンク

2008/2/13(Wed) 20:59:34|NO.13560

文字列配列で、指定要素を最後尾へ移動するのを試してみた。
理解不足で、要素の削除は失敗w


#module ;┌───────────────────────────── ;│指定の要素を最後尾へ移動。前方へ詰める。 ;│Params: ;│ str array v = 1次元の文字列配列 ;│ int i = 最後尾へ移動する要素番号 ;└ #deffunc test array _v, int _i assert( vartype(_v) == 2 ) assert( length2(_v)+length3(_v)+length4(_v) == 0 ) mref HSPCTX, 68 dupptr prmstack, HSPCTX(207), 8 dupptr PVAL, prmstack(0), 48 dupptr STRINF_x, varptr(_v(_i))-24, 24 len = PVAL(2) if( len < 2 ) { return } dupptr master, PVAL(8), 4*len memcpy master, master, (len-_i-1)*4, _i*4, (_i+1)*4 for i, _i, len-1, 1 dupptr STRINF, master(i)-24, 24 if( i == 0 ) { PVAL(7) = master(0) master(0) = 0 STRINF(5) = varptr(PVAL(7)) } else { STRINF(5) = varptr(master(i)) } next master(len-1) = varptr(STRINF_x)+24 STRINF_x(5) = varptr(master(len-1)) return #global repeat 24 s(cnt) = "sss"+cnt loop pos 0,0 mes repeat length(s) mes strf("%2d: ", cnt) + s(cnt) loop test s, 2 pos 100,0 mes repeat length(s) mes strf("%2d: ", cnt) + s(cnt) loop stop



coin

リンク

2008/2/16(Sat) 14:45:25|NO.13575

 aさん、ありがとうございます!
 もう、すごすぎて何がなにやら…ポインタを使っているーというのがかろうじてわかります;
 要素削除はやっぱり難しいことなんですね…。でもそこは有効にする要素の個数をその都度記入
すればいいのですし、これだけで十分にとてもすごいです!!敬服します!!


 その後の報告なのですが、皆様から拝借したお知恵のおかげで何とか形になりました。プレイ
リスト整理はまだまだですが、とりあえずタスクトレイに収納することは叶いました。
 ちょくとさんのページでAPI講習受けている最中ですが、すこしずつ飲み込めて来ました。
Kpanさんに学ぶべきだと仰っていただかなかったら、ちゃんと取り組もうと思ったか知れず、
勝手ながらお礼申し上げます。
 あとは、Windowsを起動したら自動立ち上げーとかしてみたいですが、レジストリに介入しなくては
いけない気がするので、ここらへんで満足しておきます…。
 ありがとうございました!



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