jira 3.7.4 安装配置

1.所需软件

atlassian-jira-enterprise-3.7.4-standalone.tar.gz
atlassian-jira-subversion-plugin-0.9.8.zip
jdk-1_5_0_08-linux-i586.bin
mysql-connector-java-5.0.3.tar.gz

2.安装JDK
解压jdk-1_5_0_08-linux-i586.bin 生成jdk1.5.0_08目录

./jdk-1_5_0_08-linux-i586.bin
mv jdk1.5.0_08 /usr/local/

设置JAVA_HOME
vi /etc/profile
在export前面添加两行
JAVA_HOME=/usr/local/jdk1.5.0_08
pathmunge $JAVA_HOME/bin

source /etc/profile
java 检测

3.设置MYSQL
Create a MySQLuser called 'jirauser' and database called 'jiradb':
//创建mysql用户jirauser,密码:mypassword
//创建数据库jiradb

jturner@teacup:~$ mysql --user=root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 559 to server version: 5.0.13-rc-Debian_1-log
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql> create database jiradb character set utf8;
Query OK, 1 row affected (0.02 sec)
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX on
jiradb.* TO 'jirauser'@'localhost' IDENTIFIED BY 'mypassword';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye

4.安装
解压jira
tar zxvf atlassian-jira-enterprise-3.7.4-standalone.tar.gz
mv atlassian-jira-enterprise-3.7.4-standalone /home/jira
cd /home/jira

解压mysql-connector-java-5.0.3.tar.gz
tar zxvf mysql-connector-java-5.0.3.tar.gz
把mysql-connector-java-5.0.3-bin.jar 文件拷到 common/lib/ 目录
cp mysql-connector-java-5.0.3-bin.jar comm/lib/

编辑 conf/server.xml 文件,  设置用户名、密码、驱动类名、数据源 url参数:
<Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="${catalina.home}/atlassian-jira" reloadable="false">
          <Resource name="jdbc/JiraDS" auth="Container" type="javax.sql.DataSource"
            username="jirauser"
            password="mypassword"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost/jira?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF8"/>"
            maxActive="20" />

编辑 atlassian-jira/WEB-INF/classes/entityengine.xml, 改变 field-type-name 属性为mysql:
<datasource name="defaultDS" field-type-name="mysql"
    helper-class="org.ofbiz.core.entity.GenericHelperDAO"
        check-on-start="true"     
        ...参见http://www.atlassian.com/software/jira/docs/latest/standalone-dbconfig.html

5.启动JIRA
./bin/startup.sh 启动
打开http://localhost:8080  并进行配置,
选择中文,设置相关索引、附件、备份路径及邮件服务器地址、管理员帐号,完成配置即可登陆JIRA

6.配置subversion
解压atlassian-jira-subversion-plugin-0.9.8.zip
unzip atlassian-jira-subversion-plugin-0.9.8.zip

1) Copy into JIRA's WEB-INF/lib (removing any existing older versions):
- lib/atlassian-subversion-plugin-0.9.8.jar
- lib/javasvn-*.jar
- lib/ganymed.jar (only used if you are using ssh authentication for your subversion repository)
2) Edit for your installation:
- atlassian-jira/WEB-INF/classes/subversion-jira-plugin.properties

7.设置自动启动
cp jira /etc/init.d/
chkconfig --add jira
chkconfig --list jira

jira启动脚本内容:
----------------------------------------------------

#!/bin/bash
#
# chkconfig: 2345 85 15
# description: jira
# processname: jira
# source function library
. /etc/init.d/functions
CATALINA_HOME="/home/jira"
RETVAL=0
start() {
        echo -n $"Starting jira services: "
        . $CATALINA_HOME/bin/catalina.sh start
        RETVAL=$?
        echo
}
stop() {
        echo -n $"Shutting down jira services: "
        . $CATALINA_HOME/bin/catalina.sh stop
        RETVAL=$?
        echo
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart|reload)
        stop
        start
        ;;
  status)
        status jira
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|status}"
        exit 1
esac
exit $RETVAL

---------------------------------------------------------

8.与apache集成
http://www.atlassian.com/software/jira/docs/v3.4.3/apacheintegration.html

修改conf/server.xml
<Server port="8005" shutdown="SHUTDOWN">

  <Service name="Catalina">

    <Connector port="8080"
      maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
      enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"
      proxyName="mycompany.com" proxyPort="80" />

    <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

        <Context path="/jira" docBase="${catalina.home}/atlassian-jira" reloadable="false">
          <Resource name="jdbc/JiraDS" auth="Container" type="javax.sql.DataSource"

http.conf 添加

---------------------------
<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyRequests       Off
ProxyPreserveHost On
ProxyPass           /jira       http://localhost:8080/jira
ProxyPassReverse    /jira       http://localhost:8080/jira

ServerAdmin webmaster@mycompany.com

----------------------------------------------------

9.jira破解

新建crack.sh文件,内容:
---------------------------------------------------
export JIRA_HOME=/home/jira
export JIRA_LIB=$JIRA_HOME/atlassian-jira/WEB-INF/lib
export CLASSPATH=.:atlassian-core-2006-12-04.jar:$JIRA_LIB/atlassian-extras-0.7.29.jar:$JIRA_LIB/log4j-1.2.7.jar
export PATH=$PATH:$JAVA_HOME/bin
java keygen
--------------------------------------------------------

//keygen.class 为破解文件

运行crack.sh

获得授权码,填入jira的license窗口,ok。

- 阅读全文 -

makefile中使用shell命令并将结果保存为变量

INCLUDE= $(shell wx-config --cxxflags)
LIBS=$(shell wx-config --libs)
CC=g++

all:
#echo $(INCLUDE)
          $(CC)    *.cpp    $(LIBS) $(INCLUDE) -o test

其中wx-config是命令 -cxxflags 是其参数。

同样可以用

定义变量src_files=$(shell ls *.cpp) 去替换*.cpp.

          $(CC)    $(src_files)    $(LIBS) $(INCLUDE) -o test

[转自]makefile中使用shell命令并将结果保存为变量_blog

- 阅读全文 -

在Linux下安装、汉化Bugzilla

今天浏览以前论坛中的文章,顺摘录一些。此文虽老,但仍有参考价值。此文原为RD室已毕业学生hatasun撰写。我们现在使用的bugzilla也是他先安装部署的,感谢hatasun。

--------------------------------------------

