plus控件实现手写签名板

By nod32 at 2022-03-27 • 0人收藏 • 887人看过
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=904;bottom=602)
winform.add(
button={cls="button";text="清空";left=289;top=489;right=571;bottom=558;z=1};
button2={cls="button";text="保存";left=598;top=490;right=808;bottom=558;z=3};
plus={cls="plus";left=66;top=49;right=821;bottom=447;bgcolor=16777215;notify=1;z=2};
plus2={cls="plus";left=71;top=473;right=254;bottom=577;foreRepeat="scale";z=4}
)
/*}}*/

import gdip;
import gdip.bitmap
import gdip.snap;
 
//图形对象graphics(可以看作是画板)
var graphics = gdip.graphics( winform.plus )
//加上抗锯齿功能
graphics.smoothingMode = 4/*_GdipSmoothingModeAntiAlias*/ ; 

var penColor = 0xFF000000;//线颜色
var penWidth = 8;//线宽
var startcap = 2;//起点线帽,指定线帽后画笔宽度为线帽宽度
var endcap = 2;//终端线帽,指定线帽后画笔宽度为线帽宽度
var drawData; //点坐标数组
var undoArr = {};//存放每一次鼠标弹起后的点坐标信息

winform.button.oncommand = function(id,event){
	//winform.redraw()
	graphics.clear(0xFFFFFFFF) ;//清空画板,并填充指定颜色
	undoArr = {};
}

//定义鼠标初始坐标
var x1 = 0
var y1 = 0

winform.plus.onMouseDown = function(wParam,lParam){
    x1,y1 = win.getMessagePos(lParam);
    drawData = {::POINTF(x1,y1)}
}

winform.plus.onMouseMove = function(wParam,lParam){
	if( wParam & 0x1/*_MK_LBUTTON*/ ){
		var x2,y2 = win.getMessagePos(lParam);
		
		table.push(drawData,::POINTF(x2,y2) )
		var pen = gdip.pen( penColor, penWidth,2/*_GdipUnitPixel*/);
		pen.startCap = startcap 
		pen.endCap = endcap
		
		graphics.drawLine( pen, x1, y1, x2, y2)
		x1 = x2;
		y1 = y2;
		
		pen.delete()
	}
}

winform.plus.onMouseUp = function(wParam,lParam){
    //var x,y = win.getMessagePos(lParam);
	table.push(undoArr,drawData);
	drawData = null;
}


//winform.plus.modifyStyle(, 0x2000000/*_WS_CLIPCHILDREN*/)
//winform.modifyStyle(, 0x2000000/*_WS_CLIPCHILDREN*/ )

winform.button2.oncommand = function(id,event){
	var bitmap = gdip.snap(winform.plus.hwnd)
	var old = winform.plus2.setForeground(bitmap,,true) //显示到plus2上
	if( old ) old.dispose();
	bitmap.save("c:\截图.jpg",80) //保存位图
}

//重绘
winform.plus.onDrawForegroundEnd = function(graphics,rc){
    var pen = gdip.pen( penColor, penWidth,2/*_GdipUnitPixel*/);
	pen.startCap = startcap 
	pen.endCap = endcap
	
	if(#undoArr>0){
		for(i=1;#undoArr;1){
			for(j=2;#undoArr[i];1){
				graphics.drawLine(pen,undoArr[i][j-1].x,undoArr[i][j-1].y,undoArr[i][j].x,undoArr[i][j].y); 	
			}
		}
	}
	pen.delete()
}

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

image.png



实现了在plus上签名并保存成位图,但有个问题,当窗体尺寸调整或最小化恢复后,plus上的graphics会丢失,这个怎么解决??


↑↑↑↑↑ 上面的问题,参考官方的画板解决了

2 个回复 | 最后更新于 2022-03-20
2022-03-27   #1

重绘啊

image.png

新建工程里有小画板, 自己看代码

2022-03-27   #2

回复#1 @admin :

原来有DEMO,谢谢,才看到

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...