影音先锋男人资源av站_狠狠色综合激情丁香五月_爱爱爱爱看视频_在线播放免费人成视频在线观看_少妇人妻综合久久中文字幕_国产午夜无码精品免费看_久久久久久夜精品精品免费啦_男人女人午夜视频免费_日本xxxx裸体xxxx_丰满人妻熟妇乱又仑精品

電子科大論壇-非清水河畔

 找回密碼
 注冊(cè)(開(kāi)放注冊(cè))
查看: 6042|回復(fù): 0
打印 上一主題 下一主題

[軟件] zz,簡(jiǎn)單鬧鈴widget的制作

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2006-11-27 13:37:57 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
如果你還不知道Yahoo! Widget,那我建議你先看一看http://cn.widget.yahoo.com/中的介紹.如果你想運(yùn)行widget工具的話,需要先安裝Widget engine.

以下是摘自Yahoo!的網(wǎng)頁(yè)http://cn.widget.yahoo.com/download.htm
什么是Widget Engine?
「Yahoo!Widget Engine」是一種JavaScript應(yīng)用程序平臺(tái),必須先安裝才能使用各式各樣的Widget工具。

什么是Widget工具?
「Yahoo!Widget工具」是一種迷你應(yīng)用程序,可在計(jì)算機(jī)桌面上通過(guò)Yahoo!Widget Engine運(yùn)行。Widget的功能包羅萬(wàn)象,例如:查看氣象、閱讀實(shí)時(shí)新聞、進(jìn)行網(wǎng)頁(yè)資訊搜索,或玩玩小游戲。Widget工具通常位在計(jì)算機(jī)桌面上,看起來(lái)像是張小圖片或小動(dòng)畫(huà),和一般的應(yīng)用程序不同。

一制作前的準(zhǔn)備知識(shí)
Yahoo! Widget讓我們拒絕單調(diào), 擁有超酷的桌面.如果你想開(kāi)發(fā)一個(gè)widget, 其實(shí)也很簡(jiǎn)單.只需要了解下面的內(nèi)容就可以了:
1.    圖形圖像的制作和處理
2.    Html或者xml的語(yǔ)法
3.    JavaScript程序設(shè)計(jì)

如果你以前有過(guò)網(wǎng)頁(yè)制作的經(jīng)驗(yàn),那對(duì)你來(lái)說(shuō),widget的制作沒(méi)有任何門檻.只不過(guò)把以前的html的網(wǎng)頁(yè)換成了按照widget的類似xml的語(yǔ)法描述的kon文件.對(duì)于一個(gè)widget來(lái)說(shuō),它的源程序由三種文件組成:一是圖片文件,還有就是描述這些圖片以及一些圖元的布局的kon文件,第三就是實(shí)現(xiàn)我們的邏輯和功能的JavaScript的js文件.
注釋: .kon
包含 Widget工具的主要代碼。當(dāng)用戶雙擊 Widget 時(shí) Yahoo!Widget Engine 會(huì)首先找到這個(gè)文件,讀取其中的內(nèi)容。 .kon 包含了初始圖片的位置,程序代碼 (XML 或 eXtensible Markup Language),以及偏好設(shè)置等項(xiàng)目。有時(shí)候,尤其是在比較復(fù)雜的 Widget工具中,JavaScript 會(huì)保存在 .js 文件中。

kon的基礎(chǔ)知識(shí)
其實(shí)kon其實(shí)就是一個(gè)xml文件,描述的方式都是標(biāo)準(zhǔn)的xml的格式的.下面是一些實(shí)際的例子:
文件頭定義了xml的版本和編碼
<?xml version="1.0" encoding="utf-8"?>
接下來(lái)就是一個(gè)widget的定義.
<widget name="MyAlarmClock" version="3.0" minimumVersion="3.0">

</widget>
在一個(gè)widget中可以有多個(gè)窗口,可以定義多個(gè)window對(duì)象
<widget name="MyAlarmClock" version="3.0" minimumVersion="3.0">
    <window name="win1">

