最新vb程序设计实例.doc

上传人:1595****071 文档编号:33811168 上传时间:2022-08-12 格式:DOC 页数:18 大小:1,007.50KB
返回 下载 相关 举报
最新vb程序设计实例.doc_第1页
第1页 / 共18页
最新vb程序设计实例.doc_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《最新vb程序设计实例.doc》由会员分享,可在线阅读,更多相关《最新vb程序设计实例.doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精品资料vb程序设计实例.vb程序设计实例 2009-5-22 15:37 提问者: | 悬赏分:20 | 浏览次数:1688次编写程序,设银行定期存款的年利率为:1年期2.25%,2年期2.43%,3年期为2.70%,5年期为2.88%(不记复利)。今有X元,5年以后使用,共有如下6中存法:存一次5年期;存一次3年期,一次2年期;存一次3年期,两次1年期;存两次2年期,一次1年期;存一次2年期,三次1年期;存五次1年期.分别计算各种存法5年后到期的本息合计,如图所示2009-5-22 17:06 最佳答案 Private Sub Form_Activate()1年期2.25%,2年期2.43

2、%,3年期为2.70%,5年期为2.88%(不记复利)。今有X元,5年以后使用,共有如下6中存法:Const x1 As Double = 0.0225, x2 As Double = 0.0243, x3 As Double = 0.027, x5 As Double = 0.0288Dim x As Doublex = Val(InputBox()Print 存一次5年期,5年后到期的本息合计; ss(x, 5, x5)Print 存一次3年期,一次2年期,5年后到期的本息合计; ss(ss(x, 3, x3), 2, x2)Print 存一次3年期,两次1年期,5年后到期的本息合计; s

3、s(ss(ss(x, 3, x3), 1, x1), 1, x1)Print 存两次2年期,一次1年期,5年后到期的本息合计; ss(ss(ss(x, 2, x2), 2, x2), 1, x1)Print 存一次2年期,三次1年期,5年后到期的本息合计; ss(ss(ss(ss(x, 2, x2), 1, x1), 1, x1), 1, x1)Print 存五次1年期,5年后到期的本息合计; ss(ss(ss(ss(ss(x, 1, x1), 1, x1), 1, x1), 1, x1), 1, x1)End SubPrivate Function ss(ByVal a As Double,

4、 b As Integer, c As Double) As Double ss = a + a * c * bEnd FunctionPrivate Sub Form_Load()AutoRedraw = TrueEnd Sub如下Dim str As StringPrivate Sub Command1_Click()str = Text1.SelTextText1.SelText = Command3.Enabled = TrueEnd SubPrivate Sub Command2_Click()str = Text1.SelTextCommand3.Enabled = TrueEnd

5、 SubPrivate Sub Command3_Click()Text1.SelText = strEnd SubPrivate Sub Command4_Click()EndEnd SubPrivate Sub Command5_Click()Form2.ShowForm1.HideEnd SubPrivate Sub Form_Load()Command1.Enabled = TrueCommand2.Enabled = TrueCommand3.Enabled = FalseCommand4.Enabled = TrueEnd Sub如何让Command14功能键的目标转向text1

6、内的内容我点的时候必须 把text1里面的内容去选定后才能 进行操作如何让他自己选定为text1的内容- -!上面的Command1剪切功能 Command2复制功能 Command3粘贴功能 Command4退出- -!三、利用VB三维面板控件设计流动条2000-09-15 00:00:00 王金柱yeskyVB提供了一个三维面板控件,利用这个控件可设计图形效果的立体界面,从而使应用程序的界面显得更生动、美观,该控件还可以设置各种形式的背景,然后在背景上显示各种形式的字符,令人感兴趣的是,使用三维面板控件,还可设计我们经常在安装程序中看到的表示安装进程的流动条,并可显示进程百分比,改变流动条

7、的颜色等。 一、介绍属性 FloodColor:确定流动条的颜色,缺省为蓝色。FloodPercent:显示当前过程如流动条进行的百分比,参数改变时显示的百分数和流动条的面积改变,设为一整型值,取值范围是0100。 FloodShowpct:决定是否在三维面板控件上显示百分比,是一个逻辑值。为 True时显示,为False时不显示。 FloodType:表示用户对三维面板控件的使用方式。可取值有 6个,如下所示: 0缺省设置 1表示流动条方向从左到右 2表示流动条方向从右到左 3表示流动条方向从上到下 4表示流动条方向从下到上 5表示使用指定的颜色从圆心向外画圆 二、流动条设计 如果在Wind

8、ows3?X下,工具箱中不存在三维面板控件,可选择File菜单中的“Add File”进行添加,在弹出的对话框中找到WindowsSystem目录,然后选定Threed?vbx文件即可,如果使用VB4.0,需在Tools菜单中选择 Custom Controls命令,选定Sheridan 3d Controls项,按OK按钮,可在工具箱中增加三维面板控件。 启动VB3?0,在窗体中画一水平方向的长方形三维面板控件,按F4,在属性窗口中设置其Name为P3d、Bevellnner为2Raised、FloodType为1、FloodshowPct为True,再在窗体中画一个按钮Command1,双

9、击该按钮,键入下面的代码: Sub Command1_Click() P3d?floodpercent=0 For N=1 To 100 If N$#62;100 THEN Exit Sub End If P3d?FloodPercent=N Next I End Sub 按F5,运行该程序,点击Command按钮,即可看到流动条效果。 四、使用VB设计具有动感的命令图标栏2000-09-15 00:00:00 张嵘VB编程乐园p我们在使用Word、Excel等Windows应用程序时,经常会见到在程序界面顶端有一行“立体式”图标按钮。当用鼠标按下某一个图标按钮时,程序就执行相应的操作。这一行

10、“立体式”图标按钮通常就称作命令图标栏或工具条。命令图标栏一般提供一些最常用的命令,供用户快速地取用,并且它设计时采用了“立体式”按钮,操作时会产生凹下去和凸出来的“动感”,笔者这里就谈谈如何用VB来建立具有“动感”的命令图标栏。使命令图标具有“动感”是依靠对命令图标的不同状态的图像切换来获得的。当鼠标按下时,图标显示为凹入状态的图像;当松开时,图标显示为凸出状态的图像。通过图像切换就使命令图标具有了“动感”,具体设计步骤如下:1。首先在窗体中创建一个图片框(Picture Box),将其Align属性置为1,使图片框固定在窗体上端,调节其宽度使其能安置图像或命令按钮。2。在图标框内创建若干个

11、图像框(Image Control),设置其AutosizeTrue,Picture属性在程序运行中设置。3。编写程序代码。这里假设某个命令图标凸出状态的图像文件名为zrup.bmp,凹入状态的图像文件名为zrdown.bmp。窗体装入时:Sub formload()Imagel.pictureLoadpicture(zrup.bmp) 命令图标凸出End sub鼠标按下时:Sub Imagelmousedown(Button As Integer Shift As Integer, X As single,Y As single)Imagel.pictureLoadpicture(zrdow

12、n.bmp) 命令图标如下:End sub鼠标松开时:Sub Imagelmouseup(Button As Integer,Shift As Integer,X As single,Y As single) Imagel.pictureLoadpicture(zrup.bmp) 命令图标凸出End sub以上只能使命令图标具备凹下去的功能,但当在按鼠标按钮不放,并拖曳鼠标使光标移到外头,原来图标仍然处于凹下状态。要使其自动凸起,就要编写如下代码:Sub Imagel-mouseup(Button As Integer,Shift As Integer,X As single,Y As sin

13、gle)Select Case ButtonCase 1If X$#60;=0 or X$#62;Imagel.Width or Y$#60;=0 or Y$#62;Imagel.Height then Imagel.picture=Loadpicture(zrup.bmp) 凸出elseImagel.picture=Lo icture(zrdown.bmp) 凹入End ifEnd selectEnd sub通过以上三步骤就可以建立具有“动感”的命令图标,若具有多个命令图标时,可通过创建图像控制数组来实现。BMP是常见的一种图像格式,也可以使用VB提供的丰富的不同状态的命令图标位图文件,它在

14、VB的子目录bitmaps中。 窗体底端五、实现窗体内部的左右移动分割区的宽度 Private Const SPL99vTERWIDTH = 45 最小移动宽度 Private Const HMIN = 15 picLeft和picRight的宽度相对于窗体的比例 Private Percent As Single 正在拖动的标志 Private DragFlag As Boolean 每次拖动后需要重排窗体上的控件 Private Sub RedrawMe() Dim NewWidth As Single 忽略窗体缩小的情况 If WindowState = vbMinimized Then

15、 Exit Sub NewWidth = (ScaleWidth - SPL99vTERWIDTH) * Percent Picleft.Move 0, 0, NewWidth, ScaleHeight Picright.Move NewWidth + SPL99vTERWIDTH, 0, ScaleWidth - NewWidth - SPL99vTERWIDTH, ScaleHeight End Sub Private Sub Form_Load() PicLeft和PicRight的MousePointer=1 Percent = 0.5 End Sub Private Sub Form

16、_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) DragFlag = True End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 定义鼠标为vbSizeWE型 MousePointer = vbSizeWE Percent = X / ScaleWidth RedrawMe End Sub Private Sub Form_MouseUp(Button

17、 As Integer, Shift As Integer, X As Single, Y As Single) DragFlag = False MousePointer = 0 此行语句实际没有起作用 End Sub 六、封面的设计一、封面的设计是这样的,先出现一窗体,上面为你喜欢的图案。然后出现一艘从左向右行驶着的船。屏幕上方从两侧分别移动出“欢迎”两个字。具体的制作方法是:把预先选好的背景图案装入封面窗体中,窗体命名为CAI。再分别在三个图像控件(image)中装入预先制作好的位图“欢”、“迎”和船型图案。然后把三个image放置在初始位置(即图案刚在窗体出现时的位置),并把它们的可视

