導航:首頁 > 編程語言 > flash代碼checkbox顯示文字

flash代碼checkbox顯示文字

發布時間:2025-09-13 12:57:08

Ⅰ 求 Js + FLASH+asp 引用方法

Flash 以javascript 為中介和 ASP/PHP 交互

目標:
1. 播放mp3,基本播放控制功能(暫停,繼續,索引,音量控制等);
2. 當前曲目循環、列表曲目循環
實現:
1. 音樂列表從資料庫中動態檢索
2. 提供添加音樂 URL 的界面

這里,我的思路是:用戶訪問 ASP(PHP) 頁面 => ASP(PHP) 請求資料庫 => 返回數據集 => ASP(PHP) 將數據集寫為 Javascript 變數 => Javascritp 通過 Flash 的介面函數寫到 Flash 中的 DynamicText 變數中 => Flash 將列表顯示
這樣就出現了一個問題,文件列表的數量是不定的,怎麼在 Flash 中處理,設置幾個變數呢?我的解決辦法是(也許不是很好的辦法,但是卻很簡單,如果高手有更好的方法,請不吝賜教,謝謝了):在 Flash 中設置兩個變數,一個是保存文件名 varSongname 另一個是保存 URL varUrl。在 Server 端就生成形如(本文中的英文引號被自動替換成了中文引號,請注意):

var strSongname = 「Songname1,Songname2,Songname3「;

的客戶端 Javascript 的變數定義/賦值語句,然後再使用 SetVariable() 語句將此變數傳入 Flash 中,Flash 就將字元串 split() 成數組,然後,不用我教了吧?各就各位的顯示出來吧

在這樣的思路指導下,誕生了3個文件(sFMP的意思是simple Flash MP3 Player) 1 ) sFMP.swf - Flash 文件作為用戶界面;2 ) sFMP.asp (.php) - 請求資料庫將文件列表作為 Javascript 的變數寫入返回的 HTML 文件;3 ) add.asp (.php) 添加 URL 的頁面。下面就具體講解每個文件的程序邏輯,和工作步驟:

sFMP.swf 的製作

由於用的是 Flash MX 2004 Professional 所以直接就借用了裡面許多組件。(不過要慎重,因為一旦加入 ActionScript 2.0 和組件的支持,文件就會增肥,一般會變大60多KB,視使用組件多少而定。具體原因可能是要包含許多組建庫的緣故吧?)下面是裡面使用到的組件:

MediaPlayback 組件:
可以直接播放 MP3 很方便。其包括很多屬性和方法、事件。Macromedia 裡面有比較詳細的說明。
InstanceName: _player
Action:

on (load) { // 可以插入一些播放器初始化代碼
}
on (complete) { // 這個事件當一首音樂播放完畢時產生
// switching process
if (_root._cbLoopCur.selected == true) {
// 當選擇了循環播放當前曲目
_root._player.play();
} else {
if (_root._cbLoopAll.selected == true) {
// 選擇了循環播放全部列表曲目
var iIndexRead:Number = _root.SongsList.selectedIndex;
// 將列表中的選擇高亮條下移一個
// 如果已經到末尾則重置
iIndexRead++;
if (iIndexRead > _root.SongsList.length - 1) {
// set current song index = 0
iIndexRead = 0;
}
// 更新 List 顯示
_root.SongsList.selectedIndex = iIndexRead;
// 這里調用一個函數用來取得播放列表當前選擇的 URL
// 並用setMedia()和play()方法使播放器播放曲目
// 由於比較簡單所以略掉了
}
}
}
on (change) { // 正在播放音樂時候
}
on (progress) { // 正在下載音樂文件的時候
}

List 組件:
用來顯示從資料庫中檢索的文件列表。
InstanceName: SongsList
Action:

on (change) {
// player control
// get list item data
var str:String = this.getItemAt(this.selectedIndex).data;
if (str.length>0 && str != undefined) {
// open the URL
_root._player.setMedia(str, "MP3");
if (_root._player.contentPath.length>0) {
_root._player.play();
}
}
}
/*
從列表中讀出當前選擇的文件,取得其的 data (假設已經從資料庫中讀出所需資料,label 顯示文件名
data 則儲存的是文件的 URL)
由於將 MediaPlayback 組件設為 Autostart = false 所以需要運行 play() 方法使其開始播放
如果 Autostart = true 則一旦設置了 contentPath 屬性,就立即載入並播放
*/

