在Visio2007中选择与使用形状

Visio2007提供了几个用于选择形状的工具。
了解每个工具
【菜科解读】
在 Visio2007绘图中,通常需要先选择形状然后才能进行其他操作,如移动、旋转或调整形状大小。
Visio2007提供了几个用于选择形状的工具。
了解每个工具的使用场合可以轻松地处理形状。
选择一个形状 要处理某个形状,请首先在绘图页上选择它,然后执行您的任务,例如应用格式、移动该形状、对齐它或添加文本。
单击“常用”工具栏上的指针工具,然后指向绘图页上您要选择的形状。
当指针变成四向箭头时,单击该形状。
图1
当选择该形状时,其上将显示绿色手柄。
注释 您可以拖动这些手柄,调整形状大小,这些手柄在二维形状中叫做选择手柄,在一维形状中叫做端点。
形状上显示的绿色圆形叫做旋转手柄,您可以沿所需的任意方向拖动它来旋转形状。
选择多个 Visio2007形状 当您要移动许多形状或设置许多形状的格式时,您可以一次选择所有要一同处理的多个形状。
使用的方法取决于多种因素:要执行的操作性质、要确定为主形状的形状以及如何在绘图中排列要选择的形状(无论这些形状在页面上是相邻的还是分散的)。
您可以使用下列任一方法选择多个形状:
使用“区域选择”工具
当您可以方便地在形状周围绘制矩形选中内容网时(该选中内容网以绿色线条表示,包含所有要选择的形状),请使用“区域选择”工具。
单击“指针”工具旁边的下箭头,然后单击“‘区域选择’工具”。
将指针置于要选择的形状上方或形状的左侧,然后进行拖动,以便在形状周围创建选中内容网。
图2
选择形状后,您会看到选择的形状周围出现绿色的选择手柄,各个形状周围显示洋红色线条。
主形状具有洋红色粗轮廓线。
使用“套索选择”工具
使用“套索选择”工具,您可以选择非矩形区域中的多个形状。
单击“指针”工具旁边的下箭头,然后单击“套索选择”工具。
将自由绘制的选中内容网拖至要选择的形状周围。
图3
选择多个形状时,所选的形状周围会显示绿色选择手柄。
提示 默认情况下,对于“区域选择”和“套索选择”工具来说,选中内容网必须完全围住它要选中的每个形状。
如果您需要更多的灵活性,则可以拓宽选中内容网,以使其中的部分形状也被选中。
要执行此操作,请在“工具”菜单上单击“选项”,然后在“常规”选项卡上选中“选择区域内的部分形状”复选框。
使用“多重选择”工具
使用“多重选择”工具,可以在选择内容中添加形状。
此工具可用来控制主形状的定义。
例如,如果形状彼此靠得很近,则可以单击一个形状使其作为主形状,然后单击其他形状将它们添加至选择内容中。
单击“指针”工具旁边的下箭头,然后单击“多重选择”工具。
单击要选择的每个形状。
图4
您选择的第一个形状周围是洋红色粗轮廓线,而所有其他形状周围都是洋红色细轮廓线。
注释 使用“多重选择”工具并在形状周围拖动鼠标时,指针的作用与“区域选择”工具相似。
使用 键盘快捷方式 您可以按住 Shift 或 Ctrl,同时单击形状,以便一次选择多个形状。
您也可以使用这些键在当前选择内容中添加其他形状。
例如,如果要在使用“区域选择”工具创建的选择内容中添加形状,则可以按住 Shift 或 Ctrl,然后单击相应的形状。
图5
选择某一页上的所有形状 如果缩放至某个页面中并且要保持近距离仔细查看,则可以很方便地选择页面上的所有形状,而不必依次单击这些形状,或将选中内容网拖至它们周围。
请执行下列操作之一:
在“编辑”菜单上,单击“全选”。
按 Ctrl+A。
当您选择页面上的所有形状时,您在页面上拖动的最后一个形状将成为主形状。
选择特定类型的所有对象 您可以方便地选择所有特定类型的对象,如形状、组合或参考线:
在“编辑”菜单上,单击“按类型选择”,然后选中所需的对象类型,如形状、组合或参考线。
取消选择一个或多个形状 如果无意中在选择内容中包含了不需要的形状,则可以方便地取消选择一个或多个形状。
取消选择所有形状:
单击绘图中的空白区域或按 Esc。
取消选择多个选中的形状中的一个形状:
请按 Shift 并单击要取消其选择的形状。
选择内容问题疑难解答 如果在绘图页上选择形状时遇到了麻烦,则问题可能是形状受到保护,或者它们是组合在一起的。
形状处于保护状态吗? 如果无法选择形状,则形状可能受到保护,不允许进行选择,这样做的目的是防止您删除或应用对该形状所做的任何更改,如确定位置、调整大小、设置格式、编辑文本或旋转等。
删除选择保护:
在“视图”菜单上,单击“绘图资源管理器窗口”。
右键单击绘图文件名,然后单击“保护文档”。
在“保护文档”对话框中,清除“形状”复选框,然后单击“确定”。
如果您可以选择形状,但不能对其应用任何更改,则该形状可能仍然受到保护。
如果您选择的形状上显示灰色的手柄,则该形状处于锁定状态,不允许应用所有更改。
删除所有更改保护:
选择形状,然后在“格式”菜单上,单击“保护”。
清除应用于要更改的特性的复选框,然后单击“确定”。
形状是否组合到一起? 如果可以选择形状,但是不能按您的意愿处理它,则该形状可能是一个组合形状。
组合在一起的形状与一个形状具有类似的功能。
例如,如果将形状组合在一起,则可以同时更改它们的颜色。
了解形状是否为组合形状:
选择该形状,然后单击“格式”菜单上的“特殊”。
如果该形状“类型”指定为“组合”,则该形状为组合形状。
选择组合形状中的一个形状:
请选择该 Visio2007组合形状,然后在“编辑”菜单中,单击“打开组合”。
显示该形状组合的窗口即会打开。
然后您可以选择一个形状并对其应用更改。
完成操作后,单击窗口右上角的“关闭”按钮可关闭此窗口。
提示 您还可以一次单击一个组合形状,然后单击该组合形状中的一个特定形状,来选择其中的一个形状。
在,Visio2007,中,选择,与,使用,形状,在,Vis如何在Asp.ne网站中防盗链
具体的意思如下:专门新建一个针对某种文件请求的处理类(继承于IHttpHandler)并在web.config里面配置好所有的该文件请求都指向该类。
然后在类里面判断该请求的前一次请求是不是存在并且指向我们站的域名,如果存在则认为不是盗链,返回真实的文件。
否则返回error图片。
让我们设想一下如果现在另外一个网站引用了我们站的图片,并应用到了一篇文章当中。
现在有个人请求那个网站的文章,用户的request是向他们的服务器发出的,他们站的服务器返回html让浏览器解析。
浏览器解析到我们的图片地址时他会向我们站发起这个图片的请求。
因为我们程序的设置这个请求会被转发到我们特定的类做处理,程序判断这个request前面的请求是不是为空(显然它只请求了我们的图片其他没有请求,所以当然没有前面的请求),为空则返回error图片。
理解了上面的过程就容易知道为什么请求我们站的那个网页时里面的图片则正确显示了,用户显示request了那个页面,所以里面当然有前面访问的记录。
当浏览器解析我们站的图片时候就正确返回了。
不知道大家懂了没呢? 代码实现首先创建一个类继承于IHttpHandler,我这里就叫做ForbiddenInvaliteDownload类了: 代码public bool IsReusable{get { return true; }}public void ProcessRequest(HttpContext context){if (null != context.Request.UrlReferrer){context.Response.Expires = 0;context.Response.Clear();context.Response.ContentType = "image/jpg";context.Response.WriteFile(context.Request.PhysicalPath); context.Response.End();}else{context.Response.Expires = 0;context.Response.Clear();context.Response.ContentType = "text/html";context.Response.Write("盗链");context.Response.End();}}代码很少,大家一看就明白了。
就是用context.Request.UrlReferrer这个判断一下前面一个请求是否存在,存在则认为是合法的,否则不合法。
仅仅是这个类还不能将所有的jpg请求转发过来,我们需要配置一下webconfig,在System.Web下配置:代码这里还要提到的是IIS默认是不会为JPG文件发送请求的,而是直接获取。
所以我们还要在iis里面配置一下让所有的jpg请求都转发到我们的那个处理程序,而不是iis默认的直接获得。
配置如图:至此,你的网站已经可以防止jpg文件被盗了。
当然,其他的zip等等文件同样也可以实现,您可以处理一个通用类,根据请求的后缀判断是什么类型从而进行操作。
下面是效果图:结束了吗上面的方式并不能防止迅雷等下载软件的下载,在迅雷里面输入这些地址照样可以下载。
如果别的站引用了你的某个.zip的文件链接,这样还是可以直接下载到的。
那该如何解决呢?我目前想到的就是加入session验证。
如果用户访问了你的下载页面则在load里面设置session[“visited”]=”true”,然后在下载里面增加一个session验证,代码如下(注意,需要继承System.Web.SessionState.IRequiresSessionState才能使用session):代码if (null != context.Request.UrlReferrer && context.Session["visited"] == "true"){context.Response.Expires = 0;context.Response.Clear();context.Response.ContentType = "image/jpg";context.Response.WriteFile(context.Request.PhysicalPath);context.Response.End();}else{context.Response.Expires = 0;context.Response.Clear();context.Response.ContentType = "image/jpg";context.Response.WriteFile(context.Request.PhysicalApplicationPath + "Images/2.jpg");context.Response.End();}这样我们调试的时候调用迅雷下载这个图片就可以发现session里面是没有值的,当然就下载error图片了。
如,何在,Asp.ne,网站,中,防盗,链,网站,防盗,链, 上一篇:在Eclipse中的多个项目里实现代码复用 下一篇:
C#中的跨线程调用
代码如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Threading;//添加线程的命名空间namespace ppp{public partial class Form1 : Form{public Form1(){InitializeComponent();}Thread t; //定义线程变量private void button1_Click(object sender, EventArgs e){t = new Thread(new ThreadStart(Threadp)); //实例化线程t.Start();//启动线程}自定义方法Threadp,主要用于线程的调用。
代码如下:public void Threadp(){textBox1.Text = "实现在子线程中操作主线程中的控件";t.Abort();//关闭线程}}图1 在子线程中操作主线程中控件的错误提示信息:以上是通过一个子线程来操作主线程中的控件,但是,这样作会出现一个问题(如图1所示),就是TextBox控件是在主线程中创建的,在子线程中并没有对其进行创建,也就是从不是创建控件的线程访问它。
那么,如何解决跨线程调用Windows窗体控件呢?可以用线程委托实现跨线程调用Windows窗体控件。
下面将上一个例子进行一下改动。
代码如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Threading;//添加线程的命名空间namespace ppp{public partial class Form1 : Form{public Form1(){InitializeComponent();}Thread t; //定义线程变量private void button1_Click(object sender, EventArgs e){t = new Thread(new ThreadStart(Threadp)); //实例化线程t.Start();//启动线程}private delegate void setText();//定义一个线程委托自定义方法Threadp,主要用于线程的调用。
代码如下:public void Threadp(){setText d = new setText(Threading); //实例化一个委托this.Invoke(d); //在拥用此控件的基础窗体句柄的线程上执行指定的委托}自定义方法Threading,主要作于委托的调用。
代码如下:public void Threading(){textBox1.Text = "实现在子线程中操作主线程中的控件";t.Abort();//关闭线程}}} 中的,跨,线程,调用,在,开发,具有,线程,的,