2023/11/30(木) [n年前の日記]
#1 [cg_tools] InkscapeにExtensionを追加する手順を再度メモ
WindowsやLinux上で、無料で利用できるドローソフト、Inkscape について。
_Draw Freely | Inkscape
Inkscape 0.92.3 を使っていた頃に、ユーザエクステンション(拡張機能, Extension)をインストールする手順を少しメモしていたのだけど。
_mieki256's diary - InkscapeにExtensionを追加する手順をメモ
現行版 Inkscape 1.3 x64 を使って、そのあたりの動作確認をしていたら、「エクステンション管理」を使うとインストール作業が楽になることを今頃知ったので、とりあえずメモしておく。
環境は、Windows10 x64 22H2 + Inkscape 1.3 x64。
_Draw Freely | Inkscape
Inkscape 0.92.3 を使っていた頃に、ユーザエクステンション(拡張機能, Extension)をインストールする手順を少しメモしていたのだけど。
_mieki256's diary - InkscapeにExtensionを追加する手順をメモ
現行版 Inkscape 1.3 x64 を使って、そのあたりの動作確認をしていたら、「エクステンション管理」を使うとインストール作業が楽になることを今頃知ったので、とりあえずメモしておく。
環境は、Windows10 x64 22H2 + Inkscape 1.3 x64。
◎ ユーザエクステンションフォルダの場所 :
ユーザエクステンションが入る場所は、以下で確認できる。
Inkscape を起動して、編集 → 環境設定、を選ぶ。

システム、を選択。ユーザーエクステンションという項目に、場所が表示されてる。右のほうの「開く」ボタンをクリック。
エクスプローラが起動して、ユーザーエクステンションの保存場所が開かれる。
手作業でユーザエクステンションをインストールしていく時は、このフォルダの中に各ファイルをコピーしていけばいい。
Inkscape を起動して、編集 → 環境設定、を選ぶ。

システム、を選択。ユーザーエクステンションという項目に、場所が表示されてる。右のほうの「開く」ボタンをクリック。
エクスプローラが起動して、ユーザーエクステンションの保存場所が開かれる。
手作業でユーザエクステンションをインストールしていく時は、このフォルダの中に各ファイルをコピーしていけばいい。
◎ 手作業でインストールする手順 :
順番がちょっと逆になるけど、手作業でインストールする手順をメモしておく。後述の「エクステンション管理」機能を経由してインストールができるなら、そちらを使ってインストールしたほうがはるかに楽。
今回は、「Mirror」というエクステンションをインストールしてみる。これは、任意の直線を基準にして、図形を対称になるように移動/変形してくれる拡張機能。
_Mirror - Inkspace(Inkscapeのギャラリー) | Inkscape
ページを開くと下向きの矢印ボタンがあるのでクリックすると、zipファイルをダウンロードして入手できる。2023/11/30 の時点では、mirror_It7es4K.zip が得られる。
mirror_It7es4K.zip が入手できた。これをエクスプローラで開く。ちなみに、Windows10 x64 22H2 のエクスプローラは、zipファイルの中を覗ける機能を持っている。
zipファイル内には、Inkscape のバージョンに合わせたフォルダ群が入っていた。今回は Inkscape 1.3 で使いたいので、比較的バージョンが近い v1.2 をダブルクリック。
mirror.inx, mirror.py の2つのファイルが入ってる。両方選択して右クリック。メニューの中から「コピー」を選ぶ。
ユーザエクステンション保存フォルダの中で、右クリック。メニューの中から「貼り付け」を選ぶ。
mirror.inx と mirror.py が、ユーザエクステンション保存フォルダの中にコピーされた。ちなみに、何かフォルダを作っておいて(この場合は「Mirror」とか)、その中に入れたほうが管理は楽かもしれない。フォルダの中に入れてあっても Inkscape 上で反映される。
この状態で Inkscape を再起動すれば、追加したユーザエクステンションが、エクステンションメニュー内で項目として追加される。
一応、Mirror エクステンションの使い方もメモしておく。
対称線を基準にして、図形が移動した。
今回は、「Mirror」というエクステンションをインストールしてみる。これは、任意の直線を基準にして、図形を対称になるように移動/変形してくれる拡張機能。
_Mirror - Inkspace(Inkscapeのギャラリー) | Inkscape
ページを開くと下向きの矢印ボタンがあるのでクリックすると、zipファイルをダウンロードして入手できる。2023/11/30 の時点では、mirror_It7es4K.zip が得られる。
mirror_It7es4K.zip が入手できた。これをエクスプローラで開く。ちなみに、Windows10 x64 22H2 のエクスプローラは、zipファイルの中を覗ける機能を持っている。
zipファイル内には、Inkscape のバージョンに合わせたフォルダ群が入っていた。今回は Inkscape 1.3 で使いたいので、比較的バージョンが近い v1.2 をダブルクリック。
mirror.inx, mirror.py の2つのファイルが入ってる。両方選択して右クリック。メニューの中から「コピー」を選ぶ。
ユーザエクステンション保存フォルダの中で、右クリック。メニューの中から「貼り付け」を選ぶ。
mirror.inx と mirror.py が、ユーザエクステンション保存フォルダの中にコピーされた。ちなみに、何かフォルダを作っておいて(この場合は「Mirror」とか)、その中に入れたほうが管理は楽かもしれない。フォルダの中に入れてあっても Inkscape 上で反映される。
この状態で Inkscape を再起動すれば、追加したユーザエクステンションが、エクステンションメニュー内で項目として追加される。
一応、Mirror エクステンションの使い方もメモしておく。
- 図形と、対称線になる線分を作っておく。
- 図形をクリックして選択してから、対称線を Shift + クリックして、複数選択。
- エクステンション → パスの変形 → Mirror、を選択。
対称線を基準にして、図形が移動した。
◎ エクステンション管理を使ってインストール :
上記では手作業でインストールしたけれど、「エクステンション管理」を使ってインストールできるなら、そちらを使ったほうが簡単。
今回は、「Guide Creation Tools」という拡張をインストールしてみる。コレを使うと、色々な種類を選んでガイドを作成できる。
_Guide Creation Tools - Inkspace the Inkscape Gallery | Inkscape
エクステンション → エクステンション管理、を選択。エクステンション管理のウインドウが表示される。

