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


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0119
MIZUSHIKI【GUIエディタ?】オブジェクトの位置/サイズを変更 → エディタ自動上書き モジュール (ObjPosMod.hsp)13解決


MIZUSHIKI

リンク

2022/1/19(Wed) 00:05:49|NO.95107

オブジェクトの位置やサイズを視覚的に変更できて、自動でスクリプトエディタに上書きするモジュール
ObjPosMod.hsp が出来ました!

>GUIエディタを考えています。(motimotiさん)
http://hsp.tv/play/pforum.php?mode=all&num=94631

↑こちらで↓の話題が出たので、久々に自分の返信コメントを見返しまして、
http://hsp.tv/play/pforum.php?mode=pastwch&num=68664

昔の【やりたいなって思ってたこと】が今なら出来るかな、と思ったんですが、、、
安易に手を出したらなんかメッッチャ大変でした。。。(ツカレタ…

使い方は、普通にスクリプトを書いていて「オブジェクトがいくつか出てきたな。位置を視覚的に決めたい」
って思ったときに、

#include "ObjPosMod.hsp"
するだけです。
これで、Ctrlキーを押しながらマウスの左クリックで位置を、右クリックでサイズを変更できるようになります。
リストから書き換えたいオブジェクトを選び「スクリプト変更」ボタンを押すと、エディタ上のスクリプトが自動で書き換えられます。
(対応環境 : Windows8以降)


GitHubにモジュールを置いてます。
https://github.com/MIZUSHIKI/HSP-Module/blob/master/ObjPosMod.hsp
「Raw」ボタンの上で右クリック → 名前を付けてリンク先を保存 → #include でお願いします。

また、下記のサンプルですとGitHubから自動でダウンロードする処理が組み込まれています。

// ※ netincludeという自作モジュールで、GitHubに置いてあるモジュールを取得しに行く処理が入ってます。
// 実行したときのカレントディレクトリに保存されますが、
// もしそういった動作が嫌な場合は上記のリンク先からのダウンロードと通常の#includeへの書き換えを行ってください。


#ifdef _debug #include "hspinet.as" #include "mod_regexp.as" #define netinclude(%1,%2=_) addition %1* %2 exist"hsptmp":if strsize>0{t@_@="":d@_@=dir_exe+"\\common\\":notesel t@_@:noteload"hsptmp":noteunsel:matches t@_@,t@_@,"#netinclude\\s*\"(.+?)\"\\s*/\\s*,*\\s*(\\w*)":repeat stat:r@_@="":if t@_@.cnt.2="common"{r@_@=d@_@}exist r@_@+t@_@.cnt.1:t@_@.cnt="0":if strsize<0{if r@_@!d@_@{t@_@.cnt="1":n@_@++}else{t@_@.cnt="2":m@_@++}}loop:if n@_@+m@_@>0{a@_@=dir_cur+"\\\n\nに\n\n":repeat 2,1:if n@_@=0&cnt=1{continue}if m@_@>0&cnt=2{if n@_@!0{a@_@+="\nをダウンロード、\n------\n\n"}else{a@_@=""}a@_@+=d@_@+"\n\nに\n\n"}r@_@=""+cnt:foreach t@_@:if t@_@.cnt!r@_@{continue}a@_@+="・"+t@_@.cnt.1+"\n":loop:loop:dialog a@_@+"\nをダウンロードします",2,"#net\include":if stat=6{netinit:foreach t@_@:if t@_@.cnt="0"{continue}c@_@=dir_cur:if t@_@.cnt="2"{chdir d@_@}split t@_@.cnt.1,"/",r@_@:if stat>0{repeat stat-1:dirlist a@_@,r@_@.cnt,5:if stat=0{mkdir r@_@.cnt}chdir r@_@.cnt:loop}neturl "https://raw.githubusercontent.com/"+getpath(t@_@.cnt.1,32):netload getpath(t@_@.cnt.1,8):chdir c@_@:loop:dialog"再実行して下さい":end}}sdim t@_@} #else #define netinclude(%1,%2=_) include %1 #endif #netinclude "MIZUSHIKI/HSP-Module/master/ObjPosMod.hsp"/ ; _ObjPosMod_BlackListID_ = 1 ;ObjPosModしないウィンドウIDを指定できる配列 ; _ObjPosMod_WhiteListID_ = 0 ;ObjPosModをこのウィンドウIDだけするというのを指定できる配列 screen 0, 480,320 font "MS ゴシック", 14 pos 10,10 ipt="オブジェクトやmesの位置を、Ctrlキーを押しながら" input ipt, 380, 20 mes "左ドラッグで移動、右ドラッグでサイズ変更ができます。" mes "[スクリプト変更]ボタンでエディタ上のスクリプトを書き換えます。" objsize 380, 20 combox comb, ,"リストビューでダブルクリックをするとスクリプトエディタの該当行に移動します。" color 0,0,255 boxf 150, 93, 157, 100 color : pos 170, 90 : mes "メッセージ" msbx="オブジェクトの操作時にあわせてShiftも押すと移動の縦横制限をしたり、サイズを縦横同時に合わせることができます。" pos 145, 110 : mesbox msbx, 115, 100 objsize 70, 65 pos 271, 110 : button goto "実行", *go objsize 70, 25 pos 271, 185 : button gosub "変更", *ch pos 145, 215 winobj "msctls_trackbar32","",,$50000000|$100|$10|$8, 195, 20 objsize 100, 30 : chkbox "チェックボックス",b color 255,0,0 circle 365,200,455,290 line 43, 305, 463, 305 line 150,180 line 5, 180 color 0,255,0 grect 60,140, M_PI*60/360, 50,75 screen 1,480,320 gsel 0, 1 : gsel 1 mes "すべてのウィンドウ、#include先も対応" color 0,0,255 boxf 40, 40, 90, 90 color 255,0,0 : boxf 115, 80, 199, 164 color pos -170, 200 exist dir_tv+"koma.png" if strsize ! -1 : picload dir_tv+"koma.png", 1 pos 250,20 exist "c:\\hsp36\\sample\\basic\\sysinfo.hsp" if strsize ! -1 { mes "#include \"c:\\hsp36\\sample\\basic\\sysinfo.hsp\"\n" #addition "c:\\hsp36\\sample\\basic\\sysinfo.hsp" ; addition == include(non error) }else { exist "c:\\hsp351\\sample\\basic\\sysinfo.hsp" if strsize ! -1 { mes "#include \"c:\\hsp351\\sample\\basic\\sysinfo.hsp\"\n" #addition "c:\\hsp351\\sample\\basic\\sysinfo.hsp" ; addition == include(non error) } } stop *go gsel 0 : title "実行" stop *ch gsel 0 : title "変更" return



この記事に返信する


す²

リンク

2022/1/19(Wed) 21:48:45|NO.95118

すごい...便利ですね...



MIZUSHIKI

リンク

2022/1/19(Wed) 23:16:02|NO.95119

>す²さん
感想ありがとうございます!
宣伝カテゴリはコメントが付きにくいので嬉しいです。

さて、
私のホームページの方でもモジュールを公開しました。
ダウンロードの場合は、GitHubからよりもコチラからの方がやり易いと思います。
http://suwa.pupu.jp/HSP/index.html

また、動画も置いてますのでどんな感じの操作感なのかも掴めるかと思います。

あと、前回書くのを忘れてましたが、このモジュールでオブジェクトを配置、スクリプトを書き換えた後は
#include "ObjPosMod.hsp" を消してください。
オブジェクトを調整したいときだけ #include する形となっております。



雪月夜

リンク

2022/1/20(Thu) 22:03:12|NO.95126


#include"ObjPosMod.hsp" input a
上記スクリプトを実行してコントロールをCtrl+クリックすると
強制終了してしまいます。



MIZUSHIKI

リンク

2022/1/21(Fri) 01:04:10|NO.95128

>雪月夜さん
お試し頂きありがとうございます。

input に指定する変数が数値型の場合、強制終了してしまうようになっていました。
バグを修正してGitHub、ホームページにアップしました。(Ver.1.1)

ObjPosMod.hsp の再ダウンロードをお願いしたいのですが、
もし、#netinclude でダウンロードして頂けていた場合は、カレントディレクトリにダウンロードされた
 \MIZUSHIKI\HSP-Module\master\ObjPosMod.hsp
を一度削除頂いてから、再度前回のサンプルを実行等をしてください。
お手数お掛けしますが、ご確認の程をよろしくお願い致します。



motimoti

リンク

2022/1/23(Sun) 22:47:11|NO.95171

すごいですね!
これで直感的にGUI配置ができますね!

自分もGUIエディタのようなものを作っていますが、
ここまでのようなことはできません笑

ひとつだけ、デュアルディスプレイ使用時限定かもですが、
吸着の補助線が画面外に表示されることがあります。



MIZUSHIKI

リンク

2022/1/24(Mon) 21:55:32|NO.95177

>motimotiさん
ご感想ありがとうございます!
motimotiさんの立てたスレッドで自分の昔のコメントを見つけて、作り直そうかなと思うきっかけになりました。
ここまで大変になるとは思ってませんでしたが(^^;;;

>デュアルディスプレイ使用時限定かもですが、
>吸着の補助線が画面外に表示されることがあります。

バグ報告ありがとうございます! Ver.1.2 で対処しました。
ホームページ:http://suwa.pupu.jp/HSP/index.html
GitHub:https://github.com/MIZUSHIKI/HSP-Module/blob/master/ObjPosMod.hsp

内部でドットを表示するウィンドウと大体同じ扱いになるように変更してしまいました。
他にも、以下のような変更点があります。

- スクリプト末尾の方のオブジェクトから書き換えていくようにした。 - 右クリックで矩形選択するとオブジェクトに少しでも重なれば選択できるようにした。 - オブジェクトを動かした後連続して他を動かすとき前回選択を解除するようにした。 - listbox,comboxにオブジェクトサイズの制限があるのである程度頑張って対処した。 - その他、細かい変更やバグの修正。

motimotiさんも他所スレッドで話題に挙げているlistboxですが、
実はlistboxだけ忘れてて確認作業の中に入ってませんでした(〜_〜;

#include "ObjPosMod.hsp" pos 10, 10 : objsize 100, 34 listbox listb, , "1: リストボックス\n2: だけサイズが\n3: うまく変更した\n4: 通りにできない。\n5: 2,5,8行とかは\n6: HSP実行時に\n7: 1行減らされて\n8: しまう。\n9: どうやっても…"
なんか扱いが難しいですよね・・・
リストボックスのサイズを変更したあと、実際にセットできたサイズを取得してオブジェクトサイズに制限を設けてみましたが。。。
(モジュール内ではさらに取得できた数値に余分を見て+10してます。丁度で作ると大概1行減らされました。環境によるかも。暫定処置)

サンプルに書いた通り、「HSP実行」直後は絶対に表示できない行数(サイズ)があるんですよね。
オブジェクトのサイズを変更すれば出来るみたいなんですけど、2行、5行、8行のサイズのものとかは
1ピクセルずつ減らしていって「HSP実行」してみても突然3行から1行にガクンと下がっちゃいます。
(私はこうでしたが、環境によって変わるかもしれません。)



zrs90(5さい)

リンク

2022/1/24(Mon) 23:27:11|NO.95179

私のpcの備忘録。(※間違ってたらすみません)

この問題、実は、listbox だけでなく
comboxも関係があったりする...
(※ listbox程では、ないですが)

objmode 2 を使って、フォント、サイズ変更
と後、(listbox、combox両方?)
p3パラメータ内の文字列の行の
多さ、OSによって左右されるらしい。

comboxの場合、p2パラメータ(拡張yサイズ)が
無視される場合がある。

vb6、vc++ の古書籍を見ると、オブジェクト関係
の拡張yサイズ等の処理は、かなーり面倒で
上で書いた物を、色々計算/指定して
合わせないといけないらしい。
(※ 大体の場合で、目的のサイズの、近似値にしかならない。)

私、最初、hsp3側の仕様?と思っていたのですが
Windowsの小人の仕業 (...すみません 仕様です。)
Windows10 でも、解消されてなかったんですね。



zrs90(5さい)

リンク

2022/3/20(Sun) 02:32:06|NO.95770

既知の命令?と思いましたが、投稿させて頂きます。

使い物になるか、不明ですが
スマホ検索中に偶然、古い記事で
combox 拡張yサイズについての記事を
見つけました。

https://fireflyframer.blog.jp/19061360.html



zrs90(5さい)

リンク

2022/4/6(Wed) 03:25:01|NO.95920

ちょうど、別ソフトの宣伝に見えたようなので
追記して晒して置きます。
(※実験済、不対応ならすみません)

リストボックスの項目の高さ(デフォルトフォント)調整。

ただし、上も同様ですが現在のhsp3 及び
Windows10 等の対応は不明です。

当方、スマホ投稿、ネット環境なし
Windows7(32、64ビット)のみ...なので。

https://fireflyframer.blog.jp/19061366.html?ref=head_btn_st_next&id=8083157



MIZUSHIKI

リンク

2022/4/7(Thu) 02:07:11|NO.95926

>zrs90(5さい)さん
情報ありがとうございます。
基本的にObjPosModの仕事範囲としてはスクリプトのpos,objsize等のパラメータをいじくる所までかなと思ってます。
使用者も急にsendmsg等が書き加えられてしまうと面食らうと思いますので、仕様/制限ということにしておこうと思います。

検討してみて、Ver.2.0更新時に報告と共に返信しようと思ってたので返事が遅くなりました。
申し訳ありません。

で、、、



MIZUSHIKI

リンク

2022/4/7(Thu) 02:08:28|NO.95927

Ver.2.0 が出来ました。
ホームページ:http://suwa.pupu.jp/HSP/index.html#objposmod
GitHub:https://github.com/MIZUSHIKI/HSP-Module/blob/master/ObjPosMod.hsp

今回の更新で、独自モジュールのオブジェクトも位置・サイズを操作できるようになりました。

<Ver.2.0の更新内容>

- 拡張オブジェクト(独自モジュール)を登録できるように大幅改造。 - リストの全選択ボタンを追加。 - sysfontに対応できていなかったを修正。 - HSP3.7β2から修正予定のpicloadバグFixにも対応できるように修正。

ただ、この拡張オブジェクトの対応の仕方なんですが、、、
ObjPosMod.hsp の中で行っている処理の一部を 拡張用ファイル(ObjPosMod_grpbox.hsp)の中で記述して処理を追加していく形になります。
ObjPosMod がどういう処理をしているのか理解しないといけないので大変かもしれません。。。

ObjPosMod_grpbox.hsp(独自のグループボックスモジュール)、ObjPosMod_hsp3util.hsp(hsp3util内オブジェクト)に使用例があるので、
それを見て真似て作って欲しいのですが、だいぶ無理やり拡張してる感じもしてるのでちょっと厳しいとは思ってます。


//netincludeモジュール(自動でGitHubからモジュールをダウンロードします) #ifdef _debug #include "hspinet.as" #include "mod_regexp.as" #define netinclude(%1,%2=_@_@) addition %1* exist"hsptmp":if strsize>0{a@_@="":b@_@="":w@_@=dir_exe+"\\common\\":y@_@="#net\include":notesel a@_@:noteload"hsptmp":noteunsel:matches a@_@,a@_@,y@_@+"\\s*\"((?:net/)?)(.+?)\"\\s*/\\s*,?\\s*(\\w*)":repeat stat:x@_@=w@_@:if"current"=a@_@.cnt.3{x@_@=""}exist x@_@+a@_@.cnt.1+a@_@.cnt.2:a@_@.cnt="0":if strsize<0{a@_@.cnt="":if""=x@_@{a@_@.cnt.3="2":m@_@++}else{a@_@.cnt.3="1":n@_@++}} loop:if n@_@+m@_@>0{s@_@="","","":z@_@="ダウンロード":repeat 2,1:i@_@=cnt:foreach a@_@:if"0"=a@_@.cnt{continue}if""+i@_@!a@_@.cnt.3{continue}if""!a@_@.cnt.1{if""=b@_@{netinit:neturl"https://main-timetag.ssl-lolipop.jp/HSP3NetModules/netmod.php?req=data":netrequest_get"":repeat:netexec n@_@:if n@_@{break}await 50:loop:netgetv b@_@:matches b@_@,b@_@,"^(.*?)\t(.*?)$":j@_@=stat}k@_@=cnt a@_@.cnt="0":repeat j@_@:if getpath(b@_@.cnt.1,16)=getpath(a@_@.k@_@.2,16){a@_@.k@_@=b@_@.cnt.2:a@_@.k@_@.2=b@_@.cnt.1:break}loop:if"0"=a@_@.cnt{continue}s@_@.i@_@+=">net/(->"+a@_@.cnt+")"+a@_@.cnt.2+"\n"}else{s@_@.i@_@+=">"+a@_@.cnt.2+"\n"}loop:loop:if""=s@_@.1+s@_@.2{dialog"モジュールデータが見つかりませんでした",1,y@_@:end}if""!s@_@.1{s@_@.0+=w@_@+"\n\nに\n\n"+s@_@.1:if""!s@_@.2{ s@_@.0+="\nを"+z@_@+"、\n------\n\n"}}if""!s@_@.2{s@_@.0+=dir_cur+"\n\nに\n\n"+s@_@.2}dialog s@_@.0+"\nを"+z@_@+"します。",2,y@_@:if stat=6{s@_@="":x@_@=dir_cur:if""=b@_@{netinit}foreach a@_@:if"0"=a@_@.cnt{continue}if"1"=a@_@.cnt.3{chdir w@_@}a@_@.cnt.1+=a@_@.cnt.2:a@_@.cnt=a@_@.cnt+a@_@.cnt.2:split a@_@.cnt.1,"/",b@_@:repeat stat-1:dirlist _@_@,b@_@.cnt,5:if stat=0{mkdir b@_@.cnt} chdir b@_@.cnt:loop:neturl"https://raw.githubusercontent.com/"+a@_@.cnt:netrequest_get"":repeat:netexec n@_@:if n@_@{break}await 50:loop:netgetv b@_@:if"40"=strmid(b@_@,0,2){s@_@+=">"+a@_@.cnt+"\n"}else{notesel b@_@:notesave getpath(a@_@.cnt,8)}chdir x@_@:loop:if""!s@_@{dialog z@_@+"に失敗しました。\n\n"+s@_@,,y@_@:end}dialog z@_@+"しました。\nHSPを再実行して下さい。",,y@_@:end}}sdim a@_@} #else #define netinclude(%1,%2=_@_@) include %1 #endif #netinclude "net/ObjPosMod.hsp"/ // Object Pos Module 拡張用のファイルをインクルード #netinclude "net/ObjPosMod_hsp3util.hsp"/ #netinclude "net/ObjPosMod_grpbox.hsp"/ // user32.asとgdi32.asはスタティックテキストのフォント変更と中央表示設定のためにインクルードしているだけです。 #include "user32.as" #include "gdi32.as" // 普通にモジュールを使うためのインクルード。(ObjPosMod_hsp3util.hsp等の中で重複するが実行ファイル作成時に必要となる) #include "hsp3util.as" #netinclude "net/mod_grpbox.hsp"/ screen 0, 480,320, , 50,50 font "MS ゴシック", 14 pos 10,10 ipt="オブジェクトやmesの位置を、Ctrlキーを押しながら" input ipt, 380, 20 mes "左ドラッグで移動、右ドラッグでサイズ変更ができます。" mes "[スクリプト変更]ボタンでエディタ上のスクリプトを書き換えます。" objsize 375, 20 combox comb, , "リストビューでダブルクリックをするとスクリプトエディタの該当行に移動します。" pos 365, 85 : objsize 100, 100 listbox listb, 0, "リストボックスは\nうまく指定行の\n高さにできない\nことがあります。\n\n(現状、仕様です。)" color 0,0,255 boxf 150, 93, 157, 100 sysfont 17 : color : pos 170, 90 : mes "メッセージ" msbx="オブジェクトの操作時にあわせてShiftも押すと移動の縦横制限をしたり、サイズを縦横同時に合わせることができます。" pos 145, 110 : mesbox msbx, 115, 100 objsize 70, 65 pos 271, 110 : button goto "実行", *go objsize 70, 25 pos 271, 185 : button gosub "変更", *ch pos 145, 215 winobj "msctls_trackbar32","",,$50000000|$100|$10|$8, 195, 20 objsize 100, 30 : chkbox "チェックボックス",b color 255,0,0 circle 380,215,455,290 line 43, 305, 463, 305 line 150,180 line 5, 180 color 0,255,0 grect 60,140, M_PI*60/360, 50,75 screen 1,480,320, ,ginfo_wx2+10, ginfo_wy1 sysfont 17 mes "基本オブジェクト以外にも拡張できます。\n例えば hsp3util のスタティックテキスト (ObjPosMod_hsp3util.hsp)\n" statictext "hsp3util\nスタティックテキスト",120,40 hStatic = objinfo_hwnd(stat) SetWindowLong hStatic, -16, GetWindowLong( hStatic, -16) | $1 ;中央表示 GetStockObject 17 : sendmsg hStatic, $30, stat ;フォント変更 mes "" mes "また、独自モジュールのオブジェクトも拡張オブジェクトとして登録できます (ObjPosMod_grpbox.hsp)" pos 17, 110 grpbox "GROUP", 150, 100 pos 187, 110 : color 230,0,0 edgebox "グループ", 150, 100 pos 10, 220 : color ;progbar 200,20 ;pos 0, ;scrollbar ginfo_sx,20 repeat 4 mes "cnt="+cnt+" (リピートは先頭のみ操作対象)" loop gsel 0 screen 2,480,320, ,ginfo_wx1, ginfo_wy2+20 gsel 0, 1 : gsel 2 mes "すべてのウィンドウ、#include先も対応" color 0,0,255 boxf 40, 40, 90, 90 color 255,0,0 : boxf 115, 80, 199, 164 color pos -170, 200 exist dir_tv+"koma.png" if strsize ! -1 : picload dir_tv+"koma.png", 1 pos 250,20 exist "c:\\hsp36\\sample\\basic\\sysinfo.hsp" if strsize ! -1 { mes "#include \"c:\\hsp36\\sample\\basic\\sysinfo.hsp\"\n" #addition "c:\\hsp36\\sample\\basic\\sysinfo.hsp" ; addition == include(non error) }else { exist "c:\\hsp351\\sample\\basic\\sysinfo.hsp" if strsize ! -1 { mes "#include \"c:\\hsp351\\sample\\basic\\sysinfo.hsp\"\n" #addition "c:\\hsp351\\sample\\basic\\sysinfo.hsp" ; addition == include(non error) } } stop *go gsel 0 : title "実行" stop *ch gsel 0 : title "変更" return
拡張オブジェクトのスクリプト
GitHub:https://github.com/MIZUSHIKI/HSP-Module/tree/master/ObjPosModExp



zrs90(5さい)

リンク

2022/4/7(Thu) 19:24:55|NO.95928

MIZUSHIKI さん
返答して頂き、ありがとうございます。

少しでも参考になった(?)のであれば
幸いです。
(※お手間を取らせてしまっただけ
...ではないかと。
今なら、楽に実装出来る別の方法が
ありそうな気がするんですが...)



MIZUSHIKI

リンク

2022/4/7(Thu) 21:48:58|NO.95929

>zrs90(5さい)さん
情報自体は大歓迎です。
どういうことが出来てどこまで対応しようか検討もできますし。
あと単純に、そんなメッセージや方法があるんだ〜って楽しいです(*´∪`*)v



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