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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0429
AviSoftwareHSP ON IDE15解決


AviSoftware

リンク

2018/4/29(Sun) 12:44:16|NO.84206

膨大な時間がかかりそうですが、

HSPでIDEを作ろうと思います。
IDE:総合開発環境のこと。
簡単に言うと、コンパイルしてプログラムを即座に実行でき、またデバッグ等も可能な
テキストエディター。
(そもそもC++とかVBで作れやボケ)
最初は、mesboxに色を付ける…。
というかmesboxっぽいものの作り方を募集しています。
よろしくお願いします。



この記事に返信する


tds12

リンク

2018/4/29(Sun) 13:15:00|NO.84207

> mesboxっぽいもの
Rich Edit Control



AviSoftware

リンク

2018/4/29(Sun) 16:30:12|NO.84209

CreateWindowEXで外部DLLの呼び出しに失敗してしまいます。
問題はCreateWindowEXと思われます。

#packopt name "airwind" #packopt icon "awicon" #uselib "user32.dll" #uselib "Riched32.dll" #cfunc CreateWindowEX "CreateWindowEXA" int,str,str,int,int,int,int,int,int,int,int axss=hwnd axdip=CreateWindowEX(0x00000004,"RichEdit","AirWind 1.0",0x51440000,ginfo(4),ginfo(5),ginfo_sizex,ginfo_sizey,axss,1,0,0)
あと、IDEの名前が決まりました!
「AirWind」です!
訳すと「風の窓」(あってますかね…。)



AviSoftware

リンク

2018/4/29(Sun) 16:34:27|NO.84210

詳細情報忘れました、すみません。
OS:Win10Home32bit
CPU:IntelAtomZ2760@1.80ghz
RAM:2GB
HSP:v3.5



AviSoftware

リンク

2018/4/29(Sun) 16:53:21|NO.84211

アイコン変えました。
現在、NO84209の件を募集しています。
>>CreateWindowEX
を付けてご投稿ください。
また、AviSoftwareの開発メンバーを募集しています。
下記URLからご応募ください。
http://hsp.tv/play/pforum.php?mode=all&num=84105



いののて

リンク

2018/4/29(Sun) 17:21:59|NO.84212

○問題点1
 #funcと#cfuncは、最後に#uselibで指定したDLL内を参照しますので、上のスクリプトでは、Riched32.dll内のCreateWindowEXA関数を参照してしまっています。
 なので、user32.dll内から参照させるようにしましょう。

○問題点2
 DLLの関数名には大文字と小文字の区別がありますので、CreateWindowEXAではなく、CreateWindowExAを呼び出します。

すると下のようになります。

#uselib "Riched32.dll" #uselib "user32.dll" #cfunc CreateWindowEX "CreateWindowExA" int,str,str,int,int,int,int,int,int,int,int,int

※関数登録のパラメーターの数か合っていなかったので合わせました。



AviSoftware

リンク

2018/4/30(Mon) 07:06:02|NO.84216

成功しました!ありがとうございます。
ですが、RichEditControlが作成されません。
あと、第4パラメータの値を複数指定するとき、
すべての値を足していますが、
これで合っているのでしょうか。
第4パラメータに0x400000
(子ウィンドウで作成)を足していますが、
これが作成されずに困っています。
どうすればいいですか。



Seal

リンク

2018/4/30(Mon) 09:30:38|NO.84219

mesbox に 色を付けるなら
footy2 が楽なのでは...と思ったんですがw



いののて

リンク

2018/4/30(Mon) 13:35:41|NO.84220

Riched32.dllのリッチエディットコントロールを使いたいときは、
LoadLibrary関数を使って直接DLLを読み込みます。終了時にはFreeLibraryでDLLを開放するのを忘れずに。

#packopt name "airwind" #packopt icon "awicon" #uselib "kernel32.dll" #cfunc LoadLibrary "LoadLibraryA" str #func FreeLibrary "FreeLibrary" int #uselib "user32.dll" #cfunc CreateWindowEX "CreateWindowExA" int,str,str,int,int,int,int,int,int,int,int,int hModRichEd32 = LoadLibrary("Riched32.dll") //DLL読み込み&初期化 axss=hwnd axdip=CreateWindowEX(0x00000004,"RICHEDIT","AirWind 1.0",0x51440000,ginfo(4),ginfo(5),ginfo_sizex,ginfo_sizey,axss,1,0,0) onexit *exit stop *exit FreeLibrary hModRichEd32 //DLLの開放 end

>第4パラメータに0x400000(子ウィンドウで作成)を足していますが、
0x400000 は縦書きでテキストを表示するときに指定するもので、子ウィンドウで作成は 0x40000000 です。