もし、拡張の詳細を知りたい時は、拡張名を選択した状態で、左下の「Details and Comments」をクリックすれば、Inkscape公式サイトの該当ページがWebブラウザで表示される。
「Guide Creation Tools」がインストールされた。
ちなみに、この画面で該当項目をクリックして選択して、右下の「Uninstall Package」をクリックすれば、アンインストールすることもできる。
Guide Creation Tools の使い方もメモしておく。何か図形を選択した状態で、エクステンション → ガイド → Guide Creation Tools、を選択。
設定ダイアログが表示される。ここでは「プリセット」の中から「Centered」を選んで、「適用」をクリックしてみた。

選んでいた図形の中心線になるようなガイドが作成された。
今回は、「Guide Creation Tools」という拡張をインストールしてみる。コレを使うと、色々な種類を選んでガイドを作成できる。
_Guide Creation Tools - Inkspace the Inkscape Gallery | Inkscape
エクステンション → エクステンション管理、を選択。エクステンション管理のウインドウが表示される。

- Install Packages を選択。
- 検索入力欄に単語を入力。「guide」と打ち込んで Enterキー。
- 「Guide Creation Tools」がリストアップされたので、クリックして選択。
- 「Install Package」ボタンをクリック。
もし、拡張の詳細を知りたい時は、拡張名を選択した状態で、左下の「Details and Comments」をクリックすれば、Inkscape公式サイトの該当ページがWebブラウザで表示される。
「Guide Creation Tools」がインストールされた。
ちなみに、この画面で該当項目をクリックして選択して、右下の「Uninstall Package」をクリックすれば、アンインストールすることもできる。
Guide Creation Tools の使い方もメモしておく。何か図形を選択した状態で、エクステンション → ガイド → Guide Creation Tools、を選択。
設定ダイアログが表示される。ここでは「プリセット」の中から「Centered」を選んで、「適用」をクリックしてみた。