Bubzilla的自带文档提供了详细的安装指南,但在实际安装过程中还是会遇到各种各样的问题。本文主要介绍了在RH8.0的Linux环境下安装Bugzilla的步骤和汉化方法。前提是已经安装rpm的perl、mysql、apache和sendmail,且服务器有可用的完整域名。
1、解压
将下载的bugzilla-2.16.2.tar.gz包放到一个可写的目录下,解压:
$tar xfz bugzilla-2.16.2.tar.gz
得到一个bugzilla-2.16.2目录,改名为bugzilla.
2、配置perl
由于默认的perl安装包缺少一些bugzilla需要的模块,所以需要补充一些模块,最好是在线进行,不要一个一个的自己安装。以root身份运行在联网情况下用以下命令安装所需的最少perl模块:
perl -MCPAN -e 'install "Bundle::Bugzilla"'
另外还有有些可选的模块
perl -MCPAN -e 'install "Template"' (安装时它会提示一堆问题,推荐安装)
perl -MCPAN -e'install "LDS/GD-1.19.tar.gz"' (make test时候没有成功返回,所以自动不安装)
perl -MCPAN -e'install "N/NI/NINJAZ/Chart-0.99b.tar.gz"' (make test时候没有成功返回,所以自动不安装)
3、配置apache(版本2.0.40)
rpm包安装的apache和手动安装的tar.gz包有些路径上的差异,自己按照情况修改。
在apache的配置文件/etc/httpd/conf/httpd.conf中检查一句话,以执行cgi和perl程序:
AddHandler cgi-script .cgi .pl
然后建立虚拟路径,使得在浏览器上用http://servername/bugzilla/路径来访问你的bugzilla
Alias /bugzilla/ "/var/www/bugzilla/" #/var/www是apache的存放网上数据文件的目录
在文件末尾加上存放bugzilla文件(.html .cgi)的目录配置语句:
<Directory "/var/www/bugzilla">
Options +ExecCGI
AllowOverride Limit
Allow from from all
</Directory>
4、配置mysql数据库(版本3.23.52)
准备用bugs用户来管理bugzilla在mysql中创建的bugs数据库,这个bugs用户和unix系统用户没关系。默认情况下,第一次启动mysql数据库后(怎样启动请参考mysql文档)以root用户名进入(这个root和unix环境系统用户root没关系,这个root是mysql的管理员帐户)。
bash$ mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('<new_password'>) WHERE user='root';
mysql> FLUSH PRIVILEGES;
这样,为root用户设定了<new_password>管理员密码。然后,以这个管理员身份为mysql创建bugs用户,并为它建立对bugs数据库(目前还没建立)的权限:
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,INDEX, ALTER,CREATE,DROP,REFERENCES ON bugs.* TO bugs@localhost IDENTIFIED BY '<bugs_password>';
mysql> FLUSH PRIVILEGES;
这样,bugs用户下次就可以以<bugs_password>密码登陆mysql数据库(本地登陆),对bugs数据库进行管理了。但目前mysql中还没有bugs数据库,这个数据库由后面的执行程序自动创建。
5、配置bugzilla,以root身份
(1)把整个解压bugzilla的目录下的文件移动到/var/www/bugzilla目录下
$cp -R * /var/www/bugzilla/
$cd /var/www
$chown -R nobody.nobody ./bugzilla
最后一句是修改了bugzilla目录的访问权限为nobody.nobody,这是apache的网上用户访问的权限,可以按照自己系统的设置作相应改变。
(2)在/var/www/bugzilla目录下运行:
$perl -pi -e 's@#!/usr/bonsaitools/bin/perl@#!/usr/bin/perl@' *cgi *pl Bug.pm processmail syncshadowdb
它修改了所有文件中应用perl运行程序的路径为/usr/bin/perl,而默认的不是这样。
(3)启动mysql数据库(第一次的时候运行:/etc/rc.d/init.d/mysqld restart 会初始化数据库)
以后启动可以用 /etc/rc.d/init.d/mysqld start -O max_allowed_packet=1M
选项表示可以保存小于1M的附件,而默认的是64k,有时候太小。
(4)运行bugzilla解压后的目录下的check.pl程序,执行程序进行初始化工作,它确定mysql数据库和其他选项与bugzilla的CGI程序相一致,并且建立数据目录,创建bugs数据库:
$ ./checksetup.pl
第一次运行时有时候会提示缺少某些optional的模块,如果不需要这些可选的功能,可跳过。
然后会提示bugs@localhost用户没有权限连接mysql数据库,并停止。
这时,编辑当前目录下生成的一个新文件,叫“localconfig"文件,是一些配置信息,需要自己进一步修改,按照自己的系统来修改一些参数,如webservergroup,它是apache访问用户的默认组名称,我的为nobody。其他主要的需要修改的是:
$db_host = "localhost"; # 数据库是本地还是其他服务器上,默认是本地,即和bugzilla是同一台服务器上
$db_name = "bugs"; # 保存bugzilla数据的数据库名称,默认是bugs
$db_user = "bugs"; # 管理这个数据库的mysql用户名称,可以自己选,现在为bugs
$db_pass = "****"; # bugs数据库的访问密码,即创建bugs用户时输入的密码,默认为空,填入即可。
其他的一般没什么改变,默认的就行。
再次运行check.pl程序,应该正常运行,连接mysql,创建bugs数据库和相关表。
这时会提示说第一次运行bugzilla,输入管理员的email地址,姓名,并创建一个密码,即bugzilla的管理员密码。
(5)安装好后要进行配置,开启apache和mysql,进入http://server_name/bugzilla/editparams.cgi,(需要bugzilla管理员身份)
修改urlbase为http://159.226.2.132/bugzilla/
其他选项可以按照说明做相应修改,默认的一般可以了。
6、关于访问权限:
有时候如果按照上述方法安装后,访问http://159.226.2.132/bugzilla/index.cgi会出现无权访问页面的问题。
解决:把httpd.conf 中的
User ××××
Group ××××
改为
User nobody
User nobody
这样把apache的访问用户都设为了nobody。(这可能会影响其他的apache下的程序,修改前可以询问apache的管理员。反正就是要让/var/www/bugzilla的访问用户权限和apache的访问用户权限一样。
然后执行
$cd /var/www
$chown -R nobody.nobody ./bugzilla
把/var/www/bugzilla目录及其下文件权限全改为nobody.nobody方能解决访问权限问题。
7、启动sendmail服务。如果默认安装的sendmail服务器,就启动sendmail服务,这样bugzilla就可以利用mail服务来进行一些登记注册、发消息等服务了。前提是此服务器有完整的域名。
8、汉化
现在,bugzilla应该就可以用了,用http://server_name/bugzilla/index.cgi 看到bugzilla的界面,但是现在只能是英文环境,不能提交/查看中文的bug帖子,看到的是乱码,界面也是全英文的,比较别扭。下面,我们来进行一些汉化工作,除非你决定就用英文的了。
(1)网上能找到的最新汉化包是在sourcforge上,由侯光敏制作的汉化模板(bugzilla提供界面模板的工具,估计这个汉化模板就是利用这个模板工具制作的),地址是http://sourceforge.net/projects/bugzilla-cn/ 那里可以下载最新的bugzilla-2.16-cn-1.0.tar.gz包,它对bugzilla界面做了几乎完全的汉化(自称90%)。
(2)解压包生成一个template目录,进去后有一个cn目录
$tar xfz bugzilla-2.16-cn-1.0.tar.gz
$cd template
现在,可以把这个cn目录移到/var/www/bugzilla/template/目录下,和默认得en目录并列,也可以在/var/www/bugzilla/template/en/目录下自己创建一个custom目录,然后把cn目录下的所有文件和目录移到custom目录下,这样,启动bugzilla后,这个目录下的内容会覆盖和custom目录并列的默认default目录下的文件内容(第二种方式是按照bugzilla的说明文档进行的,是添加一种模板的方法,替换系统默认的英文模板,但又不破坏原有的文件)。记得和以前一样,修改新加入的文件的访问权限为nobody.nobody。
(3)现在你可以用浏览器访问bugzilla了,但是默认情况下,浏览器会自动使用ISO-8859字符集,而不是gb2312,虽然汉化模板中对每个生成的页面都在源码的meta字段中指定了charset=gb2312,但似乎不能被浏览器识别使用,非得手动修改每个页面的字符集为gb2312后才能看到漂亮的简体中文。这是因为汉化模板只是更改了文字的内容,但没有让浏览器识别成中文字符,而默认的bugzilla生成的都是ISO-8859-1西欧字符集,所以浏览器把中文内容当成西欧字符进行显示,所以呈现乱码。现在要做的是强制生成带“指定中文字符集”的页面。
(4)参阅bugzilla自带的文档说明后发现,可以用一个命令:
$perl -pi -e "s/Content-Type: text/html/Content-Type: text/html; charset=gb2312/i" *.cgi *.pl
在/var/www/bugzilla目录下执行,它的作用是对当前目录下的所有cgi,perl程序中的
Content-Type: text/html
都替换为:
Content-Type: text/html; charset=gb2312
这样就强制cgi和perl程序动态生成页面的时候加上指定字符集gb2312的tag,用户的浏览器就能识别出中文了,否则,汉化模板生成的中文被浏览器识别为ISO-8859的西欧文字出现乱码现象。
但有些动态页面生成的时候,cgi代码中不是"Content-Type: text/html",故上述命令不能对这些cgi程序奏效,所以要手动修改,目前发现的是enter_bug.cgi程序,把倒数第三行改为
print "Content-type: $format->{'contenttype'}; charset=gb2312nn";
即加上了charset=2312的标签,生成的页面就会被浏览器识别为中文字符集。
9、最后
bugzilla允许对界面进行一些用户自己的定制,比如修改页面底部的说明文字等等,在template中修改就可以了(2.16版本以后的新特性),详细内容可参考bugzilla的主页http://bugziila.mozilla.org。
现在看看页面,是不是都变成漂亮的中文了?

[转自]在Linux下安装、汉化Bugzilla--白日梦

- 阅读全文 -

迅雷 Ayu去广告版,Ayu官方发布网站 - 残念 - cannian.com

 

迅雷 Ayu版更新日期:2007.12.04 00:00

  • 来源版本:5.7.5.421 (更新记录)
  • 文件大小:5.83Mb (6,117,445 字节 字节)
  • 操作系统:xp/vista/2000
  • MD5(Thunder.v5.7.5.421.NoAD-Ayu.exe):ca58e5219d229714a6de6b7d9d7e07df (md5验证)

下载列表

迅雷 Ayu去广告版,Ayu官方发布网站 - 残念 - cannian.com

Technorati 标记:

- 阅读全文 -

自己上的一些超级好网站 苦菜花卓越电脑家园

【转】个人爱好不同,仅供参考(未编辑)

自己上的一些超级好网站


好论坛:

http://xssh.5d6d.com
注册后不但有一个属于自己的免费论坛,还有很多“想看”的东西
绿色软件联盟
http://www.xdowns.com
绿色软件站  
http://www.onegreen.net
中国绿软基地
http://www.papac.net/default.html
绿色软件园  
http://www.91downs.net
谊友网绿色软件下载
http://soft.yiiu.com/index.html
练习英语听力的好网站
http://www.ebigear.com/
免费观看全国报纸
http://www.jz5u.com/Codelist/Catalog169/1484.html


在线听歌的网址
1.
http://www.souting.com
2.
http://www.7yin.cn
3.
http://www.9tt.cn
4.
http://www.artblog.cn/blog.asp?name=laomao
5.
http://www.rainred.net
P2P网络电视
1 主页:
http://www.pplive.com
下载:
http://www.mydown.com/soft/237/237498.html
2 主页:
http://www.ppstream.com
下载:
http://www.mydown.com/soft/235/235202.html
3 主页:
http://tv.net9.org
4 主页:
http://www.cciptv.com
下载:
http://www.mydown.com/soft/237/237497.html
5 主页:
http://www.tvants.com
6 主页:
http://tv.linkx.com.cn
下载:
http://www.mydown.com/soft/238/238349.html
7 主页:
http://deepor.org/sop
全中国最好的网络电视
http://www.xqtv.cn
在我心中排第一位的电视网站,苹果很多链接都是用的这个网站的
http://www.etshow.net
速度非常不错,和苹果差不多
http://www.tvren.com
我个人非常喜欢的电视网站,做的非常不错!
http://www.zxmm.net
http://www.kkktv.com
http://www.51live.com
也是使用插件的如PPLIVE,QQ直播,PPSTREAM等等!
http://www.tv007.com
http://www.qqqtv.com
http://www.7x.com.cn/index.jsp
此网站白天网速慢的很
http://www.chntv.net
http://www.pptvs.com
要下载PPLIVE插件使用
http://www.nofox.com/nf
http://www.tvsou.com/index.asp
http://haotv.home./
http://www.nofox.com/qq/?sup=37612
FTP
ftp://221.224.20.206/
ftp://218.6.43.31/
ftp://ftp.wglm.net/
ftp://220.201.200.11/
ftp://221.224.20.206/
ftp://218.6.43.31/
免费电影网站
http://vod.nen.com.cn/nenvod/movie.jsp
http://vod.ruyi.com/
http://avl.com.cn/work1/index.html
http://www.169c.com/movie/sort.asp
http://vod.cnool.net/
http://dvd.myzone.cn/
http://vod.gamesoft.com.cn/
http://www.91890.com/dsjc/index.asp
http://218.2.111.46:6666/view/list.exl
只需简单注册就OK
1 
http://vod.917game.com/
2 
http://vod.99tom.com/index.asp
[/url]
3 
http://www.hjdmw.com/index.asp
[/url]
4 
http://www.yisode.com/01vod/
5 
http://movie.wtyl.com.cn/index.asp
6 
http://movie.qdvod.com/
7 
http://vod.ytcnc.net/index.aspx
8 
http://www.yantaibbs.com/movie/
9 
http://movie.sun116.com/
10
http://www.1zu.cn/film/
十二大破解论坛
1.龙族联盟论坛★
http://www.chinadforce.com/
2.霏凡软件论坛★
http://bbs.crsky.com/
3.赢政天下论坛★
http://bbs.winzheng.com/
4.万花筒极酷大论坛
http://bbs.superdown.com/
5.汉化新世纪论坛
http://bbs.hanzify.org/
6.天天精品论坛
http://bbs.ttdown.com/
7.说吧朋友社区
http://bbs.sayba.cn/
8.中国破解联盟论坛
http://bbs.mumayi.net/
9.中国狂热破解联盟论坛
http://www.5icrack.com/bbs/
10.阿榕软件论坛
http://bbs.arongsoft.com/
11雷奥论坛
http://bbs.leobbs.com
12龙卷风论坛★
http://bbs.long-jf.com/
破解
无忧软件网 -http://www.51soft.com/
精品软件秀 -http://www.ohsoft.com/
163软件园 -http://www.soft163.com/
中华破解联盟 -http://www.softsdown.com/
软件万花筒 -http://www.superdown.com/
番外地工作室 -http://fwd.yeah.net/ 
中原破解 -http://www.crackbest.net/
天空软件站 -http://www.skycn.net/
赢政天下 -http://soft.winzheng.com/
多快热下载 -http://www.iou99.com/
肥牛精品 -http://www.51xiazai.com/
精品超酷软件9down -http://www.9down.com/
康乐园 -http://64.125.80.150/
无心精品软件下载 -http://www.clkj.net/soft/
注册大本营 -http://yuanbin.spedia.net/
QQ黑客网 -http://www.qq88.net/
豆子软件 -http://www.ggabc.com/
网虫乐园 -http://www2001.myrice.com/
注册大全 -http://www.zx9.net/reg/index.htm
suhu注册码天地 -http://yanxz.myetang.com/
飞牌精品软件 -http://www.ayxz.com/
大亨软件园 -http://www.jxxw.com/
天天软件网 -http://www.365down.com/
Greatboy的网上家园 -http://greatboy.myrice.com/ 
珠江路在线 - 888珠江路在线-http://www.zhujiangroad.com/code/
火爆软件下载 -http://www.myetoys.com/download/indexok.asp
软件仓库 -http://soft.netnest.com.cn/
京九网堡下载站 -http://www.jjwb.com/soft/
阿程软件园 -http://myis.yeah.net/
石头软件 -http://stonesoft.my163.com/
网友自助中心 -http://52byte.com/
龙龙精品软件 -http://yesoft.myrice.com/
鲨鱼丸下载 -http://www.whatisnet.net/index.asp
无忧破解基地 -http://www.51hot.net/soft/
蔫老虎精品软件资讯网 -http://www.softicp.com/
注册码搜索 -http://www.glavenet.com/sn/
听月在线 -http://www.aptrat.com/
逍遥乐人居 -http://leren.myrice.com/
阿蒙电脑乐园 -http://www.swhsky.com/
月之门 -http://zjhall.51.net/   
中华黑客 -http://www.hackercn.com/
三脚猫大仓库 -http://iww.my163.com/
华娱下载区 -http://www.zjdownload.net/
万发网☆超级下载基地! -http://www.ujd0z1.chinaw3.com/
黑客软件园 -http://go5.163.com/happyhot/
城郊漫步下载 -http://cnfjh.y365.com/softdown/softdown.htm
紫色天空 -http://go1.163.com/tsst/
动感软件站 -http://www.mesky.net/softdown/default.asp
当秀 -http://94down.enorth.com.cn/default.html
绵阳青软 - 软件下载
http://www.myqr.com/
飓风工作室 -http://helihua.com/soft/
K886网络工作室 -http://www.qyzsz.com/love/k886/default.asp
软件天堂 -http://lzhj.myrice.com/
【软件帝国】 -http://aliketen.myetang.com/rj/software.htm
明超空间软件下载 -http://go5.163.com/lmc888/index.htm
紫色天空 -http://go1.163.com/ccncm/
精品软件资讯网 -http://zlzl.126.com/
酷软精品小站 -http://davy.sosoo.net/
万家下载专区 -http://winjia.com/soft/
奇奇天空软件站 -http://qqskydownload.yeah.net/
中华软件联盟 -http://www.softsdown.com/
软件大吧 -http://crazywiond.myetang.com/
时空在线 -http://mhwawa.6to23.com/
软件风暴 -http://software.zhgnet.com/
紫辰软件下载 -http://3254008.126.com/
三维视窗 -http://www.3dwin.com.cn/c/register.php
划破长空 -http://go5.163.com/tudou110/
我要下载 -http://www.51xz.net/
天天安全网 - 有关病毒防护
http://www.ttian.net/
败絮其外 - 老牌的破解站点
http://bxqw.yeah.net/
911下载城 - 软件全面,更新快
http://www.cn911.net/
精品推介站 -http://kickme.to/vdown
天码行空 -http://www.wutai.com/
软件聚宝盆 -http://soft.km169.net/
最酷软件 -http://weboy.okey.net/~weboy/
小臭臭精品网 -http://xccsoft.yeah.net/
疯狂下载 -http://www.hx2nn.com/
坏鱼网络 -http://www.badyu.net/
中文之家 -http://www.xycn.com/china/index.asp
木子丹软件园 -http://www.mehe.net/soft/
注册破解天地 -http://crsoft.6to23.com/
先锋世界 -http://www.51xf.com/down/
汉化软件基地 -http://smg.vip.myrice.com/
废话软件 -http://www.fm356.net/
龙龙精品屋 -http://yesoft.myrice.com/
全方位下载 -http://fixdown.yeah.net/
天蝎下载 -http://mylizi.com/
舒畅软件 -http://www.shuchang.net/
飚网同盟软件下载 -http://www.100to100.net/down2/index.asp
自由破解联盟FCG -http://fcg.5599.net/
PATCH99 - 各种补丁
http://www.patch99.com/
网迷世界软件下载 -http://www.fansword.com/
自由软件 -http://www.itwet.com/
魔界天空 - 病毒软件下载
http://www.mjtk-v.com/index-one.htm
软件快巴 -http://www.86ad.com/down/soft/Default.asp
无忧酷软 -http://www.51hot.net/soft
苍狼软件屋 -http://softwolf.my163.com/
简体中文网 - 以汉化软件为主
http://www.gb-2312.com/
电脑空间 -http://yhq.xiloo.com/
天下一家 -http://super.5599.net/down/index.asp
火爆软件 -http://www.myetoys.com/download/indexok.asp
超级综合网络 -http://www.zhoucc.com/
51. 169软件园
http://www.169cc.com/
;
52. 17down综合下载中心---精彩社区
http://bbs.17down.com/
;
53. 180CM资源站:软件园地
http://www.180cm.com/download/new/sort.asp?classid=13
;
54. 269软件宝库
http://soft.269.net/
;
55. 30M免费邮箱★mail.hotgroup.org★
http://mail.hotgroup.org/
;
56. 365软件基地!
http://soft.gz365.net/
;
57. 90度下
http://www.90du.com/
]
http://www.90du.com/
;
58. 911下载城-影视剧场
http://www.cn911.net/
;
59. 91now资源站
http://www.91now.com/
;
60. 99软件
http://www.99soft.com/
]
http://www.99soft.com/
;
61. eNet下载
http://download.enet.com.cn/
;
62. HunY.net软件下载网
http://www.huny.net/
;
63. iSDS星梦软件互动网站
http://sds.hanzify.org/
;
64. Oksoft经典软件下载
http://soft.ahbb.net/
;
65. Welcome to MegaSpeed Multimedia
http://www.mgspeed.com/
;
66. WinSky DownLoad
http://winsky.vip.myrice.com/
;
67. YY工作室——汉化天地
http://www.yy-china.com/
;
68. [软件说明书]http://www.92soft.com/
http://www.92soft.com/index.htm
;
69. ∷中华电脑书库--首页∷
http://www.pcbookcn.com/
;
70. ╃TOP-下载
http://www.top183.com/
http://www.top183.com/
;
71. ╃霏凡软件=-
http://www.crsky.com/
;
72. ◆欢迎大家光临网页制_
http://www.cdcity.gov.cn/gf/index.asp
;
73. ◇◆亮丽软件◆◇
http://www.liangli.net/
;
74. 《17DOWN-综合软件下载中心》17down.COM
http://emu.xaonline.com/host/bdx/17down/
;
75. 『免费地带』i386i.yeah.net
http://i386i.yeah.net/
;
76. 『紫辰软件园』
http://3254008.126.com/
;
77. 『软件龙
http://www.soft999.com/
http://www.soft999.com/
;
78. 【最酷破解】--
http://www.3ck.net/
http://www.3ck.net/
;
79. 【破解魔域】crackmore.yeah.net
http://crackmore.yeah.net/
;
80. 【蛐蛐乐园】〓★http--qwyabc.126.com★〓
ftp://qwyabc.vicp.net/
;
81. 〓★D版网★〓
http://www.adownb.com/
;
82. 下载无穷软件站
http://download.gogz.com/
;
83. 下载
http://www.down8848.net/
http://www.down8848.com/
;
84. 世 纪 软 件 园
http://www.downxp.net/
;
85. 世界网络——速度测试——测试结果
http://www.dirl.net/SpeedTest.asp?s=
好易网络&u=2643
86. 东方网络
http://www.wangwuping.com/
;
87. 中国站长站
http://www.chinaz.com/
;
88. 中国经典网
http://www.jdnet.com.cn/
;
89. 乖乖兔软件
http://www.7u7.net//
>
http://www.7u7.net//
>
http://www.7u7.net//
" target="_blank" >
http://http://www.7u7.net//
" target=_blank>
[url=http://www.7u7.net//>;;;http://http://www.7u7.net//]http://www.7u7.net//>;;;http://http://www.7u7.net//[/url]
;
90. 九国--下载
http://www.itwz.com/softdown
;
91. 云南软件站
http://www.yndown.net/
;
92. 俠盜的家
http://www.paddyliu.com/vgate/
;
93. 全方位下载
http://www.fixdown.com/
;
94. 八亿度软件
http://www.9887.com/

http://www.9887.com/
;
95. 兴宁软件基
http://www.xn163.com/
]
http://www.xn163.com/
;
96. 动感网络
http://www.mesky.net/
;
97. 华游软件
http://www.cnyou.com/
]
http://www.cnyou.com/
;
98. 双鸭山信息港
http://www.syshl.net/
;
99. 吧喔软件站
http://www.88oo.com/
;
100. 品味人生--Tastelife.net
http://www.tastelife.net/
;
100孤星云鹤站
http://www.crcls.com/down/down/
101. 在线电影,在线影院,免费电影,电影下载
http://movie.59178.com/
;
102. 天下网吧联盟--软件下载
http://www.txwm.com/
;
103. 天天下载站
http://www.365down.net/
;
104. 天天精品软件乐园-ttdown.com
http://ttdown.com/
;
105. 天易网络-无限精彩
http://www.520love.net/
;
106. 天煞网软件精品-首页
http://www.tiansha.net/
;
107. 天空软
http://www.skycn.com/
http://www.skycn.com/
;
108. 太平洋下载中心:软件最新、最快、最火热!
http://www8.pconline.com.cn/download/
;
109. 安全天使
http://www.sangel.net/index.asp
;
110. 广捷居迷你软件
http://www.gjjc.com/2/
;
111. 当当网软件园
http://www.downle.com/
;
112. 很好的破解网站
http://www.andr.net/
;
113. 志勉下载
http://www.hzmian.com/
;
114. 快快当软件园
http://www.kkdown.com/
;
115. 恩龙工作室欢迎你……
http://dyzdp.nease.net/
;
116. 我爱吾网
http://www.5i5w.com/
;
117. 我爱吾网视频点播系统
http://www.5i5w.com/mov/default.asp
;
118. 我要下载 httphttp://www.51xiazai.com/
http://www.51xiazai.com/
;
119. 我要下载(httphttp://www.51xiazai.com/)
http://www.51xiazai.com/
;
120. 无忧热点网络
http://www.51hot.net/
;
121. 无忧软件
http://www.51soft.com/

http://www.51soft.com/
;
122. 昆明热线-软件聚宝盆
http://soft.km169.net/soft/index2.htm
;
123. 晋城在线软件下载中心
http://www.jconline.net.cn/computer/rjxz/index.asp
;
124. 杰特下载
http://www.jetdown.com/

http://www.jetdown.com/
;
125. 极速软件站
http://www.169s.com/
;
126. 欢迎访问DownMe!
http://www.downme.com/
;
127. 正版软件
http://www.soft888.com/
;
128. 汉化新世纪——自由汉化新天地!
http://www.hanzify.org/
;
129. 流氓 D
http://www.langz.org/
;
130. 流行下载园
http://www.cyoo.net/
;
131. 满满下载--软件,注册,破解,字体,ASP源码,动画,电影,游戏--
http://www.365mm.com/
;
132. 漳浦在线-漳浦软件园
http://www.zhangpu.net/zpsoft/
;
133. 疯狂下载
http://www.15m.com/down/
;
134. 疾风下载
http://www.jfdown.com/
]
http://www.jfdown.com/index.htm
;
135. 皇家论坛
http://www.pofem.com/
;
136. 科力精品下载
http://www.cnkl.net/
;
137. 笔记本电脑天空-精品软件
http://www.notesky.com/soft.asp
;
138. 精英网络
http://www.2vv.net/
;
139. 网E软件园
http://www.down163.net/
;
140. 网眼下载基地
http://61.175.218.178/down/
;
141. 网虫乐园
http://www2001.myrice.com/
;
142. 网页特效集锦
http://www.helpor.net/
;
143. 蓝色下载
http://www.xpblue.com/
;
144. 蓝色理想技术文档
http://www.blueidea.com/doc/
;
145. 蔫老虎在线-下载天地
http://download.softicp.com/
;
146. 补丁网
http://www.5studycn.com/
;
147. 视点软件园httphttp://www.21rat.com/
http://www.citytea.com/download/
;
148. 豪安阁在线
http://www.i-down.com/down_default.asp
;
149. 赢政天下 [ WINZHENG.COM ]
http://www.winzheng.com/
;
150. 超酷网络
http://www.coolmore.net/
;
151. 软件
http://www.soft168.com/
http://www.soft168.com/
;
152. 软件天地线
http://9377.com/
;
153. 软件梦
http://www.lovespeed.net/
;
154. 软件点播中文网-共享软件发布-下载-学习-研究-交流之园
http://www.ynkm.com/
;
155. 闪客栈
http://www.33kz.com/
;
156. 阿榕软件园
http://www.arongsoft.com/
;
157. 雨点下载
http://211.162.79.101/ydxz/
;
158. 雪夜流星在
http://www.xylxw.net/
http://soft.xylxw.net/
;
159. 风儿小站
http://xiaofeng2.yeah.net/
;
160. 风闪网络== 风闪下载 ==
http://down.vipcn.com/index.asp
;
161. 飞牌精品软件
http://www.ayxz.com/
http://www.ayxz.com/index.html
;
162. 飞跃颠峰下载站
http://www.flydown.com/
;
163. 驽兽
http://www.swzn.com/
http://www.swzn.com/
;
164. 风云下载港:
http://www.tcpu.com
在线查询大全
EMS全球快递邮件号查询
http://www.ems.com.cn/ems/index.jsp
中国高等教育学历网上证书查询
http://www.chsi.com.cn/xlcx/
中国黄历查询,就是查每日吉凶
http://lunar.anet.net.tw/
万年历查询(包括纪念日,节假日查询)
http://www.123cha.com/calendar/
身份证号码查询
http://www.lxsk.com/idcard.aspx
全国邮政业务资费(去邮局别让人蒙了啊)
http://www.chinapost.gov.cn/yyzn/zifei/indexzifei.htm
在线ip地址专业查询定位
http://www.123cha.com/ip/
全国主要城市地图查询
http://www.123cha.com/map/
全国列车时刻查询
http://www.123cha.com/train/
世界主要城市同步时间查询
http://www.123cha.com/worldclock/
2006-11-24 10:15 AM wysecn
各国货币汇率换算
http://www.123cha.com/currency-converter/
12种语言在线翻译
http://www.123cha.com/tran/
国内邮政编码、长途电话区号查询
http://www.123cha.com/postal/
在线免费度衡量换算转换器
http://www.123cha.com/unit-converter/
汉字简体繁体在线转换
http://www.123cha.com/chinese-converter/
搜索引擎收录情况、网站反向链接在线查询
http://www.123cha.com/search_engine/
人体生物钟周期在线查询
http://www.fh21.com.cn/search/zhouqi.htm
人体疾病查询及医院药品大夫查询,这个有趣啊
http://health.sohu.com/medisearch.html
手机型号,价格产地查询
http://www.3533.com/phone/
API函数在线查询大全
http://www.hongen.com/pc/program/apiquery.htm
全球当日股票行情查询
http://stock.sina.com.cn/cgi-bin/stock/quote/lookup.cgi
全球黄页在线查询
http://www.bridge69.com/365/sw/yellow.htm
商务查寻类
[酒店预定]
http://www.bridge69.com/chinese/hotel.htm
[中国专利检索]
http://www.bridge69.com/365/sw/1-2china-zhuanli.htm
[国际专利检索]
http://www.bridge69.com/365/sw/1-3guoji-zhuanli.htm
[外汇牌价]
http://202.102.239.182/hl/llhlcx.asp
[邮编电话区号]
http://www.cnyw.net/yzbm/index.asp?sm=%D5%E3%BD%AD
[法律法规查询]
http://202.99.23.199/home/begin.cbs
[股票行情查询]
http://www.gtja.com/gtja/quotation/stock.jsp
[国内著名网站]
http://www.bridge69.com/365/cxdq/29web.htm
[数码相机报价]
http://www.bridge69.com/365/sw/2-1shuma.htm
[农产品价格查询]
http://www.bridge69.com/365/sw/2-2nongchanpin.htm
[火车时刻查询]
http://www.bridge69.com/365/sw/2-3train.htm
[中关村在线价格查询]
http://www.bridge69.com/365/sw/2-4zhongguancun.htm
[药品价格查询]
http://www.bridge69.com/365/sw/2-5yaoping.htm
[国内航班查询]
http://www.bridge69.com/365/sw/2-6plane.htm
[汽车报价查询]
http://www.bridge69.com/365/sw/2-7car.htm
[建材价格查询]
http://www.bridge69.com/365/sw/3-1jiancai.htm
手机真假验正
http://www.bridge69.com/365/sw/3-2mobphone.htm
[关税查询]
http://www.bridge69.com/365/sw/3-3guanshui.htm
[WTO信息查询]
http://www.bridge69.com/365/sw/3-4wto.htm
[法律查询]
http://www.bridge69.com/365/sw/3-5low.htm
[国际区号查询]
http://www.bridge69.com/365/sw/3-6guoji.htm
实时航班动态
http://www.bridge69.com/365/sw/3-7shishi.htm
[展会查询]
http://www.bridge69.com/365/sw/3-8zhanhui.htm
[行业代码表查询]
http://www.bridge69.com/365/sw/dai%20ma.htm
[电脑报价查询]
http://www.bridge69.com/365/sw/4-1comptur.htm
[全球金融指数]
http://www.bridge69.com/365/sw/4-2jinron.htm
[国际UPS包裹追踪]
http://www.bridge69.com/365/sw/4-3ups.htm
[中国网站全球排行榜]
http://www.bridge69.com/365/sw/4-4paihang.htm
[全球黄页]
http://www.bridge69.com/365/sw/yellow.htm
[在线各类字典大全]
http://www.bridge69.com/365/sw/dictionary.htm
[世界钢号对照]
http://www.bridge69.com/365/sw/4-7gan.htm
[***商人专集]
http://www.bridge69.com/chinese/jpsr/index.htm
[***贸易参考]
http://www.bridge69.com/chinese/rbmyck/index.htm
[***企业经营管理集]
http://www.bridge69.com/chinese/rbqygl/index.htm
[公证知识]
http://www.bridge69.com/365/sw/5-1gongzhe.htm
[中国百家姓的日文发音]
http://www.bridge69.com/365/sw/5-5baijiaxing.htm
[唐诗三百首中日文对照]
http://www.bridge69.com/365/sw/5-6tansi300.htm
[***人名的读法]
http://www.bridge69.com/365/sw/6-1japanese.htm
日常查寻类
[违章查询]
http://www.bridge69.com/365/cxdq/01.htm
http://www.bridge69.com/365/cxdq/1-2ems.htm
[查询生辰八字]
http://www.bridge69.com/365/cxdq/03.htm
[查身份证]
http://www.bridge69.com/365/cxdq/1-4shenfenzhen.htm
[农历公历互查系统]
http://www.bridge69.com/365/cxdq/05.htm
[成语查寻]
http://www.bridge69.com/365/cxdq/1-6chenyu.htm
[英语词典]
http://www.bridge69.com/365/cxdq/1-7english.htm
[手机地址]
http://www.bridge69.com/365/cxdq/08souji.htm
[移动话费]
http://www.bridge69.com/365/cxdq/1-9yidong.htm
[联通话费]
http://www.bridge69.com/365/cxdq/2-1liantong.htm
[疾病查询]
http://www.bridge69.com/365/cxdq/2-2jibing.htm
[药品查询]
http://www.bridge69.com/365/cxdq/2-3yaoping.htm
[景点查询]
http://www.bridge69.com/365/cxdq/2-4jingdian.htm
[世界时间]
http://www.bridge69.com/365/cxdq/15shi.htm
[电视节目]
http://www.bridge69.com/365/cxdq/2-6tv.htm
[实时天气预报]
http://www.bridge69.com/365/cxdq/weather.htm
[在线地图]
http://www.bridge69.com/365/cxdq/2-8map.htm
[节日大全]
http://www.bridge69.com/365/cxdq/21jieri.htm
[营养成分查询]
http://www.bridge69.com/365/cxdq/3-1yingyang.htm
[医院信息查询]
http://www.bridge69.com/365/cxdq/3-2yiyuan.htm
[常用电话列表]
http://www.bridge69.com/365/cxdq/3-3tel.htm
[高校学历查询]
http://www.bridge69.com/365/cxdq/3-4school.htm
[里程查询]
http://www.bridge69.com/365/cxdq/3-5licheng.htm
[车牌照号查询]
http://www.bridge69.com/365/cxdq/3-6chepai.htm
[国家干线公路查询]
http://www.bridge69.com/365/cxdq/3-7road.htm
[全国报刊查询系统]
http://www.bridge69.com/365/cxdq/4-1newspaper.htm
[上海市住宅电话查询]
http://www.bridge69.com/365/cxdq/4-2shanhai.htm
[全国信息港导航]
http://www.bridge69.com/365/cxdq/xing%20xi%20gan.htm
[旅游地图]
http://www.bridge69.com/365/cxdq/4-4map.htm
[黄道吉日查询]
http://www.bridge69.com/365/cxdq/4-5jiri.htm
[]
http://www.bridge69.com/365/cxdq/4-6world.htm
计算器类
[属相计算]
http://www.bridge69.com/365/jsql/01.htm
[科学计算]
http://www.bridge69.com/365/jsql/02.htm
[理财计算]
http://www.icbc.com.cn/calculator/calculator_per.jsp
[个税计算]
http://www.bridge69.com/365/jsql/04ge.htm
[单位制式转换]
http://www.bridge69.com/365/jsql/05dan.htm
[标准体重计算]
http://www.bridge69.com/365/jsql/1-6tizhong.htm
[存款利息计算器]
http://www.bridge69.com/365/jsql/1-7cunkuan.htm
[购房计算]
http://www.bridge69.com/365/sw/house.htm
测试大全类
[智商测试]
http://www.bridge69.com/365/csdq/01.htm
[爱情测试]
http://www.bridge69.com/365/csdq/02.htm
[信心测试]
http://www.bridge69.com/365/csdq/03.htm
[男性魅力测验]
http://www.bridge69.com/365/csdq/04.htm
[心理适应性测试]
http://www.bridge69.com/365/csdq/05.htm
[合格丈夫测试]
http://www.bridge69.com/365/csdq/06.htm
[安全期测试]
http://www.bridge69.com/365/csdq/1-7anquang.htm
[测生命周期]
http://www.bridge69.com/365/csdq/1-8life.htm
[心理测试]
http://www.czinfo.net/heart/
[测试你的反应速度]
http://www.bridge69.com/365/ylxx/fangying.htm
[由始以来最准的性格、爱情测试]
http://www.bridge69.com/365/csdq/2-3zui.htm
娱乐休闲学习类
[全球精品影视站]
http://www.bridge69.com/TV/index.htm
[全球广播在线收听]
http://www.bridge69.com/radio/index.htm
[滚动新闻中心]
http://www.bridge69.com/365/ylxx/1-1news.htm
[网上日程表]
http://www.bridge69.com/chinese/xia...u/calendar.html
[梦的解析]
http://www.bridge69.com/365/ylxx/1-3drawem.htm
[星座查询]
http://www.bridge69.com/365/ylxx/1-4star.htm
[菜谱大全]
http://www.5eat.com/rec_default.php
[大学英语四六级成绩查询]
http://www.bridge69.com/365/ylxx/1-6english.htm
[足球彩票]
http://www.bridge69.com/365/ylxx/1-7football.htm
[网上报刊室]
http://www.bridge69.com/365/ylxx/02newpaper.htm
[金山词霸在线词典]
http://www.bridge69.com/365/ylxx/2-1words.htm
[福利彩票]
http://www.bridge69.com/365/ylxx/2-2fuli.htm
[各地小吃]
http://www.bridge69.com/365/ylxx/2-3eat.htm
[汉语大词典]
http://www.bridge69.com/365/ylxx/2-4chinese.htm
[女性网络试衣间]
http://www.xm100.com/women/sy/
[吉尼斯世界记录大全]
http://www.bridge69.com/365/ylxx/2-6jishini.htm
[全国网吧指南]
http://www.bridge69.com/365/ylxx/2-7wangba.htm
[MP3搜索、下载]
http://www.bridge69.com/365/ylxx/3-1mp3.htm
[原创Flash爬行榜]
http://www.bridge69.com/365/ylxx/3-2flash.htm
[世界知识]
http://www.bridge69.com/365/ylxx/3-3world.htm
[热线贺卡寄情]
http://www.bridge69.com/365/ylxx/3-4card.htm
[在线相声]
http://www.bridge69.com/365/ylxx/xian%20shen.htm
[出行参考]
http://www.bridge69.com/365/ylxx/3-6goout.htm
[数字计算游戏(适合小孩)]
http://www.bridge69.com/365/ylxx/shuzhi.htm
[网易独家同城聊天室]
http://www.bridge69.com/365/ylxx/4-1chat.htm
[元素周期表查询]
http://www.bridge69.com/365/ylxx/chemcia.htm
[电子书下载一网打尽]
http://www.bridge69.com/365/ylxx/4-4ebook.htm
[英文经典名著在线阅读]
http://www.bridge69.com/365/wyzz/4-5.htm
[查询生辰八字]
http://www.bridge69.com/365/ylxx/4-5-8zi.htm
[世界各国历史明信片欣赏]
http://www.bridge69.com/365/ylxx/5-1shijie.htm
[世界各国邮票]
http://www.bridge69.com/365/ylxx/5-2youpiao.htm
[世界各国货币]
http://www.bridge69.com/365/ylxx/5-3money.htm
[神奇读心术]
http://www.bridge69.com/365/ylxx/5-4heart.htm
[全国高校名录]
http://www.bridge69.com/365/ylxx/5-5gaoxiao.htm
[日语聊天室]
http://www.bridge69.com/chinese/jpsay.htm
[***音乐试听]
http://www.bridge69.com/365/ylxx/5-7jpyl.htm
[***歌曲在线试听]
http://www.mtvtop.net/jp.htm

