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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
1207
motimotiGUIエディタを考えています。15解決


motimoti

リンク

2021/12/7(Tue) 17:02:19|NO.94631

お世話になります。
GUIエディタが使いたくて調べたのですが、
他の方のGUIエディタがなかなかわかりづらかったり使いづらかったりしています。

で、いま自分なりに考えているのですが、
https://52.gigafile.nu/0205-c9c908e880ce0e2d996c048cd352ab9f0

まずこちらのgui_easier_tool.exeを実行して
左上から右下にドラッグして四角を作成
その後test1_dousa_test.hspを開いて実行していただくと、
書いたとおりにボタンが反映されると思います。
現状ボタンの配置のみ実装しています。

概念として、ファイルをインクルードするだけで
従来どおりの書き方でオブジェクト配置をできるようにしたいという感じです。
CSS(スタイルシート)のようなイメージです。


ここで質問なのですが、
①この考えに似たGUIエディタはありますでしょうか。あれば教えて下さい。

②button命令をundefして、新たにbutton命令を登録したいと思っていますが、
button goto/gosubの命令登録はできるでしょうか。
単純に #deffunc button goto~で登録しようとするとエラーが出ます。

③その他もっとこうしたら簡単になりそうとかあったら教えてほしいです。
まだまだ勉強中なもので・・・

以上よろしくお願いいたします。



この記事に返信する


zrs90(5さい)

リンク

2021/12/8(Wed) 15:19:32|NO.94634

この掲示板で、一番下っ端の私の意見でよければ。
(※スルーしてかまいません。)

まず、hspコンテストの2作品は、使って見ましたか?

「SoupDevelop」
「HSP Visual Designer」
 後、hsp3標準のPeasエディタ


http://hsp.tv/contest2011/entry.php?id=98

http://dev.onionsoft.net/seed/info.ax?id=621


方針としては、この2つの作品の足りない/使いづらい部分を
補える、guiエディタを目指せば良いかと。
(※VB等の他言語のgui開発環境を参考にすると良いかも。)


ちなみに、「SoupDevelop」については、hsp3.5の書籍、
githubで、ソースが公開されています。...最近、別件で
調べる事があったので。


例えば「SoupDevelop」の場合
4kモニタ等で使った時、拡大して表示する機能が
なかったはずです。2015年より前のソフトの為
4kモニタ自体、持っている方が
居なかったので、仕方ないですが。

私は「SoupDevelop」、hsp3標準の hsp3標準のPeasエディタしか
使ってませんが、どちらも、合わなかったです。


後、button文を、#deffuncで、使うようにする方法は
私は、分かりません。



沢渡

リンク

2021/12/8(Wed) 16:21:57|NO.94635

>②button命令をundefして、新たにbutton命令を登録したいと思っていますが、
>button goto/gosubの命令登録はできるでしょうか。

"_"(アンダーバー)を挟んで「button_goto」と「button_gosub」を
別々にdeffuncで登録する、というのが現実的な方法じゃないかなと思います。
以下のようなやり方で無理矢理実装すればできないこともないですが、
一寸使い勝手が悪くなって本末転倒だと思うので、お勧めはできないです。

#undef goto #define global goto 0, #define global goto2 goto@hsp #undef gosub #define global gosub 1, #define global gosub2 gosub@hsp #undef button //以降、gotoとgosubは命令ではなくbutton用のマクロとして扱われる。 //命令としてのgotoやgosubを使いたい場合は代わりに"goto2"、"gosub2"を使う。 #module #deffunc button int p0, str p1, label p2 //p0が1の場合はgosub、0の場合はgoto if p0 : button@hsp gosub2 p1,p2 : else : button@hsp goto2 p1,p2 return #global *main clrobj : pos 0,0 button goto "GOTO",*gt button gosub "GOSUB",*gs stop *gt dialog "GOTOを押しました" goto2 *main *gs dialog "GOSUBを押しました" return



Crystal

リンク

2021/12/8(Wed) 21:17:39|NO.94639

zrs90(5さい) さんがおっしゃっているSoup Developについて、補足があります。
GitHub経由でソース一式ダウンロードをすると、https://hsp.tv/play/pforum.php?mode=all&num=92954
にあるように、エラーを吐く場合があります。また、#moduleで定義されたファイルが多くありますが、実行するのは、「Program.hsp」を実行します。
HSP 3.5 書籍版ではこのようなエラーは表示されませんでしたが、GitHubでは起こる可能性があります。(HSP 3.6で実行できないのを確認しました。)
対応策として、エラーが出るのであれば、私が書籍版のソースをお送りしますので、実行できないなどあればおっしゃってください。
また、GUIエディタを作るのであれば、HSP Visual Designerを使ってみてください。ソースも付属しているので参考にできると思われます。

