|
|
2018/4/29(Sun) 12:44:16|NO.84206
膨大な時間がかかりそうですが、
HSPでIDEを作ろうと思います。
IDE:総合開発環境のこと。
簡単に言うと、コンパイルしてプログラムを即座に実行でき、またデバッグ等も可能な
テキストエディター。
(そもそもC++とかVBで作れやボケ)
最初は、mesboxに色を付ける…。
というかmesboxっぽいものの作り方を募集しています。
よろしくお願いします。
|
|
2018/4/29(Sun) 13:15:00|NO.84207
> mesboxっぽいもの
Rich Edit Control
|
|
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」です!
訳すと「風の窓」(あってますかね…。)
|
|
2018/4/29(Sun) 16:34:27|NO.84210
詳細情報忘れました、すみません。
OS:Win10Home32bit
CPU:IntelAtomZ2760@1.80ghz
RAM:2GB
HSP:v3.5
|
|
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
※関数登録のパラメーターの数か合っていなかったので合わせました。
|
|
2018/4/30(Mon) 07:06:02|NO.84216
成功しました!ありがとうございます。
ですが、RichEditControlが作成されません。
あと、第4パラメータの値を複数指定するとき、
すべての値を足していますが、
これで合っているのでしょうか。
第4パラメータに0x400000
(子ウィンドウで作成)を足していますが、
これが作成されずに困っています。
どうすればいいですか。
|
|
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パラメータの値を複数指定するとき、すべての値を足していますが、これで合っているのでしょうか。
何を足したのかが分かりませんので、答えようがありません...
|
|
2018/4/30(Mon) 20:35:06|NO.84222
ありがとうございます。
いののてさんのスクリプトでうまくいきました。
今度はそれの背景色と文字色を指定する方法を教えてください。
|
|
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の関数として登録していないからです。
|
|
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

| |
|
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

| |
|
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

| |
|