自己上的一些超级好网站 苦菜花卓越电脑家园 苦菜花卓越电脑家园 - powered by phpwind.net

- 阅读全文 -

Reading and Writing form elements


This page provides notes on how to read from and write to forms that are displayed in a web page in a TWebBrowser.

Contents:

The examples on this page assume that the page has been loaded into a TWebBrowser called WebBrowser.


Get the number of forms on a page

function NumberOfForms(document: IHTMLDocument2): integer;
var
  forms: IHTMLElementCollection;
begin
  forms := document.Forms as IHTMLElementCollection;
  result := forms.Length;
end;

and to call it:

procedure TMyForm.Button1Click(Sender: TObject);
var
  nForms: integer;
begin
  nForms := NumberOfForms(WebBrowser.Document as IHTMLDocument2);
  ShowMessage('Form count: ' + IntToStr(nForms));
end;




Get a form by number

Pages can have more than one form on them. The following function will return an instance of a form by number - where the first form is numbered 0, the next 1 and so on:

function GetFormByNumber(document: IHTMLDocument2;
    formNumber: integer): IHTMLFormElement;
var
  forms: IHTMLElementCollection;
begin
  forms := document.Forms as IHTMLElementCollection;
  if formNumber < forms.Length then
    result := forms.Item(formNumber,'') as IHTMLFormElement
  else
    result := nil;