※実行できない件について、あくまで私の環境でです。ほかの方では実行できる場合があります。対応策や、どれを実行すべきかを
参考にする程度で構いません。



motimoti

リンク

2021/12/8(Wed) 23:35:21|NO.94642

zrs90(5さい) さん
ありがとうございます。
ドラフトを作成する前に、こちらを読み、試しました。
http://hsp.tv/play/pforum.php?mode=pastwch&num=68664
が、とても使いづらかったです。
それでほかのものはないかと検索し、見つからなかったので
このドラフトを作成した次第です。

沢渡 さん
ありがとうございます。
goto,gosubをundefするのですね!
たしかに本末転倒感があり、難しいところですね。。。
このドラフトではbutton命令をラップしようとしていましたが、
UseGUIでスタイルを用意しておくだけでbuttonは標準命令でもいいのかなと思ってきました。
ただ、GUI編集画面ではボタンに表示する文字をプレビューできないのですが。

Crystal さん
情報ありがとうございます。
Soup Developですが、readmeやTutorialを読んでも使い方に詰まるところがあり、
また、生成されるスクリプトが読みづらかったりと(慣れれば問題ないのでしょうが)
私には使いづらく感じました。



②のbutton命令をラップしたいということに関しては、別の方法で対処しようかなと思ってます。
(配置命令の前にUseGUIを呼び出したらサイズフォントなどが設定されてる状態になるとか)

大前提として、スクリプトを書くときに、オブジェクト配置命令は
自分で書きたいと思っています。
上記2つのツールでもそうですが、オブジェクト配置したあとに生成されるスクリプトは、必ずしも自分の書き方にはならず、
「ん?」となると思います。
他の人のスクリプトの書き方を見ると、瞬時に理解できませんよね。
そのようなことがなくて、私が書いたドラフトのような、
スタイルシートのようにあらかじめスタイルが定義されたファイルをインクルードして、
配置するときに呼び出して・・・と考えておりました。

もうすでに組んであるものにGUIを追加したいと思った場合、
自分でも管理できるように、配置命令、ラベルなどは自分で書きたいです。
みなさんがどう思うかはわかりませんが、私はそう思いました。

すみません言葉足らずで伝わらないかもしれませんが、
この考えに似たGUIエディタなどあったら教えていただきたいです。
また、良いアイディアなどあったらお願いします。



zrs90(5さい)

リンク

2021/12/9(Thu) 02:41:24|NO.94644

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

沢渡さん、Crystalさん ありがとうございます。

ご自分で作られる...との事でしたので
例のスレッド(No.68664)は、あえて、伏せておりましたが
ご存知だったのですね。...申し訳ありません。

ホームページ作成ソフトを参考にするのは、どうでしょうか?
画面上にボタン等の部品を配置して、.html等に変換している訳ですから
やっている事は、かなり似ている気がします。

長年、製品として作られている物も多く
UI も分かりやすく、洗練されているはずです。



usagi

リンク

2021/12/9(Thu) 18:21:32|NO.94646

>②button命令をundefして、新たにbutton命令を登録したい
マクロに置き換える方法もあるかもしれないですね。

#undef button #define global button(%1="goto",%2="",%3,%4=0) :\ font "MS ゴシック", 12, %4:\ objmode 2:\ button@hsp %1 %2, %3 button goto, "ラベル1", *LABEL_1, font_bold button goto, "ラベル1", *LABEL_1, font_italic button goto, "ラベル1", *LABEL_1, font_strikeout button goto, "ラベル1", *LABEL_1, font_underline button goto, "ラベル1", *LABEL_1 stop *LABEL_1 mes "押した" : stop



リンク

2021/12/9(Thu) 18:34:58|NO.94647

そうですね



motimoti

リンク

2021/12/10(Fri) 00:55:55|NO.94652

zrs90(5さい) さん
ホームページ作成ソフトですか。。。
種類が多いのでどういうものを指してるかわからないですが、
htmlを出力して、すでに配置されたコードが出るようなものであれば、
今回のコンセプトとは異なりますね。。。


usagi さん
ありがとうございます。
#defineをいろいろ試してたんですが、そういうことができたんですね!
ただgotoの後にカンマが必要なのが惜しいところです・・!
ちなみに:\が何をしているかわからないのですが、教えてもらえませんか?
これはスクリプト上で使えるものなのでしょうか?