選んでいた図形の中心線になるようなガイドが作成された。
[ ツッコむ ]
#2 [hsp] hsp3dishでスクリーンセーバを作れないか再度挑戦したがダメだった
HSP の hsp3dish を使ってスクリーンセーバを作れないものかと考えていたけれど、名案(?)が閃いたので、再度試してみた。
結果を先に書くと、やっぱりダメだった。
環境は、Windows10 x64 22H2 + HSP 3.7 beta 7。
結果を先に書くと、やっぱりダメだった。
環境は、Windows10 x64 22H2 + HSP 3.7 beta 7。
◎ 経緯 :
以前、hsp3dish を使ってスクリーンセーバが作れるのか実験してみたけれど、その時の実験は失敗に終わった。
HSPの標準機能を使ってスクリーンセーバを作成する場合、フルスクリーン表示モードにおいては、以下のような状態で作ることになっている。
しかし、hsp3dish は、表示ウインドウが必ず1つであることを強制する上に、必ずウインドウID0に描画するという制限がある。ウインドウID2が作れないし、ウインドウID2に描画していくこともできない…。
hsp3dishを使って、ウインドウID0をデスクトップサイズに変更して描画してみたが、一見それらしく表示されたものの、通常のスクリーンセーバのようには動作してくれなかった。マウスを動かしても、キーボードを叩いても、終了してくれない。これではスクリーンセーバにならない。
と、ここまでが前回の実験結果だった。
そこでふと、自前でキー押しやマウスカーソル移動を判定して、自分で勝手に終了してしまえばいいのではないかと思いついた。
また、多重起動禁止も盛り込んでおいた。と言うのも、Windowsのスクリーンセーバは多重起動されてしまう時があるらしいので…。このあたりも、HSP側がイイ感じに処理してくれないだろうから、自前で処理しなければならない可能性がある。
そんなわけで、それで上手くいくのか、実験をしてみたのだけど…。
HSPの標準機能を使ってスクリーンセーバを作成する場合、フルスクリーン表示モードにおいては、以下のような状態で作ることになっている。
- HSP起動時に作られるウインドウID0には一切手を触れない。
- 表示ウインドウID2を新規作成して、そのウインドウID2に描画していく。
しかし、hsp3dish は、表示ウインドウが必ず1つであることを強制する上に、必ずウインドウID0に描画するという制限がある。ウインドウID2が作れないし、ウインドウID2に描画していくこともできない…。
hsp3dishを使って、ウインドウID0をデスクトップサイズに変更して描画してみたが、一見それらしく表示されたものの、通常のスクリーンセーバのようには動作してくれなかった。マウスを動かしても、キーボードを叩いても、終了してくれない。これではスクリーンセーバにならない。
と、ここまでが前回の実験結果だった。
そこでふと、自前でキー押しやマウスカーソル移動を判定して、自分で勝手に終了してしまえばいいのではないかと思いついた。
また、多重起動禁止も盛り込んでおいた。と言うのも、Windowsのスクリーンセーバは多重起動されてしまう時があるらしいので…。このあたりも、HSP側がイイ感じに処理してくれないだろうから、自前で処理しなければならない可能性がある。
そんなわけで、それで上手くいくのか、実験をしてみたのだけど…。
◎ ソース :
実験に使ったソースは以下。
_ssstarh3d.hsp
使用画像は以下。
_star.png
_preview.png
動作させると以下のような画面になる。昔のWindowsに標準で入ってた「宇宙飛行」みたいなソレ。
_ssstarh3d.hsp
使用画像は以下。
_star.png
_preview.png
動作させると以下のような画面になる。昔のWindowsに標準で入ってた「宇宙飛行」みたいなソレ。
◎ 結果 :
この実験も失敗に終わった。
フルスクリーン表示モードは、一見それらしくなってるし、何かのキーを押すか、マウスを動かせば終了するようになったのだけど。
Windows10の、「スクリーンセーバーの変更」ウインドウで、hsp3dish を使って作ったスクリーンセーバを選んだところ、ウインドウ内の小さな窓に収まるようにプレビュー画像を表示することができなかった。別ウインドウが表示されてしまって、その中にプレビューが表示されてしまう。
HSPの標準機能を使ってスクリーンセーバを作る場合は、「スクリーンセーバーの変更」から与えられたウインドウハンドルに従って、ウインドウID0が小さな窓に収まるようにサイズその他が調整されるのだけど…。
hsp3dish を使った場合は、与えられたウインドウハンドルも、ウインドウハンドルから得られる情報もガン無視して、いつものように通常ウインドウを表示してしまうのだろう…。
そんなわけで、HSp 3.7 beta 7 の時点では、hsp3dish を使ってWindows用のスクリーンセーバは作れない ―― そう断言してもいいのかもしれない。無念。
フルスクリーン表示モードは、一見それらしくなってるし、何かのキーを押すか、マウスを動かせば終了するようになったのだけど。
Windows10の、「スクリーンセーバーの変更」ウインドウで、hsp3dish を使って作ったスクリーンセーバを選んだところ、ウインドウ内の小さな窓に収まるようにプレビュー画像を表示することができなかった。別ウインドウが表示されてしまって、その中にプレビューが表示されてしまう。
HSPの標準機能を使ってスクリーンセーバを作る場合は、「スクリーンセーバーの変更」から与えられたウインドウハンドルに従って、ウインドウID0が小さな窓に収まるようにサイズその他が調整されるのだけど…。
hsp3dish を使った場合は、与えられたウインドウハンドルも、ウインドウハンドルから得られる情報もガン無視して、いつものように通常ウインドウを表示してしまうのだろう…。
そんなわけで、HSp 3.7 beta 7 の時点では、hsp3dish を使ってWindows用のスクリーンセーバは作れない ―― そう断言してもいいのかもしれない。無念。
◎ 多重起動禁止について :
多重起動禁止処理については、以下のページが参考になった。
_二重起動の防止(1) - Advanced HSP
_HSP講座 - プログラ広場 (mutex.as)
Windows の kernel32.dll が持っている、CreateMutex関数を利用することで、多重起動しているかどうかを判別できるので、ソレを使って多重起動禁止処理が作れるらしい。
紹介されているソースをコピペさせてもらって、手元でも動作確認してみた。
_test_createmutex_b.hsp
生成された .exe を最初に実行すると以下のような表示になる。
その状態で、同じ .exe をまた実行すると、以下のような表示になる。OKボタンをクリックすれば終了する。
たしかに、多重起動禁止が実現できた。
_二重起動の防止(1) - Advanced HSP
_HSP講座 - プログラ広場 (mutex.as)
Windows の kernel32.dll が持っている、CreateMutex関数を利用することで、多重起動しているかどうかを判別できるので、ソレを使って多重起動禁止処理が作れるらしい。
紹介されているソースをコピペさせてもらって、手元でも動作確認してみた。
_test_createmutex_b.hsp
; 多重起動禁止テストその2 ; ; 二重起動の防止(1) - Advanced HSP ; http://chokuto.ifdef.jp/advanced/singleton1.html ; ; 2023/11/30, Windows10 x64 22H2 + HSP 3.7 beta 7 #packopt name "test_createmutex_b" ; filename #packopt type 0 ; generate ".exe" ; 多重起動をチェックするためのミューテックスオブジェクト名を定義。 ; アプリ固有の名前であること。 #define MUTEX_NAME "HSP_WinAPI_Test_Mutex" ; ---------------------------------------- ; アプリケーションの起動チェックを行うモジュール #module #uselib "kernel32.dll" #cfunc CreateMutex "CreateMutexA" int, int, sptr #cfunc GetLastError "GetLastError" #func CloseHandle "CloseHandle" int #define ERROR_ALREADY_EXISTS 183 ; アプリがすでに起動されているか取得する関数 #defcfunc AlreadyAppRunning str name if (hMutex == 0) { ; 名前付きミューテックスオブジェクトの作成 hMutex = CreateMutex(0, 0, name) ; オブジェクトがすでに作成されていたかどうかの判別 if (GetLastError() == ERROR_ALREADY_EXISTS) { ; すでに同じ名前のオブジェクトが存在する alreadyRunning = 1 } else { ; オブジェクトが新しく作成された alreadyRunning = 0 } } return alreadyRunning ; クリーンアップ処理(終了時に自動実行) #deffunc CleanupAppRunChecker onexit if (hMutex != 0) { ; ミューテックスオブジェクトハンドルのクローズ CloseHandle hMutex hMutex = 0 } return ; ---------------------------------------- #global *start if (AlreadyAppRunning(MUTEX_NAME)) { dialog "すでに起動されています。" end } mes "二重起動してしません。" stop
生成された .exe を最初に実行すると以下のような表示になる。
その状態で、同じ .exe をまた実行すると、以下のような表示になる。OKボタンをクリックすれば終了する。
たしかに、多重起動禁止が実現できた。
◎ マウスカーソル座標の取得 :
デスクトップ上のマウスカーソル座標の取得でちょっとハマったのでメモ。
HSP の場合、ginfo_mx, ginfo_my で、デスクトップ上のマウスカーソル座標が得られる。
当初、mousex, mousey でマウスカーソル座標を取得しようとしたのだけど。これはアプリウインドウ内にマウスカーソルがある場合に、アプリウインドウ内のマウスカーソル座標を取得できる変数だった。アプリウインドウの外でマウスカーソルを動かして、反応しないな、おかしいなと悩んでしまった…。
HSP の場合、ginfo_mx, ginfo_my で、デスクトップ上のマウスカーソル座標が得られる。
当初、mousex, mousey でマウスカーソル座標を取得しようとしたのだけど。これはアプリウインドウ内にマウスカーソルがある場合に、アプリウインドウ内のマウスカーソル座標を取得できる変数だった。アプリウインドウの外でマウスカーソルを動かして、反応しないな、おかしいなと悩んでしまった…。
[ ツッコむ ]
2023/11/29(水) [n年前の日記]
#1 [hsp] HSPDXのウインドウモードで大きいサイズが指定できた
HSP で DirectX を利用して描画できる拡張プラグイン、HSPDX (HSPDXFIX) について、まだ色々調べている。
◎ HSPDXのウインドウモードのサイズ指定について :
昨日実験していた際は、HSPDX で、es_screen を使ってウインドウモードのサイズ指定をしようとしても、初期ウインドウより大きくできなかったのだけど。大きいサイズの別ウインドウを screen 命令で新規作成してから es_screen を呼んだところ、その新規作成された大きいウインドウを描画ウインドウとして利用できることが分かった。
ということは…。screen 命令で、初期ウインドウID=0 を目的のサイズに変更してから、es_screen で設定しても、狙ったサイズにできそうな気もする…。試してないけど。
また、HSP は bgscr 命令を使えば枠無しウインドウを新規作成することができるので…。デスクトップサイズと同じサイズの「枠無し」ウインドウを新規作成しつつ、(0, 0) の位置に表示するようにしてやれば、フルスクリーンモードに切り替えなくても、ウインドウモードのままで、フルスクリーン表示をしているように見せかけることができると分かった。
そんなわけで、そのあたりを反映させたソースは以下のようになった。
_01_hspdx_es_excopy2.hsp
使用画像は以下。
_tex_image.zip
ということは…。screen 命令で、初期ウインドウID=0 を目的のサイズに変更してから、es_screen で設定しても、狙ったサイズにできそうな気もする…。試してないけど。
また、HSP は bgscr 命令を使えば枠無しウインドウを新規作成することができるので…。デスクトップサイズと同じサイズの「枠無し」ウインドウを新規作成しつつ、(0, 0) の位置に表示するようにしてやれば、フルスクリーンモードに切り替えなくても、ウインドウモードのままで、フルスクリーン表示をしているように見せかけることができると分かった。
そんなわけで、そのあたりを反映させたソースは以下のようになった。
_01_hspdx_es_excopy2.hsp
; HSPDX es_excopy sample 2 ; ウインドウモードをフルスクリーンモードのように見せかける ; Window ID=2 を描画対象にしている ; ; 2023/11/29, use HSP 3.7 beta 7, Windows10 x64 22H2 #include "hspdx.as" #packopt name "01_hspdx_es_excopy2" ; file name #packopt type 0 ; generate ".exe" #define TEXFILE "tex.bmp" #pack TEXFILE #define KB_ESC $00080 ; 以下の行をコメントアウトするとウインドウモードになる #define FULLSCR ; hspdx.dllが存在するか確認 exist "hspdx.dll" if strsize < 0 { dialog "Not found hspdx.dll" end } #ifdef FULLSCR ; get desktop size wdw_w = ginfo_dispx wdw_h = ginfo_dispy ; scmode = 0 ; set fullscreen scmode = 1 ; set window mode use_d3d = 1 #else ; wdw_w = 512 ; wdw_h = 288 wdw_w = 1600 wdw_h = 900 scmode = 1 ; set window mode use_d3d = 1 #endif ; 最初に作られる Window ID=0 を非表示にする gsel 0, -1 actid = 2 ; Window ID=2 を表示ウインドウにする #ifdef FULLSCR ; フルスクリーン相当。枠無しウインドウを作成 bgscr actid, wdw_w, wdw_h, 0, 0, 0, wdw_w, wdw_h #else ; ウインドウモード。通常のウインドウを作成 screen actid, wdw_w, wdw_h, 0, 20, 20, wdw_w, wdw_h #endif es_ini ; initialize HSPDX onexit *job_end es_screen wdw_w, wdw_h, 32, 0, scmode, use_d3d if stat == 1 { dialog "Error : DirectX initialization failed." end } if stat == 2 { dialog "Error : Screen initialization failed." end } *start ; load texture image file buffer 5, 256, 256 picload TEXFILE texid = 0 es_buffer texid, 0 ; copy buffer to VRAM if stat { es_bye wait 100 dialog "Error : Not enough VRAM." end } gsel actid, 1 ; Activate window es_cls ; screen clear es_sync (1000/60), 1 ; wait wait 100 font "Tahoma", 16, 1 tt = 0 k = 0 x = double(wdw_w / 2) dx = double(wdw_w) / double(60 * 3) now_fps = 0 *mainloop ; get fps es_getfps now_fps ; title strf("%d/50 FPS", now_fps) stick k, 0 ; chekc keyboard if k & KB_ESC : goto *job_end ; ESC key to exit x += dx if x <= 0.0 or (x + 16.0) >= wdw_w { ; flip direction dx *= -1 } ; draw start gsel actid es_cls $40, $80, $c0 ; screen clear ; draw image gmode gmode_rgb0, 16, 16 pos int(x), 10 es_copy texid, 0, 0, 16, 16 ; es_excopy texid, 0, 0, 16, 16, 64, 64 repeat 8 ; draw image px = 0 py = 40 + (16 + 2) * cnt sx = 0 ; source x, y sy = 0 sw = 16 ; source width, height sh = 16 dw = 14 + cnt ; dest width, height dh = 16 gmode gmode_rgb0, sw, sh objsize dw, dh pos px, py ; es_zoom texid, sx, sy, sw, sh, dw, dh es_excopy texid, sx, sy, sw, sh, dw, dh ; box fill px = px + dw + 2 gmode 0, sw, sh color 32, 32, 32 pos px, py es_boxf px, py, px + dw - 1, py + dh - 1 loop pos (wdw_w / 2) - (16 * 4), 0 color 255, 255, 255 es_fmes strf("%d/60FPS", now_fps) es_sync (1000/60), 1 ; draw and wait tt = stat await 1 goto *mainloop *job_end es_bye end
使用画像は以下。
_tex_image.zip
◎ 余談 :
ここまで調べてみたものの。HSPDX を利用するためには、以下を要求されるわけで…。
もっとも、今時スクリーンセーバを作ってみたところで、そんなものを一体誰が使うのかと考え始めると…。どうせ誰も使わないだろうから自分の環境でひとまず動いてるならそれでいいのではないか、配布やインストールの手間暇まで考えなくてもいいのでは、などと思えてきたりもして。
hsp3dish を使ってスクリーンセーバを作れたら、このあたり悩まずに済むのだろうけど。何か裏技(?)が無いものか。
- hspdx.dll を .exe (あるいは .scr) と同じ場所にコピーしてもらわないといけない。
- MSVCR71.DLL を、もしかすると Windows のシステムフォルダにコピーしてもらうことになるかもしれない。
もっとも、今時スクリーンセーバを作ってみたところで、そんなものを一体誰が使うのかと考え始めると…。どうせ誰も使わないだろうから自分の環境でひとまず動いてるならそれでいいのではないか、配布やインストールの手間暇まで考えなくてもいいのでは、などと思えてきたりもして。
hsp3dish を使ってスクリーンセーバを作れたら、このあたり悩まずに済むのだろうけど。何か裏技(?)が無いものか。
[ ツッコむ ]
#2 [hsp][prog] テキストエディタ Mery のHSP用設定をカスタマイズした
今現在、HSPのスクリプトソースを書く際には、Mery (3.6.1, x64) というエディタを利用させてもらっている。Ctrl + Space で単語補完ができる点がありがたい。いやまあ、VSCode (Visual Studio Code) も単語補完ができるから、そちらを使ってもいいのだけど、VSCode に比べたら Mery は動作が軽いので…。
_「Mery」の記事一覧 - Haijin Boys Online
_MeryWiki
_「Mery」フリーの高機能テキストエディター - 窓の杜
ただ、この Mery、HSPDX の各命令については色付け表示してくれないので、そのあたりをカスタイマイズしてみた。
_「Mery」の記事一覧 - Haijin Boys Online
_MeryWiki
_「Mery」フリーの高機能テキストエディター - 窓の杜
ただ、この Mery、HSPDX の各命令については色付け表示してくれないので、そのあたりをカスタイマイズしてみた。
◎ 構文ファイルをカスタマイズ :
Mery で HSPのソースを開いた際、表示 → 編集モード、が「HSP」になる。その、表示 → 編集モード、で、一番下の「編集モードの設定」を選べば、各言語の構文ファイルの一覧が表示される。
「HSP」を選んで、「プロパティ」ボタンをクリックすれば、構文ファイルの内容を修正できる。ちなみに、構文ファイルの拡張子は、.msy らしい。