end;

For an example of this function in use see "Get the name of a form" (below).




Get the name of a form

It should be appreciated that HTML does not require forms to be named.

var
  firstForm: IHTMLFormElement;
  document: IHTMLDocument2;
begin
  document := WebBrowser.Document as IHTMLDocument2;
  firstForm := GetFormByNumber(document,0);
  if Assigned(firstForm) then
    ShowMessage('Name of first form is ' + firstForm.Name)
  else
    ShowMessage('This page does not contain any forms');




Get a form by name

Since forms can be named, if you know the name of a form it may be preferable to access the form by name rather than by number.

function GetFormByName(document: IHTMLDocument2;
    const formName: string): IHTMLFormElement;
var
  forms: IHTMLElementCollection;
begin
  forms := document.Forms as IHTMLElementCollection;
  result := forms.Item(formName,'') as IHTMLFormElement
end;

This function will return nil if there is no form with the required name.




List the names of all the fields on a form


function GetFormFieldNames(fromForm: IHTMLFormElement): TStringList;
var
  index: integer;
  field: IHTMLElement;
  input: IHTMLInputElement;
  select: IHTMLSelectElement;
  text: IHTMLTextAreaElement;
begin
  result := TStringList.Create;
  for index := 0 to fromForm.length do
  begin
    field := fromForm.Item(index,'') as IHTMLElement;
    if Assigned(field) then
    begin
      if field.tagName = 'INPUT' then
      begin
        // Input field.
        input := field as IHTMLInputElement;
        result.Add(input.name);
      end
      else if field.tagName = 'SELECT' then
      begin
        // Select field.
        select := field as IHTMLSelectElement;
        result.Add(select.name);
      end
      else if field.tagName = 'TEXTAREA' then
      begin
        // TextArea field.
        text := field as IHTMLTextAreaElement;
        result.Add(text.name);
      end;
    end;
  end;