</window>
<window name="win2">

</window>
</widget>
另外,image對(duì)象既可以直接作為widget中的元素也可以做個(gè)window中的元素
    <window name="winMain" visible="1" shadow="1">
        <image name="imgBg">
            <src>Resources/background.png</src>
            <hOffset>0</hOffset>
            <vOffset>0</vOffset>
            <opacity>200</opacity>
        </image>
        ...
    </window>
其中src定義的是image的源文件的位置.通常放在Resources目錄下. hOffset定義的是在父節(jié)點(diǎn)winMain中的水平位置.如果我們想為圖片添加鼠標(biāo)移上就變樣子的效果,那我們就需要為image加入三個(gè)子元素:
<image name="imgName">
   …
        <onMouseEnter> imgName _onMouseEnter();</onMouseEnter>
        <onMouseExit> imgName _onMouseUp();</onMouseExit>
        <onMouseDown> imgName onMouseDown();</onMouseDown>
        <onMouseUp> imgName _onMouseUp();</onMouseUp>
    </image>
在onMouseEnter, onMouseUp, onMouseDown和onMouseUp時(shí)的響應(yīng)函數(shù)中,將該image的src值重新設(shè)置一下.如: imgName.src=”new.jpg”;

textarea是文本輸入框?qū)ο?可以按照下面的方式定義,至于其中的各個(gè)參數(shù)的意義,可以參考Yahoo! Widget的參考手冊(cè).
        <textarea name="txtTime">
            <hOffset>105</hOffset>
            <vOffset>60</vOffset>
            <lines>1</lines>
            <alignment>center</alignment>
            <size>14</size>
            <bgOpacity>0</bgOpacity>
            <editable>true</editable>
            <scrollbar>false</scrollbar>
            <onKeyPress>txtTime_onKeyPress();</onKeyPress>
        </textarea>
這里要特別提出的是在上面的這個(gè)textarea的描述中有一句<onKeyPress>txtTime_onKeyPress();</onKeyPress>,這句是定義它在收到鍵盤事件的時(shí)候的響應(yīng)函數(shù)為txtTime_onKeyPress.這個(gè)函數(shù)的定義是在js文件中.

2.widget的界面效果和素材
首先展示一下鬧鈴的界面:

圖1
其中,使用到的圖片如下:

圖2
分別是一張背景圖和三個(gè)按鈕的不同狀態(tài)(正常,鼠標(biāo)移上時(shí),鼠標(biāo)按下時(shí))的圖片.這些素材的準(zhǔn)備工作我就不在這里贅述.

3.代碼編寫
首先給出鬧鈴的kon文件內(nèi)容:

圖3
界面方面,主要由四部分組成:一個(gè)背景圖imgBg,兩個(gè)按鈕圖imgTurn和imgChooseRing,以及一個(gè)文本輸入框.另外我們要實(shí)現(xiàn)鬧鈴的功能,所以需要加入一個(gè)timer對(duì)象,控制播放音樂(lè)的時(shí)間.
現(xiàn)在我們來(lái)逐行解析:
第1行:定義xml的版本和編碼
第2行:定義了widget的名字和使用的widget engine的版本
第3行:是否打開(kāi)調(diào)試,這個(gè)選項(xiàng)對(duì)于我們制作和調(diào)試的時(shí)候非常有用,在制作過(guò)程中可以設(shè)置為on,當(dāng)我們發(fā)布的時(shí)候設(shè)置為off
第4行:定義了widget在載入的時(shí)候需要裝載的javascript源文件,也就是實(shí)現(xiàn)我們程序邏輯的js文件.
第6行:定義了一個(gè)timer對(duì)象,用于控制鬧鈴.初始的時(shí)候它的ticking設(shè)置為false就說(shuō)明它并不開(kāi)始計(jì)時(shí),
第8行:timer對(duì)象在onTimerFired的時(shí)候響應(yīng)的函數(shù)是alarm,也就是震鈴.此事件的意思就是描述timer對(duì)象在被激發(fā)的時(shí)候的響應(yīng)行數(shù).
第11行:定義了一個(gè)window對(duì)象,其實(shí)在本程序中只是用到一個(gè)window,但是出于對(duì)以后的擴(kuò)張的考慮,即使只有一個(gè)窗口的時(shí)候,也應(yīng)該定義window.
第12行-17行:定義了image,實(shí)際上這個(gè)image就是窗體實(shí)際上的背景圖.
第19行-29行:定義了用于輸入鬧鐘時(shí)間的文本框,它只允許輸入一行,它的onKeyPress的響應(yīng)事件是txtTime_onKeyPress();
第31行-39行:定義了”打開(kāi)”/”關(guān)閉”鬧鐘的圖片按鈕,實(shí)際上就只是一個(gè)image對(duì)象,通過(guò)為它設(shè)置不同的src,就可以達(dá)到按鈕的效果.
第31行-39行:定義了”選擇鬧鈴”的圖片按鈕,它也是一個(gè)image對(duì)象,通過(guò)為它設(shè)置不同的src,就可以達(dá)到按鈕的效果.點(diǎn)擊它之后的響應(yīng)事件是ChooseRing(),會(huì)彈出一個(gè)選擇文件的對(duì)話框.可以選擇硬盤上的mp3和wav文件.

下面是funcitons.js中函數(shù)的一些摘錄:
var gbAlarmOn = false; // 鬧鈴是否已打開(kāi)
// 打開(kāi)/關(guān)閉鬧鐘, “打開(kāi)”被按下以后,會(huì)調(diào)用setAlarm函數(shù)去設(shè)置鬧鈴
function Turn() {
    gbAlarmOn = !gbAlarmOn;
    if (gbAlarmOn) {
        imgTurn.src = 'Resources/turnoff-normal.png';
        txtTime.editable = false;
        txtTime.color = "#ff0000";
        setAlarm();
    }    else {
        imgTurn.src = 'Resources/turnon-normal.png';
        txtTime.editable = true;
        txtTime.color = "#000000";
    }
};

// 設(shè)置鬧鐘,計(jì)算當(dāng)前時(shí)候和文本框中事件的差,如果小于當(dāng)前事件,那么就提示出錯(cuò).
function setAlarm() {
    var time = txtTime.data.split(":");
   
    if (time.length != 2 || time[0].length > 2 || time[1].length > 2) {
        // 時(shí)間的輸入格式不正確
        alert("Error occurs when input, please input in format: \"hh:mm\".");
    }    else {
        var now = new Date();
        var AlarmHour = parseInt(time[0]);
        var AlarmMinute = parseInt(time[1]);

        // 計(jì)算時(shí)間
        var minus = AlarmHour*60 + AlarmMinute - now.getHours() * 60 - now.getMinutes();
        if (minus <= 0) {
            alert("Wrong time inputed!");
            Turn();
        } else {
            // 鬧鐘設(shè)置為 AlarmHour : AlarmMinute
            timerAlarm.interval = minus*60;
            timerAlarm.ticking = true;
        }
    }
};

// 選擇鈴聲的音樂(lè),調(diào)用widget engine的系統(tǒng)函數(shù)chooseFile
function ChooseRing() {
    // 顯示選擇文件的對(duì)話框
    file = chooseFile(new Array(".mp3", "wav"));
    if (file)
        gstrRing = file;
};

// 鬧鈴,播放音樂(lè)
function ring() {
    // 停止timer
    timerAlarm.ticking = false;
   
    // 關(guān)閉鬧鐘
    Turn();
   
    if (gstrRing) {
        // 播放鈴音
        play(gstrRing, true);
    }
    else {
        // 如果沒(méi)有設(shè)置鈴聲,那就蹦出個(gè)alert
        alert("Time out!");
    }
};


