组装画板(TDrawBuilder)

在这一小节中我们要把工具条和画板组装起来,让他们可以协同进行工作。

画板通过一个命名为TDrawBuilder来进行组装。在详细讲解TDrawBuilder对象之前我们来看一下程序的HTML代码。

画布由三个Canvas组成

toolbar用于绘制工具条,drawCanvas 用于画图的画布,openCanvas 用于在打开保存的图片时显示小图片。

通过建立一个新的TDrawBuilder对象 new TDrawBuilder(toolbar,drawcanvas,opencanvas),将工具条、画布、小图片显示画布组装起来。

<div id="mainForm" class="mainForm" align="center" >
<canvas id="toolbar" width="780" height="105" >你的浏览器不支持HTML Canvas</canvas>
<canvas id="drawCanvas" width="760" height="440" style="margin-top: 10px;margin-left: 2px;border:2px solid black; background-color: white" >你的浏览器不支持HTML Canvas</canvas>
<canvas id="openCanvas" width="760" height="440" style="margin-top: 10px;margin-left: 2px;border:2px solid black; background-color: white" >你的浏览器不支持HTML Canvas</canvas>
<script type="text/javascript"> var toolbar=document.getElementById('toolbar');
var drawcanvas=document.getElementById('drawCanvas');
var opencanvas=document.getElementById('openCanvas');
opencanvas.style.visibility="hidden";
<span style="color:#ff0000;">var drawBuilder=new TDrawBuilder(toolbar,drawcanvas,opencanvas);</span>
<span style="color:#ff0000;"> var drawHandler=new TDrawHandler(drawcanvas,drawBuilder.getToolbarIns());
drawBuilder.setDrawHandler(drawHandler);</span> </script>
接下来我们介绍一下TDrawBuilder是如何来完成这些任务的
我们首先来看TDrawBuilder的初始化函数
在初始化函数中一共调用了7个函数,它们依次完成以下功能:
1、建立绘图命令按钮 直线、矩形、圆等
2、线宽选择按钮
3、颜色选择按钮
4、“新建”按钮
5、“保存”按钮
6、“打开”按钮
7、关联工具条对象与画布的鼠标事件
function BuildToolbar() {

		BuildCommandButton();
BuildLineStyle();
BuildColor();
BuildNewFunction();
BuildSaveFunction();
BuildOpenFunction();
Toolbar.InstallEvents(); }
 
1、建立绘图命令按钮 直线、矩形、圆等 BuildCommandButton
建立直线、矩形、圆按钮对象TimageButton,TImageButton的详细介绍你可以通过查看上一章 HTML5 canvas 在线画笔绘图工具(二)获得。
通过TToolbar提供的AddButton将当前建立的对象添加到由TToolbar管理的一个数组中,以便于后续的操作。
function BuildCommandButton() {
//直线按钮
btnList[0] = new TImageButton(1, "Images/lineNormal.png", "Images/lineMoveOn.png", "Images/lineMouseDown.png", CurrentLeft, 8, 32, 32, Toolbar, 1);
Toolbar.AddButton(btnList[0]);
CurrentLeft = CurrentLeft + 32 + 10;
//直线按钮
btnList[1] = new TImageButton(2, "Images/rectNormal.png", "Images/rectMoveOn.png", "Images/rectMouseDown.png", CurrentLeft, 8, 32, 32, Toolbar, 1);
Toolbar.AddButton(btnList[1]);
//直线按钮
CurrentLeft = CurrentLeft + 32 + 10;
btnList[2] = new TImageButton(3, "Images/arcNormal.png", "Images/arcMoveOn.png", "Images/arcMouseDown.png", CurrentLeft, 8, 32, 32, Toolbar, 1);
Toolbar.AddButton(btnList[2]); }
2、线宽选择按钮 BuildLineStyle
function BuildLineStyle() {
var Top = 2;
CurrentLeft = CurrentLeft + 50;
LineStyles[0] = new TImageButton(1, "Images/W1N.png", "Images/W1M.png", "Images/w1d.png", CurrentLeft, Top, 128, 16, Toolbar, 2);
Toolbar.AddButton(LineStyles[0]);
Top = Top + 14;
LineStyles[1] = new TImageButton(2, "Images/W2N.png", "Images/W2M.png", "Images/w2d.png", CurrentLeft, Top, 128, 16, Toolbar, 2);
Toolbar.AddButton(LineStyles[1]);
Top = Top + 14;
LineStyles[2] = new TImageButton(3, "Images/W3N.png", "Images/W3M.png", "Images/w3d.png", CurrentLeft, Top, 128, 16, Toolbar, 2);
Toolbar.AddButton(LineStyles[2]);
Top = Top + 14;
LineStyles[3] = new TImageButton(4, "Images/W4N.png", "Images/W4M.png", "Images/w4d.png", CurrentLeft, Top, 128, 16, Toolbar, 2);
Toolbar.AddButton(LineStyles[3]);
Top = Top + 14;
LineStyles[4] = new TImageButton(5, "Images/W5N.png", "Images/W5M.png", "Images/w5d.png", CurrentLeft, Top, 128, 16, Toolbar, 2);
Toolbar.AddButton(LineStyles[4]);
Top = Top + 14;
LineStyles[5] = new TImageButton(6, "Images/W6N.png", "Images/W6M.png", "Images/w6d.png", CurrentLeft, Top, 128, 16, Toolbar, 2);
Toolbar.AddButton(LineStyles[5]);
Top = Top + 14;
CurrentLeft = CurrentLeft + 140;
}
3、颜色选择按钮 BuildColor
 如下面代码所示,我们先定义一个包含了色彩值的静态数组,将色彩值做为TColorButton的Command参数建立颜色按钮。