Checkbox 組件:
有兩個,分別用來選擇是單曲循環還是列表循環。
InstanceName: _cbLoopCur 、_cbLoopAll
Action:
兩者是互斥關系,選擇一個就取消另一個,兩個都不選就是播放選擇曲目一遍,代碼簡單,略。

Dynamic Text 框:
有兩個,雖然不是組件,但卻是和 Javascript 等實現交互的關鍵。
Variable: varSongname 、varUrl
兩個變數分別是保存外界傳入的文件名和 URL 。

Tips:
在 Javascript 中,Flash 專門提供了很多介面函數,這里用到的就是設置 Flash 中變數的 SetVariable(variable_name,value) 函數;Flash 中,也提供了一個和 Javascript 交互的 ActionScript 函數 fscommand() 。

sFMP.asp(php) 文件程序邏輯:

這個的程序很簡單,我就不廢話,直接貼代碼了,如果有不懂的,可以問我,電子郵件聯絡。

<%
' 這是 sFMP.asp 的部分源代碼,經過了一些修改,可能會包含一些錯誤,因為沒有經過測試
' 有一些環境可能和你機器上面不同,請相應修改。
' 修改前的完整源代碼是經過 Windows98 + PWS + Access 環境的測試的
' 所以使用之前請仔細檢查有無拼寫或其他明顯錯誤,謝謝!

Option Explicit
Dim rsFiles, cnn, strSql, strCnn
' 使用 ADO 鏈接資料庫,取得數據集,常規做法沒什麼好講的
strCnn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("songs.mdb")
Set cnn=Server.CreateObject("ADODB.Connection")
cnn.Open strCnn

strSql="SELECT * FROM songsInfo WHERE type='mp3' ORDER BY id DESC"
Set rsFiles=Server.CreateObject("ADODB.RecordSet")
rsFiles.CursorLocation=3
rsFiles.Open strSql,cnn,2,3