// 當(dāng)在輸入框中鍵入字符時(shí),輸入框只接受數(shù)字以及冒號(hào),并且總長(zhǎng)度不能超過(guò)5
function txtTime_onKeyPress() {
    var key = system.event.key;
    if ( key.charCodeAt(0) < '0'
        || key.charCodeAt(0) > ':'
        || txtTime.data.length >= 5)
    {
        txtTime.rejectKeyPress();
    }
};

// "打開(kāi)","關(guān)閉"的mouseEnter事件
function imgTurn_onMouseEnter() {
    if (!gbAlarmOn) {//如果當(dāng)前是”打開(kāi)”按鈕
        imgTurn.src = 'Resources/turnon-enter.png';
    }    else {
        imgTurn.src = 'Resources/turnoff-enter.png';
    }
};

// "打開(kāi)","關(guān)閉"的mouseDown事件
function imgTurn_onMouseDown() {
    if (!gbAlarmOn) {//如果當(dāng)前是”打開(kāi)”按鈕
        imgTurn.src = 'Resources/turnon-down.png';
    }    else {
        imgTurn.src = 'Resources/turnoff-down.png';
    }
};

// "打開(kāi)","關(guān)閉"的mouseUp事件
function imgTurn_onMouseUp() {
    if (!gbAlarmOn) {//如果當(dāng)前是”打開(kāi)”按鈕
        imgTurn.src = 'Resources/turnon-normal.png';
    }    else {
        imgTurn.src = 'Resources/turnoff-normal.png';
    }
};

目錄結(jié)構(gòu):

圖4
按照widget的目錄格式規(guī)范,將kon文件放在Contents目錄之下.資源文件則放在Contents/Resources目錄下

打包方法
首先你需要安裝有winzip或者winrar軟件.打包的過(guò)程其實(shí)就是一個(gè)創(chuàng)建壓縮包的過(guò)程.本文中,我使用的winrar,方法如下:在MyAlarmClock.widget目錄的圖標(biāo)上右鍵,選擇菜單中的”添加到檔案文件”,然后將檔案文件類型選擇為zip,然后確認(rèn)即可.

圖5
打包完成之后,將zip文件移到另外的地方,然后把后綴.zip去掉后的文件MyAlarmClock.widget就是我們做成的widget的了
四.運(yùn)行時(shí)的截圖
4.1開(kāi)動(dòng)鬧鈴后,文本框中文字變紅并且不可以編輯

圖6
4.2關(guān)閉鬧鈴后,文本框中文字又恢復(fù)為黑色,并且可以編輯.

圖7
4.3選擇鈴聲

圖8

結(jié)束語(yǔ)
widget的制作就是這么簡(jiǎn)單,快點(diǎn)動(dòng)手吧!如果你對(duì)JavaScript不是很熟悉,推薦你看《JavaScript Bible》.如果你對(duì)xml不熟悉,推薦瀏覽w3schools.com

圖1.jpg (7.52 KB, 下載次數(shù): 7)

圖1.jpg

圖2.jpg (27.63 KB, 下載次數(shù): 7)

圖2.jpg

評(píng)分

1

查看全部評(píng)分

本版積分規(guī)則

手機(jī)訪問(wèn)本頁(yè)請(qǐng)
掃描左邊二維碼
本網(wǎng)站聲明
本網(wǎng)站所有內(nèi)容為網(wǎng)友上傳,若存在版權(quán)問(wèn)題或是相關(guān)責(zé)任請(qǐng)聯(lián)系站長(zhǎng)!
站長(zhǎng)電話:0898-66661599    站長(zhǎng)聯(lián)系QQ:12726567   
站長(zhǎng)微信:hainanok
請(qǐng)掃描右邊二維碼
www.myujob.com

小黑屋|手機(jī)版|Archiver|電子科大論壇-非清水河畔 ( 瓊ICP備10001196號(hào)-2 )

GMT+8, 2025-11-6 05:43 , Processed in 0.084465 second(s), 18 queries .

Powered by 校園招聘信息

© 2001-2020 電子科大論壇-非清水河畔校園招聘

快速回復(fù) 返回頂部 返回列表