みなさん、ありがとうございます。
いろいろ考えて、②のundefからの命令登録はしない方向で考えたいと思います。

あといろいろ考えていたらまた新たにわからないところがあるので
質問させてください。

④現状、設定パラメータを配列に代入していますが、
動的に変える必要がないので、定数にしたいです。
このとき、どのように実装すればよいでしょうか?
定数で配列のような扱い方はできないですよね・・・?
良い方法があれば教えてください!

⑤コードの書きやすさ、見やすさについて
使いやすさを考えて以下のような手法を考えています。
1 UseGUI id : button name, *label
UseGUIでスタイル設定した後、HSP標準命令で配置する手法です。
この場合、ボタンに表示する文字列は、GUIエディタ側では管理しません。
ただ、標準命令を使えるので、視認性が上がる、迷わずに使用できるという利点があります。

2 UseGUI id : button_goto (name), *label または
button_goto id, (name), *label
モジュールの配置命令を使用する手法です。
この場合、GUIエディタ側で各パラメータを管理することができます。
ただ、標準命令ではないので、命令文をミスする可能性があります。
また後者の場合は、1命令で書けるという利点がありますが、
文法やパラメータをミスする可能性もあります。

3 PutGUI id
モジュールですべてのパラメータを保持する手法です。
書くのはとても簡単ですが、何を配置してるのか、視認性に欠けます。
ただ、GUIエディタを開きながらコーディングすることを想定しているので、
画面を見ればわかるかもしれません。

このうち、どれが最も使いやすそうですか?
またほかのほうが良いとかあれば教えてほしいです。


何度も何度もすみません。
また、いろいろ定まってないので、ふわふわしていて質問も変わってしまうとおもいますが、
よろしくお願いいたします



usagi

リンク

2021/12/10(Fri) 15:21:33|NO.94654

カンマが必要なが惜しいですよね。。。

>ちなみに:\が何をしているかわからないのですが、教えてもらえませんか?
:\ はHSPの裏技みたいなものなのですが、#defineマクロは1行で各必要がありますが、
改行コードの前に\を入れると、改行が無視されると考えてくださいませ。
つまり、"\改行"と入力が必要で、':'は命令を一行に繋げるために入れてあります。

#cmpopt ppout 1 をスクリプトに入れると、"hsptmp.i"というマクロ展開後のスクリプト
が書き出されますので、確認してみてください。
今回の例では、以下のように展開されます。

: font@hsp "MS ゴシック", 12, (1): objmode@hsp 2: button@hsp goto@hsp "ラベル1", *label_1
ですからスクリプト上で使えるかと思われます。

※余談※
今回の件とは、違いますが速度が重要な所は
関数だとジャンプが発生してインライン展開されないので、
よく#defineマクロで書いてます。



猪野

リンク

2021/12/12(Sun) 13:31:07|NO.94672

CSSみたいに、という案が興味深かったので色々考えてみましたが、
モジュールとデータは分離した方が楽かもしれません。

#module style #enum _xSize_=0 #enum _ySize_ #enum _xPos_ #enum _yPos_ #enum _length_ #deffunc initStyle dim data,_length_ return #deffunc setStyle int _id,int _xSize,int _ySize,int _xPos,int _yPos data(0,_id)=_xSize,_ySize,_xPos,_yPos return #defcfunc getStyle int _id,int _index return data(_index,_id) #deffunc saveStyle str _file bsave _file,data return #deffunc loadStyle str _file exist _file if strsize=-1 { return 0 } dim data,_length_,strsize/4/_length_ bload _file,data return length2(data) #deffunc changeStyle int _id objsize getStyle(_id,_xSize_),getStyle(_id,_ySize_) pos getStyle(_id,_xPos_),getStyle(_id,_yPos_) return #deffunc buttonEx int _id,str _text,label _sub changeStyle _id button gosub _text,_sub return #global ;#include "mod_style.as" *startup file="style.dat" #ifdef _debug #enum _x_=0 #enum _y_ *edit initStyle size=90,30 position=ginfo_winx/2-size(_x_)/2,ginfo_winy/2-size(_y_)/2;中央に表示する max=3 margin=size(_x_)+5,0;横並びにする repeat max setStyle cnt,size(_x_),size(_y_),position(_x_)+margin(_x_)*cnt,position(_y_)+margin(_y_)*cnt loop saveStyle file dialog "スタイルデータを保存しました。" end #else #pack "style.dat" *use loadStyle file styleCnt=stat if styleCnt=0 { dialog "スタイルデータの読み込みに失敗しました。" end } repeat styleCnt ;changeStyle cnt ;button gosub "button "+(cnt+1),*sub buttonEx cnt,"button "+(cnt+1),*sub loop pos 0,0 stop *sub mes "pushed." return #endif
データを読み書きする共通のモジュールを用意して、
エディタ側ではモジュールを使ってデータを編集し、外部ファイルに出力、
スクリプト側ではモジュールを使って外部ファイルからデータを読み込む、
という流れです。