不足している単語を一つ一つ追加していってもいいのだけど…。とりあえず、hsp.msy としてエクスポートして、HSPDX関連の命令を追加してみた。
_hsp.msy
これをインポートして、「上書き」してしまえば、HSPDX の命令にも対応する。たぶん。


元に戻したい時は、「リセット」をクリックして、「既定にリセット」をチェックして「HSP」を選んで「OK」をクリックすればいい。


ちなみに、オリジナルの内容をエクスポートしたら以下の内容だった。
_hsp.orig.msy.txt
「HSP」を選んで、「プロパティ」ボタンをクリックすれば、構文ファイルの内容を修正できる。ちなみに、構文ファイルの拡張子は、.msy らしい。

不足している単語を一つ一つ追加していってもいいのだけど…。とりあえず、hsp.msy としてエクスポートして、HSPDX関連の命令を追加してみた。
_hsp.msy
これをインポートして、「上書き」してしまえば、HSPDX の命令にも対応する。たぶん。


元に戻したい時は、「リセット」をクリックして、「既定にリセット」をチェックして「HSP」を選んで「OK」をクリックすればいい。


ちなみに、オリジナルの内容をエクスポートしたら以下の内容だった。
_hsp.orig.msy.txt
◎ 補完用ファイルもカスタマイズ :
補完ファイルについてもメモしておく。Mery は、インストールフォルダ\Ext\ フォルダ内の hsp.txt を読み取って、HSPソースを開いている際の単語補完をしているようなので、hsp.txt に単語を追加しておけば、その追加した単語でも補完が効くようになるはず。たぶん。
一応、以下に修正したファイルを置いておく。最後のあたりに追加されている、es_ から始まる文字列が追加した単語群。
_hsp.txt
一応、以下に修正したファイルを置いておく。最後のあたりに追加されている、es_ から始まる文字列が追加した単語群。
_hsp.txt
◎ 余談 :
ここまでメモしておいてなんだけど。HSP 3.5 以降は HSPDX の利用が非推奨になっているので、本来なら HSPDX の各命令の色分け表示や、単語補完にまで対応させる必要は無いはずで…。
でもまあ、どうしても HSPDX を使いたい場合は、上記のようにカスタマイズできますよ、ということで…。
でもまあ、どうしても HSPDX を使いたい場合は、上記のようにカスタマイズできますよ、ということで…。
[ ツッコむ ]
2023/11/28(火) [n年前の日記]
#1 [hsp] HSPDXについて調べている
プログラミング環境 HSP は、HGIMG3 を使うと DirectX で描画できるけど、直接描画時に奇数サイズを指定しても偶数サイズになってしまうバグがある。DirectX を使って描画できるプラグインとして、HGIMG3 の他に HSPDX があったことを思い出したので、そのあたりを調べてた。
_Divide by 0
_HSPDXFIX for HSP2.6x&3.x Ver 0.19c 2007/06/19 - ソフトウェアダウンロードコーナー
_緊急企画DirectXを使おうの巻
_緊急企画DirectXを使おうの巻
_緊急企画DirectXを使おうの巻
_DirectXスクリーンセーバー3分クッキングの巻
_OHDL - Reference - hspdxfix
ちなみに、HSPDX と HSPDXFIX があるけれど、HSPDXFIX の内容はHSPに同梱されている HSPDX に反映されているらしい。
_Divide by 0
_HSPDXFIX for HSP2.6x&3.x Ver 0.19c 2007/06/19 - ソフトウェアダウンロードコーナー
_緊急企画DirectXを使おうの巻
_緊急企画DirectXを使おうの巻
_緊急企画DirectXを使おうの巻
_DirectXスクリーンセーバー3分クッキングの巻
_OHDL - Reference - hspdxfix
ちなみに、HSPDX と HSPDXFIX があるけれど、HSPDXFIX の内容はHSPに同梱されている HSPDX に反映されているらしい。
- HSP 3.7 beta 7 同梱の hspdx.dll と、作者様のサイトで配布されている hspdxfix.dll は、バイナリが同じだった。
- hspdx.as と hspdxfix.as も内容がほとんど同じだった。
◎ 注意点その1 :
HSPDX の利用について、いくつか問題がある。まず、HSP 3.5以降では、HSPDX は古いプラグインということで、使用は非推奨になっていた。ちなみに、HSPの現行版は HSP 3.6。
_HSP3.5 アップデートガイド
_HSP3 アップデートガイド (HSP3.6アップデートガイド)
HSP 3.5 以降は、hspdx.dll と hspdx.as はかろうじて同梱されているものの、HSPDX のヘルプファイルやマニュアルページは同梱されてない。そのあたりが欲しかったら、HSP 3.4 (hsp34a.zip) を入手するか、hspdxfix を別途入手して HDP3.x のインストールフォルダにコピーしないといけない。
_HSP3.4でのセキュリティソフト誤認識について(技術情報)
_HSPDXFIX for HSP2.6x&3.x Ver 0.19c 2007/06/19 - ソフトウェアダウンロードコーナー
それにしても、「HSP3DISHを使え」と言われても…。HSP3DISHではスクリーンセーバを作れないから他のプラグインを検討してるわけで…。 *1
_HSP3.5 アップデートガイド
llmod3,HGIMG/HGIMGX,HSPDXのプラグイン・モジュールは非推奨となっています
5. パッケージの同梱終了について
(中略) また、以下のプラグイン・モジュールは、非推奨として扱われているため、マニュアル及びヘルプは、提供されません。
* llmod3 -> HSP3に対応した各種モジュールをご使用ください
* HGIMG / HGIMGX (3D描画用プラグイン) -> HGIMG3/HGIMG4をご使用ください
* HSPDX (2D描画用プラグイン) -> HSP3DISHをご使用ください
これらのプラグイン・モジュールは、コードが古くなっており、現行のWindows上での動作が保証されません。既存コードのコンパイル及び実行はサポートされますが、将来のバージョンでは対応されない可能性があります。
_HSP3 アップデートガイド (HSP3.6アップデートガイド)
4. パッケージの同梱終了について
これまでのフルセットに同梱されていたllmod3、HGIMG / HGIMGX (3D描画用プラグイン)/HSP3MT(ランタイム)/HSPLetパッケージは、同梱されません。 古いパッケージに含まれているランタイムを引き続き使用することは可能ですが、非推奨として扱われているため、マニュアル及びヘルプは、提供されません。
* llmod3 -> HSP3に対応した各種モジュールをご使用ください
* HGIMG / HGIMGX (3D描画用プラグイン) -> HGIMG3/HGIMG4をご使用ください
* HSPDX (2D描画用プラグイン) -> HSP3DISHをご使用ください
* HSP3MTランタイム -> hsp3utfやhsp3_64をご使用ください
* HSPLetランタイム -> HSP3Dish(html5)をご使用ください
これらのプラグイン・モジュールは、コードが古くなっており、現行のWindows上での動作が保証されません。 既存コードのコンパイル及び実行はサポートされますが、将来のバージョンでは対応されない可能性があります。
HSPDXプラグインは、古くからの利用者も多く現在のシステムでも実行可能なため、プラグインファイル自体は同梱されていますが、新規で使用することは推奨されません。
HSP 3.5 以降は、hspdx.dll と hspdx.as はかろうじて同梱されているものの、HSPDX のヘルプファイルやマニュアルページは同梱されてない。そのあたりが欲しかったら、HSP 3.4 (hsp34a.zip) を入手するか、hspdxfix を別途入手して HDP3.x のインストールフォルダにコピーしないといけない。
_HSP3.4でのセキュリティソフト誤認識について(技術情報)
_HSPDXFIX for HSP2.6x&3.x Ver 0.19c 2007/06/19 - ソフトウェアダウンロードコーナー
それにしても、「HSP3DISHを使え」と言われても…。HSP3DISHではスクリーンセーバを作れないから他のプラグインを検討してるわけで…。 *1
◎ 注意点その2 :
HSPは実行ファイル(.exe)を作れるけれど、拡張プラグインと呼ばれる .dll を利用している場合、作成した .exe と同じ場所に .dll を置いておかないといけない。hspdx.dll や hspdxfix.dll も拡張プラグインなので、生成した .exe と同じ場所に hspdx.dll or hspdxfix.dll を置いておくことになる。
もし、HSPDX を使ってスクリーンセーバを作った場合、利用者に対して、スクリーンセーバと同じ場所に hspdx.dll も置くことも要求しないといけない。それはちょっとアレだなと…。
ちなみに、HGIMG3 や hsp3dish は、拡張プラグインとは別の扱いらしい。HSP で生成した .exe の中に、おそらく HGIMG3 や hsp3dish の機能も含めてくれるようで、別途 .dll を置いておく必要はない。
もし、HSPDX を使ってスクリーンセーバを作った場合、利用者に対して、スクリーンセーバと同じ場所に hspdx.dll も置くことも要求しないといけない。それはちょっとアレだなと…。
ちなみに、HGIMG3 や hsp3dish は、拡張プラグインとは別の扱いらしい。HSP で生成した .exe の中に、おそらく HGIMG3 や hsp3dish の機能も含めてくれるようで、別途 .dll を置いておく必要はない。
◎ 注意点その3 :
HSPDX を使うには、MSVCR71.DLL が必要らしい。作者様のサイトで配布されているようなので、入手して hspdx.dll と一緒に配布したほうがいいのかもしれない。
_ソフトウェアダウンロードコーナー
自分の環境、Windows10 x64 22H2 の場合、C:\Windows\SysWOW64\ 以下に msvcr71.dll が入っていた。タイムスタンプは 2003/02/21。ファイルバージョンは 7.10.3052.4 になっていた。
_ソフトウェアダウンロードコーナー
自分の環境、Windows10 x64 22H2 の場合、C:\Windows\SysWOW64\ 以下に msvcr71.dll が入っていた。タイムスタンプは 2003/02/21。ファイルバージョンは 7.10.3052.4 になっていた。
◎ HSPDXの動作確認をした :
HGIMG3 は、hgrotate や hgrect を使った際、奇数サイズが偶数サイズになってしまうけれど、同じことを HSPDX で行ったらどうなるのか確認してみた。環境は Windows10 x64 22H2 + HSP 3.7 beta 7。
以下は8倍に拡大した図。