18、属性都设置为“false”。程序如下: Sub Form_load() cai.Show 显示封面窗体 Dim i 定义变量 image3.visible=True 船型图像控件出现 a1: If image3.Left 6120 Then 6120为船移动到屏幕右边的坐标,此值可以随需要选取 image3.Move image3.Left50 移动此图像控件如嫌移动慢,可改变移动值 Goto a1 End If image1.visible=True “欢”字出现 a2: If image1.Left 5420 Then 5420为“迎”字移动到屏幕中间的位置 image2.Move ima

19、ge2.Left50 移动此图像控件 Goto a3 End If For i=1 To 10000 使窗体暂停一段时间时间长短可通过改变循环次数实现 Next i menul.Show 显示程序主窗体 Unload cai 卸载封面窗体 End Sub 二、简单的“动画” 点击一3D按钮后,屏幕表现光线平行进入一玻璃管,在管中有一散射中心,有的光线射到此中心后反射到管的初始端。程序如下: Sub Command3Dl_Click() Dim i, j, k, m, n 定义变量 For i=2080 To 5520 显示出三条线,直到图像中的散射中心处,颜色为黑色 Line(2080,276

20、0)(i,2760),RGB(0, 0, 0) Line(2080,2860)(i,2860),RGB(0, 0, 0) Line(2080,2660)(i,2660),RGB(0, 0, 0) Next i For j=5520 To 4800 Step1 反射光线第一次射到管壁上 Line(5520,2760)(j,2760(5520j).33333333),RGB (255, 0, 0) 反射光线,颜色为红色 Line(5520,2660)(5520(5520j),2660),RGB(0, 0, 0) Line(5520,2860)(5520(5520j),2860),RGB(0, 0,

21、 0) 没有遇到散射中心的两条光线,为黑色,继续前进 Next j For k=4800 To 3360 Step1 反射光线第二次射到管壁上 Line(4800,2520)(k,2520(4800k).33333333), RGB(255, 0, 0) 反射光线,颜色为红色 Line(6240,2660)(6240(4800k),2660),RGB(0,0,0) Line(6240,2860)(6240(4800k),2860),RGB(0,0,0) 没有遇到散射中心的两条光线,颜色为黑色 Next k For m=3360 To 2080 Step1 反射光线第三次射到管壁上 Line(3

22、360,3000)(m,3000(3360m).33333333), RGB(255, 0, 0) 反射光线,颜色为红色 Next m End Sub 三、封底 封底的设计是:先出现全黑的屏幕,然后从上至下逐渐拉出白底红字的“再见”的字样。先按要求在画板中做一个BMP图,上面写着“再见”。然后在一名为BYE的窗体中加入一个全屏大的Picturel,将BMP图装入。程序如下: Sub Form_Load() Dim i 定义变量 bye.Show 封底出现 Unload menu1 卸载主菜单 al: If picture1.Height 7130 Then 7130为图的高度 picturel

