普通窗口拖放 | web.view 拖放 | web.form 拖放 | web.layout 拖放 | 文件拖放
/*
普通窗口拖放: https://www.aardio.com/zh-cn/docs/examples/Windows/Effects/DnD.html
web.view 拖放: https://www.aardio.com/zh-cn/docs/examples/WebUI/web.view/dnd.html
web.form 拖放: https://www.aardio.com/zh-cn/docs/examples/WebUI/web.form/dnd.html
web.layout 拖放: https://www.aardio.com/zh-cn/docs/examples/WebUI/HTMLayout/exchange.html
文件拖放: https://www.aardio.com/zh-cn/docs/examples/Windows/Effects/onDropFiles.html
*/
import win.ui;
/*DSG{{*/
var winform = win.form(text="文本框 / 富文本框处理粘贴也拖放事件";right=555;bottom=347)
winform.add(
edit={cls="edit";text="请粘贴文本。在 wndproc 中处理 _WM_PASTE 消息(edit 控件)。";left=3;top=230;right=552;bottom=288;db=1;dl=1;dr=1;edge=1;multiline=1;z=5};
plus={cls="plus";left=3;top=86;right=552;bottom=141;dl=1;dr=1;dt=1;z=3};
richedit={cls="richedit";text="请拖动或粘贴文本/文件/图像到这里。调用 oleCallback 方法拦截(richedit 控件)。";left=3;top=7;right=552;bottom=76;dl=1;dr=1;dt=1;edge=1;multiline=1;z=1};
richedit2={cls="richedit";text="请粘贴外部文本。使用 onClipFormat 获取外部粘贴格式(richedit 控件,忽略内部粘贴)。";left=3;top=145;right=552;bottom=211;db=1;dl=1;dr=1;dt=1;edge=1;multiline=1;z=4};
static={cls="static";left=3;top=305;right=552;bottom=342;db=1;dl=1;dr=1;edge=1;transparent=1;z=2}
)
/*}}*/
//必须先导入此接口,细节请参考 IRichEditOleCallback 接口文档。
import com.interface.IRichEditOleCallback;
winform.richedit.oleCallback(
GetDragDropEffect = function(drag,grfKeyState,effect){
return 0,1/*_DROPEFFECT_COPY*/
};
QueryAcceptData = function(ptrDataObj,format,reco,really,hMetaPict){
if(really){
var dataObj = com.interface.IDataObject(ptrDataObj);
var txt = dataObj.getText();
if(txt){
winform.static.text = "成功拦截了拖放/粘贴文本:" + txt;
}
elseif( dataObj.isFile()){
var files = dataObj.getDropFile();
winform.static.text = "成功拦截了拖放文件:" + files[1];
}
elseif( dataObj.isBitmap()){
winform.plus.background = dataObj.getBitmap();
winform.static.text = "成功拦截了 Rich Edit 控件粘贴或拖放的图像";
}
/*返回 0 继续默认处理,文本放入控件,返回 _S_FALSE 阻止默认处理。*/
return 1/*_S_FALSE*/
}
return 0;
};
GetContextMenu = function(selType,oleObj,charRange){
/* oleCallback 会拦截右键菜单消息。*/
winform.richedit.popMenu();
};
)
winform.richedit2.onClipFormat = function(format){
import win.clip;
var format = win.clip.getFormatName(format,true);
if(format){
if(format) winform.static.text = "已粘贴格式:" + format;
}
}
winform.edit.wndproc = {
[0x302/*_WM_PASTE*/] = function(hwnd,message,wParam,lParam){
import win.clip;
var text = win.clip.read();
if(text) winform.static.text= "已粘贴:" + text;
}
}
winform.show();
win.loopMessage();
Markdown 格式