HSPDX は、奇数サイズはちゃんと奇数サイズで描画してくれる模様。描画速度に関してはまだ調べてないけれど、少なくとも見た目に関しては、HGIMG3 より真っ当な描画結果を返してくれるようだなと…。
検証に使ったソースと画像は以下。.
_01_hspdx_es_excopy.hsp
_tex_image.zip (tex.bmp, tex.png を入れてあるので解凍して利用)
以下は8倍に拡大した図。

HSPDX は、奇数サイズはちゃんと奇数サイズで描画してくれる模様。描画速度に関してはまだ調べてないけれど、少なくとも見た目に関しては、HGIMG3 より真っ当な描画結果を返してくれるようだなと…。
検証に使ったソースと画像は以下。.
_01_hspdx_es_excopy.hsp
_tex_image.zip (tex.bmp, tex.png を入れてあるので解凍して利用)
◎ ウインドウモードの動作について :
HSPDX は、es_screen命令を使って、フルスクリーンモードかウインドウモード(ウインドゥモード)を指定できるけれど、ウインドウモード時のサイズ指定が反映されないことに気づいた。
初期ウインドウサイズ(640x480)より小さいサイズを ―― 例えば 512x288等なら指定が反映されるけど。初期ウインドウサイズより大きいサイズを ―― 例えば 1280x720 を指定しても無視されてしまって、初期ウインドウサイズの中に指定したサイズが縮小表示されてしまう状態になった。描画内容が妙に小さくなってしまったので、最初は結構焦った…。
でもまあ、ドキュメント(HSPDXFIX.TXT)内で以下の記述があるので…。
HSPDX は、あくまでフルスクリーン描画を前提としたプログラムを作るためのプラグイン、と思っておいたほうがいいのかもしれない。
初期ウインドウサイズ(640x480)より小さいサイズを ―― 例えば 512x288等なら指定が反映されるけど。初期ウインドウサイズより大きいサイズを ―― 例えば 1280x720 を指定しても無視されてしまって、初期ウインドウサイズの中に指定したサイズが縮小表示されてしまう状態になった。描画内容が妙に小さくなってしまったので、最初は結構焦った…。
でもまあ、ドキュメント(HSPDXFIX.TXT)内で以下の記述があるので…。
このモードを使用することにより、デバッグをよりスムーズに行うことができますが、フルスクリーンモードでの動作に比べていろいろと制約があり、環境によってはパフォーマンス面で HSPの標準ウィンドウでの動作とほとんど変わらないことがあるため、デバッグ専用のモードだと割り切って使用した方がよいでしょう。
HSPDX は、あくまでフルスクリーン描画を前提としたプログラムを作るためのプラグイン、と思っておいたほうがいいのかもしれない。
◎ フルスクリーンモードが不安 :
Windows10 x64 22H2上でフルスクリーンモードを試してみたけれど、画面が出てくるまで妙に時間がかかる…。終了時も即座に終了せず、結構待たされる…。
DirectX等でフルスクリーンモードに切り替えると、デスクトップ上のアイコンの位置が盛大に変わってしまう問題が起きたりもするので、フルスクリーンモードへの変更は、ちと怖い…。
DirectX等でフルスクリーンモードに切り替えると、デスクトップ上のアイコンの位置が盛大に変わってしまう問題が起きたりもするので、フルスクリーンモードへの変更は、ちと怖い…。
*1: いやまあ、「今時スクリーンセーバ作るヤツなんて居ねえだろ」と思われてる可能性もありそうだけど。スクリーンセーバをまだ比較的簡単に作れそうだから、あえてわざわざHSPを使おうとしているわけで…。スクリーンセーバにしないで、単にデモプログラムの類を作るなら、HSPじゃなくて別言語+別ライブラリを選んだほうがいい…。HSPの言語仕様は正直ツラいものがあるので…。
[ ツッコむ ]
以上、3 日分です。