# aardio 范例: 在富文本框输入带颜色字体

```aardio
//修改颜色样式
import win.ui;
import win.ui.ctrl.pick;
/*DSG{{*/
var winform = win.form(text="在富文本框输入带颜色字体";right=840;bottom=514)
winform.add(
btnCopyRtf={cls="button";text="复制 RTF 代码";left=43;top=478;right=170;bottom=508;db=1;dl=1;z=5};
btnDemo={cls="button";text="输入示例颜色字体";left=181;top=478;right=346;bottom=508;db=1;dl=1;z=2};
colorPicker={cls="pick";text="自定义控件";left=382;top=19;right=824;bottom=473;db=1;dl=1;dr=1;dt=1;z=3};
richedit={cls="richedit";left=22;top=19;right=371;bottom=473;db=1;dl=1;dr=1;dt=1;edge=1;hidesel=false;multiline=1;z=1};
splitter={cls="splitter";left=373;top=19;right=378;bottom=473;db=1;dl=1;dt=1;frame=1;z=4}
)
/*}}*/

//响应按钮事件
winform.btnDemo.oncommand = function(id,event){
	
	/*
	追加文本，支持任意个文本参数或样式表参数。
    每个样式都会修改后面文本的样式，如果指定了样式表，函数返回前会恢复默认样式。 
	样式表可指定 CHARFORMAT2 结构体或者部分需要修改的字段即可。
	
	请参考文档:
	https://www.aardio.com/zh-cn/doc/library-guide/std/win/ui/ctrl/charformat2.html 
	*/
	winform.richedit.appendText( 
		{ textColor = 0xFF0000 },
		" ","蓝色文本",
		{  protected = true, point = 16 },
		" ","绿色文本",
		{ textColor = 0x0000FF,point = 8 },
		" ","红色文本1", " ","红色文本2", " ","红色文本3",
	);
	
	winform.richedit.appendText("默认样式");
	
	/*
	下面这样写也可以，等于传了一个表参数并省略了外层大括号{}。
	函数会自动展开参数表的数组成员作为其他调用参数，可指定多个文本参数。
	*/
	winform.richedit.appendText( textColor = 0xFF0000, "蓝色文本" )  
}

winform.splitter.split(winform.richedit,winform.colorPicker);


winform.colorPicker.onColorChange = function(argb){
	winform.richedit.setSelCharformat( 
		textColor = gdi.rgbReverse(argb)
	)
	 
}

winform.richedit.onSelChange = function(min,max,typ){
	var f = winform.richedit.getSelCharformat()
	winform.colorPicker.setColor( f.textColor,true );
}

winform.btnCopyRtf.oncommand = function(id,event){
	winform.btnCopyRtf.disabledText = ["✶","✸","✹","✺","✹","✷"];
	win.clip.write( winform.richedit.rtf );
	
	thread.delay(500);
	winform.btnCopyRtf.disabledText = null; 
}

winform.show();
win.loopMessage();
```