end;

and to call it:

procedure TMyForm.Button1Click(Sender: TObject);
var
  document: IHTMLDocument2;
  theForm: IHTMLFormElement;
  index: integer;
begin
  document := TWebBrowser.Document as IHTMLDocument2;
  theForm := GetFormByNumber(WebBrowser.Document as IHTMLDocument2,0);
  fields := GetFormFieldNames(theForm);

  for index := 0 to fields.count-1 do
    ShowMessage('Field ' + IntToStr(index) + ' called ' + fields[index]);
end;




Get the value of a named field

To get the value of a named field from a form:

function GetFieldValue(fromForm: IHTMLFormElement;
    const fieldName: string): string;
var
  field: IHTMLElement;
  inputField: IHTMLInputElement;
  selectField: IHTMLSelectElement;
  textField: IHTMLTextAreaElement;
begin
  field := fromForm.Item(fieldName,'') as IHTMLElement;
  if not Assigned(field) then
    result := ''
  else
  begin
    if field.tagName = 'INPUT' then
    begin
      inputField := field as IHTMLInputElement;
      result := inputField.value
    end
    else if field.tagName = 'SELECT' then
    begin
      selectField := field as IHTMLSelectElement;
      result := selectField.value
    end
    else if field.tagName = 'TEXTAREA' then
    begin
      textField := field as IHTMLTextAreaElement;
      result := textField.value;
    end;
  end
