掲示板NO.54672 のスクリプトをちょこっと改造し、リッチエディトの最大文字数を変更してあるサンプルです。
通常 32KB が最大の所、128KB まで拡大しています。
#include "user32.as"
#include "kernel32.as"
// エファクトの定数
#const CFM_FACE $20000000
#const CFM_BOLD $00000001 ; CFE_BOLD
#const CFM_ITALIC $00000002 ; CFE_ITALIC
#const CFM_UNDERLINE $00000004 ; CFE_UNDERLINE
#const CFE_BOLD $00000001 ; 太字体で表示されます。
#const CFE_ITALIC $00000002 ; イタリック体で表示されます。
#const CFE_UNDERLINE $00000004 ; アンダーラインを引きます。
#const CFM_COLOR $40000000 ; crTextColorメンバとdwEffectsメンバのCFE_AUTOCOLOR値が有効
#const SCF_SELECTION $00000001 ;
#const style 0x50b00004 /*WS_CHILD|WS_VISIBLE|WS_BORDER|WS_VSCROLL|WS_HSCROLL|ES_MULTILINE*/
#define EM_EXLIMITTEXT 0x0435 //********************************************************************
onexit*exit
// libraryを動的ロード
LoadLibrary "RICHED20.DLL"
plib = stat
// 色操作
objsize 80,20
tx="赤","緑","青"
repeat 3
button tx.cnt,*col
loop
// エファクト操作
tx = "太字","斜体","下線"
effvalM = CFM_BOLD,CFM_ITALIC,CFM_UNDERLINE
effvalE = CFE_BOLD,CFM_ITALIC,CFM_UNDERLINE
pos ,ginfo_cy+5
teff=stat+1
repeat 3
button tx.cnt,*eff
loop
// フォント操作
fontface = msGothic,msmincho,"メイリオ"
pos ,ginfo_cy+5
tface=stat+1
repeat 3
button fontface.cnt,*fon
loop
// clear
pos ,ginfo_cy+5:button "clear",*clr
//文字数チェック
pos ,ginfo_cy+20:button "size check",*size_check //*****************************************************
// リッチエディット作成
pos 80,0
winobj "RichEdit20A","リッチエディットコントロール、書式切替テスト",0,style,ginfo_winx-80,ginfo_winy
hwnd_re = objinfo_hwnd(stat)
gsel 0,1
Setfocus hwnd_re
dim cf2,21 // CHARFORMAT2構造体
//リッチエディトに対して、格納最大文字数変更(変更後 128kバイト)************************************************
sendmsg hwnd_re,EM_EXLIMITTEXT,0,131072
stop
//文字数チェック用
*size_check //*************************************************************************************************
sdim tmp_txt,1250304
GetWindowText hwnd_re,varptr(tmp_txt),1250304
txt_len = strlen(tmp_txt)
dialog "内部文字列は "+txt_len+"("+(txt_len / 1024)+"KB) 文字数です"
stop
*col
// CHARFORMAT2構造体 の 5 番目の配列に テキストの色を 0xBBGGRR で代入
cf2 = 84,CFM_COLOR,0,0,0, 0xFF<<(stat*8)
goto *setcharformat
*fon
// CHARFORMAT2構造体 の 26byte 目に フォント名を poke か memcpyで代入
cf2 = 84,CFM_FACE
poke cf2 , 26 , fontface(stat-tface)
goto *setcharformat
*eff
// CHARFORMAT2構造体 の 1 番目に 上書きされるエファクト情報のマスク
// 2番目に ソレが有効に成るか無効に成るかを代入
p=(stat-teff)
cf2 = 84,effvalM.p,effvalE.p
goto *setcharformat
*clr
// おまけ
// 色と、エファクトをクリア。
cf2 = 84,CFM_COLOR|CFM_BOLD|CFM_ITALIC|CFM_UNDERLINE,0,0,0,0
*setcharformat // 選択されている位置に現在のフォーマットを設定する。
sendmsg hwnd_re,0x444 /*EM_SETCHARFORMAT*/,SCF_WORD|SCF_SELECTION,varptr(cf2)
SetFocus hwnd_re
stop
*exit
DestroyWindow hwnd_re // エラーを回避するためには、ウィンドウを削除したのちに
FreeLibrary plib // freelibraryを実行して 動的確保されたlibraryのポインタを指定する。そうしなければ、ウィンドウを閉じる事が出来ずにエラーの原因になる。
end
stop