23、.Height=picture1.Height50 下拉屏幕 GoTo al End If For i=1 To 20000 使窗体暂停一段时间 Next i End 结束所有操作 End Sub 利用Visual Basic让命令行软件全面转向Windows 众所周知,Windows以其优美的图形界面,方便快捷的操作环境,已成为当今的主流操作系统,但由于其程序编写过于复杂,有很多用户常用的工具和小程序仍然只能运行于DOS环境下,造成Windows和DOS的频繁切换、使工作缺乏连续性和效率低下。有什么方法可以解决这一问题呢?等待For Windows版本的面市,但仍会造成重复投资。据笔者观察发

24、现,常用工具中有一部分为命令行软件,这些软件完全可以利用VB改编成For Windows版本的。首先由于VB的简单易用,使Windows的界面设计变得异常简单直观。所以可轻而易举的将命令选项、开关等转化为对应的图形界面(如复选钮等)。其次由于VB为用户提供了Shell函数,也使得命令调用非常简单。通过Shell其实你只做了个界面,核心还是DOS下的原来工具。其函数格式如下: Shell(命令字符串) 命令字符串即具体执行的命令(如字符串“arj e a:user.arj c:user ”)有关字符串的操作可查阅有关书籍。至于窗口型类型缺省即可。最后只须注意,在Shell执行函数之前,有必要对命

