//十六进制编辑器 import fonts.fontAwesome; import win.ui; /*DSG{{*/ mainForm = win.form(text="hexEditor";right=917;bottom=581;bgcolor=16777215) mainForm.add( btnFind={cls="plus";text="查找";left=707;top=523;right=778;bottom=550;align="left";color=3947580;db=1;dr=1;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-13;name='FontAwesome');padding={left=8}};iconText='\uF002';notify=1;textPadding={left=26};z=3}; btnReplace={cls="plus";text="替换";left=707;top=553;right=778;bottom=580;align="left";color=3947580;db=1;dr=1;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-13;name='FontAwesome');padding={left=8}};iconText='\uF1EA';notify=1;textPadding={left=26};z=5}; btnReplaceAll={cls="plus";text="全部替换";left=785;top=553;right=885;bottom=580;align="left";color=3947580;db=1;dr=1;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-13;name='FontAwesome');padding={left=8}};iconText='\uF0CA';notify=1;textPadding={left=26};z=6}; cmbCodePage={cls="combobox";left=784;top=526;right=911;bottom=552;db=1;dr=1;edge=1;items={"UTF-8(65001)";"Unicode(1200)";"Unicode BE(1201)";"ANSI(0)";"GB2312(936)";"BIG5(950)"};mode="dropdownlist";z=7}; editFind={cls="plus";left=16;top=520;right=701;bottom=546;align="right";border={bottom=1;color=-6908266};db=1;dl=1;dr=1;editable="edit";textPadding={top=6;bottom=2};z=2}; editReplace={cls="plus";left=16;top=549;right=701;bottom=575;align="right";border={bottom=1;color=-6908266};db=1;dl=1;dr=1;editable="edit";textPadding={top=6;bottom=2};z=4}; static={cls="static";left=0;top=0;right=919;bottom=514;bgcolor=0xFFFFFF;db=1;dl=1;dr=1;dt=1;z=1} ) /*}}*/ import com.hexEditor; var hexEditor = com.hexEditor(mainForm.static); hexEditor.setBuffer('请拖动文件到当前窗口'); mainForm.onDropFiles = function(files){ hexEditor.load(files[1]); } import win.clip; import win.ui.menu; hexEditor.onContextMenu = function(x,y){ var menu = win.ui.popmenu(mainForm.static); menu.add('复制\tCtrl+C',function(){ hexEditor.copy(); }) menu.add('复制 16 进制编码',function(){ var hex = hexEditor.getSelHex() if(#hex){ win.clip.write(hex); } }) menu.add('粘贴\tCtrl+V',function(){ hexEditor.paste(); }) menu.popup(x,y,true); } mainForm.btnFind.oncommand = function(id,event){ var str = string.unhex(mainForm.editFind.text,"\x"); if(!#str){ return mainForm.editFind.editBox.showErrorTip("请输入要查找的数据"); } hexEditor.findNext(str); } mainForm.editFind.setCueBannerText("请输入查找字符串,支持模式匹配、\x前缀 16 进制字节编码"); mainForm.editReplace.setCueBannerText("请输入查找字符串,支持\x前缀的 16 进制字节编码"); mainForm.btnReplace.oncommand = function(id,event){ var selStart,selEnd = hexEditor.getSel(); if(!selEnd) return mainForm.btnFind.oncommand(); var str = string.unhex(mainForm.editReplace.text,"\x"); hexEditor.replace(str); mainForm.btnFind.oncommand(); } mainForm.btnReplaceAll.oncommand = function(id,event){ var strFind = string.unhex(mainForm.editFind.text,"\x"); var strReplace = string.unhex(mainForm.editReplace.text,"\x"); var buf = hexEditor.getBuffer(); buf = ..string.replace(buf,strFind,strReplace ); hexEditor.setBuffer(buf); } mainForm.btnFind.skin({ color={ active=0xFF00FF00; default=0xFF3C3C3C; disabled=0xFF6D6D6D; hover=0xFFFF0000 } }) mainForm.btnReplace.skin({ color={ active=0xFF00FF00; default=0xFF3C3C3C; disabled=0xFF6D6D6D; hover=0xFFFF0000 } }) mainForm.btnReplaceAll.skin({ color={ active=0xFF00FF00; default=0xFF3C3C3C; disabled=0xFF6D6D6D; hover=0xFFFF0000 } }) mainForm.cmbCodePage.selIndex = 1; mainForm.cmbCodePage.onSelChange = function(){ var text = mainForm.cmbCodePage.selText; var cp = tonumber(string.match(text,"\((\d+)")); if(cp!==null) { cp = tonumber(cp); hexEditor.setCodePage(cp); } } mainForm.show(); win.loopMessage();