|
|
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~で登録しようとするとエラーが出ます。
③その他もっとこうしたら簡単になりそうとかあったら教えてほしいです。
まだまだ勉強中なもので・・・
以上よろしくお願いいたします。
|
|
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
|
|
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を使ってみてください。ソースも付属しているので参考にできると思われます。
※実行できない件について、あくまで私の環境でです。ほかの方では実行できる場合があります。対応策や、どれを実行すべきかを
参考にする程度で構いません。
|
|
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エディタなどあったら教えていただきたいです。
また、良いアイディアなどあったらお願いします。

| |
|
2021/12/9(Thu) 02:41:24|NO.94644
返信ありがとうございます。
沢渡さん、Crystalさん ありがとうございます。
ご自分で作られる...との事でしたので
例のスレッド(No.68664)は、あえて、伏せておりましたが
ご存知だったのですね。...申し訳ありません。
ホームページ作成ソフトを参考にするのは、どうでしょうか?
画面上にボタン等の部品を配置して、.html等に変換している訳ですから
やっている事は、かなり似ている気がします。
長年、製品として作られている物も多く
UI も分かりやすく、洗練されているはずです。
|
|
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
そうですね
|
|
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エディタを開きながらコーディングすることを想定しているので、
画面を見ればわかるかもしれません。
このうち、どれが最も使いやすそうですか?
またほかのほうが良いとかあれば教えてほしいです。
何度も何度もすみません。
また、いろいろ定まってないので、ふわふわしていて質問も変わってしまうとおもいますが、
よろしくお願いいたします

| |
|
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
|
|
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
|
|
2021/12/14(Tue) 22:42:24|NO.94700
猪野 さん
ありがとうございます。
#defineでそういう手法があったんですね、勉強になります!
strfの中では"のエスケープいらないんですね、またまた勉強になりました
とりあえずいただいた情報で組んでみます。
わからないことがあったらまた質問させてください~。
|
|