注意最后我们建立了一个稍大的 64*64的当前选中颜色的按钮,CurrentBorderColor
由于这只是一个演示教学程序,所以我只做了一个设置边框的按钮,当然你也可以按类似的方法建立背景和填充色。
	function BuildColor() {
var Top = 2;
var Left = CurrentLeft;
var ColorArray = ["#000000", "#333333", "#666666", "#999999", "#CCCCCC", "#FFFFFF", "#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#00FFFF", "#FF00FF"];
var ColorButtons = new Array();
for (var i = 0; i < ColorArray.length; i++) {
if ((i % 4) == 0) {
Left = CurrentLeft;
Top = 2 + (Math.floor(i / 4)) * 26;
} else
Left = CurrentLeft + (i % 4) * 26;
ColorButtons[i] = new TColorButton(ColorArray[i], Left, Top, 24, 24, Toolbar, 3);
Toolbar.AddButton(ColorButtons[i]); }
var CurrentBorderColor = new TColorButton("black", CurrentLeft + 4 * 26 + 10, 8, 64, 64, Toolbar, 4);
Toolbar.AddButton(CurrentBorderColor);
Toolbar.setBorderColorButton(CurrentBorderColor);
CurrentLeft = CurrentLeft + 4 * 26 + 74;
}
4、“新建”按钮 BuildNewFunction
新建按钮依然是个图标按钮,通过对DoNewDrawing的调用清空当前画布,并进行绘制前的初始化。
 
	function BuildNewFunction() {
CurrentLeft = CurrentLeft + 10;
NewButton = new TImageButton(1, "Images/newNormal.png", "Images/newNormal.png", "Images/newMove.png", CurrentLeft, 8, 64, 64, Toolbar, 5);
NewButton.OnClick = function() {
DoNewDrawing();
};
Toolbar.AddButton(NewButton);
CurrentLeft = CurrentLeft + 64;
}
 
	function DoNewDrawing() {

		Drawhandler.NewDrawing();
Drawhandler.setId(NewGuid(true));
}
5、6、“保存”按钮和“打开”按钮在后续章节我们将专门进行讨论。
7、关联工具条对象与画布的鼠标事件 Toolbar.InstallEvents,关联鼠标事件已在上一章中进行了介绍,请参阅
 