25、令行中有可能引发错误的参数进行检测,如在执行前检查用户给的源文件是否存在等,以保证达到预期结果。笔者用VB改编的Arj for Windows版本,其结果出乎想象。希望大家能自己动手全面转向Windows。 七、利用VB产生屏幕变暗的效果想利用 VB 编程实现屏幕变暗的效果(像关闭 Win95 时的效果),只要按下面的步骤来做: 1. 在 Form1 中加入两个 CommandButton 和一个 PictureBox. 2. 在 Form1 的代码窗口中添加以下代码: Private Type RECT Left As Long Top As Long Right As Long Botto

26、m As Long End Type Private Declare Function GetDC Lib user32 (ByVal hwnd As Long) As Long Private Declare Function ReleaseDC Lib user32 (ByVal hwnd As Long, ByVal hdc As Long) As Long Private Declare Function CreatePatternBrush Lib gdi32 (ByVal hBitmap As Long) As Long Private Declare Function PatBl

27、t Lib gdi32 (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal dwRop As Long) As Long Private Declare Function DeleteObject Lib gdi32 (ByVal hObject As Long) As Long Private Declare Function CreateBitmap Lib gdi32 (ByVal nWidth As Long, ByVal nHe

28、ight As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long Private Declare Function SelectObject Lib gdi32 (ByVal hdc As Long, ByVal hObject As Long) As Long Private Declare Function InvalidateRect Lib user32 (ByVal hwnd As Long, ByVal lpRect As Long, ByVal bErase As Long)

29、As Long Private bybits(1 To 16) As Byte Private hBitmap As Long, hBrush As Long Private hDesktopWnd As Long Private Sub Command1_Click() Dim rop As Long, res As Long Dim hdc5 As Long, width5 As Long, height5 As Long hdc5 = GetDC(0) width5 = Screen.Width Screen.TwipsPerPixelX height5 = Screen.Height

30、Screen.TwipsPerPixelY rop = &HA000C9 Call SelectObject(hdc5, hBrush) res = PatBlt(hdc5, 0, 0, width5, height5, rop) Call DeleteObject(hBrush) res = ReleaseDC(0, hdc5) End Sub Private Sub Command2_Click() Dim aa As Long aa = InvalidateRect(0, 0, 1) End Sub Private Sub Form_Load() Dim ary Dim i As Lon

31、g ary = Array(&H55, &H0, &HAA, &H0, _ &H55, &H0, &HAA, &H0, _ &H55, &H0, &HAA, &H0, _ &H55, &H0, &HAA, &H0) For i = 1 To 16 bybits(i) = ary(i - 1) Next i hBitmap = CreateBitmap(8, 8, 1, 1, bybits(1) hBrush = CreatePatternBrush(hBitmap) Picture1.ForeColor = RGB(0, 0, 0) Picture1.BackColor = RGB(255,

32、255, 255) Picture1.ScaleMode = 3 End Sub 运行程序,按 Command1 就可以使屏幕暗下来,按 Command2 恢复。 八、PrivateDeclareFunctionGetDesktopWindowLibuser32()AsLongPrivateDeclareFunctionGetDCLibuser32(ByValhwndAsLong)AsLongPrivateDeclareFunctionStretchBltLibgdi32_(ByValhdcAsLong,_ByValxAsLong,_ByValyAsLong,_ByValnWidthAsLon

33、g,_ByValnHeightAsLong,_ByValhSrcDCAsLong,_ByValxSrcAsLong,_ByValySrcAsLong,_ByValnSrcWidthAsLong,_ByValnSrcHeightAsLong,_ByValdwRopAsLong)AsLongPrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)EndEndSubPrivateSubForm_Load()settheshowintaskbarpropertytofalsesettheborderstyleoftheformtononeForm1

34、.AutoRedraw=TrueForm1.ScaleMode=vbPixelsa=GetDesktopWindow()b=GetDC(a)StretchBltForm1.hdc,0,0,Screen.Width,Screen.Height,b,0,_Screen.Height,Screen.Width,-Screen.Height,vbSrcCop 1九在VB中实现闪动标题栏摘要 在你的应用程序中,你可能会希望将应用程序的标题栏进行闪动,以提醒用户进行某种操作,本文介绍了如何使一个窗口的标题栏进行闪动。 闪动标题栏 闪动一个窗口的标题栏意味着改变它的标题栏的外观,例如它从活动变为不活动,或是

35、从不活动变为活动等等。只要你能在Visual Basic中得到窗口的句柄,你就可以使用Windows 应用程序编程接口(API)函数来使该窗口的标题栏进行闪动。函数FlashWindows可以被用使一个特定的窗口闪动一次。要使用该函数,需要将如下的声明语句包含在你的窗体的通用声明部分中: #If Win32 Then Declare Function FlashWindow Lib user32 (ByVal hwnd As Long, ByVal bInvert As Long) As Long #Else Declare Function FlashWindow Lib User (ByV

36、al hwnd As Integer, ByVal bInvert As Integer) As Integer #End If 该函数需要2个参数,第一个参数是要闪动标题栏的窗口的句柄,第二个参数用于指定是设置窗口的闪动状态,还是恢复其原始状态。如果该bInvert参数非0,则表明窗口的标题栏被闪动,如果该参数为0,则表明窗口的标题栏被恢复为原始状态。该函数所返回的值用于指定调用该函数前窗口的状态,如果该返回值非0,则表明窗口在调用该函数之前是活动的,否则,如果返回值为0,则表明调用函数前窗口是非活动的。当使用该FlashWindow函数时,一个较好的方法是将标题栏闪动的频率设置为同脱字符(

