簡単な例を挙げると、
・色を変えたい文字列を検索する( instr を使う )
・検索にヒットした場合はそれを一旦選択する( sendmsg で EM_SETSEL を指定 )
・選択してある場所の色を設定する( sendmsg で EM_SETCHARFORMAT を指定 )
という感じで色分けができます。
色分けするためには全てのキーワード(HTMLタグ)をリスト化して
確認する必要があります。
// 参考URL
// https://wiki.hsp.moe/RichEdit%EF%BC%8FRuler.html
// http://hsp.tv/play/pforum.php?mode=all&num=84206
#include "user32.as"
#include "kernel32.as"
onexit goto *hsp_exit;
//////////////////////////////////////////////////////////////////////
; とりあえずのHTMLタグ文字列
sdim tag, 65536;
tag = {"
<HTML>
\t<HEAD>
\t\t<TITLE>タイトルの文字列</TITLE>
\t</HEAD>
\t<BODY>
\t\t本文などなど
\t</BODY>
</HTML>
"}
//////////////////////////////////////////////////////////////////////
; 定数
// ウィンドウスタイル
#define WS_CHILD 0x40000000
#define WS_VISIBLE 0x10000000
#define WS_CLIPSIBLINGS 0x04000000
#define WS_CLIPCHILDREN 0x02000000
#define WS_VSCROLL 0x00200000
#define WS_HSCROLL 0x00100000
#define ES_AUTOVSCROLL 0x0040
#define ES_AUTOHSCROLL 0x0080
#define ES_MULTILINE 0x0004
#define ES_DISABLENOSCROLL 0x00002000
// 拡張ウィンドウスタイル
#define WS_EX_CLIENTEDGE 0x00000200
// 書式情報等の取得・設定定数
#define WM_USER 0x0400
#define EM_SETBKGNDCOLOR (WM_USER + 67)
#define EM_GETCHARFORMAT (WM_USER + 58);
#define EM_SETCHARFORMAT (WM_USER + 68);
#define EM_SETTABSTOPS 0x00CB
#define EM_GETSEL 0x00B0
#define EM_SETSEL 0x00B1
// 書式設定
#define CFM_SIZE 0x80000000
#define CFM_COLOR 0x40000000
#define CFM_FACE 0x20000000
#define CFM_CHARSET 0x08000000
#define CFE_AUTOCOLOR 0x40000000
#define ANSI_CHARSET 0
#define FIXED_PITCH 1
// 書式変更用
#define SCF_SELECTION 0x0001
#define SCF_ALL 0x0004
//////////////////////////////////////////////////////////////////////
; 構造体変数
// CHARFORMAT構造体
dim CHARFORMAT, 15
dup cfmt_cbSize, CHARFORMAT.0;
dup cfmt_dwMask, CHARFORMAT.1;
dup cfmt_dwEffects, CHARFORMAT.2;
dup cfmt_yHeight, CHARFORMAT.3;
dup cfmt_yOffset, CHARFORMAT.4;
dup cfmt_crTextColor, CHARFORMAT.5;
dupptr cfmt_bCharSet, varptr( CHARFORMAT.6 )+0, 1;
dupptr cfmt_bPitchAndFamily, varptr( CHARFORMAT.6 )+1, 1;
dupptr cfmt_szFaceName, varptr( CHARFORMAT.6 )+2, 32, 2;
//////////////////////////////////////////////////////////////////////
; メインウィンドウ作成( リッチエディットの下地 )
LoadLibrary "riched32.dll": hLib = stat;
; リッチエディットコントロールのウィンドウスタイル
dwStyle = WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|ES_MULTILINE|ES_DISABLENOSCROLL|ES_AUTOVSCROLL|ES_AUTOHSCROLL|WS_HSCROLL|WS_VSCROLL;
winobj "RICHEDIT", "", WS_EX_CLIENTEDGE, dwStyle, ginfo_sx, ginfo_sy, 0, 0; // リッチエディットオブジェクト作成
iRich = stat; // リッチエディットのオブジェクトID取得
hRich = objinfo( iRich, 2 ); // リッチエディットのウィンドウハンドル取得
objskip iRich, 2; // タブ入力のため、フォーカス移動の禁止
//////////////////////////////////////////////////////////////////////
; リッチエディットの各種設定
// 背景色設定
sendmsg hRich, EM_SETBKGNDCOLOR, 0, 0x00000000; // 背景色(0x00BBGGRRの順)を黒に設定
// 書式設定
cfmt_cbSize = 4 * 15;
sendmsg hRich, EM_GETCHARFORMAT, 0, varptr( CHARFORMAT ); // 現在の書式を取得
cfmt_dwMask = CFM_SIZE | CFM_FACE | CFM_CHARSET | CFM_COLOR; // 有効メンバ
cfmt_dwEffects = cfmt_dwEffects & (0xFFFFFFFF ^ CFE_AUTOCOLOR ); // 文字の効果
cfmt_yHeight = 11 * 20; // フォントサイズ(ポイント値 * 20);
cfmt_crTextColor = 0x00FFFFFF; // 文字色(0x00BBGGRRの順)を白に設定
cfmt_bCharSet = ANSI_CHARSET; // ANSI文字セット
cfmt_bPitchAndFamily = FIXED_PITCH; // フォントのピッチとファミリを固定幅に設定
cfmt_szFaceName = "MS ゴシック"; // フォント名
sendmsg hRich, EM_SETCHARFORMAT, SCF_ALL, varptr( CHARFORMAT ); // 変更した書式に設定
SetWindowText hRich, varptr( tag ); // 文字列をリッチエディットに設定
RichTabStops = 4 * 4; // タブ幅(バイト数 * 4)
sendmsg hRich, EM_SETTABSTOPS, 1, varptr( RichTabStops ); // タブ幅を設定
gosub *color_set;
gsel 0, 1;
objsel iRich;
stop;
//////////////////////////////////////////////////////////////////////
; タグの色分け処理
*color_set
sendmsg hRich, EM_GETSEL, pStart, pEnd; // 現在のカーソル位置取得
idx = 0;
taglen = strlen( tag );
repeat
tagidx1 = instr( tag, idx, "<" );
if( (tagidx1 == -1) || (idx >= taglen) ) {
break;
}
else {
// カッコを含めたタグの色を変える
tagidx2 = instr( tag, tagidx1+idx, ">" ) + 1;
tag_start = tagidx1 + idx;
tag_end = tagidx2 + tagidx1 + idx;
sendmsg hRich, EM_SETSEL, tag_start, tag_end; // カーソル位置を変更し文字列の箇所を選択
cfmt_crTextColor = 0x00FFFF00; // 文字色(0x00BBGGRRの順)を水色に設定
sendmsg hRich, EM_SETCHARFORMAT, SCF_SELECTION, varptr( CHARFORMAT ); // 選択文字列の色を変更
// カッコ内の文字色を変える
code = strmid( tag, tag_start+1, tagidx2-2); // カッコ内の文字列を抜き出す
sendmsg hRich, EM_SETSEL, tag_start+1, tag_end-1; // カッコ内だけ選択
if( (code == "HTML") || (code == "/HTML") ) {
cfmt_crTextColor = 0x00FF0000; // 青
sendmsg hRich, EM_SETCHARFORMAT, SCF_SELECTION, varptr( CHARFORMAT );
}
else:if( (code == "HEAD") || (code == "/HEAD") ) {
cfmt_crTextColor = 0x0000FF00; // 緑
sendmsg hRich, EM_SETCHARFORMAT, SCF_SELECTION, varptr( CHARFORMAT );
}
else:if( (code == "TITLE") || (code == "/TITLE") ) {
cfmt_crTextColor = 0x000000FF; // 赤
sendmsg hRich, EM_SETCHARFORMAT, SCF_SELECTION, varptr( CHARFORMAT );
else:if( (code == "BODY") || (code == "/BODY") ) {
cfmt_crTextColor = 0x0000FFFF; // 黄
sendmsg hRich, EM_SETCHARFORMAT, SCF_SELECTION, varptr( CHARFORMAT );
}
}
idx += tagidx1 + tagidx2 + 1;
loop
cfmt_crTextColor = 0x00FFFFFF; // 文字色(0x00BBGGRRの順)を白に戻す
sendmsg hRich, EM_SETSEL, pStart, pEnd; // カーソル位置を元に戻す
return;
//////////////////////////////////////////////////////////////////////
; HSPの終了処理
*hsp_exit
if( iparam == 0 ) {
gsel 0;
clrobj iRich;
FreeLibrary hLib;
}
end;
ソースは参考URLのwikiの方を必要箇所のみ抜き出して
所々付け足したり書き換えたりしたものです。