HTML5 canvas 在线画笔绘图工具(三)的更多相关文章

  1. HTML5 canvas 在线画笔绘图工具(一)

    HTML5 canvas 在线画笔绘图工具(一) 功能介绍 这是我用Javascript写的第一个程序,在写的过程中走了很多弯路,所以写完之后想分享出来,给与我一样的初学者做为学习的参考,同时在编写这 ...

  2. HTML5 canvas 在线画笔绘图工具(二)

    Canvas+Javascript 带图标的工具条制作 TToolbar 工具条是由一个TToolbar对象和两个按钮对象(TImageButton.TColorButton)组成,因为之前我大部分时 ...

  3. HTML5 canvas 在线画笔绘图工具(四)

    HTML5画图命令 图形的绘制是由TDrawHandler与TCommand 协同工作完成. TDrawHandler需要完成以下工作 1.聚集类用于管理绘图的命令 TCommand 2.管理鼠标事件 ...

  4. html5 canvas在线文本第二步设置(字体边框)等我全部写完,我会写在页面底部

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. HTML5 canvas 在线涂鸦

    插件地址 http://bencentra.github.io/jq-signature/ 采用技术 jq-signature.min.js Developed using jQuery 2.1.4. ...

  6. 18个基于 HTML5 Canvas 开发的图表库

    如今,HTML5 可谓如众星捧月一般,受到许多业内巨头的青睐.很多Web开发者也尝试着用 HTML 5 来制作各种各样的富 Web 应用.HTML 5 规范引进了很多新特性,其中之一就是 Canvas ...

  7. [js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具)

    之前,我写了一个arc函数的用法:[js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形). arcTo: cxt.arcTo( cx, cy, x2, y2, ...

  8. 基于HTML5 Canvas和jQuery 的绘图工具的实现

    简单介绍 HTML5 提供了强大的Canvas元素.使用Canvas并结合Javascript 能够实现一些很强大的功能.本文就介绍一下基于HTML5 Canvas 的绘图工具的实现.废话少说,先看成 ...

  9. Processon 一款基于HTML5的在线作图工具

    CSDN的蒋涛不久前在微博上评价说ProcessOn是web版的visio,出于好奇私下对ProcessOn进行了一番研究.最后发现无论是在用户体验上,还是在技术上,ProcessOn都比微软的Vis ...

随机推荐

  1. 第一章——第三节 intent的匹配原则

    问题 一.三种匹配原则 二.匹配的原理 三.隐式启动Activity,如何判断跳转的Activity是否存在. 判断Intent是否可行的两种办法.

  2. [XMPP]iOS聊天软件学习笔记[三]

    今天做了好友界面,其实xmpp内部已经写好很多扩展模块,所以使用起来还是很方便的 开发时间:五天(工作时间) 开发工具:xcode6 开发平台:iOS8 XMPP框架:XMPPFramework gi ...

  3. MVC 模型绑定

    在WebForm,获取提交表单的值一般都是Request.Form["Title"]这样的方式.在MVC中,提供了模型绑定机制.让后台获取表单或Url中的参数变得更加简单. 一.基 ...

  4. 瑞柏匡丞:国内外App市场分析报告

    互联网不可阻挡的向移动互联网转化.对于各种新兴产业来讲,移动APP是当下行业的颠覆者,也是未来的王者.国内外app市场的火热程度都已经远远超出了人们的预想,然而国内外市场的区别还是相当明显的. 首先, ...

  5. PKU 1050-To The Max(找矩形内元素最大和)

    Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous s ...

  6. Django的安装配置和开发

    参考:<Django Web开发指南> Django的安装配置 1.https://www.djangoproject.com/download/下载Django-1.5.1.tar.gz ...

  7. GDB+GDBServer调试Linux应用程序

    参考:http://blog.csdn.net/shanghaiqianlun/article/details/7820401 一.gdb+gdbserver总体介绍 远程调试环境由宿主机GDB和目标 ...

  8. Spring定时任务的几种实现(转自iteye网gong1208)

    原文地址: http://gong1208.iteye.com/blog/1773177 以下为正文: 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整 ...

  9. UIScollView Touch事件

    customScrollView.h #import <UIKit/UIKit.h> @interface customScrollView : UIScrollView @end cus ...

  10. uva 714 - Copying Books(贪心 最大值最小化 二分)

    题目描写叙述开头一大堆屁话,我还细致看了半天..事实上就最后2句管用.意思就是给出n本书然后要分成k份,每份总页数的最大值要最小.问你分配方案,假设最小值同样情况下有多种分配方案,输出前面份数小的,就 ...