如何批量为按钮添加鼠标离开事件?

xcluii 2010-06-08 11:01:06
现一个窗体上有许多按钮或其他控件,都要增加对鼠标离开事件的响应,什么样的方式才是最好的?

不要用Timer,和SetCapture。

我用的方法是替换每个控件的WinProc,如下:

void __fastcall TFormHintMsg::FormCreate(TObject *Sender)
{
Btn1->WindowProc = Proc1;
Btn2->WindowProc = Proc2;
Btn3->WindowProc = Proc3;
... ...
}
void __fastcall TFormHintMsg::Proc1(TMessage &message)
{
if(message.Msg == CM_MOUSEENTER)
{
//
}
if(message.Msg == CM_MOUSELEAVE)
{
//
}
Btn1->Dispatch(&message);
}
void __fastcall TFormHintMsg::Proc2(TMessage &message)
{
//
Btn2->Dispatch(&message);
}
....


...全文
192 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuanner 2010-06-11
  • 打赏
  • 举报
回复
to 老妖:学习啦!CB6版本确实这样.

to xcluii:不好意思,没有见到要求所有的.那只能认命了!
在CB2010上OnMouseLeave与OnMouseEnter是在TControl的Protected的访问区里,也不是所有控件都会有这个事件,那些没有这个事件的控件,也只能通过继承,举个例子(如 TrackBar控件,就没有OnMouseLeave与OnMouseEnter事件,通过继承重写组件包,公开这个接口.
xuanner 2010-06-08
  • 打赏
  • 举报
回复
窗体上放一个TPanel pnl,Align设置alClient,通过pnl->ControlCount遍历面板的所有控件,设置需要响应的控件的OnMouseLeave事件为自己定义的函数(其实就是函数指针).
fxworld 2010-06-08
  • 打赏
  • 举报
回复
这样做太累了,建议自己做一个组件,从TButton继承,以后直接使用就可以了。

或者使用cb2010 ,这个版本在TControl加上了CM_MOUSEENTER和CM_MOUSELEAVE的消息处理,这样可视组件自动都带了OnMouseEnter和OnMouseLeave事件。
ccrun.com 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuanner 的回复:]
窗体上放一个TPanel pnl,Align设置alClient,通过pnl->ControlCount遍历面板的所有控件,设置需要响应的控件的OnMouseLeave事件为自己定义的函数(其实就是函数指针).
[/Quote]

并不是每一个组件都有OnMouseLeave事件。

子类化每一个控件,响应鼠标进入和离开消息才是王道。
xcluii 2010-06-08
  • 打赏
  • 举报
回复
to:xuanner

