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