37、也即闪动的光标)相同,脱字符的闪动频率可以通过调用函数GetCaretBlinkTime来获得。要使用该函数,需要将如下的声明语句包含在你的窗体的通用声明部分中: #If Win32 Then Declare Function GetCaretBlinkTime Lib user32 () As Long #Else Declare Function GetCaretBlinkTime Lib User () As Integer #End If 该函数返回用毫秒值表示的时间。 样例程序 1. 在Visual Basic中开始一个新的工程,采用缺省的方法建立Form1。 2. 在Form1上添

38、加一个定时器控件,采用缺省的方法建立Timer1。 3. 将如下的代码添加到Form1的Form_GotFocus事件中: Private Sub Form_GotFocus() Timer1.Enabled = False End Sub 4. 将如下的代码添加到Form1的Form_Load事件中: Private Sub Form_Load() Timer1.Interval = GetCaretBlinkTime() Form2.Show End Sub 5. 将如下的代码添加到Timer1的Timer1_Timer事件中: Private Sub Timer1_Timer() Suc

39、cess = FlashWindow(Form1.hwnd, 1) End Sub 6. 添加第二个窗体,采用缺省的方法建立Form2。 7. 将如下的代码添加到Form2的单击事件中: Private Sub Form_Click() Form1.Timer1.Enabled = True End Sub 8. 添加一个新的模块,采用缺省的方法建立Module1.Bas。将如下的代码添加到该模块的通用声明部分中: #If Win32 Then Declare Function FlashWindow Lib user32 ( _ ByVal hwnd As Long, _ ByVal bIn