' 如果取得數據集失敗則停止執行,輸出錯誤
If TypeName(rsFiles)="Nothing" Then
Response.Write("open RecordSet error<br>")
Response.End()
End If
%>
<!-- 略去 HTML 代碼,大家可以自己加上 -->
<script language="javascript">
<%
Dim strName, strUrl
' 遍歷數據集,准備輸出字元串
If rsFiles.RecordCount > 0 Then
' 要將字元串准備成 var url = "url1,url2,url3"; 這樣的形式
strName = rsFiles.Fields("name") ' 這是取得文件名
strUrl = rsFiles.Fields("url") ' 這是取得其URL
rsFiles.MoveNext
Do While NOT rsFiles.EOF
strName = strName & "," & rsFiles.Fields("name")
strUrl = strUrl & "," & Replace(rsFiles.Fields("url")
rsFiles.MoveNext
Loop
End If
' 輸出
Response.Write("var url = "& Chr(34) & strUrl & Chr(34) & ";" & vbCrlf & "var songName = "& Chr(34) & strName& Chr(34) & ";" & vbCrlf)
' 關閉數據集,釋放資源
Set rsFiles = Nothing
cnn.Close()
Set cnn = Nothing
%>
myFlashObj.SetVariable("varUrl", sound[iIndexRead]);
myFlashObj.SetVariable("varSongName", songName[iIndexRead]);
</script>
<!-- 略去 HTML 代碼,大家可以自己加上 -->

以上的 ASP 的代碼,其實 sFMP.php 也很簡單,鏈接資料庫換成 mysql_connect / mysql_db_query / mysql_fetch_object 相應函數 Response.Write()換成echo 就可以了。由於我的 php 頁面不是使用的 Javascript 和 Flash 交互的方式(而是下面將要講的 Flash 和 ASP(PHP) 直接交互的方式),所以沒有這方面的代碼,不好意思了。

add.asp(php) 的程序邏輯:

這個就更簡單了,需要一個表和一段ASP(PHP)代碼就搞定了:

這是 HTML 表單,包含在add.asp(php)文件中,其 action 就是指向自己

<!-- php 文件中 action=add.php -->
<form action="add.asp" method="post">
名字:<input name="name" type="text" >
鏈接地址:<input name="url" type="text" ></td>
<input type="submit" name="Submit" value="提交"><input name="Reset" type="reset" value="重置">
</form>

這是 ASP 代碼段

<%
' 這是 add.asp 的部分源代碼,經過了一些修改,可能會包含一些錯誤,因為沒有經過測試
' 有一些環境可能和你機器上面不同,請相應修改。
' 修改前的完整源代碼是經過 Windows98 + PWS + Access 環境的測試的
' 所以使用之前請仔細檢查有無拼寫或其他明顯錯誤,謝謝!

Dim strOutput
Dim strNameOfSong:strNameOfSong = Trim(Request.Form("name"))
Dim strUrl:strUrl = Trim(Request.Form("url"))'Server.URLEncode()

If Len(strUrl) > 0 Then
' 其中可以添加對 URL 的合法性檢查,這里略去
strCnn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("songs.mdb")
Set cnn=Server.CreateObject("ADODB.Connection")
cnn.Open strCnn

strSql="INSERT INTO songsInfo (url, name) VALUES ('"&strUrl&"','"&strNameOfSong&"')"
If IsEmpty(cnn.Execute(strSql)) Then
strOutput = "添加數據失敗,可能資料庫出了點問題,請聯系管理員,謝謝使用!"
Else
strOutput = "添加數據成功,您可以繼續添加,謝謝使用!"
End If
End If

%>

這是 php 代碼片斷
<?php
// 這是 add.php 的部分源代碼,經過了一些修改,可能會包含一些錯誤,因為沒有經過測試
// 有一些環境可能和你機器上面不同,請相應修改。
// 修改前的完整源代碼是經過 Windows98 + Apache2.0 + MySQL4.0 環境的測試的
// 所以使用之前請仔細檢查有無拼寫或其他明顯錯誤,謝謝!

$strNameOfSong = trim($HTTP_POST_VARS['name']);
$strUrl = trim($HTTP_POST_VARS['url']);

if ( strlen($strUrl)>0) {
// executeSql() 是自定義函數,其作用是連接資料庫,返回 mysql_db_query() 的 $result
$iResult = executeSql("INSERT INTO songsInfo (url, name) VALUES ('$strUrl','$strNameOfSong')");
if (!$iResult) {
$strOutput = "Appending failed. Maybe some errors occured. Please contact Admin. Thanks for your support!";
}else{
// successfully execute
$strOutput = "The file has successfully appended. You can append another file now. Thanks for your support!";
}
}
?>

以上就是通過 Javascritpt 當中間媒介,和 ASP/PHP 交互的過程,有什麼問題請告訴我,謝謝!

Flash 和 ASP / PHP 的直接交互

Flash 是可以直接作為客戶端請求 ASP/PHP 頁面的。但是我在實驗的時候發現了一個在很多這方面相關文章沒有提到的問題那就是當 ASP/PHP 頁面返回變數的時候,如果是中文,那麼在 Flash 中會變成亂碼(不知道其他版本會不會有這個問題,但是 Flash 7.0是這樣的)!當時就想到可能是 URL 編碼的問題,可是一直沒找到解決辦法,最後突然想到了會不會是 Unicode 編碼的問題?一查資料,果然發現,原來 Flash 7.0 對外部變數和文本的編碼是 Unicode 的!而 ASP 3.0 的編碼則不是,而是使用的本地編碼,所以才會出現問題。(ASP 3.0 我沒找到怎麼改變編碼方式,ASP.net 好像默認是 Unicode 的,也可以用 gb2312 編碼)所以,既然沒有辦法統一為 Unicode 就只好全部統一為 gb2312 了。查了 Flash 的參考,找到一個屬性是可以用來設置編碼的,System.useCodepage=ture; 當將其為 true 時候,使用本地編碼,反之就使用 Unicode 。還有一點要注意,就是這個屬性只能在開頭設置一次,如果不這樣,那可能導致無法預料的後果(Flash 參考上面說的)。
在這里,我的思路是:Flash 請求 ASP/PHP 頁面 => ASP/PHP 查詢資料庫,返回數據直接寫到 Flash 變數裡面 => Flash 顯示列表

Flash 中使用 loadVariablesNum() 函數向 ASP/PHP 發送請求,ASP/PHP 可以根據不同請求方式(POST/GET)使用不同方法獲取 Flash 中的變數(就是 DynamicText 中規定的),Reqeust.QueryString() Request.Form() / $HTTP_POST_VAR() $HTTP_GET_VAR()。
ASP/PHP 返回就更容易了,只用返回形如 varSongname=songname1,songname2,songname3&varUrl=url1,url2,url3 的字元串就可以了,這里有兩點要注意:1. varSongname 和 varUrl 就是 Flash 中的 Variables ,名字要一樣,不然 Flash 無法解析;2. 在輸出這個字元串之前千萬不要輸出任何其他的字元(HTTP 頭當然可以,因為它寫到返回的 HTML 中),任何的都不要,包括 <HTML> <HEAD> 等HTML 標簽也不要。

這樣就有2個文件,sFMP.htm - 由於沒有動態內容,可以直接用靜態頁面了;requestReciever.asp(php) - 接受請求查詢資料庫返回字元串,sFMP.htm 沒有特別要求,把 .swf 文件嵌入裡面就可以了,沒有需要帖出來的地方。下面就把 requestReciever.asp(php)代碼帖出來:

requestReciever.asp(php) 代碼:

<%
Option Explicit
' 這是 add.asp 的部分源代碼,經過了一些修改,可能會包含一些錯誤,因為沒有經過測試
' 有一些環境可能和你機器上面不同,請相應修改。
' 修改前的完整源代碼是經過 Windows98 + PWS + Access 環境的測試的
' 所以使用之前請仔細檢查有無拼寫或其他明顯錯誤,謝謝!

Dim rsFiles, strDisp,cnn, strSql, strCnn
' create and open a connection object
strCnn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("songs.mdb")
Set cnn=Server.CreateObject("ADODB.Connection")
cnn.Open strCnn
' execute a SQL to create a RecordSet object
strSql="SELECT * FROM songsInfo WHERE type='"&strAsk&"' ORDER BY id DESC"
Set rsFiles=Server.CreateObject("ADODB.RecordSet")
rsFiles.CursorLocation=3
rsFiles.Open strSql,cnn,2,3
' if fails the result will be a Nothing object
If TypeName(rsFiles)="Nothing" Then
Response.Write("open RecordSet error<br>")
Response.End()
End If
' walkthrough the recordset and
' prepare URL/POST variables strings
Dim strName, strUrl
If rsFiles.RecordCount > 0 Then
strName = rsFiles.Fields("name")
strUrl = rsFiles.Fields("url")
rsFiles.MoveNext
Do While NOT rsFiles.EOF
strName = strName & "," &rsFiles.Fields("name")
strUrl = strUrl & "," & rsFiles.Fields("url")
rsFiles.MoveNext
Loop
End If
'response to client
Response.Write("SongName=" & Server.URLEncode(strName) & "&URL=" & strUrl)
' close the connection
' release resource
Set rsFiles = Nothing
cnn.Close()
Set cnn = Nothing
%>

下面是 requestReciever.php 的代碼

<?php

$result = executeSql("SELECT * FROM songsInfo WHERE type='$strWhere' ORDER BY id DESC");
if (!$result) {
HandleErrors(__FILE__.':Open database error.<br>');
}else{
// walkthrough the recordset and
// prepare URL/POST variables strings
$oRows=@mysql_fetch_object($result);
$strName = $oRows->name;
$strUrl = $oRows->url;

// response to client
while ($oRows=@mysql_fetch_object($result)){
$strName .= ",".$oRows->name;
$strUrl .= ",".$oRows->url;
}
echo "SongName=".$strName ."&URL=".$strUrl
mysql_free_result($result);
}

// close the connection
// release resource
mysql_close($id_link);
?>

新聞來自: 新客網(www.xker.com) 詳文參考:http://www.xker.com/page/e2007/0118/19309.html

閱讀全文

與flash代碼checkbox顯示文字相關的資料

熱點內容
u盤傳文件時速度波動太大 瀏覽:490
用友u8資料庫沖突怎麼辦 瀏覽:694
如何更改網路賬戶移動 瀏覽:494
微信收到excel文件打開數字是亂碼 瀏覽:44
網路的傳輸方式 瀏覽:23
版本項的概念 瀏覽:797
機關文件要求每行多少字元 瀏覽:484
怎麼添加描述文件 瀏覽:890
路由固件開發工具 瀏覽:819
flash代碼checkbox顯示文字 瀏覽:226
java定義矩陣 瀏覽:609
如何創建word文檔 瀏覽:708
ug80模具設計全套教程 瀏覽:730
蘋果手機6p自帶壁紙 瀏覽:535
applestore評論不了 瀏覽:223
單韻母app哪個好 瀏覽:213
jstl和el習題 瀏覽:371
素描教學的網站有哪些 瀏覽:335
內存文件是干什麼的 瀏覽:725
win7共享登陸不用密碼怎麼設置 瀏覽:12

友情鏈接