format Blog

给我个权限,我format你的硬盘.

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  49 随笔 :: 4 文章 :: 288 评论 :: 5 引用

2009年5月20日 #

.NETZ 
介绍:是一个开源的支持.NET程序压缩的工具,它也可以将一个EXE和多个DLL合并在一起执行,有一定的混淆作用。详细介绍
官方网站:http://madebits.com/netz/index.php

Resource Hacker

介绍:PE文件资源修改器
官方网站:http://angusj.com/resourcehacker/

 

posted @ 2009-05-20 13:22 format 阅读(124) | 评论 (0)编辑

2009年3月30日 #

在页面的ViewState中存一个是否显示的状态变量:
protected virtual bool IsDisplay
{
     
get

     {
        
return ViewState["IsDisplay"== null ? false :
             (
bool)ViewState["IsDisplay"
];
     }

     
set

     {
         ViewState[
"IsDisplay"= value;
     }
}

然后在Page_Load或者重写的OnPageLoad方法中每次调用:
 if (this.IsDisplay)
        
this
.extMode.Show();
else

        
this.extMode.Hide();

这样处理以后,PostBack再次加载页面后,ModalPopup的层不会消失。
如果要关闭显示,那么得通过重新复制IsDisplay,刷新页面。
posted @ 2009-03-30 17:03 format 阅读(179) | 评论 (0)编辑

2009年3月23日 #

  <appSettings>
    
<add key="FCKeditor:BasePath" value="~/FCKeditor/" />
    
<!--引用的FCKeditor位置-->
    
<add key="FCKeditor:UserFilesPath" value="/uploads" />
    
<!--上传文件的位置,要手动新建-->
    
<add key="FCKeditor:UploadDeniedExtensions" value=".php|.php3|.php5|.phtml|.asp|.aspx|.ascx|.jsp|.cfm|.cfc|.pl|.bat|.exe|.dll|.reg|.cgi|.cs|.vb|.asa|.cer|c.dx|.ascx|.asax|.ashx|.asmx|.java|.jsl"/>
  
</appSettings>
posted @ 2009-03-23 10:35 format 阅读(95) | 评论 (0)编辑

2009年3月17日 #

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

A表
ID 姓名
1 张三
2 李四
3 王五
B表
ID 成绩
1 90
2 70
4 80

1.left join

sql语句如下:
select * from A left join B on A.aID = B.bID

结果:
aID 姓名 bID 成绩
1 张三 1 90
2 李四 2 70
3 王五 null Null
(所影响的行数为 3 行)
左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.

2.right join



sql语句如下:
select * from A right join B on A.aID = B.bID

结果:
aID 姓名 bID 成绩
1 张三 1 90
2 李四 2 70
NULL NULL 4 80

和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.

3.inner join


sql语句如下:
select * from A inner join B on A.aID = B.bID

结果:
aID 姓名 bID 成绩
1 张三 1 90
2 李四 2 70

这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.


总结:



语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2

说明:table1, table2参数用于指定要将记录组合的表的名称。
field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。

posted @ 2009-03-17 15:14 format 阅读(18) | 评论 (0)编辑

2008年9月2日 #

SilverLight 出于对安全性的考虑默认情况下对URL的访问进行了严格的限制,只允许访问同一子域下的URL资源。

下表列出了Silverlight 2.0 中 URL 访问规则:

  WebClient对象 Media、images、ASX XAML 文件、Font 文件 流媒体
允许的协议 HTTP, HTTPS HTTP, HTTPS, FILE HTTP, HTTPS, FILE HTTP
跨协议访问 不允许 不允许 不允许 不允许来自HTTPS的访问
跨Web域访问 不允许 如果不是来自HTTPS则允许 不允许 允许
跨安全区域访问(Windows) 不允许 不允许 不允许 不允许
跨安全区域访问(Macintosh) 不允许 允许 不允许 允许
允许重定向 同域允许 允许 同域允许 不允许

如果WCF与SilverLight Web不是在同一站点,那么我们就要在被访问端的根域放上两个XML文件clientaccesspolicy.xml,crossdomain.xml
如果要通过WebClinet访问另一站点的资源,那么需要在被访问站点放上域访问策略xml文件,不然在Complete事件里面的事件参数报告空对象引用。这个问题困扰我很久,现在终于解决,放上来与大家共享。

关于clientaccesspolicy.xml,crossdomain.xml的具体说明,请大家参看MSDN  http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx
posted @ 2008-09-02 17:48 format 阅读(354) | 评论 (1)编辑

2008年5月8日 #

最近在学习中文分词方面的技术。读到KTDictSeg 1.2组件的代码深受启发,作此笔记。
    在一切开始之前我们可以用正则表达式把文本中的一些特殊部分过滤出来,比如英文单词,一串数字,日期,Email,电话,邮编,尽可能的过滤,这样减少了实际进行分词的字符,而且准确性更高。
    个人想法:可以把所有拼音组合整理出来,用拼音来记录中文词语的组合,存到字典里,这样字典的尺寸就可以大幅减低。匹配时候把汉字转换为拼音进行匹配。
posted @ 2008-05-08 19:32 format 阅读(330) | 评论 (0)编辑

2007年8月14日 #

    前面一篇<ASP.NET 动态加载控件的问题 >提到过控件时间加载和注册时机的问题,另外还有就是PostBack的问题.除了以上两个问题还有一个控件ID的问题容易被我们忽视.
    在一个动态加载的控件中,又几个动态添加的Button要点击两次才会激发事件,但如果把这几动态添加的按钮直接到页面上而不是控件,那么一切又都正常,非常郁闷的问题,经过努力的探索之后发现给动态添加的按钮的ID属性赋值之后一起就正常了,如果不对ID赋值,那么ASP.NET会自动给控件分配一个ID,在两次PostBack的时候有可能分配不一样的ID值,这就导致按钮要点两下才会激发事件.所以我们在做动态控件时候不要偷懒,一定给ID指定一个值,否则这样的隐性错误实在折磨人.87d9a686

posted @ 2007-08-14 20:29 format 阅读(840) | 评论 (1)编辑

2007年7月24日 #

如果直接用Type.GetMethods()方法获得的只有public的方法.
如果要获得private或protected的方法需要这样:
 MemberInfo[] mi = 
     type.FindMembers(MemberTypes.Method, BindingFlags.Default
|BindingFlags.NonPublic | BindingFlags.Instance , nullnull);
注意FindMembers的第二个参数,是Flag,他们必须与 Public NonPublic 一起指定 Instance Static,否则将不返回成员。 
posted @ 2007-07-24 22:45 format 阅读(218) | 评论 (1)编辑

2007年7月11日 #

  • 加载控件需要选择特定的时机,否则会出现注册事件无效的情况.
    如果重写OnLoadComplete方法来加载控件,那么无论如何控件动态注册的事件都是无法触发的.这个问题费了很大周折才找到.
    protected override void OnLoadComplete(EventArgs e)
            {
                Button btn 
    = new
     Button();
                btn.ID 
    = "btn1"
    ;
                btn.Text 
    = "Click"
    ;
                btn.Click
    +=new
     EventHandler(btn_Click);
                
    base
    .OnLoadComplete(e);
            }

    在上面代码中注册的btn_Click方式是不会被触发的.个人觉得加载控件的最好时机是OnLoad的时候.
posted @ 2007-07-11 10:33 format 阅读(491) | 评论 (1)编辑

2007年1月4日 #

在Grid中要现实指定的列时候,不能去调属性:GenerateMember,如果设置成了false,那么编译都通不过。
发现可行的一个做法是:在Form_Load事件中设置Grid的AutoGenerateColumns为False。然后指定列就行了。

posted @ 2007-01-04 22:38 format 阅读(500) | 评论 (0)编辑

2006年11月27日 #

如果不进行处理那么在点按钮的时候就会又打开一个新窗口。
处理办法:
  1. 在<head>节中加入<base target="_self">;
  2. 在模态窗口中用一个IFrame,把显示的东西放到框架中。
posted @ 2006-11-27 17:44 format 阅读(298) | 评论 (0)编辑

2006年11月21日 #

比较奇怪的现象:
   在Web项目中"hibernate.connection.driver_class" 需要是
"NHibernate.Driver.OleDbDriver"否则运行就会出错。这个时候是不用用ActiveRecord建立Access数据库的表的。
   在WinForm项目中"hibernate.connection.driver_class" 就可以用JetDriver也可以用OleDbDriver,JetDriver可以建表,用OleDbDriver可以建表。
   为什么在Web项目中不可以用JetDriver现在还不明白,继续研究。
posted @ 2006-11-21 21:34 format 阅读(296) | 评论 (0)编辑

2006年10月25日 #

在ASP.NET Grid中编辑第一行Row,RowUpdating事件的时候,如果这样写:

 protected void grdCatalog_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            
this.grdCatalog.SelectedIndex = e.RowIndex;

            
int id = (int)this.grdCatalog.SelectedValue;
            Catalog ca 
= CatalogDataAccess.FindCatalogByID(id);

            ca.Name 
= (grdCatalog.Rows[e.RowIndex].Cells[1].Controls[0as TextBox).Text;
            ca.Comment 
= (grdCatalog.Rows[e.RowIndex].Cells[2].Controls[0as TextBox).Text;
            ca.Culture 
=
                (grdCatalog.Rows[e.RowIndex].Cells[
3].FindControl("drpCulture"as DropDownList).SelectedValue;

            ca.Update();

                
this.grdCatalog.EditIndex = -1;
               
 this.grdCatalog.DataSource = CatalogDataAccess.FindAll(this.PageIndex, pageSize);
                
this.grdCatalog.DataBind();
            
        }     
那么在DataBind()的时候就说报告一个类型不匹配的错误。如果编辑第一行以外的行都正常,就第一行不行。
经过反复跟踪调试,我发现如果这样以来好像第一行的对象内部的字段没有被ActiveRecord赋上值,所以出错。
现在我想了个笨办法把问题解决了,不知道有没有更好的办法。
方法的思路是这样的:在Update的时候SessionScope已经用过了,那么在获得DataSource的时候就再新用一个SessionScope。用下面这样的代码就解决问题了:
        protected void grdCatalog_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            
this.grdCatalog.SelectedIndex = e.RowIndex;

            
int id = (int)this.grdCatalog.SelectedValue;
            Catalog ca 
= CatalogDataAccess.FindCatalogByID(id);

            SessionScope scope 
= HttpContext.Current.Items["nh.sessionscope"as SessionScope;
            
            ca.Name 
= (grdCatalog.Rows[e.RowIndex].Cells[1].Controls[0as TextBox).Text;
            ca.Comment 
= (grdCatalog.Rows[e.RowIndex].Cells[2].Controls[0as TextBox).Text;
            ca.Culture 
=
                (grdCatalog.Rows[e.RowIndex].Cells[
3].FindControl("drpCulture"as DropDownList).SelectedValue;

            ca.Update();
            
if (scope != null)
            {
                scope.Dispose();
            }
             

            
using(scope =new SessionScope())
            {
                HttpContext.Current.Items.Remove(
"nh.sessionscope");
                HttpContext.Current.Items.Add(
"nh.sessionscope",scope);
                
this.grdCatalog.EditIndex = -1;
               
                
this.grdCatalog.DataSource = CatalogDataAccess.FindAll(this.PageIndex, pageSize);
                
this.grdCatalog.DataBind();
            }
        }   

代码中涉及一些在ASP.NET用使用ActiveRecord的方法和机制,请参看http://www.castleproject.com/
posted @ 2006-10-25 17:36 format 阅读(410) | 评论 (0)编辑

2006年7月26日 #

在处理CSV文件的时候发现,不能简单的用逗号来拆分内容,如果在双引号里面有逗号,那么这行将解析错误。最后找到个用正则表达式来splite的简单方面。原理就是用","来作为拆分的标记。

         /// <summary>
        
/// 把一个CSV文件读到一个DataTable中
        
/// </summary>
        
/// <param name="strpath">文件完整路径</param>
        
/// <returns>DataTable</returns>
        public static DataTable GetTable(string strpath)
        {
            Regex reg 
= new Regex("\",\"");
            
int intColCount = 0;
            DataTable mydt 
= new DataTable("myTableName");

            
//DataColumn mydc;
            
//DataRow mydr;

            
//string strpath = "";
            string strline;
            
string[] aryline;

            StreamReader mysr 
= new StreamReader(strpath,System.Text.Encoding.Default);
            strline 
= mysr.ReadLine();

            aryline 
= reg.Split(strline);

            intColCount 
= aryline.Length;
            
for (int i = 0; i < aryline.Length; i++)
            {
                DataColumn mydc 
= new DataColumn(aryline[i].Replace("\""""), typeof(string));
                mydt.Columns.Add(mydc);
            }
            
            
while ((strline = mysr.ReadLine()) != null)
            {
                aryline 
= reg.Split(strline);
                
                DataRow mydr 
= mydt.NewRow();
                
for (int i = 0; i < intColCount; i++)
                {
                    mydr[i] 
= aryline[i].Replace("\"","");
                }
                mydt.Rows.Add(mydr);
            }
            
return mydt;
        }
posted @ 2006-07-26 14:04 format 阅读(559) | 评论 (1)编辑

2006年7月25日 #

留意这个信息,现在,Windows Live Favourites可以用一个点击来把您的网站添加到用户的网络收藏夹中,并且可以通过多种渠道读取(例如Messenger)官方已经放出了一段简短的实现代码,下载一个图片链接好就可以做到.为什么不给自己的网站+一个呢?

1,首先,保存这个图片并上传到服务器或者引用.addtolive.png

2.在图片上做如下链接.

https://favorites.live.com/quickadd.aspx?url=http://your-url/&title=title-of-website

其中http://your-url/为您的网站地址;title-of-website为保存的标题

如果添加target=”_blank” 语句,访客再添加收藏夹的时候不会失去对您网站的访问视野.

3.Enjoy.

posted @ 2006-07-25 09:38 format 阅读(177) | 评论 (0)编辑

2006年7月24日 #

先收藏两个连接:
使用 C# 进行 Outlook 2003 编程的简介
Excel、Exchange 和 C#

步骤是这样的:
第一建立Application对象
   ApplicationClass outLookApp = new ApplicationClass();
第二建立相应的Outlook项的对象
   AppointmentItem newTask =
                (AppointmentItem)outLookApp.CreateItem(OlItemType.olAppointmentItem);
   这里是显示转化类型,如果是task那么类型就是 TaskItem。这一点困扰了我很久。
第三对Outlook对象赋值,保存
最后outLookApp.Quit();
posted @ 2006-07-24 17:46 format 阅读(548) | 评论 (0)编辑

2006年5月27日 #

费了很大周折,才找个这个LoveCherry - (原创)DataGrid动态添加模板列的一个例子
原来模版项,是新的一个实现ITemplate接口的类。这个接口的InstantiateIn方法就是控制添加哪些控件的。

在这个类定义完了后,把它的实例赋值给模版列的ItemTemplate属性。


 1 private class EditTemplate : ITemplate
 2     {
 3 
 4         #region ITemplate Members
 5 
 6         public void InstantiateIn(Control container)
 7         {
 8             Button btnEdit = new Button();
 9             btnEdit.CommandName = "EditUserInfo";
10             btnEdit.ID = "btnEdit";
11             btnEdit.Text = "编辑";
12             container.Controls.Add(btnEdit);
13         }
14 
15         #endregion
16     }

仔细思考下,这种处理模板方法妙,我们可以在模板类中进行复杂的控制和操作,然后透过一个接口方法把控件放到容器里面。
posted @ 2006-05-27 01:09 format 阅读(597) | 评论 (0)编辑

2006年5月18日 #

这类从图片生产ASCII字符组合的程序不算新鲜,之前就有很多类似的程序了,不过这个是完全用C#写的。代码拿下来可以好好的学习下用C#怎么处理图片,而且他的代码质量非常高,值得学习。

项目网站:http://sourceforge.net/projects/ascgen2


Cartoon5.jpg------〉ascii.GIF

posted @ 2006-05-18 17:16 format 阅读(596) | 评论 (0)编辑

2006年5月4日 #

遇到了这个问题。
就是CreateUserWizard这个控件,所此输入密码,都返回这样的错误提示:
“密码最短长度为 7,其中必须包含以下非字母数字字符: 1。”。
但是输入1,密码的长度大于7位以后,这个问题还是存在。为什么呢?


北方弓箭手找到了答案。

我也查MSDN找出了一个改变起验证规则的方法:

改边配置节的属性

1 <membership>
2       <providers>
3         <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />
4       </providers>
5 
6 </membership>
其中
minRequiredPasswordLength="7"  --密码最小长度
minRequiredNonalphanumericCharacters
="1"  --包含的非字母字符个数
passwordStrengthRegularExpression=""  --判断密码强度的正则表达式

修改他们就可以改变密码验证策略。
posted @ 2006-05-04 13:10 format 阅读(859) | 评论 (1)编辑

2006年3月23日 #

很久没有开发Web的东西了,磨一磨宝刀。

CSS语法

定义ID选择符要在ID名称前加上一个“#”号。和类选择符相同,定义ID选择符的属性也有两种方法。下面这个例子,ID属性将匹配所有id="intro"的元素:
#intro
{
font-size:110%;
font-weight:bold;
color:#0000ff;
background-color:transparent
}

下面这个例子,ID属性只匹配id="intro"的段落元素:
p#intro
{
font-size:110%;
font-weight:bold;
color:#0000ff;
background-color:transparent
}


伪类和类选择符

将伪类和类组合起来用,就可以在同一个页面中做几组不同的链接效果了,例如,我们定义一组链接为红色,访问后为蓝色;另一组为绿色,访问后为黄色:
a.red:link {color: #FF0000}
a.red:visited {color: #0000FF}
a.blue:link {color: #00FF00}
a.blue:visited {color: #FF00FF}
现在应用在不同的链接上:
<a class="red" href="...">这是第一组链接</a>
<a class="blue" href="...">这是第二组链接</a>


 


1. Type(类型)

Type面板主要是对文字的字体,大小,颜色,效果等基本样式进行设置。设置时,我们只对要改变的属性进行设置,没有必要改变的属性就空着。

注意:属性名带*号的是指样式效果不能在编辑文档时显示,要用浏览器打开才能看到效果。

Font:设置字体系列。什么叫字体系列呢?是指对文字设定几个字体,当遇到第一个字体不能显示的文字时会自动用系列中的第二个字体或后面的字体显示。相对应的CSS属性是”font-family”。

注意:Dreamweaver4已经内置设定了6个系列的英文字体,一般英文字体我们用“Verdana, Arial, Helvetica, sans-serif”这个系列比较好看。如果不用这些字体系列,你就需要自己编辑字体系列,你可以通过下拉框最下面的“Edit Font List”来创建新的字体系列,也可以直接手动在下拉框里写字体名,字体之间用逗号隔开。中文网页默认字体是宋体,一般就空着不要选取任何字体。

Size:定义文字的大小。你可以通过选取数字和度量单位来选择具体的字体大小,或者你也可以选择一个相对的字体大小。最好使用Pixels作为单位,这样不会在浏览器中文本变形。一般小字体用比较标准的12px。相对应的CSS属性是”font-size”。

注意:CSS中长度的单位分绝对长度单位和相对长度单位,一般我们常用的绝对长度单位有: px:(象素)根据显示器的分辨率来确定长度。

pt:(字号)根据windows系统定义的字号大小来确定长度。

mm、cn、in:(毫米、厘米、英寸)根据显示的实际尺寸来确定长度。此类单位不随显示器的分辨率改变而改变。

相对长度单位有:

em:当前文本的尺寸。例如:{ font-size:2em}是指文字大小为原来的2倍。

ex:当前字母“x”的高度,一般为字体尺寸的一半。

%:是以当前文本的百分比定义尺寸。例如:{ font-size:300%}是指文字大小为原来的3倍。

small、large:表示比当前小一个级别或大一个级别的尺寸。 Style:定义字体样式为Normal、Italic、或者Oblique。Italic和Oblique是斜体字体。默认设置为 Normal。相对应的CSS属性是”font-style”。

注意:Italic和Oblique都是斜体字体。而它们不同的是,Italic是斜体字,而Oblique是倾斜的文字,对于没有斜体的字体应该用Oblique。

Line Height:设置文本所在行的行高。默认为Normal,你也可以自己键入一个精确的数值并选取一个计量单位。比较直观的写法用百分比,例如140%是指行高等于文字大小的1.4倍。相对应的CSS属性是”line-height”。

Decoration:在文本中添加underline(下划线)、overline(上划线)、line-through(中划线)、blink(闪烁效果)。这些效果可以同时存在,将效果前的复选框选定即可。相对应的CSS属性是”text-decoration”。

注意:链接的默认设置是Underline,我们可以通过选none去除下划线。Blink(闪烁效果)只在NC浏览器里可以看到。

Weight:给字体指定粗体字的磅值。Normal等同于400;Bold等同于700。设粗体字一般用bold。相对应的CSS属性是”font-weight”。

Variant:允许你选取字体的变种,选small-caps(小型大写字母)时,此样式区域内所有字母大写。相对应的CSS属性是”font-variant”。

Case:将选区中每个单词的第一个字母转为大写,或者令单词全部大写或全部小写。参数:capitalize(单词首字母大写)、uppercase(转换成大写)、lowercase(转换成小写)、none(不转换)。相对应的CSS属性是” text-transform”。

Color:定义文字颜色。相对应的CSS属性是” color”。

注意:CSS中颜色的值有三种表示方法:

l #RRGGBB格式,是由红绿蓝三种颜色的值组合,每种颜色的值为“00 – FF”的两位十六进制正整数。例如:#FF0000表示红色,#FFFF00表示黄色。

l rgb(R,G,B)格式,RGB为三色的值,取0~255,例如:rgb(255,0,0)表示红色,rgb(255,255,0)表示黄色。

l 用颜色名称。CSS可以使用已经定义好的颜色名称。例如:red表示红色,yellow表示黄色。

2. Background(背景)

Background面板主要是对元素的背景进行设置,包括背景颜色、背景图象、背景图象的控制。一般是对BODY(页面)、TABLE(表格)、DIV(区域)的设置。

Background Color:设置元素的背景色。相对应的CSS属性是”background-color”。

Background Image:设置元素的背景图像。相对应的CSS属性是”background-image”。

Repeat:确定背景图像是否以及如何重复。No Repeat:在元素的开头显示一遍图像。Repeat:在元素的背景部分水平和垂直方向平铺图像。Repeat-x and Repeat-y:分别在水平和垂直方向重复显示,默认为Repeat。相对应的CSS属性是”background-repeat”。

注意:如果定义的元素的BODY,可以控制页面背景是否重复。

Attachment:固定背景图像或者跟随内容滚动。参数fixed表示固定背景,scroll表示跟随内容滚动的背景。相对应的CSS属性是”background-attachment”。

注意:如果定义的元素的BODY,可以使页面背景固定。

Horizontal:指定背景图像的水平位置。可以指定为left(左边),center(居中),right(右边);也可以指定数值,如20px是指背景距离左边20象素。相对应的CSS属性是” background-position”。

Vertical:指定背景图像的垂直位置。可以指定为top(顶部),center(居中),bottom(底部);也可以指定数值。相对应的CSS属性是” background-position”。

注意:水平位置和垂直位置使用的是同一个CSS属性,在设置时要注意。

3. Block(区块)

Block面板主要是设置对象文本的文字间距、对齐方式、上标、下标、排列方式、首行缩进等。

Word Spacing:设置单词之间的间距。可以设置负值。相对应的CSS属性是” word-spacing”。

注意:一般情况下IE不支持此属性,仅在MAC平台上的IE4+可用。

Letter Spacing:设置字符之间的间距。可以指定负值。因为中文也是字符,这个参数可以设置文字间的间距。相对应的CSS属性是” letter-spacing”。

Vertical Align:指定元素的垂直对齐方式。可以指定sub(下标)、super(上标)、top(与顶端对齐)、middle(居中)、bottom(与底端对齐)……。相对应的CSS属性是” vertical-align”。

Text Align:设置文本的排列方式。Left(左对齐)、right(右对齐)、center(居中)、justify(两端对齐)。相对应的CSS属性是”text-align”。

Text Indent:设置文本第一行的缩进值。负值用于将文本第一行向外拉。要在每段前空两格,可设置为2em,因为em是当前字体尺寸,2em就是两个字的大小。相对应的CSS属性是”text-indent”。

Whitespace:设置如何处理元素内的空白符。有三个选项可选:Normal 会将空白符全部压缩;Pre 则会如同处理 pre 标签内的文本一样处理这些空白符(也就是说,所有的空白符,包括空格,标签,回车,等都会得以保留);Nowrap 指定文本只有遇到 br 标签时才换行。相对应的CSS属性是”white-space”。
4. Box(盒子)

Box面板主要设置对象的边界、间距、高度、宽度、和漂浮方式等。

Width:定义元素的宽。相对应的CSS属性是”width”。

Height:定义元素的高。相对应的CSS属性是”height”。

注意:宽和高定义的对象多为图片,表格,层等。

Float:定义元素的漂浮方式。left 表示对象浮在左边、right表示对象浮在右边、none 表示对象不浮动。相对应的CSS属性是”float”。

Clear:不允许元素的漂浮。left表示不允许左边有浮动对象、right表示不允许右边有浮动对象、none表示允许两边都可以有浮动对象、both不允许有浮动对象。相对应的CSS属性是”clear”。

Padding:定义元素内容与其边框的空距(如果元素没有边框就是指页边的空白)。可以分别设置top(上补白)、right(右补白)、bottom(下补白)、left(左补白)的值。相对应的CSS属性分别是”padding; padding-top; padding-right; padding-bottom; padding-left”。

Margin:定义元素的边框与其他元素之间的距离(如果没有边框就是指内容之间的距离)。可以分别设置top(上边界)、right(右边界)、bottom(下边界)、left(左边界)的值。相对应的CSS属性分别是”margin; margin-top; margin-right; margin-bottom; margin-left”。

下面是补白、边框、边界之间的关系图:

5. Border(边框)

Border面板可以设置对象边框的宽度、颜色及样式。

Width:设置元素边的宽度。可以分别设定Top(上边宽)、Right(右边宽)、Bottom(下边宽)、Left(左边宽)的值。相对应的CSS属性分别是”border; border-top; border-right; border-bottom; border-left”。

Color:设置边框的颜色。你可以分别对每条边设置颜色。相对应的CSS属性分别是”border-color; border-top-color; border-right-color; border-bottom-color; border-left-color”。

注意:我们可以通过设置不同的颜色做出亮边和暗边的效果,这样元素看起来是立体的。

Style:设置边框样式。可以设置为none(无边框)、dotted(点线)、dashed(虚线)、solid(实线)、double(双线)、groove(凹槽)、ridge(凸槽)、inset(凹边)、outset(凸边)等边框样式。相对应的CSS属性是”border-style”。

注意:dotted(点线)、dashed(虚线)必须要IE5.5以上或者MAC平台支持,否则效果为实线。

6. List(列表)

List面板可以设置列表项样式、列表项图片、和位置。

Type:设置列表项所使用的预设标记。可以设置的样式有:disc(实心圆)、circle(空心圆)、square(方块)、decimal(阿拉伯数字)、lower-roman(小写罗马数字)、upper-roman(大写罗马数字)、lower-alpha(小写英文字母)、upper-alpha(大写英文字母)、none(无项目符号)。相对应的CSS属性是”list-style-type”。

Bullet Image:设置列表项的图像。值为图象的URL地址或路径。 相对应的CSS属性是”list-style-image”。

Position:设置列表项在文本内还是在文本外。Inside:列表项目标记放置在文本以内,Outside:列表项目标记放置在文本以外。相对应的CSS属性是”list-style-position”。

7. Positioning(定位)

Positioning面板就相当于对象放在一个层里来定位,它相当于HTML的DIV标记。你可以把定义看作为一个CSS定义的层。

Type:设定对象的定位方式。有三种方式:Absolute(绝对定位)、Relative(相对定位)、Static(无特殊定位)。相对应的CSS属性是”position”。

Visibility:设定对象定位层的最初显示状态。有三种状态:Inherit(继承父层的显示属性)、Visible(对象可视)、Hidden隐藏对象。相对应的CSS属性是”visibility”。

Z-Index:设置对象的层叠顺序。编号较大的层会显示在编号较小的层上边。变量值可以是正值也可以是负值。相对应的CSS属性是”z-index”。

Overflow:设置如果层的内容超出了层的大小时如何处理。有四种处理方式:visible,增加层的大小,从而将层的所有内容显示出来;hidden,保持层的大小不变,将超出层的内容剪裁掉;Scroll,总是显示滚动条;Auto,只有在内容超出层的边界时才显示滚动条。相对应的CSS属性是”overflow”。

Placement:设置对象定位层的位置和大小。可以分别设置left(左边定位)、top(顶部定位)、width(宽)、height(高)。相对应的CSS属性分别是”left; top; width; height”。

Clip:定义定位层的可视区域。区域外的部分为不可视区,为透明的。可以理解为在定位层上放一个矩形遮罩的效果。相对应的CSS属性是”clip”。

注意:此参数只要在绝对定位时有效。

注意:当Type里设定了绝对定位后,会为对象加上一个绝对定位的层。这个CSS创建的层同一般的层一样有属性面板,也显示在层管理面板中。你可以通过设置这个定位层的属性面板修改上述参数,不过在此属性面板里改动的值会作为内嵌样式加在对象标记后面,下图是定位层的属性面板:

8. Extensions(扩展)

Pagebreak:在打印的时候强迫在样式控制的对象前后换页。

Before:设置对象前出现的页分割符。设置为always时,始终在对象之前插入页分割符。相对应的CSS属性是”page-break-before”。

After:设置对象后出现的页分割符。设置为always时,始终在对象之后插入页分割符。相对应的CSS属性是”'>。

注意:以上IE5仅支持always值和空白值(null)。

Cursor:当鼠标滑过样式控制的对象时改变鼠标形状。可以设置为hand(手型)、crosshair(“十”型)、text (“I”型)、wait(等待)、default(默认)、help(帮助)、e-resize(东箭头)、ne-resize(东北箭头)、n-resize(北箭头)、nw-resize(西北箭头)、w-resize(西箭头)、sw-resize(西南箭头)、s-resize(南箭头)、se-resize(东南箭头)和auto(自动)。

Filter:在样式中加上滤镜特效。由于此属性内容比较多,我们将到下一章单独对滤镜介绍。

二、 滤镜

CSS提供了一些内置的多媒体滤镜特效,使用这种技术可以把可视化的滤镜和转换效果添加到一个标准的HTML元素上,例如图片、文本容器、以及其他一些对象。Dreamweaver4提供了16种滤镜可供选择,如下图:

下面,我们就来看看在Dreamweaver4里如何方便的使用这些CSS滤镜。

建立一个自定义样式“.filter”,在Filter下拉框里选Alpha滤镜,我们将“Alpha(Opacity=?, FinishOpacity=?, Style=?, StartX=?, StartY=?, FinishX=?, FinishY=?)”的Opacity参数设为50,后面的参数都删掉,如下图:

按OK后就建立了一个“.filter”的自定义样式,我们把这个样式应用到图片上,图片就是半透明的了。如果把这个样式应用到表格上,表格也变成了半透明状态了。注意所有滤镜效果都要在浏览器里才能看到。下面是原码:

<style type="text/css">

<!--

.filter { filter: Alpha(Opacity=50)}

-->

</style>

注意:这个例子我们没有用到后面的几项参数,只用到Opacity参数,所以将其他参数删掉。

下面我们来讲解每个滤镜的效果和参数:

1. Alpha:设置透明度

Alpha(Opacity=?, FinishOpacity=?, Style=?, StartX=?, StartY=?, FinishX=?, FinishY=?)

Opacity:透明度级别,范围是0-100,0代表完全透明,100代表完全不透明。

FinishOpacity:设置渐变的透明效果时,用来指定结束时的透明度,范围也是0 到 100。

Style:设置渐变透明的样式,值为0代表统一形状、1代表线形、2代表放射状、3代表长方形。

StartX和StartY:代表渐变透明效果的开始X和Y坐标。

FinishX和FinishY:代表渐变透明效果结束X和Y 的坐标。

2. BlendTrans:图像之间的淡入和淡出的效果

BlendTrans(Duration=?)

Duration:淡入或淡出的时间。

注意:这个滤镜必须配合JS建立图片序列,才能做出图片间效果。

3. Blru:建立模糊效果

Blur(Add=?, Direction=?, Strength=?)

Add:是否单方向模糊,此参数是一个布尔值,true(非0)或false(0)。

Direction:设置模糊的方向,其中0度代表垂直向上,然后每45度为一个单位。

Strength:代表模糊的象素值。

4. Chroma:把指定的颜色设置为透明

Chroma(Color=?)

Color:是指要设置为透明的颜色。

5. DropShadow:建立阴影效果

DropShadow(Color=?, OffX=?, OffY=?, Positive=?)

Color:指定阴影的颜色。

OffX:指定阴影相对于元素在水平方向偏移量,整数。

OffY:指定阴影相对于元素在垂直方向偏移量,整数。

Positive:是一个布尔值,值为true(非0)时,表示为建立外阴影;为false(0),表示为建立内阴影。

6. FlipH:将元素水平反转

7. FlipV:将元素垂直反转

8. Glow:建立外发光效效果

Glow(Color=?, Strength=?)

Color:是指定发光的颜色。

Strength:光的强度,可以是1到255之间的任何整数,数字越大,发光的范围就越大。

9. Gray:去掉图像的色彩,显示为黑白图象

10. Invert:反转图象的颜色,产生类似底片的效果

11. Light:放置光源的效果,可以用来模拟光源在物体上的投影效果

注意:此效果需要用JS设置光的位置和强度。

12. Mask:建立透明遮罩

Mask(Color=?)

Color:设置底色,让对象遮住底色的部分透明。

13. RevealTrans:建立切换效果

RevealTrans(Duration=?, Transition=?)

Duration:是切换时间,以秒为单位。

Transtition:是切换方式,可设置为从0到23。

注意:如果做页面间的切换效果,可以在<head>区加上一行代码:<Meta http-equiv=Page-enter content=revealTrans(Transition=?,Duration=?) >。如果用在页面里的元素必须配合JS使用。

14. Shadow:建立另一种阴影效果

Shadow(Color=?, Direction=?)

Color:是指阴影的颜色。

Direction:是设置投影的方向,0度代表垂直向上,然后每45度为一个单位。

15. Wave:波纹效果

Wave(Add=?, Freq=?, LightStrength=?, Phase=?, Strength=?)

Add:表示是否显示原对象,0表示不显示,非0表示要显示原对象。

Freq:设置波动的个数。

LightStrength:设置波浪效果的光照强度,从0到100。0表示最弱,100表示最强。

Phase:波浪的起始相角。从0到100的百分数值。(例如:25相当于90度,而50相当于180度。)

Strength:设置波浪摇摆的幅度。

16. Xray:显现图片的轮廓,X光片效果

注意:在使用CSS滤镜时,必须使用在有区域的元素,比如表格,图片等。而文本,段落这样没有区域的元素不能使用CSS滤镜,对这样的元素我们可以设置元素的Height和Width样式或坐标来实现。

看下面这个例子,我们对一行文字做阴影效果(dropshadow),新建自定义样式.shadow,在filter下拉框里选择“DropShadow(Color=?, OffX=?, OffY=?, Positive=?)”,我们设置为“DropShadow(Color=999999, OffX=2, OffY=2, Positive=1)”。然后把定义好的样式应用在页面中,我们发现在表格里的文字有了阴影,而段落里的文字却没有阴影。点CSS Styles面板里的编辑样式表按钮,给样式加上Hight属性:

为了不影响原来对象的高度,我们设置的高度不能超过字体本身的高度。OK后,在浏览器中可以看到段落里的文字也有阴影了。

posted @ 2006-03-23 21:47 format 阅读(1033) | 评论 (1)编辑

2006年3月6日 #

         这个解析器只是作为个人爱好去研究,陆陆续续的投入精力,持续了很长时间,这期间发生了很多的事情。我在上海落脚很长时间后才又继续开发,并把项目命名为Wittiness。
         项目的目的:构建一个Web信息挖掘机,能够高效方便的从网页中截取到需要的信息。
         构建思路是:解析HTML标记   -->  构建层次对象 -->  查询获取承载了需要信息的对象 -->  按对象层次输出结果
         其中难度比较大的就是解析标记和查询获取对象。解析标记我用过了正则表达式,字符串判断,SgmlReader,最好觉得SgmlReader用起来简单,效率也高。查询获取对象,目前实现的主要方法是以表为单位,按索引数来获得,这一块花的时间也比较少。
        新的想法:把HTML拆开读取为string[] 单位为一个HTML标记,用两个数组指针来确定要截取的部分,以个从头开始检索,一个从尾开始检索,这样能很好的解决标记配对的问题。在构造对象层次结构时候也只用数组指针,我想这样应该能提供效率和节约内存。再往后,可以把这个方法改进为流式处理,那么在读取大文件的时候效率就更高了。
         如果能有一个GUI的界面来让用户选择需要截取的内容,那么操作就更加方便了,不知道,象DreamWeaver这样的编辑器是怎么样开发的。
posted @ 2006-03-06 13:39 format 阅读(2451) | 评论 (17)编辑

2005年12月6日 #

MagicAjax.NET

     这是一个全新的开放源代码Ajax框架,比我用过的Ajax.NET要方便很多很多,不但需要学习的东西少,而且加入ajax技术后,你的网站甚至可以不用编译,只需要修改aspx文件就可以。这一切让我惊喜不已,所有赶快拿出来和大家分享。MagicAjax.NET支持.NET1.1和2.0,但是目前我下载到的源代码是需要.NET 2.0。

      MagicAjax.NET方便之处在于:他提供一个AjaxPanel的容器控件,需要无刷新更新的部分(控件,HTML代码...)放到这个Panel里面就可以; MagicAjax.NET也不需要在程序后台代码中添加什么东西,而且web.config的配置也不复杂。


      我做了个简单的测试程序。用Google的广告来看是否整个页面刷新。
       在页面上拖放一个AjaxPanel控件,然后把Botton和Label控件放到里面。如果把Botton放到Panel外面,那么会整页刷新。
      design.JPG
Botton控件的事件代码是:

1private void btnTime_Click(object sender, System.EventArgs e)
2        {
3            this.lblTime.Text=DateTime.Now.ToString();
4        }

最后的效果:
after.JPG

效果非常好!使用很方便。

后面给大家一个最基本的web.config配置文件。如果在.NET 1.1下,那么必须要有这个,然而程序无法找到嵌入其中的js资源。

 1<configuration>
 2    <configSections>
 3        <section name="magicAjax" 
 4                type="MagicAjax.Configuration.MagicAjaxSectionHandler, MagicAjax"/>
 5    </configSections>
 6    
 7    <magicAjax
 8        outputCompareMode="HashCode"
 9        tracing="false">
10        <pageStore
11            mode="NoStore"
12            unloadStoredPage="false"
13            cacheTimeout="5"
14            maxConcurrentPages="5"
15            maxPagesLimitAlert="false"
16        />
17    </magicAjax>
18 <system.web>
19  <httpModules>
20             <add name="MagicAjax" type="MagicAjax.MagicAjaxModule, MagicAjax" /> 
21     </httpModules>
22
23 </system.web>
24
25</configuration>


      大家赶快去他们网站下载。
http://www.magicajax.net/

posted @ 2005-12-06 17:07 format 阅读(5858) | 评论 (26)编辑

2005年9月22日 #

      现在很多技术闹的我们是春意红杏的,一个项目中我们总希望加入新的技术,这就需要时间,而且才接触经验不多,最后项目不但延期而且写出的东西不稳定,进入了一个恶性循环。
       从我参与的几个项目来看都存在以上这些问题,而且在需求阶段做的不好,后面又没有严格的文档和管理,在编码阶段搞的是一团乱,软件范围不断扩大偏离核心,等缓过神来感觉是四面楚歌。
 我认为项目在需求完成之后就要确定一个主线,后面的工作都必须和主线有关并且不冲突再配合上强有力的行政手段保证实施到位。同时设定里程碑也是相当重要,如果一个项目规模大,没有历程碑,那会使每一个人都感觉到疲惫,合理的设置里程碑可以团队随时都充满活力。
       比如说一个网站项目,如果我们在需求和重点都没有理出来的时候就开始讨论网站的栏目、布局、色彩,这肯定是在浪费时间,如果继续下去项目多半要失败或者偏离初衷。
       如果是一个软件项目,需求的不断变化,软件左改右改,最后偏离核心需求,软件的进度非常慢,而且赶时间修补出来的代码都是废的。
       不论是网站或者软件,我们都要抓住主线,确定范围,不符合主线的想法首先就可以抛弃然,不用去想半天浪费时间。想法成熟确定后,就是什么RUP,XP过程了。

      很久都没有Blog了,这是我到上海后的第一篇正式Blog,这就算我发点牢骚,过过口瘾,感慨下大上海这个林子里瞎搞混日子的傻鸟们。

posted @ 2005-09-22 17:43 format 阅读(323) | 评论 (0)编辑

2005年4月1日 #

        DB4O.NETMONOJave本,全部用托管代码写成并且开放源代码。如果关注Mono的朋友应该注意到Mono中已经有个可选安装组件DB4O。可以从他们的网站http://www.db4o.com/下载源代码。

点击阅读全部内容 
posted @ 2005-04-01 08:37 format 阅读(1002) | 评论 (0)编辑

2004年12月7日 #

        今天已经是有做HTML解析器的想法好几天了,一开始是一个朋友要我帮忙处理下从网页上的表格中获取信息,然后分项保存到数据库中,实现数据本地化。一开始就打算好好做一个,以后也可以通用,经过一个多星期的资料收集和试验,现在分析器的雏形已经出来了。
        在一开始的时候打算直接用.NET中字符处理的方法来做,但过于复杂和麻烦,而且效率不高;然后有想到把HTML当做XML用XML相关的类来解析,但HTML的语法比较松散;还试过SgmlReader,这个东西的解析也不够满意。最后觉得用正则表达式来做(我学习了5天,已经深入到自动机的理论),选用的原因:
           一、 效率高;
            二、 容错性好。应为HTML没有XML那样严格的语法规范,HTML要松散些。
        但正则表达式有个缺点,如果要匹配最近的<td></td>正则表达式要相当复杂,而且我也没有研究出来。我的解决办法是象Table用Match匹配出文字,然后用Match的index获得匹配的位置,再用SubString方法取得值字符串。效果还不错哦。

        现在遇到的问题:如果Table中包含Table那么对TR的分解将出来错误。

posted @ 2004-12-07 18:53 format 阅读(3735) | 评论 (13)编辑