文字列のプレビューは行えませんが、
これなら標準のbutton命令もそのまま使えます。



猪野

リンク

2021/12/12(Sun) 15:39:35|NO.94675

整理しきれていない部分があったので修正します。

setStyle命令とgetStyle関数はマクロにした方が良さそうです。

#define global setStyle2(%1,%2,%3) data@style(%2@style,%1)=%3 #define global ctype getStyle2(%1,%2) data@style(%2@style,%1)
それぞれ以下のように使います。

setStyle2 0,_xSize_,90 setStyle2 0,_ySize_,30 mes getStyle2(0,_xSize_) mes getStyle2(0,_ySize_)
changeStyle命令でも上記のgetStyle2マクロと差し替えるか、
data配列を直接参照するようにしてください。

#deffunc changeStyle int _id objsize data(_xSize_,_id),data(_ySize_,_id) pos data(_xPos_,_id),data(_yPos_,_id) return



motimoti

リンク

2021/12/13(Mon) 11:18:58|NO.94686

usagi さん

ありがとうございます。
なるほど、VBのアンダーバーみたいなものですね、
ただ、
mes \
"aaaaaaa"
のようにするとエラーなので使えないんですね、、、

速度に影響あるんですね!勉強になります


猪野 さん
スクリプトを提示していただきありがとうございます!
そうです、イメージ的にはスタイルシートの感じですね。
私が書いた⑤の1番の手法に似てるかなーと思います。

データファイルを分けるということですが、
実行するたびにファイルを読み込むのが効率的かどうか微妙かなと思うところと、
開発時にファイルが増えてしまうと煩わしいと考える人もいると思いました。
そのへんは人によるかなーという感じですね。

みなさま、いろいろありがとうございます。
他にご意見などあればお願いいたします!



猪野

リンク

2021/12/14(Tue) 09:48:43|NO.94695

改めてモジュール単体で完結させる方向で考えてみました。

定数を配列のように扱うというのが
繰り返しの中でカウンタを引数に取って処理させたいという意味だと難しいのですが、
数値に限らないのであればこういうやり方もあります。

#module gui #define open_pos 100,100 #define open_siz 80,24 #define open_str "開く" #define close_pos 100,100 #define close_siz 80,24 #define close_str "閉じる" #define global buttonEx(%1,%2)\ objsize %1_siz@gui:pos %1_pos@gui:button gosub %1_str@gui,%2 #global ;#include "mod_gui.as" *main screen 0,,,screen_hide buttonEx open,*showSubWindow screen 1,,,screen_hide buttonEx close,*hideSubWindow gsel 0,1 stop *showSubWindow gsel 1,1 return *hideSubWindow gsel 1,-1 return
データ部分の定義はこのような形で生成してください。

name="open" xPos=100 yPos=100 xSiz=80 ySiz=24 string="開く" def=strf({" #define %s_pos %d,%d #define %s_siz %d,%d #define %s_str "%s" "},name,xPos,yPos,name,xSiz,ySiz,name,string) mes def



motimoti

リンク

2021/12/14(Tue) 22:42:24|NO.94700

猪野 さん
ありがとうございます。
#defineでそういう手法があったんですね、勉強になります!
strfの中では"のエスケープいらないんですね、またまた勉強になりました


とりあえずいただいた情報で組んでみます。
わからないことがあったらまた質問させてください~。



猪野

リンク

2021/12/15(Wed) 14:58:58|NO.94706

ひとまず解決したようですが、一つだけ訂正させてください。
サンプルの中でエスケープ文字を省けたのは、
文字列を{""}で括ってあるからです。

文字列の記述は""の他に{""}でも行えます。
この時は改行が改行として扱われるようになります。
https://www.onionsoft.net/hsp/v36/doclib/hspprog.htm#STRING

{"で記述を始めた時は"}が記述の終わりとなるため、
単独の"はそのまま文字列として解釈されます。



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