>あと、第4パラメータの値を複数指定するとき、すべての値を足していますが、これで合っているのでしょうか。
何を足したのかが分かりませんので、答えようがありません...



AviSoftware

リンク

2018/4/30(Mon) 20:35:06|NO.84222

ありがとうございます。
いののてさんのスクリプトでうまくいきました。
今度はそれの背景色と文字色を指定する方法を教えてください。



AviSoftware

リンク

2018/5/1(Tue) 21:03:12|NO.84234

それは置いておいて、別の問題が発生しました。
以下のスクリプトで「配列の要素が無効です」とエラー表示されます。

#include "mod_menu.as" oncmd gosub *mencmd,WM_CMD newmenu menufile,1 addmenu menufile,"新規作成(&N)",MCF_NEW addmenu menufile,"開く(&O)",MCF_OPN addmenu menufile,"上書き保存(&S)",MCF_ADDSAVE addmenu menufile,"名前を付けて保存(&Shift&S)",MCF_NEWSAVE addmenu menufile,"",0,0x0800 addmenu menufile,"終了(&Q)",MC_QUIT newmenu menuedit,1 addmenu menuedit,"検索(&F)",MCE_SEARCH addmenu menuedit,"置き換え(&R)",MCE_REPLASE newmenu menuhelp,1 addmenu menuhelp,"AirWind マニュアル(F1)",MCH_MANUAL addmenu menuhelp,"バージョン情報",MCH_VERSION newmenu menuhome,0 addmenu menuhome,"ファイル(F)",menufile,0x10 addmenu menuhome,"編集(E)",menudit,0x10 addmenu menuhome,"ヘルプ(H)",menuhelp,0x10 #packopt name "airwind" #uselib "kernel32.dll" #cfunc LoadLibrary "LoadLibraryA" str #func FreeLibrary "FreeLibrary" int #uselib "user32.dll" hModRichEd32 = LoadLibrary("Riched32.dll") //DLL読み込み&初期化 axss=hwnd axdip=CreateWindowEX(0x00000004,"RICHEDIT","",0x51440000,ginfo(4),ginfo(5),ginfo_sizex,ginfo_sizey,axss,1,0,0) title "AirWind 1.0" applymenu menuhome onexit *exit onerror *error stop *error dialog "エラーが発生したため、アプリケーションを強制終了します。",,"AirWind 1.0" goto *exit *mencmd if wparam *exit FreeLibrary hModRichEd32 //DLLの開放 end
onerrorを記述する前にエラーが発生したからonerrorが無効なのはわかりますが、
axdip=CreateWindowEX(0x00000004,"RICHEDIT","",0x51440000,ginfo(4),ginfo(5),ginfo_sizex,ginfo_sizey,axss,1,0,0)
にどうエラーがあるのでしょうか?
もしかしてmod_menu.asが何かやらかした?



いののて

リンク

2018/5/2(Wed) 17:40:54|NO.84239

CreateWindowEXをDLLの関数として登録していないからです。



Victware

リンク

2018/5/3(Thu) 13:46:55|NO.84246

ありがとうございます。
hspを3.4aに戻しました。
CreateWindowExAではなくwinobjを使いました。
あと、複数行入力できないのと、
背景、文字の色を指定すればOKです。

#include "mod_menu.as" oncmd gosub *mencmd,WM_CMD newmenu menufile,1 addmenu menufile,"新規作成(&N)",MCF_NEW addmenu menufile,"開く(&O)",MCF_OPN addmenu menufile,"上書き保存(&S)",MCF_ADDSAVE addmenu menufile,"名前を付けて保存(&Shift)",MCF_NEWSAVE addmenu menufile,"",0,0x0800 addmenu menufile,"終了(&Q)",MC_QUIT newmenu menuedit,1 addmenu menuedit,"検索(&F)",MCE_SEARCH addmenu menuedit,"置き換え(&R)",MCE_REPLASE newmenu menuhelp,1 addmenu menuhelp,"AirWind マニュアル(F1)",MCH_MANUAL addmenu menuhelp,"バージョン情報",MCH_VERSION newmenu menuhome,0 addmenu menuhome,"ファイル(F)",menufile,0x10 addmenu menuhome,"編集(E)",menudit,0x10 addmenu menuhome,"ヘルプ(H)",menuhelp,0x10 #packopt name "airwind" #uselib "kernel32.dll" #cfunc LoadLibrary "LoadLibraryA" str #func FreeLibrary "FreeLibrary" int hModRichEd32 = LoadLibrary("Riched32.dll") //DLL読み込み&初期化 mes hwnd winobj "RICHEDIT","",0x00000004,0x51440000,ginfo_sizex,ginfo_sizey,1,10000 title "AirWind 1.0" applymenu menuhome onexit *exit onerror *error stop *error dialog "エラーが発生したため、アプリケーションを強制終了します。",,"AirWind 1.0" goto *exit *mencmd if wparam *exit FreeLibrary hModRichEd32 //DLLの開放 end