end;

and to call it:

procedure TMyForm.Button1Click(Sender: TObject);
var
  document: IHTMLDocument2;
  theForm: IHTMLFormElement;
  index: integer;
begin
  document := TWebBrowser.Document as IHTMLDocument2;
  theForm := GetFormByNumber(WebBrowser.Document as IHTMLDocument2,0);
  ShowMessage('Field "name" has value ' + GetFieldValue(theForm,'name'));




Set the value of a named field

To set the value of a field:

procedure SetFieldValue(theForm: IHTMLFormElement;
    const fieldName: string; const newValue: string);
var
  field: IHTMLElement;
  inputField: IHTMLInputElement;
  selectField: IHTMLSelectElement;
  textField: IHTMLTextAreaElement;
begin
  field := theForm.Item(fieldName,'') as IHTMLElement;
  if Assigned(field) then
  begin
    if field.tagName = 'INPUT' then
    begin
      inputField := field as IHTMLInputElement;
      inputField.value := newValue;
    end
    else if field.tagName = 'SELECT' then
    begin
      selectField := field as IHTMLSelectElement;
      selectField.value := newValue;
    end
    else if field.tagName = 'TEXTAREA' then
    begin
      textField := field as IHTMLTextAreaElement;
      textField.value := newValue;
    end;
  end;