40、vert As Long) As Long Declare Function GetCaretBlinkTime Lib user32 () As Long Dim Success As Long #Else Declare Function FlashWindow Lib User ( _ ByVal hwnd As Integer, _ ByVal bInvert As Integer) As Integer Declare Function GetCaretBlinkTime Lib User () As Integer Dim Success As Integer #End If 通过

41、单击F5键来运行该样例程序,单击Form2窗体,这时Form1窗体将处于非活动方式,其标题栏将会不断闪烁。单击Form1使它它变为活动方式,则窗体的标题栏将不再闪烁 11、一组VB实用小程序用VB实现编程离不开函数调用及Windows API函数的调用,以下是笔者收集的一些实用的小例程,它们可以直接用在你的实际编程中,也可以根据实际应用加以扩充完善。其中涉及Windows API函数调用的代码你可以从VB5.0系统的API函数查看器中复制函数定义内容,以避免出错。 1.系统型表单 系统型意味着用户完成当前表单操作之前无法进行其它操作,这对于编制系统口令保护界面尤为重要。如果你希望当前表单系统型

42、表单,需如下定义API函数: Declare Function SetSysModalWindow Lib User (ByVal hWnd As Integer) As Integer 然后调用:oldSysModal = SetSysModalWindow(Form.hWnd) 2.获取驱动器类型 代码如后: Declare Function GetDriveType Lib “Kernel (ByVal nDrive As Integer) As Integer Global Const DRIVE_REMOVEABLE = 2, DRIVE_FIXED = 3 Global Const

43、 DRIVE_REMOTE = 4 3.表单在对中 本子程序功能使表单定位在屏幕中央,在表单中任何需要表单对中的地方只需加入一行代码: “centerwindow.me”即可成功调用。 Public Sub CenterWindow(f As Form) f.Top = (Screen.Height .5) (f.Height .5) f.Left = (Screen.Width .5) (f.Width .5) End Sub 4. 定义变量 许多的程序员习惯于如下定义变量: Dim iNum, iNextNum, iLastNum as Integer 实际上只有最后一个变量被设为了整型,

44、前两个变量则是系统的缺省的Variant 数据类型,而Variant 数据类型可用来替换任何数据类型,显然对于精练的程序设计是不利的。 正确的方法如下: Dim iNum as Integer Dim iNextNum as Integer Dim iLastNum as Integer 5. 使文本高亮 本子程序使被触发的诸如文本,标签等控件的文本被选中 Public Sub SetSelected() Screen.ActiveControl.SelStart = 0 Screen.ActiveControl.SelLength = Len(Screen.ActiveControl.Text) End Sub 6. 关闭其它程序 下面的代码可关闭内存中的其它程序 title = MyAPP 定义你需关闭的程序窗口的标题 ihWnd = findWindow(0, Title) ihTask = GetWindowTask (ihWnd) iRet

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