Victware

リンク

2018/5/4(Fri) 08:18:09|NO.84258

HSPをまた3.5にしました。



いののて

リンク

2018/5/6(Sun) 15:17:32|NO.84272

>あと、複数行入力できないのと、
ES_MULTILINEとES_WANTRETURNをリッチテキストコントロールのウィンドウスタイルに適用してください。

>背景、文字の色を指定すればOKです。
EM_SETCHARFORMATメッセージをリッチテキストコントロールに送信して設定します。

#uselib "kernel32.dll"
#cfunc LoadLibrary "LoadLibraryA" str #func FreeLibrary "FreeLibrary" int hModRichEd32 = LoadLibrary("Riched32.dll") //DLL読み込み&初期化 objsize 120,30 pos 0,0:button gosub "文字色を青にする", *blue pos 120,0:button gosub "背景色を赤にする", *red pos 0,30:winobj "RICHEDIT","",0x00000004,0x50001004,ginfo_sizex,ginfo_sizey-30,1,10000 hRichEdit=objinfo_hwnd(stat) onexit *exit stop *exit FreeLibrary hModRichEd32 //DLLの開放 end *blue dim cf, 15 //CHARFORMAT構造体 cf(0) = 60 //cf.cbSize = sizeof(CHARFORMATA); cf(1) = 0x40000000 //cf.dwMask = CFM_COLOR; cf(2) = 0 //cf.dwEffects = 0; cf(5) = 0xFF0000 //cf.crTextColor = 0xFF0000; //   ↑色指定は16進数で行い、0xRRGGBBの順。 //書式設定をリッチテキストコントロールに送信 sendmsg hRichEdit, 0x0444/*EM_SETCHARFORMAT*/, 0x0001/*SCF_SELECTION*/, varptr(cf) return *red dim cf2, 15 //CHARFORMAT2構造体 cf2(0) = 84 //cf2.cbSize = sizeof(CHARFORMAT2); cf2(1) = 0x04000000 //cf2.dwMask = CFM_BACKCOLOR; cf2(2) = 0 //cf2.dwEffects = 0; cf2(16) = 0x0000FF //cf2.crBackColor = 0x0000FF; sendmsg hRichEdit, 0x0444/*EM_SETCHARFORMAT*/, 0x0001/*SCF_SELECTION*/, varptr(cf2) return



KirariSoft

リンク

2018/5/6(Sun) 16:54:51|NO.84278

複数行コントロールを指定するとRECが出てこない…。
何がいけないんだろう…。

#include "mod_menu.as" oncmd gosub *mencmd,WM_CMD newmenu menufile,1 addmenu menufile,"新規作成(&N)",MCF_NEW addmenu menufile,"開く(&O)",MCF_OPN addmenu menufile,"上書き保存(&S)",MCF_ADDSAVE addmenu menufile,"名前を付けて保存(&Shift)",MCF_NEWSAVE addmenu menufile,"",0,0x0800 addmenu menufile,"終了(&Q)",MC_QUIT newmenu menuedit,1 addmenu menuedit,"検索(&F)",MCE_SEARCH addmenu menuedit,"置き換え(&R)",MCE_REPLASE newmenu menuhelp,1 addmenu menuhelp,"AirWind マニュアル(F1)",MCH_MANUAL addmenu menuhelp,"バージョン情報",MCH_VERSION newmenu menuhome,0 addmenu menuhome,"ファイル(F)",menufile,0x10 addmenu menuhome,"編集(E)",menudit,0x10 addmenu menuhome,"ヘルプ(H)",menuhelp,0x10 #packopt name "airwind" #uselib "kernel32.dll" #cfunc LoadLibrary "LoadLibraryA" str #func FreeLibrary "FreeLibrary" int hModRichEd32 = LoadLibrary("Riched32.dll") //DLL読み込み&初期化 winobj "RICHEDIT","",0x00000004,WS_VISIBLE+ES_MULTILINE+WS_VSCROLL+ES_WANTRETURN,ginfo_sizex,ginfo_sizey,1,10000 title "AirWind 1.0" applymenu menuhome onexit *exit onerror *error stop *error dialog "エラーが発生したため、アプリケーションを強制終了します。",,"AirWind 1.0" goto *exit *mencmd if wparam *exit FreeLibrary hModRichEd32 //DLLの開放 end



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