aardio 文档

aardio 范例: richedit 处理回车事件,自动缩放编辑框高度。

拆分界面

import win.ui;
/*DSG{{*/
var winform = win.form(text="richedit 处理回车事件,自动缩放编辑框高度。";right=756;bottom=469)
winform.add(
richedit={cls="richedit";left=5;top=314;right=749;bottom=461;db=1;dl=1;dr=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=1};
splitter={cls="splitter";left=5;top=305;right=749;bottom=310;db=1;dl=1;dr=1;frame=1;horz=1;z=3};
wndBrowser={cls="custom";text="自定义控件";left=3;top=6;right=747;bottom=301;db=1;dl=1;dr=1;dt=1;z=2}
)
/*}}*/

//拆分界面: https://www.aardio.com/zh-cn/doc/library-guide/std/win/ui/ctrl/splitter.html
winform.splitter.split(winform.wndBrowser,winform.richedit);

//创建 Markdown 渲染窗口
import web.form.simpleMarkdown;
var wb = web.form.simpleMarkdown(winform.wndBrowser);

//输入时同步输出 Markdown
import win.debounce;
winform.richedit.onChange = win.debounce(function(){ 
    wb.write(winform.richedit.text) 
},500)

var scrollbarHeight = ::User32.GetSystemMetrics(3/*_SM_CYHSCROLL*/)

//按回车键回调此函数
winform.richedit.onOk = function(ctrl,alt,shift){ 

    //获取输入光标的客户端坐标
    var pt = ::POINT()
    ::User32.GetCaretPos(pt)

    //计算行高
    var lineCount = winform.richedit.lineCount;
    var lineHeight = math.ceil(pt.x / lineCount + winform.dpiScale(5));  

    //是否要增加高度
    if(pt.y+(lineHeight+scrollbarHeight)*2.5>winform.richedit.height){  

        winform.wndBrowser.setRedraw(false)
        winform.splitter.splitMove(-lineHeight) 
        winform.wndBrowser.setRedraw(true) 
    }
}

winform.splitter.ltMin = 400;//拆分条上方控件最小高度
winform.splitter.rbMin = 150;//拆分条下方控件最小高度

winform.show();
win.loopMessage();

Markdown 格式