如果是遍历组件的话,怎么定义各自的OnMouseLeave事件函数,组件是不带OnMouseLeave的
【超级记事本(SuperNotePad) V6.40.959使用说明】 【制  作】︰Savage 【适用平台】︰Windows XP/Windows 2003/Windows Vista 【联  系】︰log2.0@163.com 【校  验】︰MD5: 68F54DC19E37B17417F47A7DA6707820        SHA1: 01709CB64B0BA21EDD4C0B808384A8590480167F 【SuperNotePad.exe 说明】︰ ---------------------- 1.主程序大小132 KB (135,680 字节); 2.代码高效,程序已经经过近四百多次的调试; 3.信息加密算法安全高效,可任意深度加密; 4.右键集合了大多数常用功能,不常用的在"工具"中; 5.主要的特色功能︰ 00) 语音朗读文本 (注:[自定义欢迎词]中可更改欢迎语音;                  XP下初始只有一个缺省语音引擎,为英文MSSam;                  朗读中文需要TTS简体中文语音库,没有的请下载,                  否则将无法阅读中文.) 01) 文本转为语音文件 02) 信息密钥对称加密 (注:可任意深度加密;                  密钥支持任意长度中文/英文/特殊字符,有效抵抗                  穷举密钥攻击;                  若进行多重加密可使得穷举密钥解密变成不可能                  完成的任务.) 03) 计算表达式    例︰2*sin(30*3.1415926/180) 支持批量表达式                  计算,每个表达式请放在独立的行中 04) 执行DOS命令     例︰@echo off&setlocal; EnableDelayedExpansion&color; 0f&set; all=1&set; /A a=0&set; /A b=1&set; /A c=0&for; /L %%i in (0,1,44) do (set /A c=!a!+!b!&set; /A a=!b!&set; /A b=!c!&set; all=!all! !c!)&if; %%i equ 44 (echo 斐波纳齐:!all!)&pause;>nul&exit; 05) 执行应用程序    例︰"control.exe appwiz.cpl" 06) 执行VBS脚本     例︰a=3:b=4:c=5:p=(a+b+c)/2:msgbox "Area=" & sqr(p*(p-a)*(p-b)*(p-c)),64,"海伦公式" 07) 数值进制间转换  (注:支持批量,支持十进制范围:1E+308~9E-324;                  二进制正/负数均采用补码表示.如十进制负数-8的                  二进制1000应为11000(也可表示为1000,在本软件                  中当二进制第一位为1时可省略符号位);十进制正                  数8的二进制1000应为01000(符号位不能省)) 08) 多种替换|转换功能   (注:支持批量\par\tab\asc\nul) 09) 状态栏便捷查看文本编码方式、文件路径、字符的各种信息 例︰字体|大小|颜色|...|编码 10) 浏览当前编辑文档所在的文件夹(注:F6) 11) 排序 12) 填充序列数      (注:支持批量\par\tab\asc\nul) 13) 字符/串拆分、合并、翻转 14) 定位匹配括号 15) 多种右键菜单     (注:鼠标中键或Shift/Alt/Ctrl+鼠标右键) 16) 便捷时间显示 17) 关联到右键打开方式 18) 便捷的几种显示模式 19) 汉字转拼音/缩写 20) 两种方式打开拖入文档 (注:请拖到[标题栏]或[状态栏],否则识别为链接;                  在[设置]中可配置拖入文档打开方式[插入/新建]) 21) 支持多种格式UTF-8, BIG5, GB2321, Unicode,Unicode big edian, Rich Text, USC-2 22) 查看密码       (扩展对所有已打开的窗口密码均有效Ctrl+D) 23) 正则表达式处理字符  例︰"\b([a-z]+) \1\b"合并多次重复单词
概述 网际畅游 (MyIE)是一款精巧的基于IE为内核(需IE5.0或IE5.5的支持),在同一窗口可以打开多个页面,且没有数量限制,对系统资源占有率较少的浏览器。 网际畅游 (MyIE)是一个完全免费的软件,你可以免费使用,并且可以以任何形式传播该软件。 操作系统 支持Win9x/Win NT/Win2000/Win XP。 安装 MyIE属于免费的绿色软件,没有广告条,无需安装,解压到文件夹后可以直接使用。 现有主要功能(MyIE除IE5.0标准功能外,有自己的特色功能) 浏览功能: 多窗口浏览:你可以在MyIE内同时打开多个页面进行浏览,但对系统资源的占用率极少。 标签栏:当你打开多个网页时,却只使用一个窗口,你可以通过单击标签快速方便地切换网页。标签的位置可以在上部,也可在下部。(MyIE选项对话框/标签/标签位置/上部或下部) Tips:使用Ctrl-Tab可快速切换标签。 标签栏有三种形式:单行, 多行, 自适应。自适应标签会根据标签数量自动调整标签的宽度,使他们尽量保持在一行内。 图标化的进度显示: 在浏览时每个标签旁都有一个小图标来显示该页当前的下载进度。 当图标为白色时进度在0%-25%之间,当蓝色区域占四分之一时进度在25%-50%之间,以此类推。当图标消失时说明该页已经下载完毕了。红色图标说明下载完毕但你尚未看过。 关闭广告窗口:在你浏览网站时,你是否会经常遇到一些不请自来的广告窗口?现在你只要点击鼠标右键将不喜欢的窗口列入“加入窗口过滤器”来节省你上网的时间。 你也可以将某个Frame或IFrame的URL加入窗口过滤器,这个Frame或IFrame以后就不会下载了。 使用*过滤窗口:在过滤广告窗口时可以在URL中使用*来过滤一批相似的地址。但你可不要用*把所有的窗口都过滤掉哦! 使用自动窗口过滤:在编辑窗口过滤器中选择使用自动窗口过滤,MyIE会自动禁止那些不必要的广告窗口而不必把URL加入过滤列表中。每个窗口也可分别设置是否使用自动过滤弹出窗口功能而不影响其他窗口。 过滤重复窗口:在编辑窗口过滤器中选择过滤重复窗口,MyIE会自动重用已打开的相同URL的窗口,避免资源浪费。 下载控制:你可以为每个页面设置是否需要在网页中载入图片,声音,Script文件, Java Applet, ActiveX。你可以关闭图片来加快下载的速度。 脱机浏览:使用文件/脱机工作 可以在未联网的情况下浏览以前访问过的历史网页。 保存网页:MyIE可以保存网页中的所有内容, 也可以以原文件名保存网页的HTML代码(Alt-S),给喜欢简洁的网友。 快速保存:快速地保存浏览的网页,包括其中的图片等。 自动保存:类似于保存功能,但页面将自动保存到预先设定好的目录中而不再需要保存对话框。自动保存有4种方式可以选择:WEB页面为html, WEB页面为mht, 仅HTML,快速保存。可以在Myie选项的保存页面中选择默认的方式。同时还可以选择以站点分类保存到不同目录。页面将保存在以站点主名命名的子目录中。预先设定的保存目录也可在Myie选项的保存页面中设置。 域名完成:在地址栏输入网址时可以用Ctrl+Enter, Shift+Enter, Ctrl+Shift+Enter来帮你完成这个网址。他会为你加上http://www.及相应的后缀如:.com, .net, .com.cn。你可以在MyIE选项中修改它们。 一次打开窗口的最大值:在 MyIE选项中可设置这个值, 他规定了在批量打开窗口时, 每次的最大值。可根据你的习惯和电脑配置来调整,从而避免因失误而打开过多的窗口。 不弹出脚本错误提示框:在浏览某些网页时会出现脚本错误,要避免这个问题可以在MyIE选项中选中“不弹出脚本错误对话框”. 本地文件浏览:在工具栏上选择文件按钮,会出现一个类似文件管理器的窗口,其中列出了你的目录和文件, 双击文件即可进行浏览了。你可改变下部的文件类型列表以显示不同的文件类型。改变后可按旁边的刷新按钮刷新显示。如需禁止该功能可在myie.ini文件的Settings中加入Secure=1即可。 浏览用户资源:在工具栏上选择用户资源按钮,将出现用户资源窗口, 缺省的包括MyIE最新版本信息,股票查询,网络字典,免费邮件。该窗口的内容存放于resource.htm文件中, 大家可以修改他,放入你需要的网上资源。 自动滚屏:使用自动滚屏可帮助你浏览小说文章等较长的页面,滚屏适用于没有框架的网页。滚屏的速度有高中低三种,如果你觉得太快或太慢可以在ini文件中的[settings]下加入SpeedSeed = nn,nn为一数字,缺省为100。 越小则速度越快。建议不要小于50。 浏览模式:浏览模式为MyIE中的设置的一种组合,大家可在不同的时候使用不同的模式。目前设有自定义,标准,和新闻三种。使用中对设置的修改会自动保存在自定义模式中。 设置页面背景色:可改变页面的背景色方便阅读长文章。 为所有窗口设置背景色:可为所有的窗口设置当前的默认背景色。 自动设背景色:页面下载后自动设置为预设的背景色。 发送:可把页面或链接通过EMAIL发送给你的朋友。 活动标题图标:当MyIE正在下载页面时MyIE的窗口图标会持续转动。 支持下载工具。可以在MyIE选项中选择所使用的下载工具,这样当点击下载文件时可以调用该工具来下载。目前内置了NetAnts和FlashGet。 鼠标控制功能:可通过在页面空白处按住右键并移动鼠标来实现一些功能。目前有: 向下: 打开新窗口 向左: 后退 向右: 前进 先上再下: 刷新 右左右 或 先下再右: 关闭窗口 窗口管理: 激活新窗口:当你选择了激活新窗口, 每当新建一个窗口它就会成为当前的活动窗口。 否则新窗口将不会被激活。 当你在浏览新闻站点时就可以一次点好想要看的所有新闻, 它们将会在后面的窗口中依次打开。 打开新窗口:可选择在输入新地址,点收藏夹,历史,本地文件,页面内链接时打开新窗口而不影响当前窗口。 多窗口同时浏览:选择窗口/垂直平铺 可使你打开的所有浏览窗口平铺在主窗口内,使你一览无遗。 新建窗口: MyIE有4种新建窗口的方法, 新建空白窗口, 新建主页, 新建当前页, 从剪贴板新建。可在MyIE选项中选择默认的新建方法。 锁定窗口: 在标签上点右键, 选锁定该标签可锁定一个窗口。 当一个窗口被锁定,它就不会在关闭所有窗口时被关闭。且点链接时会在新窗口中打开。 关闭所有窗口: 可以关闭除了锁定窗口之外的所有窗口。 全屏浏览:使用全屏浏览(F11)将使MyIE占据整个桌面, 提供最大的浏览空间。 自动重用空窗口:当你在新窗口中打开网页的时候MyIE会在自动重用已存在的空窗口, 以节约系统的资源。 在新窗口中打开网页:如果你没有使用始终打开新窗口的功能但想在新窗口中打开一个网页,可在点收藏夹,链接,和历史中的网址时按住Ctrl键,则该网页将在新窗口中打开。 顺序切换窗口:当你打开了一个以上的窗口时,你可以用右上角的两个箭头按钮来顺序的切换当前窗口。 你还可用快捷键Ctrl+ <- 和Ctrl+ -> 或F2, F3来作顺序的切换。 同时Ctrl+Tab 仍可以默认的窗口次序切换当前窗口。快捷键F2 = Ctrl <-, F3 = Ctrl ->, Ctrl-1...Ctrl-9,Ctrl-0 代表窗口1 到 窗口10. 顺序激活窗口:当你关闭一个窗口的时候,下一个被激活的不一定是他旁边的窗口,有时会给浏览带来麻烦。 现在使用 MyIE选项/窗口/激活顺序 就可以解决这个问题。使用 向前 可在关闭当前窗口后激活他前面的一个窗口。使用 向后 可在关闭当前窗口后激活他后面的一个窗口。 为窗口改名:右击窗口标签,选择设置固定标签名。 你可输入一个新名字,他将代替原来的窗口名称。 若要恢复原名,只要删掉固定名字即可。 窗口保护:右击窗口标签,选择保护该窗口。 你可输入保护口令,以后若要访问该窗口必须有口令才行。 隐藏MyIE:用Alt+` 可隐藏或调出MyIE。 拖动链接到地址栏:可将页面上的连接拖动到地址栏上,从而在新窗口中打开这个连接。 拖动链接到标签栏:可将页面上的连接拖动到标签栏上的某个标签上, 在这个指定的窗口中打开链接 设置双击和中键击标签的动作:可在Myie选项的标签页面中为双击和中键击标签选择对应的功能。 目前可选的功能有:关闭窗口,保存当前页面,保存HTML,自动保存。 页面自动刷新功能,可定时刷新非活动窗口,如果是当前窗口则不刷新。刷新频率可在工具菜单或标签的右键菜单中设置。 撤消关闭窗口的列表。可撤消最近关闭的多个窗口。 拖动链接在新窗口中打开。通过拖动一个链接就可以将这个链接在新窗口中打开。 拖动标签:可用鼠标左键拖动标签重新排列标签的位置。 代理服务器: 使用代理服务器:代理服务器可使你突破网络的限制畅游Internet. 如果你已经设置了一个代理服务器, 就可以选“选项/使用代理服务器”来使用或关闭代理服务器。 该设置对所有的网页都有效。 使用Web代理: 网上有不少网站提供基于Web的代理服务, 它速度较快且比较稳定。 你可以为每个网页分别设置不同的Web代理或不使用代理。 可以选“选项/使用Web代理服务”来使用或关闭代理服务。 MyIE已经预先内置了一个代理了。当你为一个窗口选择了使用web代理后,在输入新网址或点了收藏夹中的网址时,就会通过该代理来访问了。 设置代理: 使用“选项/快速代理设置” 可以新增/修改/删除 代理服务器和Web代理服务。代理服务器的格式为:地址: 端口,如202.96.233.13:3128。 大家可以在网上找到不少免费的代理服务器。Web代理中可使用%s和%S来表示插入网址的位置,否则网址将插在代理末尾。MyIE可分类管理不同的代理,你可自行增加或删除代理种类。不过必须保留一个web代理。 使用多个代理服务器:你可以在一个MyIE浏览器中使用一个代理服务器, 然后再开一个MyIE浏览器使用别的代理服务器或不用。 这样你可以一边浏览国内的网站, 一边用代理服务器浏览国外的网站。 设置速度标签: 为了方便代理服务器和web代理的管理,你可以为每个代理设置一个速度标签来加以区分。速度标签有:很快,快速,一般,较慢,很慢,无效共6级。你可以在快速代理设置对话框中用右键菜单来设置。 使用工具条的按钮:工具条上有两个按钮:代理服务器和web代理。使用它们可以方便的选择和使用代理,效果和用菜单一样。 你刚用过的代理将作为缺省的设置,当你直接按按钮时就将使用这个缺省设置的代理了。 编辑Bypass 网址: 使访问那些地址时不通过代理服务器。每个地址以空格分开。 导出/导入代理服务器:使用导入导出功能可以和代理猎手配合使用,方便验证代理服务器。 快捷功能: 设置启动组:在收藏夹栏的收藏夹目录上的右键菜单中选设为启动组菜单,将该目录设为启动组。启动组将以粗体表示,可用于MyIE的第四种启动模式。这样你等于是拥有了一组Homepages了。 Tips: 不妨把目录“链接”设为启动组 打开启动组:打开你的启动组中的所有连接。你可把你的最精华的网址放在里面以方便随时打开它们。 网页缩写:打入长长的URL是不是很麻烦?或许你不想记住那些地址。那么你就需要缩写的功能。你可以为网址定义一个中文或英文的缩写,当你在地址栏中象输入URL一样输入缩写,它将被自动翻译成相应的网址。 一键通:为使你能更快捷的浏览喜欢的网页,你可以使用一键通为F2-F12键定义一个网址。只要你一按F*就可访问对应的网页。但这时F键所对应的其他快捷键将被屏蔽。 3721中文网址:选中 快捷/3721中文网址,就可使用3721中文网址了。不须使用其他客户端软件,只要在地址栏输入“电脑报”即可到电脑报网站了。 快捷组:应网友的要求加入了和Netcaptor兼容的快捷组。 只需将Netcaptor的*.cgp文件拷贝到MyIE目录下的groups目录中即可。双击组内网址可打开该网页。 将当前所有窗口另存为组:可将当前所打开的窗口网址另存为一个新的组。 自动填表:使用Alt-Q可自动填写当前页面中的表单,在填表前需用Alt-1来收集表单的数据,也可以用Alt-2把表单的数据保存为通用表单。当填表时如果没有相应的表单数据则使用通用表单的数据。注:该功能不适合多人共用的电脑,以免重要数据的泄露。 快捷搜索:只要在地址栏中输入如 yahoo keyword 就可以用yahoo来搜索该keyword。 使用设置快捷搜索可以定制所需要的搜索引擎的快捷名称。 状态栏的快捷按钮。状态栏上设置了四个快捷按钮,依次为脱机浏览,当前窗口使用自动过滤,激活新窗口,简易文本搜集面版。 简易搜集面版。用来暂存文本信息和图片。可拖放文本图片到状态栏按钮或搜集面版 上将文本图片保存起来。图片会保存到预设的图片保存目录中,方便收集图片。 收藏夹和链接: 收藏夹: MyIE具有和IE一致的添加到收藏夹,组织收藏夹,导出/导入收藏夹。 打开本层链接:收藏夹菜单中每级都有一项打开本层链接的菜单。 使用它可以打开这一层收藏夹的所有链接。 打开所有链接:链接栏上的第一个按钮是打开所有链接, 它可以打开链接中的所有网址。 收藏夹栏: 点击工具条上的收藏夹就会出现收藏夹栏。使用收藏夹栏的右键菜单可以删除,复制,在新窗口中打开网址。以及打开所有网址。 最爱网页:如果你的收藏夹有许多网址使你无从下手,你可以将其中最喜欢的网址设为最爱网页,他们将会以红色的图标表示出来。它将帮你提高上网的效率。 最爱目录:你可以将你最喜欢的收藏目录设为最爱目录,他们将会以红色的图标表示出来。它将帮你提高上网的效率。双击一个目录可打开所有网址。 打开本层我的最爱:收藏夹菜单中每级都有一项打开本层我的最爱的菜单。 使用它可以打开这一层收藏夹中所有最爱的网页。 使用单列的收藏菜单:如果你有一个很大的收藏夹,如果你使用Win98,建议你使用单列菜单。你可在 MyIE选项中选择。使用后如果菜单超过一屏的长度则会出现滚动按钮,可用来滚动菜单。 收藏条:将收藏夹中的目录以工具条的方式显示,方便你随时取用。如果你的目录很多可使用紧凑模式以去掉小图标。方法是:在ini文件的[settings]下加入CompactFavBar = 1 收藏夹排序:在收藏夹栏中可拖动收藏条目或目录来排序。 加入到当前收藏菜单:在收藏菜单的每个子菜单中增加了一个加入连接到当前目录的菜单项,可将当前页面的网址直接加入到当前的收藏目录中。 增强功能: 内置多种搜索引擎:MyIE内置了近100种中英文分类搜索引擎(查看/浏览栏/搜索),可以轻松查找你需要的资料。你只要输入关键字,然后选择所要用的搜索引擎。搜索结果将在不同的窗口中显示。 而且搜索引擎列表可以很方便的升级。 外部工具管理器:MyIE为用户所想,可以把用户上网经常用到的一些软件放在工具管理器内(如:Net vampire,IP工具包, 甚至拨号网络)方便你使用。使你不用离开MyIE就可以完成大部分上网功能. 而且你可以让工具随MyIE自动启动并自动关闭,可在外部工具管理器中设置。 清除历史记录:可以方便地清除你不需要的一些浏览记录(如Cookies,Cache和历史)。 设为缺省浏览器:选择 选项/设置为缺省浏览器, 回答"是"将MyIE设为缺省浏览器, "否"恢复上一次的设置。 六种启动模式: 打开空白页, 打开主页, 继续最后浏览的页面, 打开收藏夹的启动组(需预先在收藏夹中设定一个启动目录),打开收藏夹的启动组中的最爱网页,打开启动快捷组(需要预先设定). 让你一打开MyIE就看到你最喜欢的网站. 显示上网的IP地址: 选择工具/显示本机IP地址, 在状态栏上显示当前的IP地址。 设置皮肤:MyIE支持与IE兼容的皮肤。 将BMP图形文件复制到MyIE所在目录的myieskin子目录中,然后在工具/设置MyIE皮肤中选择相应的皮肤即可。 自定义工具条:应网友的要求加入了可自定义工具条按钮的功能。 MyIE选项:可让你修改一些MyIE的属性,使你更好的控制和使用MyIE. 系统资源:在Win98系统上,状态栏上会显示当前系统的资源数量。 空闲内存:在WinNT和Win2000下显示空闲的内存数。 Modem下载速度:在Win98系统上,状态栏上会显示当前modem的下载速度。 最小化到系统托盘:在MyIE选项中选择最小化到系统托盘即可使MyIE最小化到系统托盘中。 禁止状态栏上的滚动字符:选中 选项/禁止状态栏滚动字符 可以去掉那些干扰视线的滚动字符。 链接列表。使用查看中的页面链接可以列出当前页面内的所有链接,并可用过滤功能列出相应的链接。 锁定主页:可防止有的网页随便的修改你的主页,只有通过MyIE中的Internet选项才可以修改主页。
让你短时间内由一名菜鸟到高手绝对没问题! 由于权限有限,分3部份下载 PHP程序开发范例宝典 内容提要 《PHP程序开发范例宝典》全面介绍了应用PHP进行网站开发的各种技术和技巧。《PHP程序开发范例宝典》分为20章,内容包括PHP的运行环 境配置、表单及表单元素的应用、CSS与JavaScript脚本的应用、验证控件、构建PHP动态网页、PHP与MySQL的数据库技术、PHP与其他数据库技 术、SQL查询相关技术、MySQL高级应用技术、字符串的处理技术、PHP面向对象编程技术、文件管理、图像和多媒体技术、信息提取与图表分析 技术、报表与打印技术、网络通信技术、PHP与XML技术、安全技术、PHP高级应用技术以及综合应用等。《PHP程序开发范例宝典》共提供了453 个实例,每个实例都突出实用性,绝大部分实例都体现了PHP编程人员在实际项目开发过程中总结出的经验技巧。   《PHP程序开发范例宝典》内容充实,实例丰富,特别适于PHP编程人员和广大计算机爱好者学习开发使用,也可供大、中专院校师生阅读 参考。   《PHP程序开发范例宝典》附有配套光盘。光盘提供了书中所有实例的源代码。代码都经过精心调试,在Windows XP/Windows 2000/Windows 2003 Server/Linux/UNIX下测试通过。 PHP程序开发范例宝典 目录 第1章 PHP的运行环境配置 1 1.1 Windows下环境配置 2 实例001 Windows下Apache的安装配置 2 实例002 Windows下MySQL的安装配置 5 实例003 Windows下PHP的安装配置 6 实例004 Window下phpMyAdmin的安装配置 7 实例005 使用AppServ架设Apache+MySQL+PHP运行环境 8 实例006 使用IIS服务器运行PHP脚本 10 实例007 Windows下发布“明日科技”网站 12 1.2 Linux下环境配置 14 实例008 Linux下Apache1.x安装配置 14 实例009 Linux下安装与配置Apache 2.x 15 实例010 Linux下PHP的安装配置 16 实例011 Linux下MySQL的安装配置 18 实例012 启用Red Hat Linux 9自带的PHP运行环境 19 实例013 Linux下实现PHP支持Socket 20 实例014 Linux下实现PHP支持mysqli扩展技术 21 实例015 开机自动启动Apache服务 21 实例016 开机自动启动MySQL服务 22 实例017 Linux下发布“读者之家”网站 22 1.3 应用常用开发工具开发PHP程序 23 实例018 应用Dreamweaver开发PHP程序 24 实例019 应用Eclipse开发PHP程序 25 实例020 应用PHPEditor开发PHP程序 27 实例021 应用UltraEdit开发PHP程序 29 实例022 应用Namo WebEditor开发PHP程序 30 第2章 表单及表单元素的应用 33 2.1 获取表单元素提交的值 34 实例023 获取文本框的值 34 实例024 获取隐藏域的值 35 实例025 获取文本域的值 36 实例026 获取复选框的值 37 实例027 获取单选按钮组的值 38 实例028 获取下拉列表的值 40 实例029 获取跳转菜单的值 41 实例030 获取文件域的值 42 2.2 动态添加表单元素 42 实例031 不提交表单获取单选按钮的值 43 实例032 选中单选按钮后显示其他表单元素 44 实例033 根据数据表结构自动生成数据录入页面 45 实例034 投票系统中单选按钮与复选框的应用 47 2.3 下拉列表的应用 50 实例035 在下拉菜单中显示数据表某列的字段值 50 实例036 在下拉菜单中显示数组中的元素 51 实例037 级联菜单的应用 52 实例038 修改数据时下拉列表的默认值为数据库中原数据信息 54 实例039 可输入字符的下拉菜单 56 实例040 应用下拉列表选择所要联机的网站 57 实例041 根据下拉列表的值显示不同控件 58 2.4 文本框组件的应用 60 实例042 自动计算金额 60 实例043 设置文本框的只读属性 61 实例044 设置安全的密码域 63 实例045 限制多行文本域输入的字符个数 64 2.5 表单的综合应用 65 实例046 表单组件的综合应用 65 实例047 同一个页面中的多表单提交 66 实例048 获取表单中提交的所有数据 68 实例049 以文件域的形式显示数据信息 70 第3章 CSS与JavaScript脚本的应用 73 3.1 文字特效 74 实例050 逐个闪烁的文字 74 实例051 荧光灯文字 75 实例052 滚动的文字 77 3.2 控件样式 80 实例053 通过鼠标的移动改变文本框的背景色 80 实例054 改变下拉列表框的背景色 82 实例055 带颜色变化的动态链接按钮 82 实例056 设置图片的样式 83 实例057 设置表格的样式 84 实例058 模拟的进度条 86 3.3 超链接样式 87 实例059 鼠标单击文字超链接样式 87 实例060 鼠标滑过图片超链接样式 88 实例061 鼠标单击文字获得帮助效果 89 3.4 页面样式 90 实例062 动态标题栏 90 实例063 滚动条样式 91 实例064 页面整体风格 92 实例065 首尾页切换特效 94 3.5 导航菜单设计 96 实例066 带图标的文字导航条 96 实例067 flash导航条 97 实例068 按钮导航条 99 实例069 导航条的动画效果 100 实例070 不用图片实现质感导航条 102 实例071 弹出式下拉菜单 103 实例072 二级导航菜单 105 实例073 半透明背景的下拉菜单 106 实例074 展开式导航条 110 实例075 解释型菜单 111 实例076 自动隐藏的弹出式菜单 112 实例077 收缩式导航菜单 114 实例078 树状导航菜单 116 实例079 鼠标右键菜单 117 3.6 状态栏设计 118 实例080 状态栏中的跑马灯文字 119 实例081 在状态栏中收缩显示文字 120 实例082 在状态栏中显示数字时钟 121 3.7 弹出窗口控制 122 实例083 在首页右下角弹出渐显的广告窗口 122 实例084 浮动的广告窗口 124 实例085 打开居中显示详细信息的新窗口 126 实例086 关闭弹出窗口时自动刷新父窗口 128 实例087 在弹出的对话框中选择个性头像 130 实例088 自动关闭的广告窗口 131 实例089 关闭IE主窗口时,不弹出询问对话框 132 实例090 弹出提示对话框并重定向网页 133 3.8 弹出网页对话框 134 实例091 弹出全屏显示的网页模式对话框 134 实例092 网页拾色器 136 实例093 日期选择器 138 3.9 无边框窗口 140 实例094 全屏显示无边框有滚动条窗口 140 实例095 应用JavaScript实现指定尺寸的无边框窗口 142 实例096 应用CSS+DIV实现无边框窗口 143 实例097 通过双击鼠标实现页面自动滚屏 145 3.10 其他 146 实例098 设置主页 147 实例099 收藏本站 147 实例100 离开时启动收藏夹 148 第4章 验证控件 151 4.1 通信类验证 152 实例101 验证E-mail地址 152 实例102 验证网址 153 实例103 验证电话号码 155 实例104 验证邮政编码 156 4.2 日期与时间类验证 157 实例105 验证日期的输入格式 157 实例106 验证时间的输入格式 159 实例107 验证日期与时间的输入格式 161 4.3 文本与数值验证 163 实例108 验证表单元素是否为空 163 实例109 验证输入的数值是否在指定范围内 165 实例110 验证数据是否为数值型 166 实例111 验证用户名和密码是否正确 167 实例112 验证两个文本框的值是否相等 168 实例113 验证输入的文本是否为汉字 170 实例114 限制输入字符串的长度 171 实例115 验证字符串是否以指定字符串开头 172 实例116 验证身份证号码 174 实例117 验证护照编号 175 实例118 验证车牌号码 176 4.4 自定义验证 177 实例119 验证合法的数据表名称 178 实例120 验证货币类型 179 第5章 构建PHP动态网页 181 5.1 页面间的数据传递 182 实例121 通过POST方法提交 182 实例122 通过GET方法提交 183 实例123 通过SESSION实现页面间的数据传递 184 5.2 页面跳转 185 实例124 使用header()函数实现页面跳转 185 实例125 应用HTML标记进行跳转 186 实例126 使用脚本语言实现页面跳转 187 5.3 包含文件 189 实例127 include()函数的应用 189 实例128 include_once()函数的应用 190 实例129 require()函数的应用 191 实例130 require_once()函数的应用 192 实例131 使用switch语句实现站内导航 193 5.4 COOKIE技术 195 实例132 表单提交与COOKIE 195 实例133 简单的COOKIE计数器 197 实例134 使用COOKIE记录用户登录信息 198 实例135 使用COOKIE限制用户访问网站的时间 199 5.5 会话控制 201 实例136 通过SESSION判断用户的权限 201 实例137 通过SESSION禁止页面刷新 203 实例138 通过SESSION存储数据 204 实例139 通过SESSION实现购物车的功能 205 5.6 框架的应用 209 实例140 框架在聊天室中的应用 209 实例141 使用框架嵌套技术居中显示框架页 211 第6章 PHP与MySQL数据库技术 213 6.1 连接MySQL数据库 214 实例142 通过mysql_connect函数连接数据库 214 实例143 通过Mysqli_connect()函数连接数据库 216 实例144 通过面向对象连接数据库 217 6.2 数据插入 218 实例145 单条数据录入 218 实例146 批量数据录入 220 实例147 插入系统日志信息 222 6.3 数据更新 224 实例148 单条数据更新 224 实例149 批量数据更新 226 6.4 数据查询 227 实例150 不刷新页面筛选数据库中的数据 227 实例151 查询企业员工的详细信息 229 6.5 数据删除 231 实例152 单条数据删除 231 实例153 批量数据删除 232 实例154 删除数据前给予提示信息 234 实例155 统计从数据库里删除的记录数 236 6.6 在线删除表或索引 237 实例156 在线删除指定的数据表 237 实例157 在线删除多个指定的数据表 239 实例158 在线删除指定数据表中的索引 241 6.7 清除部分或全部数据表中的数据 243 实例159 清空指定数据表中的所有数据 243 实例160 清空指定数据表中的指定数据 245 实例161 批量清空数据表 246 6.8 MYSQL数据库的备份 248 实例162 通过命令模式备份数据库 248 实例163 通过phpMyAdmin备份数据库 249 实例164 通过手动方式备份数据库 251 6.9 MYSQL数据库的恢复 252 实例165 通过命令模式恢复数据库 252 实例166 通过phpMyAdmin恢复数据库 253 实例167 通过手动方式恢复数据库 255 6.10 动态创建数据库、数据表和字段 255 实例168 动态创建MySQL数据库 255 实例169 动态创建MySQL数据表 257 实例170 动态创建字段 259 实例171 动态创建一个完整的数据库 261 6.11 数据的导入导出 263 实例172 MySQL数据库自身的导入导出 263 实例173 SQL Server数据导入到MySQL数据库 266 实例174 Aceess数据导入到MySQL数据库 268 6.12 分页技术 270 实例175 查询结果的分页显示 271 实例176 单击页码跳转到指定页 272 实例177 输入页码跳转到指定页 275 实例178 超长文本的分页显示 276 实例179 查询结果的分栏显示 278 实例180 分类、分栏和分页的综合应用 279 第7章 PHP与其他数据库技术 283 7.1 PHP操纵ACCESS数据库 284 实例181 通过ADO方式连接ACCESS数据库 284 实例182 通用数据信息的查询 285 实例183 查询结果的分页显示 287 实例184 用户身份验证类的实现 289 实例185 图片的分栏显示 291 7.2 PHP操纵SQL Server数据库 292 实例186 通过ADO方式连接SQL Server数据库 292 实例187 通过mssql_connect()函数连接SQL Server数据库 293 实例188 通过ADO方式实现指定时间段的信息检索 294 实例189 通过函数实现商品信息的检索 296 实例190 通过ADO方式实现输入页码跳转到指定页 297 实例191 通过函数实现单击页码跳转到指定页 300 实例192 添加图书类的实现 302 第8章 SQL查询相关技术 305 8.1 数据库操作 306 实例193 创建数据库 306 实例194 查看数据库 307 实例195 删除数据库 308 8.2 数据表操作 308 实例196 创建数据表 309 实例197 查看数据表 310 实例198 删除数据表 311 8.3 查询常量 312 实例199 查询数值型数据 312 实例200 查询字符串 313 实例201 查询日期型数据 314 实例202 查询逻辑型数据 316 实例203 查询所有非空数据 318 8.4 查询变量 319 实例204 利用变量查询字符串数据 319 实例205 利用变量查询数值型数据 321 8.5 查询指定的n条记录 322 实例206 查询前n条记录 323 实例207 查询后n条记录 324 实例208 查询从指定位置开始的n条记录 325 实例209 查询统计结果中的前n条记录 326 8.6 查询周期、日期 328 实例210 查询指定时间段的数据 328 实例211 按月查询统计数据 329 8.7 大小比较、逻辑查询、重复 330 实例212 查询大于指定条件的记录 330 实例213 查询结果不显示重复记录 332 实例214 NOT与谓词进行组合条件的查询 333 实例215 显示数据表中的重复记录和记录条数 335 8.8 排序、分组统计 336 实例216 对数据进行降序查询 336 实例217 对数据进行多条件排序 337 实例218 对统计结果进行排序 338 实例219 单列数据分组统计 340 实例220 多列数据分组统计 341 实例221 多表分组统计 342 8.9 聚集函数 344 实例222 使用聚集函数SUM对学生成绩进行汇总 344 实例223 使用聚集函数AVG求某班学生的平均成绩 346 实例224 使用聚集函数MIN求销售额、利润最少的商品 347 实例225 使用聚集函数MAX求月销售额完成最多的销售记录 349 实例226 使用聚集函数COUNT求日销售额大于某值的记录数 350 实例227 使用聚集函数First或Last求数据表中第一条或最后一条记录 352 8.10 多表查询 354 实例228 使用select语句进行多表查询 354 实例229 使用表的别名 355 实例230 合并多个结果集 356 8.11 嵌套查询 358 实例231 简单的嵌套查询 358 实例232 复杂的嵌套查询 359 实例233 嵌套查询在查询统计中的应用 361 8.12 子查询 362 实例234 使用子查询作派生的表 362 实例235 使用子查询作表达式 364 实例236 使用子查询关联数据 365 8.13 联合语句 367 实例237 多表联合查询 367 实例238 对联合查询后的结果进行排序 368 实例239 条件联合语句 369 8.14 内连接查询 371 实例240 简单内连接查询 371 实例241 复杂内连接查询 372 8.15 外连接查询 373 实例242 使用外连接进行多表联合查询 373 实例243 left outer join查询 375 实例244 right outer join查询 376 8.16 IN子查询 377 实例245 利用in或notin语句限定范围 377 实例246 用IN查询表中的记录信息 379 实例247 由IN引入的关联子查询 380 8.17 交叉表查询 382 实例248 利用transform分析数据 382 实例249 利用transform统计数据 383 8.18 函数查询 385 实例250 使用格式化函数转换查询条件的数据类型 385 实例251 在查询中使用字符串函数 387 实例252 在查询中使用日期函数 388 8.19 having语句应用 390 实例253 利用having语句过滤分组数据 390 第9章 MySQL高级应用技术 393 9.1 PHP的mysqli扩展 394 实例254 通过mysqli扩展技术实现数据库信息的检索 394 实例255 查看服务器连接错误报告 395 实例256 通过mysqli扩展技术实现多表查询 397 实例257 通过mysqli扩展技术实现内存的回收 398 9.2 MySQL视图的应用 399 实例258 创建视图 400 实例259 修改视图 401 实例260 应用视图 403 9.3 MySQL存储过程 404 实例261 存储过程的创建 404 实例262 使用存储过程实现用户注册 405 9.4 MySQL触发器 407 实例263 创建触发器 407 实例264 查看触发器 408 9.5 MySQL事务 409 实例265 使用事务处理技术实现关联表间信息的删除 409 实例266 使用事务处理技术实现银行的安全转账 411 第10章 字符串的处理技术 413 10.1 字符串的应用及处理 414 实例267 获取字符串的长度 414 实例268 字符串大小写之间的转换 416 实例269 字符串首尾空格的处理 417 实例270 字符串的逆序输出 418 实例271 字符串格式化输出 419 实例272 字符串的分割与连接 420 实例273 特殊字符的查找 421 实例274 字符串的替换 423 实例275 字符串的大小比较 424 实例276 获取两个字符串的相似度 425 实例277 字符串的base64编码 426 实例278 字符串的url编码 427 实例279 特殊字符的转义 429 实例280 字符与ASCII之间的转换 429 实例281 合理定义上传文件名称 430 实例282 通过异或方式对字符串进行加密 432 实例283 金额的格式化输出 433 实例284 字符串首字母的大小写转换 434 实例285 字符数组的建立 434 实例286 字符串与数字之间的转换 435 实例287 利用正则表达式实现字符串的匹配查找 437 实例288 利用IP地址查找主机所在地 438 10.2 Web程序中常见字符串问题处理及解决方案 439 实例289 HTML标记的原义输出 439 实例290 解决用substr()函数对中文字符串截取时的乱码 441 实例291 创建PHP 5.0新型字符串 442 实例292 字符串与HTML标记相互转换 443 第11章 PHP面向对象编程技术 445 11.1 PHP面向对象基础 446 实例293 数据成员的初始化 446 实例294 父类构造函数的调用 447 实例295 对象的克隆 448 实例296 类的继承 449 11.2 PHP中常用类 451 实例297 数据库连接类 451 实例298 数据信息检索类 452 实例299 数据信息录入类 454 实例300 数据信息更改类 455 实例301 数据信息删除类 457 实例302 计数器类 459 实例303 翻页类 460 实例304 购物车类 462 第12章 文件管理 467 12.1 文件上传 468 实例305 以二进制形式上传文件到数据库 468 实例306 上传文件到服务器 469 实例307 限制大小的文件上传 471 实例308 限制上传文件的类型 472 12.2 图片上传 474 实例309 以二进制形式上传图片到数据库 474 实例310 限制上传图片的格式 476 实例311 上传单图片到服务器并显示 477 实例312 上传多图片到服务器并分页显示 479 12.3 下载 481 实例313 通过链接方式下载 481 实例314 应用header()函数实现下载 482 12.4 文件遍历 484 实例315 遍历指定目录下的所有文件 484 实例316 文件浏览 485 12.5 文件操作 488 实例317 创建、复制、移动、删除文件 488 实例318 修改文件名 489 实例319 判断文件是否存在 490 实例320 从文本文件中读取注册服务条款 491 实例321 应用文本文件保存访客人数的计数器 493 实例322 判断文件是否被改动 494 12.6 目录操作 496 实例323 创建目录 496 实例324 删除目录 497 实例325 获取当前脚本目录 498 实例326 读取注册表信息 499 第13章 图像和多媒体技术 503 13.1 头像选择 504 实例327 通过下拉列表选择头像 504 实例328 从网页对话框中选择头像 505 13.2 图像与统计 507 实例329 图形计数器 507 实例330 通过图像显示投票统计结果 508 13.3 控制、显示图片特效 509 实例331 通过鼠标滑轮控制图片大小 509 实例332 显示随机图像 510 实例333 获取页面中图像的实际尺寸 511 实例334 图像的手动播放 512 实例335 图像的自动播放 513 13.4 MP3点播与下载 514 实例336 MP3在线点播 514 实例337 MP3下载 515 13.5 嵌入Flash动画 516 实例338 在网页中嵌入背景透明的Flash 516 实例339 Flash播放器的实现 517 13.6 影音播放 518 实例340 嵌入式流媒体播放器的实现 518 实例341 在网页中加入可控的背景音乐 520 第14章 信息提取与图表分析技术 521 14.1 简单图表 522 实例342 连接GD2函数库 522 实例343 利用GD2函数绘制文字 523 实例344 应用GD2函数绘制几何图形 524 实例345 向图表中添加行和列标签 526 实例346 图表分析产品数据 528 实例347 图表显示数据并打印 529 14.2 柱形图表 531 实例348 单商品月销售量柱形图分析 531 实例349 将汇总数据利用图表分析 533 实例350 对比数据图表分析 535 实例351 图表动态分析不同的数据表 538 实例352 图表分析投票结果 541 14.3 折线图表 543 实例353 商品的价格走势分析 543 实例354 折线图表分析人口出生率 545 实例355 网站年终访问量曲线分析 547 实例356 年销售额及利润图表分析 550 14.4 饼形图表 552 实例357 饼形图分析软件图书市场占有率 552 实例358 多饼形图分析企业各类员工的比例 555 第15章 报表与打印技术 559 15.1 Web打印 560 实例359 调用IE自身的打印功能实现打印 560 实例360 打印指定框架中的内容 561 实例361 利用WebBrowser打印报表 563 实例362 设置页眉页脚 564 15.2 利用Word打印报表 567 实例363 将Web页中的表格导出到Word并打印 567 实例364 打开指定的Word文档并打印 569 实例365 调用word自动打印指定格式的会议记录 570 15.3 利用Excel打印报表 572 实例366 将Web页面中的数据导出到Excel 572 实例367 将Web页面中的数据导出到Excel并自动打印 574 15.4 利用CSS样式打印 577 实例368 利用CSS样式打印页面中的指定内容 577 实例369 利用CSS样式实现分页打印 579 15.5 套打印邮寄产品单 581 实例370 打印汇款单 582 实例371 打印快递单 583 实例372 打印信封 585 第16章 网络通信技术 587 16.1 邮件技术 588 实例373 SMTP服务器的安装与配置 588 实例374 POP3服务器的安装与配置 590 实例375 利用mail()函数实现邮件发送 592 实例376 发邮件类 594 实例377 收邮件类 597 实例378 查找邮件 602 实例379 删除邮件 604 实例380 邮件群发 605 16.2 发送短信 607 实例381 通过fsockopen()函数发送短信 607 实例382 通过调用Web Service发送短信 608 实例383 短信群发 610 第17章 PHP与XML技术 613 17.1 读写XML文件 614 实例384 创建XML文件 614 实例385 读取XML文件 615 实例386 添加XML数据 617 实例387 查询XML文件 619 实例388 修改XML文件 620 实例389 删除XML文件 623 实例390 PHP+XML留言板 624 17.2 XML文件转换 628 实例391 XSL转换XML文件 628 实例392 在HTML页面中使用XML文件 629 实例393 在XML文件中应用CSS样式 630 第18章 安全技术 633 18.1 用户登录 634 实例394 用户安全登录 634 实例395 验证码技术登录 635 实例396 防止用户直接输入地址访问PHP文件 637 18.2 数据加密 638 实例397 对登录密码进行base64编码 638 实例398 对查询字符串进行url编码 639 实例399 MD5加密登录用户名称和密码 640 实例400 使用crypt()函数进行加密 642 18.3 Access数据库安全 643 实例401 操作带密码的Access数据库 644 实例402 防止Access数据库被下载 646 18.4 防止SQL注入 647 实例403 过滤HTML非法字符 647 实例404 禁止用户输入字符串中的危险字符 649 18.5 获取客户端信息 650 实例405 确定对方的IP地址 651 实例406 获取客户端TCP/IP端口的方法 652 18.6 禁止用户复制网页内容 653 实例407 禁止复制网页内容 653 实例048 禁止网页被另存为 654 18.7 禁止用户刷新屏幕 655 实例409 屏蔽IE主菜单 655 实例410 屏蔽键盘相关事件 657 实例411 屏蔽鼠标右键 659 第19章 PHP高级应用技术 661 19.1 PHP操纵Word 662 实例412 将数据库中的数据保存到Word 662 实例413 将查询结果保存到Word 664 19.2 PHP操纵Excel 666 实例414 将Excel中的数据导出到MySQL数据库 667 实例415 将查询结果保存到Excel 669 19.3 PHP中压缩与解压文件 672 实例416 PHP中压缩RAR文件 672 实例417 PHP中解压RAR文件 673 实例418 PHP中压缩ZIP文件 674 实例419 PHP中解压ZIP文件 675 19.4 信息共享 676 实例420 在PHP中实现ASP中的Application功能 676 实例421 图形计数器 677 19.5 PHP管理FTP服务器 679 实例422 连接FTP服务器 679 实例423 上传文件到FTP服务器 680 实例424 从FTP服务器中下载文件 682 实例425 更改FTP服务器中的文件名称 683 实例426 删除FTP服务器中指定的文件 684 实例427 在FTP服务器中建立指定的目录 686 实例428 获取FTP服务器中指定目录下的文件列表 687 第20章 综合应用 689 20.1 用户注册 690 实例429 一般用户注册 690 实例430 带检测用户名的用户注册 692 实例431 分步用户注册 694 20.2 留言本 696 实例432 简易留言本 696 实例433 带留言分类的留言本 698 实例434 具有版主回复的留言本 700 20.3 聊天室 702 实例435 数据库形式的聊天室 703 实例436 聊天室中私聊的实现 707 20.4 论坛 710 实例437 查看主题信息 710 实例438 发布主题信息 713 实例439 回复主题信息 714 实例440 删除主题及回复信息 716 20.5 购物车 717 实例441 添加至购物车 718 实例442 查看购物车 719 实例443 从购物车中移去指定商品 722 实例444 修改商品购买数量 723 实例445 清空购物车 724 实例446 收银台结账 725 20.6 博客网站 727 实例447 博客用户图片管理 727 实例448 博客文章评论管理 733 实例449 用户安全登录 738 实例450 用户安全退出 740 20.7 搜索 742 实例451 一般搜索 742 实例452 高级搜索 744 实例453 常用搜索 745 技术要点对应实例位置 749

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