end;

and to call it:

procedure TMyForm.Button1Click(Sender: TObject);
var
  document: IHTMLDocument2;
  theForm: IHTMLFormElement;
  index: integer;
begin
  document := TWebBrowser.Document as IHTMLDocument2;
  theForm := GetFormByNumber(WebBrowser.Document as IHTMLDocument2,0);
  SetFieldValue(theForm,'name','Brian Cryer');




Submit the form

The above functions demonstrate how to read values from a form and how to set values in the form. The only thing remaining is how to submit a form. This si simply:

theForm.submit;

for example:

procedure TMyForm.Button1Click(Sender: TObject);
var
  document: IHTMLDocument2;
  theForm: IHTMLFormElement;
  index: integer;
begin
  document := TWebBrowser.Document as IHTMLDocument2;
  theForm := GetFormByNumber(document,0);
  SetFieldValue(theForm,'name','Brian Cryer');
  theForm.submit;

Note: Be aware that there are cases where this will not achieve the expected effect. This is because some forms are not actually submitted, but the action is either performed in response to JavaScript on a button or by the "onsubmit" handler of the form.

Reading and Writing form elements

- 阅读全文 -

How to call JavaScript functions in a TWebBrowser from Delphi

Introduction

On some occasions when using a TWebBrowser I've needed to use Delphi to call JavaScript functions contained in the current document.

This is quite easy to do. We'll first examine the techniques then we'll look at a case study that changes the font in an HTML document.

Overview of solution

The window object associated with an HTML document exposes a method – execScript – that enables JavaScript to be called. The first parameter of this method takes a string containing the required function call (complete with actual parameters). The method's second parameter specifies the script language being used – in our case 'JavaScript'.

So, how do we get hold of the window object that exposes the required method? We simply use the parentWindow property of the web browser control's document object. We need to ensure that a document object is available by first loading the required document into the web browser and then wait for it to finish loading.

Implementing the solution

Let us assume we have a TWebBrowser control on a form into which an HTML document has been loaded. Assume also that the HTML document defines a JavaScript function named Foo() that takes a string and an integer parameter. Assuming the document is fully loaded, we can call Foo() with a method similar to this:

uses
  MSHTML;
  
procedure TForm1.CallFoo(S: string; I: Integer);
  { Calls JavaScript Foo() function }
var
  Doc: IHTMLDocument2;      // current HTML document
  HTMLWindow: IHTMLWindow2; // parent window of current HTML document
  JSFn: string;             // stores JavaScipt function call
begin
  // Get reference to current document
  Doc := WebBrowser1.Document as IHTMLDocument2;
  if not Assigned(Doc) then
    Exit;
  // Get parent window of current document
  HTMLWindow := Doc.parentWindow;
  if not Assigned(HTMLWindow) then
    Exit;
  // Run JavaScript
  try
    JSFn := Format('Foo("%s",%d)', [S, I]);  // build function call
    HTMLWindow.execScript(JSFn, 'JavaScript'); // execute function
  except
    // handle exception in case JavaScript fails to run
  end;
