2004年12月21日

本文转载网上

          在blog中显示天气预报、日历、时钟、MSN、QQ在线状态

                    作者game.19xz 来源19xz.com

<!– 时钟clock_035.swf 的035为时钟样式,可自己选择 –>
 <EMBED SRC=http://www.butabon.com/Clock/clock_035.swf WIDTH=150 HEIGHT=150 wmode=transparent quality=high loop=true menu=false>

<!– Blog日历表开始 –>
<script language=”javascript”>
var diarydays=”<2004-08-05><2004-08-09><2004-08-12><2004-08-17><2004-08-19><2004-07-14><2004-07-13><2004-07-08><2004-07-05><2004-07-04><2004-07-03><2004-06-27><2004-06-26><2004-06-25>”;
</script>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″>
<style>
.calendarBigBorder { font-family: “Arial”, “Helvetica”, “sans-serif”, “宋体”; text-decoration: none; width: 170; background-color: #FFFFFF; font-size: 9pt;border:1px dotted #999; }
.calendarTd { font-family: “Arial”, “Helvetica”, “sans-serif”, “宋体”; font-size: 9pt; color: #000000; background-color: #eeeeee; height: 18px; width: 11%; text-align: center;}
.calendarMInput { font-family: “Arial”, “Helvetica”, “sans-serif”, “宋体”; font-size: 9pt; text-decoration: none; background-color: #FFFFFF; height: 15px; border: 1px solid #666666; width: 19px; color: #0099FF;}
.calendarYInput { font-family: “Arial”, “Helvetica”, “sans-serif”, “宋体”; font-size: 9pt; color: #0099FF; text-decoration: none; background-color: #FFFFFF; height: 15px; width: 34px; border: 1px solid #666666;}
.calendarMonthTitle { font-family: “Arial”, “Helvetica”, “sans-serif”, “宋体”; font-size: 9pt; font-weight: normal; height: 24px; text-align: center; color: #333333; text-decoration: none; background-color: #eeeeee; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-bottom-style: none; border-top-color: #999999; border-right-color: #999999; border-bottom-color: #999999; border-left-color: #999999;}
.calendarNow { font-family: “Arial”, “Helvetica”, “sans-serif”, “宋体”; font-size: 9pt; font-weight: bold; color: #000000; background-color: #C0C9D3; height: 18px; text-align: center;}
.calendarDaySat { font-family: “Arial”, “Helvetica”, “sans-serif”, “宋体”; font-size: 9pt; color: #333333; text-decoration: none; background-color: #eeeeee; text-align: center; height: 18px; width: 12%;}
.calendarDaySun { font-family: “Arial”, “Helvetica”, “sans-serif”, “宋体”; font-size: 9pt; color: #333333; text-decoration: none; background-color: #eeeeee; text-align: center; height: 18px; width: 12%;}
.calendarLink { font-family: “Arial”, “Helvetica”, “sans-serif”, “宋体”; font-size: 9pt; font-weight: normal; color: #333333; text-decoration: none; background-color: #E7E7F6; text-align: center; height: 18px;}
.categoryTxt { font-family: “Arial”, “Helvetica”, “sans-serif”, “宋体”; font-size: 9pt; line-height: 23px; color: #333333; text-decoration: none;}
.categoryTable { border-right-width: 1px; border-bottom-width: 1px; border-right-style: solid; border-bottom-style: solid; border-left-style: none; border-right-color: #000000; border-bottom-color: #000000; border-top-width: 1px; border-top-style: solid; border-top-color: #71b99c;}
</style>
<SCRIPT LANGUAGE=”JavaScript”>
var months = new Array(“一”, “二”, “三”,”四”, “五”, “六”, “七”, “八”, “九”,”十”, “十一”, “十二”);
var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30, 31);
var days = new Array(“日”,”一”, “二”, “三”,”四”, “五”, “六”);
var classTemp;
var calendarHover=”calendarHover”;
var today=new getToday();
var year=today.year;
var month=today.month;
var newCal;
//得到某月天数
function getDays(month, year)
{ if (1 == month)
     return ((0 == year % 4) && (0 != (year % 100))) ||(0 == year % 400) ? 29 : 28;
  else
     return daysInMonth[month];
}
//得到当天时间信息
function getToday()
{  this.now = new Date();
   this.year = this.now.getFullYear();
   this.month = this.now.getMonth();
   this.day = this.now.getDate();
}
//生成日历
function Calendar()
{  newCal = new Date(year,month,1); //当前月的第一天
   today = new getToday();  
   var day = -1;   //用来判断日历中是否为当天
   var startDay = newCal.getDay(); //当月开始时间
   var endDay=getDays(newCal.getMonth(), newCal.getFullYear());//当月结束时间
   var daily = 0;   //用来生成日历中的天数值
   if ((today.year == newCal.getFullYear()) &&(today.month == newCal.getMonth()))
      day = today.day;
   var caltable = document.all.caltable.tBodies.calendar;  //得到日历表格的集合
   var intDaysInMonth =getDays(newCal.getMonth(), newCal.getFullYear()); //得到当月天数
   //生成日历
   for (var intWeek = 0; intWeek < caltable.rows.length;intWeek++)
     for (var intDay = 0;intDay < caltable.rows[intWeek].cells.length;intDay++)
     {
      var cell = caltable.rows[intWeek].cells[intDay];   //得到单元袼
   //生成字符串用于判断当天是否有日志
      var montemp=(newCal.getMonth()+1)<10?(“0″+(newCal.getMonth()+1)):(newCal.getMonth()+1);        
      if ((intDay == startDay) && (0 == daily)){ daily = 1;}
      var daytemp=daily<10?(“0″+daily):(daily);
      var d=”<”+newCal.getFullYear()+”-”+montemp+”-”+daytemp+”>”;
   //选择样式
      if(day==daily)
      cell.className=”calendarNow”;
      else if(diarydays.indexOf(d)!=-1)
         cell.className=”calendarLink”;
      else if(intDay==6)
      cell.className = “calendarDaySat”;
      else if (intDay==0)
      cell.className =”calendarDaySun”;
      else
      cell.className=”calendarTd”;
   //生成值
      if ((daily > 0) && (daily <= intDaysInMonth)) 
      {  cell.innerText = daily;
         daily++;
      }
      else
        cell.innerText = “”;
    }
  document.all.year.value=year;
  document.all.month.value=month+1;
}

function subMonth()
{
  if ((month-1)<0)
  {
     month=11;
  year=year-1;
  }
  else
  {
    month=month-1;
  }
  Calendar();
}
function addMonth()
{
  if((month+1)>11)
  {
    month=0;
    year=year+1;
  }
  else
  {
    month=month+1;
  }
  Calendar();
}
//得到响应事件
function getDiary()
{
  var mon=(newCal.getMonth()+1)<10?(“0″+(newCal.getMonth()+1)):(newCal.getMonth()+1);
  var day=event.srcElement.innerText<10?(“0″+event.srcElement.innerText):(event.srcElement.innerText);
  var d=”<”+newCal.getFullYear()+”-”+mon+”-”+day+”>”;
  if (“TD” == event.srcElement.tagName)
  if ((“” != event.srcElement.innerText)&&(diarydays.indexOf(d)!=-1))
  {
   diary.location=”/foxmail/archive/”+newCal.getFullYear()+”/”+mon+”/”+day+”.aspx”;
   window.location.href = diary.location;
  }
}

function setDate()
{
  if (document.all.month.value<1||document.all.month.value>12)
  {
    alert(“月的有效范围在1-12之间!”);
 return;
  }
  year=Math.ceil(document.all.year.value);
  month=Math.ceil(document.all.month.value-1);
  Calendar();
}
</SCRIPT>
<table border=”0″ cellpadding=”0″ cellspacing=”1″ class=”calendarBigBorder” id=”caltable” width=”200″>
<thead>
     <tr align=”center” valign=”middle”>
    <td colspan=”7″ class=”calendarMonthTitle”>
   <input name=”year” type=”text” class=”calendarYInput” size=”3″ maxlength=”4″ onkeydown=”if (event.keyCode==13){setDate()}” onkeyup=”this.value=this.value.replace(/[^0-9]/g,”)”  onpaste=”this.value=this.value.replace(/[^0-9]/g,”)”>年
   <input name=”month” type=”text” class=”calendarMInput” size=”1″ maxlength=”2″ onkeydown=”if (event.keyCode==13){setDate()}” onkeyup=”this.value=this.value.replace(/[^0-9]/g,”)”  onpaste=”this.value=this.value.replace(/[^0-9]/g,”)”>月 [<a onClick="addMonth()" href="javascript:;">下月</a>] [<a  onClick="subMonth()" href="javascript:;">上月</a>]</td>
  </tr>
 <tr align=”center” valign=”middle”>
 <SCRIPT LANGUAGE=”JavaScript”> 
 document.write(“<TD class=calendarDaySun id=diary>” + days[0] + “</TD>”);
 for (var intLoop = 1; intLoop < days.length-1;
 intLoop++)
 document.write(“<TD class=calendarTd id=diary>” + days[intLoop] + “</TD>”);
 document.write(“<TD class=calendarDaySat id=diary>” + days[intLoop] + “</TD>”);
 </SCRIPT>
 </TR>
</thead>
  <TBODY border=1 cellspacing=”0″ cellpadding=”0″ ID=”calendar” ALIGN=CENTER ONCLICK=”getDiary()” onmouseup=document.selection.empty() oncontextmenu=”return false” onselectstart=”return false” ondragstart=”return false” onbeforecopy=”return false” oncopy=document.selection.empty() onselect=document.selection.empty()>
    <SCRIPT LANGUAGE=”JavaScript”>
  for (var intWeeks = 0; intWeeks < 6; intWeeks++) {
  document.write(“<TR style=’cursor:hand’>”);
  for (var intDays = 0; intDays < days.length;intDays++)
  document.write(“<TD class=calendarTd onMouseover=’{classTemp=this.className;this.className=calendarHover}’ onMouseOut=’this.className=classTemp’></TD>”);
  document.write(“</TR>”);
  }
 </SCRIPT>
  </tbody>
 </table>
<script  LANGUAGE=”JavaScript”>
Calendar();
</script>
<!– Blog日历表结束 –>

<!– 天气预报 注意这里涉及到编码问题,%B1%B1%BE%A9为城市代码,可用百度查一下,比如输入北京,地址栏中就会出现%B1%B1%BE%字样的内容–>
<center><iframe width=157 height=240 frameborder=0 scrolling=NO src=’http://appnews.qq.com/cgi-bin/news_qq_search?city=%B1%B1%BE%A9′></iframe></center>

<!– 显示msn在线状态,注意:必须在msn中设置允许所有人查看你的状态才有效,否则msn图标永远发灰 –>
<A HREF=”http://snind.gotdns.com:8080/message/msn/你的msn用户名”>
<IMG SRC=”http://snind.gotdns.com:8080/msn/你的msn用户名”
align=”absmiddle” border=”0″ ALT=”MSN Online Status Indicator”
onerror=”this.onerror=null;this.src=’http://snind.gotdns.com:8080/image/msnunknown.gif’;”>

<!– QQ在线状态显示 –>
</A><br>QQ:你的号码<img src=”http://icon.tencent.com/你的号码/l/612/”>


2004年10月12日

982的兄弟姐妹门,大家好!此贴是专为我班同学而设,有什么问题尽请留言!!

这是我的blogde的

在“选项”->“配置”的“静态新闻/声明”中加入下面的语句就可以了

<p><b>今日天气</b><br>
<center><iframe width=157 height=240 frameborder=0 scrolling=NO src=’http://appnews.qq.com/cgi-bin/news_qq_search?city=’></iframe></center>   

<DIV align=center>
<embed src=”http://bbs.smgbb.cn/Skins/Default/clock.swf” width=”150″ height=”150″ align=”middle” quality=”high” pluginspage=”http://www.macromedia.com/go/getflashplayer” type=”application/x-shockwave-flash” scale=”noborder” bgcolor=”#E4E8EF”></embed>
</DIV>

<DIV align=center>
<script src=”http://www.NewZGC.com/others/counter/counter.asp?username=zyf23&style=4″></script>
</DIV>

其他如下:

1、为你的 Blog 添加“天气预报”功能。   

在“选项”->“配置”的“静态新闻/声明”中加入下面的语句就可以了:
<p><b>今日天气</b><br>
<center><iframe width=157 height=240 frameborder=0 scrolling=NO src=’http://appnews.qq.com/cgi-bin/news_qq_search?city=’></iframe></center>

2、
给blog增加flash精美时钟

时钟申请:http://www.butabon.com/

刻度时钟:
<EMBED SRC=http://www.butabon.com/Clock/clock_038.swf WIDTH=150 HEIGHT=150 wmode=transparent quality=high loop=true menu=false>
其中的http://www.butabon.com/Clock/clock_038.swf是时钟的flash地址,可以在IE中预览,其中的038可以替换成000-039之间或者051-059之间的任何一个数字(全看个人喜好,呵呵)

数字时钟:

第一种风格:
<EMBED SRC=http://www.butabon.com/Clock/digiwide019.swf WIDTH=150 HEIGHT=15 wmode=transparent quality=high loop=true menu=false>
其中的http://www.butabon.com/Clock/digiwide019.swf同样是时钟的flash地址,可以在IE中预览,其中的019可以替换成000-019之间之间的任何一个数字(同样全看个人喜好,呵呵)

第二种风格:
<EMBED SRC=http://www.butabon.com/Clock/digital_019.swf WIDTH=150 HEIGHT=90 wmode=transparent quality=high loop=true menu=false>
其中的http://www.butabon.com/Clock/digital_019.swf同样是时钟的flash地址,可以在IE中预览,其中的019可以替换成000-019之间之间的任何一个你可以在IE中可以成功预览的数字(请自己测试)。

3、给BLOG加一个控制菜单展开和收缩的按扭 

在看文章的时候BLOG的菜单栏实在的太碍眼,我于是加了个按扭用来控制菜单的显示和隐藏。这可以用javascript来实现,但是CSDN BLOG是不允许在配置中直接加入javascript的,但是我们可以将javascript加入到一张图片onload事件里执行。看我的就是加到计数计的图片代码里了,效果看左上角。程序代码如下:

var div=document.createElement(’span’);
document.body.insertAdjacentElement(‘beforeEnd’,div);
div.style.cssText=’position:absolute;display:block;top:42;left:2;width:90;height:20;color:green;background:yellow;border:2 outset;cursor:hand;’;
div.innerText=’<<收回菜单’;
div.onclick=function()
{
var isHide=(rightmenu.style.display==’none’);
rightmenu.style.display=isHide?’block’:'none’;
div.innerText=isHide?’<<收回菜单’:'展开菜单>>’;
}

 

4、对BLOG皮肤的具体修改

我所选择的皮肤模式是AnotherEon001。以下是具体的自定义的CSS:
.headermaintitle{font-family:隶书;font-size:1cm;color:#000000;align:center}
.BlogStats{color:black;}
p.date span
{
 background-color : #e7e7e7;
}
.post
{
 border: 1px solid #CCCCCC;
 border-bottom-width: 2px;
 border-right-width: 2px;
 padding: 4px;
 margin-bottom: 28px;
 background-color: #dadada;
}
.post h2
{
 font-size: 14px;
 margin: 0px;
 margin-bottom: 4px;
 font-family:楷体_gb2312;
}
.post a
{
 color: #ff5500;
}
.post .postfoot
{
 margin: 0px;
 margin-top: 14px;
 color: #aa6666;
 border-top: 1px solid #DDDDDD;
 font-size: 0.8em;
 background-color: #c8c8c8;
}
#top
{
 background-color : #ffffff;
 height: 75px;
 vertical-align: middle;
 background-image:url(http://blog.csdn.nethttp://bolgimg.b0.upaiyun.com/images/blog_csdn_net/peterdoo/18050/o_yu.jpg);
 background-repeat:no-repeat;
 filter:alpha(opacity=80);
}
#sub
{
 text-align: right;
 background-color:#BBd4D9;
 color: #CCCCCC;
 font-size: 0.8em;
 padding: 4px;
}
#LeftCell
{
 width: 200px;
 vertical-align: top;
 background-color:#BBC3D9;
 filter:alpha(opacity=100,finishopacity=0,style=1);
}
.MainCell
{
 border-left: 1px solid #DDDDDD;
 border-bottom: 1px solid #DDDDDD;
 padding: 10px;
 background-color:#e7e7e7;
 vertical-align: top;
}

背景图片是上传到相册中的图片。

对左边的菜单区没有使用背景图片,只是使用filter:alpha(opacity=100,finishopacity=0,style=1);产生了过渡效果的背景色。其实没什么技术含量!

 

5、BLOG中显示你的MSN和QQ的状态

将以下代码粘贴到BLOG管理配置中’静态新闻’文本框中就可以了,保存页面,重新看看你的首页

MSN状态:

    <A HREF=”http://snind.gotdns.com:8080/message/msn/MSN帐号(xxx@hotmail.com)>
    <IMG SRC=”http://snind.gotdns.com:8080/msn/MSN帐号(xxx@hotmail.com)”
    align=”absmiddle” border=”0″ ALT=”MSN Online Status Indicator”
    onerror=”this.onerror=null;this.src=’http://snind.gotdns.com:8080/image/msnunknown.gif’;”></A>

    更多可去http://snind.gotdns.com:8080

QQ状态:

    <img src=”http://icon.tencent.com/你的QQ帐号/l/612/”>

    更多可去http://qqol.3322.org/

 

6、为你的Blog打造个性日历控件
日历控件是dotnet自带的控件之一,功能强大,在很多项目开发中都有用到,对于blog系统来说更是必不可少。纵是好玉也仍需雕琢,为了使它更美观实用,我们还需要对它进行二次开发。

第一步是外观设置,这个根据你的需要,只需对它的相关属性做一些调整即可。下图是我调整后的界面,属性设置如下:<asp:calendar id=”Calendar1″ CellPadding=”2″ Width=”160px” TitleStyle-BackColor=”#000000″ BorderColor=”#aaaaaa”
        DayHeaderStyle-BackColor=”#5e715e” OtherMonthDayStyle-ForeColor=”#cccccc” DayNameFormat=”Full”
        runat=”server” TitleStyle-ForeColor=”#ffffff” NextPrevStyle-ForeColor=”#ffffff” CellSpacing=”1″
        WeekendDayStyle-BackColor=”#eeeeee” DayHeaderStyle-ForeColor=”#ffffff” SelectionMode=”None”
        TodayDayStyle-BorderColor=”#5e715e” TodayDayStyle-BorderWidth=”1″ TodayDayStyle-Font-Bold=”true”
        TodayDayStyle-ForeColor=”#5e715e”>

第二步是对内部功能的调整,这个工作主要集中在以下两个事件的处理上。

PreRender:当服务器控件将要呈现给其包含的Page对象时发生。

DayRender:当为Calendar控件在控件层次结构中创建每一天时发生。

先定义三个整型变量和整型数组
  private int[] arrCurrentDays,arrPreDays,arrNextDays;   //三个变量分别是当前月,前一月,和下一个月
  private int intCurrentMonth,intPreMonth,intNextMonth;  //三个整型数组存放相对月份写有blog的日期
  protected System.Web.UI.WebControls.Calendar Calendar1;  //这个就是我们的日历控件了

     2. 下面我将分别给出这两个事件的源码,并在下面解释它实现的功能,如果你看不明白,可以先看下面的说明

PreRender
  private void Calendar1_PreRender(object sender, System.EventArgs e)
  {
   Thread threadCurrent = Thread.CurrentThread;
   CultureInfo ciNew = (CultureInfo)threadCurrent.CurrentCulture.Clone();
   ciNew.DateTimeFormat.DayNames = new string[]{“日”,”一”,”二”,”三”,”四”,”五”,”六”};
   ciNew.DateTimeFormat.FirstDayOfWeek = DayOfWeek.Sunday;
   threadCurrent.CurrentCulture = ciNew;
  }

以上代码改变了星期名称的显示。你只需改变字符数组的值就能改名称显示。

DayRender
private void Calendar1_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
  {
     //该控件在创建每一天时发生。
 
     CalendarDay d = ((DayRenderEventArgs)e).Day;
     TableCell c = ((DayRenderEventArgs)e).Cell;

     // 初始化当前月有Blog的日期数组
     if( intPreMonth == 0 )
     {
         intPreMonth = d.Date.Month;  // 注意:日历控件初始化时我们得到的第一个月并不是当前月,而是前一个月的月份
         intCurrentMonth = intPreMonth+1;
    if (intCurrentMonth>12)
              intCurrentMonth=1 ;
         intNextMonth = intCurrentMonth+1;
         if (intNextMonth >12)
              intNextMonth =1;
         arrPreDays = getArrayDay(d.Date.Year,intPreMonth); //得到前一个月有blog的日期数组
         arrCurrentDays = getArrayDay(d.Date.Year,intCurrentMonth) ;//得到当月有blog的日期数组
         arrNextDays = getArrayDay(d.Date.Year,intNextMonth) ;//得到下个月有blog的日期数组
   }
  
   int j=0;
if( d.Date.Month.Equals(intPreMonth) )
   {
      while( ! arrPreDays[j].Equals(0) )
      {
           if(d.Date.Day.Equals(arrPreDays[j]))
           {
                c.Controls.Clear();
                c.Controls.Add(new LiteralControl(“<a href=day.aspx?year=”+d.Date.Year+”&month=”+
       d.Date.Month+”&day=”+d.Date.Day+”>”+d.Date.Day+”</a>”));
           }
           j++;
      }
   }
   else if( d.Date.Month.Equals(intCurrentMonth) )
   {
       while( ! arrCurrentDays[j].Equals(0) )
      {
            if(d.Date.Day.Equals(arrCurrentDays[j]))
            {
                 c.Controls.Clear();
                 c.Controls.Add(new LiteralControl(“<a href=day.aspx?year=”+d.Date.Year+”&month=”+
       d.Date.Month+”&day=”+d.Date.Day+”>”+d.Date.Day+”</a>”));
             }
             j++;
       }
   }
   else if( d.Date.Month.Equals(intNextMonth) )
   {
        while( ! arrNextDays[j].Equals(0) )
        {
              if(d.Date.Day.Equals(arrNextDays[j]))
              {
                    c.Controls.Clear();
                    c.Controls.Add(new LiteralControl(“<a href=day.aspx?year=”+d.Date.Year+”&month=”+
       d.Date.Month+”&day=”+d.Date.Day+”>”+d.Date.Day+”</a>”));
              }
               j++;
          }
    }
}

日期控件一个页面能显示三个月份的日期,当前月是完整的,前一月和下一月有部分日期。DayRender事件会初始化具体日期的显示方式,在这里我们要对有blog内容的日期加上超级链接。于是我们需要在初始化时得到三个数组,数组里分别存放连续三个月的写有blog的日期。然后依次与当前日期比较,相同则加上链接。

在使用DayRender事件时,你一定不要忘了它是在每个日期初始化时执行一次,这就意味着初始化一次日历控件这个事件就要执行42次,所以要尽可能的简化操作,更不要不加判断的进行重复的数据库操作,我刚开始时没注意,在该事件里写了两个读库语句,结果严重影响性能。

下面这个方法是我用来获得日期数组的。
// 得到该月有blog的日期数组
  private int[] getArrayDay(int intYear,int intMonth)
  {
       int[] intArray = new int[31];
       //从数据库里选取符合要求的记录,将日期存入数组
       string strSql = “select content_time from content where year(content_time)=”+intYear+
    ” and month(content_time)=”+intMonth;
   dr = SqlHandle.GetDr(strSql);
   while(dr.Read())
   {
        if( i==0 )
       {
             intArray[i] = dr.GetDateTime(0).Day;
             i++;
        }
        else if( dr.GetDateTime(0).Day != intArray[i-1] )
        {
             intArray[i] = dr.GetDateTime(0).Day;
             i++;
         }
   }
   dr.Close();
    return intArray;
  }

 

7、 公告和计数器代码:

代码填写在静态新闻/声明中,目前代码如下:(其中<script language=JavaScript src=”http://laoan.com/counters/count.php?kvw3000″></script>为在http://www.laoan.com/counters/申请的免费计数器,注意将下面的kvw3000改为你自己申请的帐号)

<IMG src=”http://blog.csdn.nethttp://bolgimg.b0.upaiyun.com/images/blog_csdn_net/upwaker/17243/t_rsxt0022.jpg” width=”150″ height=”150″></br>
个人简介</br>
网名:天山雪飞</br>
QQ:15878778</br>
<SMALL>MSN:<A href=”mailto:wjt2000@etang.com” >kvw3000@hotmail.com</A></SMALL></br></br>

来自:河南</br>

——————————-</br>
访问量:
<script language=JavaScript src=”http://laoan.com/counters/count.php?kvw3000"></script></br>
-------------------------------

8、.跟随鼠标的萤火虫
 
以下是代码,无须修改
<script language="JavaScript">
if (!document.layers&&!document.all)
event="test"
function showtip2(current,e,text){
if (document.all&&document.readyState=="complete"){
document.all.tooltip2.innerHTML='<marquee style="border:1px solid black">'+text+'</marquee>'
document.all.tooltip2.style.pixelLeft=event.clientX+document.body.scrollLeft+10
document.all.tooltip2.style.pixelTop=event.clientY+document.body.scrollTop+10
document.all.tooltip2.style.visibility="visible"}
else if (document.layers){
document.tooltip2.document.nstip.document.write('<b>'+text+'</b>')
document.tooltip2.document.nstip.document.close()
document.tooltip2.document.nstip.left=0
currentscroll=setInterval("scrolltip()",100)
document.tooltip2.left=e.pageX+10
document.tooltip2.top=e.pageY+10
document.tooltip2.visibility="show"}}
function hidetip2(){
if (document.all)
document.all.tooltip2.style.visibility="hidden"
else if (document.layers){
clearInterval(currentscroll)
document.tooltip2.visibility="hidden"}}
function scrolltip(){
if (document.tooltip2.document.nstip.left>=-document.tooltip2.document.nstip.document.width)
document.tooltip2.document.nstip.left-=5
else
document.tooltip2.document.nstip.left=150}
</script>
<script language="JavaScript">
function YY_Layerfx(yyleft,yytop,yyfnx,yyfny,yydiv,yybilder,yyloop,yyto,yycnt,yystep) { //v1.2
if ((document.layers)||(document.all)){
with (Math) {yynextx= eval(yyfnx)}
with (Math) {yynexty= eval(yyfny)}
yycnt=(yyloop && yycnt>=yystep*yybilder)?0:yycnt+yystep;
if (document.layers){
eval(yydiv+".top="+(yynexty+yytop))
eval(yydiv+".left="+(yynextx+yyleft)) }
if (document.all){
eval("yydiv=yydiv.replace(/.layers/gi, '.all')");
eval(yydiv+".style.pixelTop="+(yynexty+yytop));
eval(yydiv+".style.pixelLeft="+(yynextx+yyleft)); }
argStr='YY_Layerfx('+yyleft+','+yytop+',"'+yyfnx+'","'+yyfny+'","'+yydiv+'",'+yybilder+','+yyloop+','+yyto+','+yycnt+','+yystep+')';
if (yycnt<=yystep*yybilder){eval(yydiv+".yyto=setTimeout(argStr,yyto)");} }}
function YY_Mousetrace(evnt) {
if (yyns4)
{if (evnt.pageX) {yy_ml=evnt.pageX; yy_mt=evnt.pageY;} }
else{
yy_ml=(event.clientX + document.body.scrollLeft);
yy_mt=(event.clientY + document.body.scrollTop);}
if (yy_tracescript)eval(yy_tracescript)}
</script>
<script language="JavaScript">
function PopWin()
{
var PopWin = window.open("new.htm","PopWin","toolbar=no,directries=no,scrollBars=yes,height=350,width=400");
}
</script>
<body>
<div id="tooltip2" style="position:absolute;visibility:hidden;clip:rect(0 150 50 0);width:150px;background-color:lightyellow">
<layer name="nstip" width="1000px" bgColor="lightyellow">
</layer>
</div>
<div id="yyd0"
style="position:absolute; left:10px; top:50px; width:3px; height:3px; z-index:1; background-color: #19636c; layer-background-color: #19636c; border: 1px none #000000; clip: rect(0 3 3 0)"></div><div
id="yyd1"
style="position:absolute; left:20px; top:50px; width:3px; height:3px; z-index:1; background-color: #708574; layer-background-color: #708574; border: 1px none #000000; clip: rect(0 3 3 0)"></div><div
id="yyd2"
style="position:absolute; left:30px; top:50px; width:3px; height:3px; z-index:1; background-color: #379bbf; layer-background-color: #379bbf; border: 1px none #000000; clip: rect(0 3 3 0)"></div><div
id="yyd3"
style="position:absolute; left:40px; top:50px; width:3px; height:3px; z-index:1; background-color: #25184c; layer-background-color: #25184c; border: 1px none #000000; clip: rect(0 3 3 0)"></div><div
id="yyd4"
style="position:absolute; left:50px; top:50px; width:3px; height:3px; z-index:1; background-color: #31bd3c; layer-background-color: #31bd3c; border: 1px none #000000; clip: rect(0 3 3 0)"></div><div
id="yyd5"
style="position:absolute; left:60px; top:50px; width:3px; height:3px; z-index:1; background-color: #c11efd; layer-background-color: #c11efd; border: 1px none #000000; clip: rect(0 3 3 0)"></div><script>
var yyns4=window.Event?true:false; var yy_mt = 0; var yy_ml = 0;
document.onmousemove = YY_Mousetrace;
yy_tracescript = '';
if (yyns4){ document.captureEvents(Event.mousemove);
YY_Mousetrace('',',document.YY_Mousetrace1')}
YY_Layerfx(0,0,'yy_ml+cos((15*sin(yycnt/39.83007847812662))+0)*150*(sin(10+yycnt/20)+0.2)*cos(yycnt/20)','yy_mt+sin((15*sin(yycnt/34.224861639800686))+0)*150*(sin(10+yycnt/20)+0.2)*cos(yycnt/20)','document.layers[\'yyd0\']',2000,true,80,0,1);
YY_Layerfx(0,0,'yy_ml+cos((15*sin(yycnt/27.66510707209673))+30)*150*(sin(10+yycnt/20)+0.2)*cos(yycnt/20)','yy_mt+sin((15*sin(yycnt/9.240632767417667))+30)*150*(sin(10+yycnt/20)+0.2)*cos(yycnt/20)','document.layers[\'yyd1\']',2000,true,80,0,1);
YY_Layerfx(0,0,'yy_ml+cos((15*sin(yycnt/16.45318944579641))+60)*150*(sin(10+yycnt/20)+0.2)*cos(yycnt/20)','yy_mt+sin((15*sin(yycnt/16.0564452288292))+60)*150*(sin(10+yycnt/20)+0.2)*cos(yycnt/20)','document.layers[\'yyd2\']',2000,true,80,0,1);
YY_Layerfx(0,0,'yy_ml+cos((15*sin(yycnt/6.95348954836835))+90)*150*(sin(10+yycnt/20)+0.2)*cos(yycnt/20)','yy_mt+sin((15*sin(yycnt/44.13697049887155))+90)*150*(sin(10+yycnt/20)+0.2)*cos(yycnt/20)','document.layers[\'yyd3\']',2000,true,80,0,1);
YY_Layerfx(0,0,'yy_ml+cos((15*sin(yycnt/33.90077294583733))+120)*150*(sin(10+yycnt/20)+0.2)*cos(yycnt/20)','yy_mt+sin((15*sin(yycnt/2.2378828869411587))+120)*150*(sin(10+yycnt/20)+0.2)*cos(yycnt/20)','document.layers[\'yyd4\']',2000,true,80,0,1);
YY_Layerfx(0,0,'yy_ml+cos((15*sin(yycnt/37.858312521039835))+150)*150*(sin(10+yycnt/20)+0.2)*cos(yycnt/20)','yy_mt+sin((15*sin(yycnt/18.083839795990098))+150)*150*(sin(10+yycnt/20)+0.2)*cos(yycnt/20)','document.layers[\'yyd5\']',2000,true,80,0,1);
</script>
</body> 

9.为Blog 添加“状态栏文本”功能

<script language=JavaScript>
 var MESSAGE="欢迎您亲自光临回家念经的小站            "
 var POSITION=100
 var DELAY=10
 var scroll=new statusMessageObject()
 function statusMessageObject(p,d)
 {
  this.msg =MESSAGE
  this.out =" "
  this.pos =POSITION
  this.delay=DELAY
  this.i=0
  this.reset=clearMessage
 }
 function clearMessage()
 {
  this.pos=POSITION
 }
 function scroller()
 {
  for (scroll.i=0;scroll.i<scroll.pos;scroll.i++){
  scroll.out += " "}
  if (scroll.pos >= 0)
  scroll.out += scroll.msg
  else scroll.out=scroll.msg.substring(-scroll.pos,scroll.msg.length)
  window.status=scroll.out
  scroll.out=" "
  scroll.pos--
  if (scroll.pos < -(scroll.msg.length)) {
  scroll.reset()}
  setTimeout('scroller()',scroll.delay)
 }
 function snapIn(jumpSpaces,position)
 {
  var msg = scroll.msg
  var out = ""
  for(var i=0; i<position; i++)
  {
   out+= msg.charAt(i)
  }
  for(i=1;i<jumpSpaces;i++)
  {
   out += " "
  }
  out+=msg.charAt(position)
  window.status = out
  if(jumpSpaces <= 1)
  {
   position++
   if(msg.charAt(position) == ' ')
   {
    position++
   }
   jumpSpaces = 100-position
  }
  else if (jumpSpaces >  3)
  {
   jumpSpaces *= .75
  }
  else
  {
   jumpSpaces--
  }
  if(position != msg.length)
  {
   var cmd = "snapIn(" + jumpSpaces + "," + position + ")";
   scrollID = window.setTimeout(cmd,scroll.delay);
  }
  else
  {
   window.status=""
   jumpSpaces=0
   position=0
   cmd = "snapIn(" + jumpSpaces + "," + position + ")";
   scrollID = window.setTimeout(cmd,scroll.delay);
   return false
  }
  return true
 }
 snapIn(100,0);
</script>

10.为Blog 添加“跟随鼠标的文字”功能

<style type="text/css">
.spanstyle
{
 position:absolute;
 visibility:visible;
 top:-500px;
 font-size:10pt;
 color: #0000ff;
 font-weight:bold;
}
</style>

<script>
 var x,y
 var step=15
 var flag=0
 var message="程序不过是梦"
 message=message.split("")
 var xpos=new Array()
 for (i=0;i<=message.length;i++)
 {
  xpos[i]=-500
 }
 var ypos=new Array()
 for (i=0;i<=message.length;i++)
 {
  ypos[i]=-500
 }
 function handlerMM(e)
 {
  x = (document.layers) ? e.pageX : document.body.scrollLeft+event.clientX-5
  y = (document.layers) ? e.pageY : document.body.scrollTop+event.clientY-75
  flag=1
 }
 function makesnake()
 {
  if (flag==1 && document.all)
  {
   for (i=message.length; i>=1; i--)
   {
    xpos[i]=xpos[i-1]+step
    ypos[i]=ypos[i-1]
   }
   xpos[0]=x+step
   ypos[0]=y
   for (i=0; i<message.length; i++)
   {
    var thisspan = eval("span"+(i)+".style")
    thisspan.posLeft=xpos[i]
    thisspan.posTop=ypos[i]
   }
  }
  else if (flag==1 && document.layers)
  {
   for (i=message.length; i>=1; i--)
   {
    xpos[i]=xpos[i-1]+step
    ypos[i]=ypos[i-1]
   }
   xpos[0]=x+step
   ypos[0]=y
   for (i=0; i<message.length; i++)
   {
    var thisspan = eval("document.span"+i)
    thisspan.left=xpos[i]
    thisspan.top=ypos[i]
   }
  }
  var timer=setTimeout("makesnake()",30)
 }
</script>

<body onLoad="makesnake()" >
<script>
 for (i=0;i<=message.length;i++)
 {
  document.write("<span id='span"+i+"'class='spanstyle'>")
  document.write(message[i])
  document.write("</span>")
 }
 if (document.layers)
 {
  document.captureEvents(Event.MOUSEMOVE);
 }
 document.onmousemove = handlerMM;
</script>

11.给blog增加一个功能,每次打开的时候自动在顶部副标题位置显示一条格言 (这个我没使用)

<script language="javascript">
var word=new Array();
word[0]="当你感到悲哀痛苦时,最好是去学些什么东西。学习会使你永远立于不败之地。"
word[1]="每一个成功者都有一个开始。勇于开始,才能找到成功的路。"
word[2]="与其临渊羡鱼,不如退而结网。"
word[3]="若不给自己设限,则人生中就没有限制你发挥的藩篱。"
word[4]="绊脚石乃是进身之阶。"
word[5]="即使爬到最高的山上,一次也只能脚踏实地地迈一步。"
word[6]="积极思考造成积极人生,消极思考造成消极人生。"
word[7]="人之所以有一张嘴,而有两只耳朵,原因是听的要比说的多一倍。"
word[8]="别想一下造出大海,必须先由小河川开始。"
word[9]="即使是不成熟的尝试,也胜于胎死腹中的策略。"
word[10]="积极的人在每一次忧患中都看到一个机会,而消极的人则在每个机会都看到某种忧患。"
word[11]="如果我们想要更多的玫瑰花,就必须种植更多的玫瑰树。"
word[11]="世上没有绝望的处境,只有对处境绝望的人。"
word[12]="当你感到悲哀痛苦时,最好是去学些什么东西。学习会使你永远立于不败之地。"
word[13]="世界上那些最容易的事情中,拖延时间最不费力。"
word[14]="没有口水与汗水,就没有成功的泪水。"
word[15]="如果你希望成功,以恒心为良友,以经验为参谋,以小心为兄弟,以希望为哨兵。"
word[16]="大多数人想要改造这个世界,但却罕有人想改造自己。"
word[17]="未曾失败的人恐怕也未曾成功过。"
word[18]="人生伟业的建立,不在能知,乃在能行。"
word[19]="挫折其实就是迈向成功所应缴的学费。"
word[20]="任何的限制,都是从自己的内心开始的。"
word[21]="忘掉失败,不过要牢记失败中的教训。"
word[22]="不是境况造就人,而是人造就境况。"
document.all("header").innerHTML="<a href='http://babypai.vicp.net'><img src='http://babypai.vicp.net/linklogo.gif' border=0 alt='ジβаЪy派主页' align=right /></a><span>"+document.all("Header1_HeaderTitle").outerHTML+"<br/>&nbsp;&nbsp;&nbsp;&nbsp;"+word[parseInt(Math.random()*22)]+"</span>"
</script>

 

做了两年的电力行业软件开发,给我的感觉就是太烦!

难不难?不难!

我不是高手,我只想说说开发中的感受!

一、通讯协议太多。

电力行业企业多,每个企业都有自己的一套成熟的协议。电力局呢为了避免降低采购成本,

 如果你不是在一个成名的电力公司工作,那麻烦就大了。首先,为了和现有局运行系统靠拢,只有一个局一个局的适应。

比如:101、dnp、负控、modbusdeng等。

二、需求不确定。

电力系统三产企业多,技术力量不怎,但是和供电局的关系硬。为了做进这个局,和三产企业合作成了必然!

=========

今天就到这!

接上

三、具体应用程序配置

3.1

 

3.2

3.3

3..4

3.5

四、系统配置说明

1、  环境:服务器win2000、客户机win2003win98

服务器: 使用tregsrv.exe注册midas.dll

               使用bde的话,拷贝idprov32.exe到宝兰的数据库引擎目录下

               运行dcomcnfg.exe按照上面的设置进行设置。

客户机:win98的话,安装dcom

         拷贝midas.dll\system\system32

2、  运行程序之前,必须保证在本机调试通过。

客户端要从局域网能够访问服务器。

《完》

COM/接口/OLE/ActiveX:名词理解!                   
                  接口: 一个纯虚类, 是基于对象的一组语义上相关的功能.真正实现接口的是接口对象
                  409485288() 15:09:20
                  COM:组件对象之间相互接口的规范
                  409485288() 15:10:47
                  遵循COM接口规范的对象彼此之间能相互通信和交互.而与对象的实现语言等无关.
                  409485288() 15:18:21
                  com接口对象本来就是个类.
                   TMyObject=class(TInterfacedObject,IMyInterface)
                     function SayHello:string;
                   end;
                  TInterfacedObject:是其父父类,IMyInterface:是要实现的接口

第一阶段
此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。

第二阶段
此阶段能精通基于某种平台的接口(例如我们现在常用的Win 32的API函数)以及所对应语言的自身的库函数。到达这个阶段后,也就相当于可以进行真实散打对练了,可以真正地在实践中做些应用。

第三阶段
此阶段能深入地了解某个平台系统的底层,已经具有了初级的内功的能力,也就是“手中有剑,心中无剑”。

第四阶级
此阶段能直接在平台上进行比较深层次的开发。基本上,能达到这个层次就可以说是进入了高层次。这时进入了高级内功的修炼。比如能进行VxD或操作系统的内核的修改。

这时已经不再有语言的束缚,语言只是一种工具,即使要用自己不会的语言进行开发,也只是简单地熟悉一下,就手到擒来,完全不像是第一阶段的时候学习语言的那种情况。一般来说,从第三阶段过渡到第四阶段是比较困难的。为什么会难呢?这就是因为很多人的思想变不过来。

第五阶级
此阶段就已经不再局限于简单的技术上的问题了,而是能从全局上把握和设计一个比较大的系统体系结构,从内核到外层界面。可以说是“手中无剑,心中有剑”。到了这个阶段以后,能对市面上的任何软件进行剖析,并能按自己的要求进行设计,就算是MS Word这样的大型软件,只要有充足的时间,也一定会设计出来。

第六阶级
此阶段也是最高的境界,达到“无招胜有招”。这时候,任何问题就纯粹变成了一个思路的问题,不是用什么代码就能表示的。也就是“手中无剑,心中也无剑”。

此时,对于练功的人来说,他已不用再去学什么少林拳,只是在旁看一下少林拳的对战,就能把此拳拿来就用。这就是真正的大师级的人物。这时,Win 32或Linux在你眼里是没有什么差别的。

每一个阶段再向上发展时都要按一定的方法。第一、第二个阶段通过自学就可以完成,只要多用心去研究,耐心地去学习。

要想从第二个阶段过渡到第三个阶段,就要有一个好的学习环境。例如有一个高手带领或公司里有一个好的练手环境。经过二、三年的积累就能达到第三个阶段。但是,有些人到达第三个阶段后,常常就很难有境界上的突破了。他们这时会产生一种观念,认为软件无非如此,认为自己已无所不能。其实,这时如果遇到大的或难些的软件,他们往往还是无从下手。

现在我们国家大部分程序员都是在第二、三级之间。他们大多都是通过自学成才的,不过这样的程序员一般在软件公司也能独当一面,完成一些软件的模块。

但是,也还有一大堆处在第一阶段的程序员,他们一般就能玩玩VB,做程序时,去找一堆控件集成一个软件。

 

2004年10月09日

http://www.microsoft.com/billgates/default.asp

一个非常好的学习xml的站点

中国XML论坛

BLOG入门

1,如何换行;

很多博客的电脑因为无法显示编辑,就无法换行,写出来的文章都窝成一堆,大家看得很累。其实你只要在需要换行的地方打上:BR,用<  >框起来。


2,如何插入图片:

首先你必须先把你喜欢的图片从你的电脑里选出来,放进你BLOG里的“相冊”里。可以先替你的相册分类;

进入“管理”后,点击“相册”,然后进入“增加相册”,以此填上你为这类相册取的名字。刷新后进入,把你需要的图片搬进你的相册里。

接着在你要用此图片时,点击此图片,然后点击右键,点入最下面一列,进去后看到此图片的地址,类似:http://……,你选中,在你的随笔里添加图片里,打入这个地址就OK了,记得把图片的长和宽也打进旁边的长、宽里,这样显示出来的图片就和你原先的图片一样大小了。

记住,用过的图片如果你从你的相册里删除的话,你原先用过的那篇随笔上就会不显示的。所以不能随便删除。

如果你的电脑没有显示“添加图片”的工具,你可以用以下的方法添加,就是在你需要放图片的地方打上:

img src=http://…, 用< >框起来。

3,如何增加链接:

如果要添加你所喜欢的BLOG的链接,你可以进入“管理”里的“链接”,之前先进入你喜欢的BLOG的右上角的“syndication”,得到他的link,类似“http://….”

然后在你的“链接”里进入“增加链接”,最上面一行打上这个BLOGGER的名字,第二行就打上他的地址“http://…..”;然后保存就可以了。

4,如何分类:

你可以为你的“随笔”和你的“文章”分类,以后你所打的每篇随笔或文章的下面都会自动显示你所分类的标题,你只要选中一个,在上面打勾,系统就会自动把你的这一篇归档到这个栏目里。

首先你进入“管理”—>“随笔”—>“增加分类”,在“标题”空格内打上你所取的栏目名称,点击增加就OK了,你需要几个栏目就反复几次,然后你所新建“随笔”或“文章”时,在末后就会自动显示这些栏目,你在你需要放入的那一栏打勾就可以了。

5,如何变换你的“模板”:

进入“管理”—>“选项”—>“配置”,在“模板选择”内挑选。

6,如何在公告内放图片:

首先先把图片放入你的相册(方法如2),然后进入“管理”—>“选项”—>“配置”,在公告内打上:

img src=http://……

http后面就是你所需要的这张图片的地址。img开始到最后,用<  >框起来。

7,如何在公告内打上你需要显示的句子:

进入“管理”—>“选项”—>“配置”,在公告内打上:你需要的句子即可。

8,如何添加你需要的图片作你BLOG的背景:

先把图片放入你的相册后,进入“管理”—>“选项”—>“配置”,在公告内打上

body background=“http://……….”

http后面就是你所需要的这张图片的地址,记得用< >框起来。

#公告里用BR
为以上6/7/8分行,这样才不会在你的BLOG上显示时挤在一起。想分得开一点就多打几个,一样要用<  >框起来。即可。