月度存档: 十二月 2006

[ASP] 用Server.Transfer实现博客日志的永久链接

在许多博客日志阅读页面里的尾部都能看到一个永久链接,这个链接一般是持久在在的,即使博客程序换了,也可以用这个链接来访问原来的日志,而不会出现找不到页面的情况,这对于一个博客的确是一个比较实用的功能。

在修改blog程序时,也考虑了这个问题,决定也给我的博客日志加上永久链接功能。

IIS6中如果请求一个目录后面跟上参数时,会把这个参数传给默认文档,即如果请求我的博客首页http://www.xujiwei.cn/blog/?id=500,那么id=500将会传递给默认文档default.asp。利用这点就可以实现博客日志的永久链接了。当然了,这个永久链接是建立在博客目录不改变的情况下,如果目录改了,就需要另外处理了。

在ASP中可以利用Response.Redirect,其原理是服务器向客户端发送一个302 Object Moved的响应,然后客户端根据响应进行转向,但这个会增加额外的带宽开销,并且不利用搜索引擎收录,所以推荐使用Server.Transfer来转向。Server.Transfer则是直接停止当前脚本的执行,转而执行指定的脚本,并且当前的一些变量如会话等均可在新脚本里直接使用,而毋须再重新进行参数传递了,而Response.Redirect则不可以。

两种方法的另外一个比较明显的区别就是使用Response.Redirect客户端显示的URL会改变,而Server.Transfer则不会,使用Server.Transfer时客户端不会感到当前URL其实已经改变。其实这个区别也可以通过两种方法的调用方法来看出来,一个是Response.Redirect由客户端做出改变,而Server.Transfer则是由服务端做出改变。

了解了这些就可以开始做了,打开博客的默认文档,一般就是博客程序的首页,如default.asp、index.asp等,然后在其有输出内容之前加上以下代码:

<%IF Request.QueryString(“id”) Then Server.Transfer(“article.asp”)%>

当然了,article.asp是要根据博客程序来做相应改变的,id即为要做为永久链接时的参数,需要注意这个参数必须为article.asp所能识别的,即article.asp可以根据这个参数来显示日志,如果不行的话就要做相应的改变,即把article.asp中的参数名称改为id,或者把id改成其他名称。

ok,完成!其实这个东西是很简单的,这么大篇幅大都是废话,真正有用的就那么一句代码^_^。

在VB中用PictureBox实现图片的缩略图浏览

要写一个程序,涉及到缩略图的问题,原先准备用StretchBlt来实现的,后来找了下发现PictureBox的PaintPicture方法 也可以把图像按规定大小进行缩放,试了一下感觉PaintPicture的速度比StretchBlt快一些。

PaintPicture的 函数定义为:

Sub PaintPicture(Picture As IPictureDisp, X1 As Single, Y1 As Single, [Width1], [Height1], [X2], [Y2], [Width2], [Height2], [Opcode])

X1 和Y1是目标位置,Width1和Height1是目标大小,默认是PictureBox的大小,X2和Y2是源位置,Width2和Height2是源 大小,Opcode是操作方式,默认应该是vbSrcCopy,如果Width1、Height1和Width2、Height2的大小不一样则进行缩 放。

新建一个工程,设置Form1的ScaleMode为“3 – Pixel”,往窗体上放1个FileListBox控件名称为 File1,1个ImageList控件名称为ImageList1,2个PictureBox控件,一个名称为Picture1,AutoResize 为True,Visible为False,另外一个名称为Picture2,AutoRedraw为True,Visible为False,Width和 Height为128,1个ListView控件名称为ListView1,将图像列表中普通设置为ImageList1。

在窗体里添加如 下代码:

‘ 窗体载入时载入图像列表
Private Sub Form_Load()
Dim i As Long
For i = 0 To File1.ListCount – 1
‘ 载入图像
Picture1.Picture = LoadPicture(File1.Path & “\” & File1.List(i))
‘ 生成缩略图
Picture2.PaintPicture Picture1.Picture, 0, 0
‘ 添加缩略图到ImageList
ImageList1.ListImages.Add , , Picture2.Image
‘ 添加缩略图到ListView
ListView1.ListItems.Add , , File1.List(i), i + 1
DoEvents
Next
End Sub
‘ 窗体改变大小时改变ListView的大小
Private Sub Form_Resize()
With ListView1
.Top = 0
.Left = 0
.Width = Me.ScaleWidth
.Height = Me.ScaleHeight
End With
End Sub
这样就差不多可以实现图片的缩略图浏览了。