end;

Listing 1

Let's look at what's going on here. We first check that a document is available and store a reference to in Doc. We then attempt to get a reference to the document's parent window object and store it in HTMLWindow. Once we have a valid window object we call its execScript method, passing the call to Foo(). The parameters to Foo() must be literal values – we can't pass variables. String literals must be enclosed by double or single quotes.

Escaping quotes in string literal parameters

When passing string literal parameters to JavaScript functions you need to be careful to escape any quote characters contained in the string, otherwise the quote will terminate the string prematurely. Since JavaScript can use either single or double quotes to delimit literal strings you may need to escape either of these types of quote by preceeding it with a backslash.

As an example, suppose we need to pass the string He didn't say "hello" to a JavaScript function. If we delimit the string with double quotes we pass the it as "He didn't say "hello"".

Alternatively we may delimit the string with single quotes and pass it as 'He didn't say "hello"'.

If the JavaScript function contains errors or doesn't exist an exception will be raised. We may wish to handle such exceptions before returning.

Note that execScript always returns a varEmpty value so we can't use it to return a value from a JavaScript function. This means we can only use execScript to call JavaScript functions that return no value or where we don't need the return value.

Case study

In this case study we will develop a small application that displays an HTML document in a browser window. The document will contain a Javascript function – SetFont() – that can change document's default font. The application will display a combo box containing a list of all installed screen fonts. When the user selects a font from the combo box the font used in the web browser will be changed accordingly. We do this by calling SetFont() from Delphi.

Firstly, create an HTML document with any content you choose and include the following JavaScript function in the document's <head> section:

<script type="text/javascript">
<!--
  function SetFont(fontname) {
    document.body.style.fontFamily = fontname;
  }
// -->
</script>

Listing 2

This is the code that changes the font.

Now create a new delphi application and drop a TComboBox and a TWebBrowser on the main form. We will load the HTML document when the form is first shown. We will also load the screen fonts into the combo box at the same time. To do this create an OnShow event handler for the form with the following code:

procedure TForm1.FormShow(Sender: TObject);
  { Setup combo box and load document }
begin
  // Store screen fonts in combo box and disabled it
  ComboBox1.Items.Assign(Screen.Fonts);
  ComboBox1.Enabled := False;
  // Load the HTML page
  WebBrowser1.Navigate(ExtractFilePath(ParamStr(0)) + 'Test.html');
end;

Listing 3

Note that we disabled the combo box to prevent a font from being selected. We do this because to set a font we need to access the browser's Document object – and this object is only available when the HTML document is fully loaded. TWebBrowser triggers an OnDocumentComplete event when the document has finished loading. Therefore we handle that event and enable the combo box:

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
  { Document loaded: enable combo box }
begin
  ComboBox1.Enabled := True;
end;

Listing 4

We now come to the code that actually calls the JavaScript function. When the user selects a new font the combo box triggers its OnChange event. We handle this event by calling the JavaScript SetFont() function with the name of the selected font, as follows:

procedure TForm1.ComboBox1Change(Sender: TObject);
  { Make browser use selected font }
var
  Doc: IHTMLDocument2;      // current HTML document
  HTMLWindow: IHTMLWindow2; // parent window of current HTML document
  JSFn: string;             // stores JavaScipt function call
begin 
  // Get reference to current document
  Doc := WebBrowser1.Document as IHTMLDocument2;
  if not Assigned(Doc) then
    Exit;
  // Get parent window of current document
  HTMLWindow := Doc.parentWindow;
  if not Assigned(HTMLWindow) then
    Exit;
  // Run JavaScript
  try
    JSFn := 'SetFont(''' + ComboBox1.Text + ''')';
    HTMLWindow.execScript(JSFn, 'JavaScript');
  except
    // handle exception in case JavaScript fails to run
    ShowMessage('Error running JavaScript');
  end;
end;

Listing 5

This method is very similar to that described in the previous section. SetFont() is called with the name of the font selected in the combo box. If an exception is raised when the JavaScript is called we display a message.

We have now developed all the code. All that remains is to add the following uses clause to the implementation section of the unit to enable the program to compile:

uses
  SysUtils, MSHTML, Dialogs;

Listing 6

Demo code

The source code on the code study is available for download. The code was developed using Delphi 7 Professional.

This article is copyright © Peter D Johnson 2002-2007

Licensed under a Creative Commons LicenseOffsite icon.

 

How to call JavaScript functions in a TWebBrowser from Delphi

- 阅读全文 -

How to Execute a JavaScript Code on a TWebBrowser Document

The TWebBrowser Delphi control provides access to the Web browser functionality from your Delphi applications.

Here's how to execute a custom script (JavaScript or VBScript) function on a HTML document loaded in the TWebBrowser control:

uses MSHTML_TLB, SHDocVw;
procedure ExecuteScript(doc: IHTMLDocument2; script: string; language: string) ;
begin
if doc <> nil then
begin
     if doc.parentWindow <> nil then
       doc.parentWindow.ExecScript(script, Olevariant(language)) ;
end;
end;

Usage (in some Button OnClick event handler, for example):

var
   script : string;
begin
//locate the first element with ID attribute = "main" and show its tag
   script := 'var elemMain = document.getElementById("main") ; if (elemMain != null) { alert(elemMain.tagName) ; }';
   ExecuteScript(EmbeddedWB1.Document as IHTMLDocument2, script, 'javascript')
end;

Note: More TWebBrowser Tips'n'Tricks!

- 阅读全文 -

eMule 0.48a NeoMule v4.50 Final 多国语言版

NeoMule,作者为德国人David Xanatos,适用于所有eMule用户,特别是上传者与LowID用户.此Mod有着最详细的设置内容和许多有用的辅助功能,包括Voodoo等特有功能.同时也支持NAT Traversal、UPnP,造福内网用户.对上传、下载文件的细节处理也比较人性化,提供了多种设置.除此之外屏蔽吸血骡的Argos功能也是所有 Mod中最完善的.

eMule 0.48a NeoMule v4.50 Final 多国语言版

del.icio.us 标记: ,

- 阅读全文 -

[媒体播放]Spider Player v2.104

Spider是一个免费且小巧易用的音乐播放器。支持抓取CD单轨和音频格式转换。它具备与Winamp类似的音频均衡器,也支持ID3和WMA标签编辑,歌词编辑等等。

    内置简、繁中文等多语系界面支持。

Spider Player的一些主要特点:

·超高品质的低音部展现

·支持Unicode

·支持ID3 v1-v2和WMA meta的编辑

·抓取CD音轨,并输出为MP3/WMAOGG或WAV格式

·歌词编辑器

·支持Internet流媒体,比如电台等的播放

·内置音效

·多语系界面

·支持自定义皮肤和不同格式音频文件的图标显示

·支持自定义示波器效果

·m3u播放列表

·体积小,完全免费,不含任何插件

image

del.icio.us 标记:

[媒体播放]Spider Player v2.104

- 阅读全文 -

热门文章

最新文章

最近回复

  • wfzlxvvgte: 你的文章让我感受到了不一样的风景,谢谢分享。 http://ww...
  • sfiutfecff: 你的文章内容非常用心,让人感动。 http://www.55ba...
  • dyqoaaqpdc: 你的文章内容非常卖力,让人点赞。 http://www.55ba...
  • vrfedcneqp: 你的文章内容非常卖力,让人点赞。 http://www.55ba...
  • wmhoubuazg: 你的文章内容非常用心,让人感动。 http://www.55ba...
  • khhhttrppu: 你的文章内容非常卖力,让人点赞。 http://www.55ba...
  • atjzyxiutr: 你的文章内容非常用心,让人感动。 http://www.55ba...
  • dlamzmkwwi: 你的文章内容非常卖力,让人点赞。 http://www.55ba...
  • predcxvhsz: 《蛋黄人》国产剧高清在线免费观看:https://www.jgz...
  • qmffcradmz: 《逃狱者》剧情片高清在线免费观看:https://www.jgz...

分类

标签

其它