用ASP 或者Delphi生成 Flash 動畫 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
此為轉貼資料 用ASP 或者Delphi生成 Flash 動畫
孫以義
http://bukoo.sourceforge.net/bukooFlashObjects.doc 一、概述 Flash 是 Macromedia 公司工具出品的著名網頁動畫和多媒體工具,這個向量格式網頁工具自推出以來,受到廣泛的歡迎和應用,截止2000年6月的統計,Flash的用戶達到2億4千8百萬,即大約91.8%的Web用戶能夠觀看Flash動畫 。
Flash動畫是以SWF文件格式存放的,Macromedia 公司於1998年4月公佈了SWF文件的格式,可參見http://www.openswf.org,並推出了Macromedia Flash FileFormat (SWF) SDK (本文以下簡稱SWF SDK),用於開發者研製開發Flash動畫即SWF文件的生成工具。SWF SDK中包含了SWF文件格式的說明文檔、用Microsoft Visual C++開發的C++類(classes)以及一些範例 。
其中的C++類分爲兩個層次:低層類(low level classes)和高級類(high level classes)。低層類是對SWF文件元素的直接影射和封裝,高級類是進一步的抽象,從而更加容易使用,例如高級類中可以用圓心座標和半徑定義一個圓形,而低層類中需要用曲線形狀記錄(curved shape records)來構造圓形。讀者可以下載SWF SDK閱讀其中的文檔以瞭解更多的細節。
本文筆者應用Microsoft Visual C++中的ATL,將SWF SDK中的高級類封裝成了COM Objects,以便使得使用更多的編程語言,例如Borland Delphi, ASP,Visual Basic等所有支援COM Automation的語言都能夠生成Flash動畫。這些COM Objects 被命名爲Bukoo Flash Objects。本文不是描述Bukoo Flash Objects的開發方法和過程,而是介紹如何使用它。如果結合ASP和Bukoo Flash Objects,就能在網頁中動態生成Flash動畫,而不需要Flash軟體。
二、下載安裝 Bukoo Flash Objects可以在以下網址下載:
http://www.delphibbs.com/bukoo或者http://www.geocities.com/yiyisun/bukoo。
下載的文件爲 swfobjs.zip,解壓後除了文檔和範例,Bukoo Flash Objects就在swfobjs.dll中,請使用 regsvr32 swfobjs.dll安裝Bukoo Flash Objects,使用regsvr32 /u swfobjs.dll卸除Bukoo Flash Objects。 三、基本物件及其屬性 Bukoo Flash Objects總共包括三個COM Objects:swfMovie、swfObject和swfAction。
通過創建這三個物件生成Flash動畫的過程是:創建swfMovie動畫物件,設置動畫屬性,例如畫面尺寸、每秒幀數,在各個幀中創建、插入和刪除swfObject元素物件和swfAction動作物件,最後輸出Flash動畫。
下面是這三個物件應用方法介紹。 1、 swfMovie 動畫物件 swfMovie物件代表即將生成的Flash動畫,首先需要設置的是動畫的大小,swfMovie物件的SetSize方法用於設置動畫的尺寸。要注意SWF中座標單位是twip,即1/1440英寸,或者說是1/20圖元,例如動畫尺寸爲400 x 300圖元,即爲 8000 x 6000 twip。必須這樣調用:SetSize(8000, 6000)。
動畫可以都多個幀(frame),動畫播放的速度爲每秒幀速。SetFrameRate(12),就是動畫每秒放12幀,每秒幀速高,動畫平滑,但是SWF會變大,影響下載速度,故需要權衡利弊。動畫都多少幀不必設置,只管用GotoFrame方法定位到指定幀,然後插入元素或者動作,swfMovie物件自動增加幀數到調用GotoFrame方法的最大數目。
插入和刪除元素的方法是 AddObject,RemoveObject,插入動作的方法是AddAction。有哪些元素和動作將在下兩節中介紹。這裏暫且先看如何輸出SWF文件。
WriteMovie方法就是按照指定的檔案名生成SWF文件。
或者,swfMovie的Content屬性是VARIANT類型,可以用ASP中的response.binarywite輸出到網頁中。詳見下面的範例。
2、 swfObject 元素物件 swfObject像是一個千面人,創建這個物件以後,可以用其MakePolygon方法使其變成多邊形、用MakeRectangle方法變成矩形、用MakeOval方法變成橢圓形、用MakeCircle方法變成圓形、用MakePitcure方法變成Jpeg圖像、用MakeButton方法變成按鈕、用MakeSound方法變成聲音、用MakeFont方法變成字體、用MakeText方法變成文字等等。
SWF中的文字處理比較特殊,需要先將TrueType字體轉換成字體物件,再用字體物件生成文字 。詳見下面的範例。
swfObject的Translate方法用於平移元素,座標定位twip;Rotate方法用於旋轉元素;Scale用於縮放元素。注意旋轉和縮放方法的參數單位也比較特殊,稱爲Fixed,簡單的換算方法是乘以65536,例如旋轉10度,需要用10*65536,放大2杯,需要用2*65536,依次類推。
swfObject的SetLineWidth方法用於設置物件邊框線的寬度,單位twip;SetLineColorA方法用於設置物件邊框線的顔色,它有四各參數,分別代表紅、綠、藍和Alpha,Alpha參數規定顔色的透明程度。alpha=255不透明,完全覆蓋下面的圖形,alpha=0全透明,讓下面的圖形全部透出來,自己就看不見了。
swfObject的SetNoFill方法用於設置物件不填充,SetSolidFill用於設置物件用單色填充,也可以用alpha規定透明程度。SetLinearFill方法用於設置物件從一個顔色到另外一個顔色線性逐漸過渡,SetLinearFillCenter方法用於設置顔色線性過渡的中心點,SetRadialFill方法用於設置物件從一個顔色到另外一個顔色放射性逐漸過渡,SetRadialFillCenter方法用於設置顔色放射性過渡的中心點。
swfObject變成按鈕的方法的過程稍微複雜些,因爲按鈕需要四個圖形,分別代表按鈕普通狀態、滑鼠劃過狀態、滑鼠下落狀態和提示狀態的圖形。按鈕被按動後將激發的動作,需要用QueueEvent方法加入動作物件。 3、 swfAction 動作物件 目前,Bukoo Flash Objects支援五個動作,停止動畫、播放動畫、跳轉到某個幀、導航到URL,以及在使某個html frame 導航到URL。與swfObject一樣,swfAction物件創建後,可以用MakeActionStop、MakeActionPlay、MakeActionGotoFrame、MakeActionGotoURL以及MakeActionGotoURLTarget變成相應的動作。
可以在每個幀中插入停止動畫的動作,並插入按鈕物件,按鈕物件啟動跳轉幀動作,首先互動式動畫。 完整的物件介面,請參考文件obj_interface.htm,下面結合ASP 和Delphi示範如何使用Bukoo Flash Object。 四、ASP範例 這個ASP程式(sample1.asp)將動態創建的Flash動畫包含放射性填充背景、一個自右向左移動的文字和三個擴張的圓形, SWF文件將以二進位流的方式被寫入到瀏覽器中。 <%
' 創建 Bukoo Flash Objects
Set movie = Server.CreateObject("swfobjs.swfMovie")
Set obj = Server.CreateObject("swfobjs.swfObject")
' 設置動畫屬性
with movie
.SetSize 6000, 1000
.SetFrameBkColor 255, 255, 255
.SetFrameRate 20
end with
' 創建放射性填充背景
with obj
.MakeRectangle 0, 0, 5980, 980
.SetRadialFill 255, 255, 255, 255, 196, 196, 255, 255
.SetRadialFillCenter 1000, 500
.SetDepth 0
end with
movie.AddObject obj
' 創建字體
Set font = Server.CreateObject("swfobjs.swfObject")
with font
.MakeFont "MyFont"
.AddGlyph "Arial", "Bukoo", AscW("B")
.AddGlyph "Arial", " ", AscW(" ")
.AddGlyph "Arial", "is coming soon", AscW("I")
end with
' 生成移動的文字
Set txt = Server.CreateObject("swfobjs.swfObject")
txt.MakeText "B I", font
txt.Scale 40000, 40000
txt.SetSolidFill 196, 0, 255, 255
txt.SetDepth 1
for ii = 0 to 240
movie.GotoFrame ii
if ii > 0 then movie.RemoveObject txt
txt.translate 5000-ii*50, 100
movie.AddObject txt
next
' 生成第一個圓形,淡綠色,半透明
for ii = 1 to 60
movie.GotoFrame ii + 20
if ii > 1 then movie.RemoveObject obj
if ii < 60 then
with obj
.MakeCircle 1000, 500, 80 * ii
.SetNoFill
.SetLineColorA 128, 255, 128, 224
.SetLineWidth 200
.SetDepth 1
end with
movie.AddObject obj
end if
next
' 生成第二個圓形,淡黃色,半透明
for ii = 1 to 60
movie.GotoFrame ii + 100
if ii > 1 then movie.RemoveObject obj
if ii < 60 then
with obj
.MakeCircle 1000, 500, 80 * ii
.SetNoFill
.SetLineColorA 255, 255, 128, 224
.SetLineWidth 200
.SetDepth 2
end with
movie.AddObject obj
end if
next
' 生成第三個圓形,淡紅色,半透明
for ii = 1 to 60
movie.GotoFrame ii + 180
if ii > 1 then movie.RemoveObject obj
if ii < 60 then
with obj
.MakeCircle 1000, 500, 80 * ii
.SetNoFill
.SetLineColorA 255, 128, 128, 224
.SetLineWidth 200
.SetDepth 3
end with
movie.AddObject obj
end if
next
'在20幀加入聲音
movie.GotoFrame 20
obj.MakeSound "c:\audio.WAV"
movie.AddObject obj
' 創建文件
movie.MakeMovie
' 將文件寫入瀏覽器
response.contentType = "application/x-shockwave-flash"
response.buffer = false
response.binarywrite movie.Content
' 刪除暫存檔案
movie.DeleteTempFile
%> 如果需要將動態生成的Flash動畫插入其他網頁,可以用參照 dispswf.asp 來做,以下是 dispswf.asp的內容。 <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Bukoo Flash Objects Test</title>
</head>
<%
swf_url = request("swf_url")
width = request("width")
height = request("height")
%>
<body background="bg.gif">
Welcome to use Bukoo Flash Objects with ASP
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0" WIDTH="<%=width%>" HEIGHT="<%=height%>"> "> <embed src="<%=swf_url%>" quality="high" bgcolor="#FFFFFF" WIDTH="<%=width%>" HEIGHT="<%=height%>" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version =ShockwaveFlash"> </object> </body> </html> 兩個ASP配合使用的URL爲: http://localhost/swf/dispswf.asp?swf_url=sample1.asp&width=300&height=50 結果如下圖所示: 五、Delphi範例 以下Delphi程式使用Bukoo Flash Objects創建包含放射性填充背景和一個旋轉並縮小文字的Flash動畫,所生成的SWF文件被寫入磁片,並用Flash ActiveX Contorl 顯示出來。 unit Unit2; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, ShockwaveFlashObjects_TLB; type TForm1 = class(TForm) Button1: TButton; ShockwaveFlash1: TShockwaveFlash; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} uses comObj, ShellAPI; procedure TForm1.Button2Click(Sender: TObject); begin // 控制Flash ActiveX Control 播發動畫 ShockwaveFlash1.play; end; procedure TForm1.Button3Click(Sender: TObject); begin // 控制Flash ActiveX Control 停止播發動畫 ShockwaveFlash1.Stop; end; procedure TForm1.Button1Click(Sender: TObject); const filename = 'c:\sample2.swf'; var vv, txt, obj: variant; ii: integer; begin // 創建Bukoo Flash Objects vv := CreateOLEObject('swfObjs.swfMovie'); vv.SetSize(6400, 3700); txt := CreateOLEObject('swfObjs.swfObject'); obj := CreateOLEObject('swfObjs.swfObject'); // 創建反射線填充背景 obj.MakeRectangle(0, 0, 6380, 3680); obj.SetRadialFill(255, 255, 255, 255, 255, 224, 224, 255); obj.SetRadialFillCenter (3190, 1895); obj.SetDepth(0); vv.AddObject(obj); // 創建字體 obj.MakeFont('MyFont'); obj.AddGlyph('Arial', 'Hello,', ord('H')); obj.AddGlyph('Arial', 'Bukoo', ord('B')); // 創建文字 txt.MakeText('HB', obj); txt.translate(500, 1500); txt.SetSolidFill(255, 0, 0, 250); txt.Scale(65536 div 2, 65536 div 2); vv.AddObject(txt); // 旋轉和縮小文字 for ii := 10 to 50 do begin vv.GotoFrame(ii); if ii >= 10 then vv.RemoveObject(txt); txt.rotate( (50-ii)*65536 * 9); txt.Scale( (60-ii)*6553, (60-ii)*6553); txt.SetSolidFill(255, 0, 0, (ii-9)*5); vv.AddObject(txt); end; // 輸出SWF文件 vv.WriteMovie(filename); // 將 SWF載入Flash ActiveX Contorl顯示 ShockwaveFlash1.Movie := filename; ShockwaveFlash1.play; end; end. 程式運行結果如下圖。 六、進一步討論 通過COM技術,Bukoo Flash Objects 在VC++以外的其他程式設計語言或者環境,與VC++的SWF SDK之間架設了橋梁,使得利用ASP、Delphi和其他語言,如VB能夠以很方便簡潔的的方式製作Flash動畫。 但是,SWF SDK中包含了許多錯誤(bug),下載和使用SWF SDK的讀者需要額外注意,例如,其中沒有將TrueType字體轉換爲Flash字體的功能、物件的幾何變換公式是錯誤的等等。這些問題在openswf.org和flashkit.com的討論組中有很多討論。筆者在製作Bukoo Flash Objects時,已經儘量改了一批類似的缺陷和錯誤。估計難免還有遺漏之處,這將大大影響Bukoo Flash Objects的質量。隨著Flash 5 的正式發佈,預計SWF 5 的SDK不久也會推出,希望它能修正其中的bug,屆時筆者將用新的SDK重新編譯Bukoo Flash Objects。 下一個版本的Bukoo Flash Objects計劃將增加對中文、對嵌如入動畫(sprite)和對變形(morph)的支援。 歡迎讀者對Bukoo Flash Objects提出建議和批評。 孫以義 yysun@263.net 2000/8/28 於Ypsilanti, MI USA 參考網站 http://www.macromedia.com/software/flash/open/licensing/ http://www.openswf.org/ http://flashkit.com/board/forumdisplay.php?forumid=23 news://forums.macromedia.com/macromedia.open-swf 下載*.doc檔 http://delphi.ktop.com.tw/loadfile.php?TOPICID=8826613&CC=197407 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
此為轉貼資料
http://www6.163.com/it/item/0,2186,7416,00.html 動態生成Flash網頁 孫以義 (09/19/2000)
編者按:編程技術的發展真是日新月異。通過ASP等程式動態生成HTML網頁似乎已不能算是最新科技。Macromedia公司的Flash技術自推出以來,已有2億4千8百萬用戶,製作flash網站已是流行趨勢。就像HTML頁面可以用ASP動態生成 一樣,Flash 動畫也可以使用支援COM Automation的語言(如Borland Delphi,ASP, Visual Basic 等)動態生成。該文詳細介紹了如何應用Bukoo Flash Objects實現Flash網頁的交互應用,具有很強的實用價值。值得編程追新族們一覽。 一、概述 筆者應用 Microsoft Visual C++ 中的 ATL ,將 SWF SDK 中的高級類封裝成了 COM Objects ,以便使更多的支援COM Automation的編程語言能夠生成 Flash 動畫。這些 COM Objects 被命名爲 Bukoo Flash Objects 。本文不是描述 Bukoo Flash Objects 的開發方法和過程,而是介紹如何使用它。 二、下載安裝 Bukoo Flash Objects 可以在以下網址下載: http://www.delphibbs.com/bukoo 或者 http://www.geocities.com/yiyisun/bukoo 。下載的文件爲 Swfobjs.zip ,解壓後除了文檔和範例, Bukoo Flash Objects 就在 swfobjs.dll 中,使用 regsvr32 swfobjs.dll 安裝 Bukoo Flash Objects ;使用 Regsvr32 /Uswfobjs.dll 卸除 Bukoo Flash Objects 。 三、基本物件及其屬性 Bukoo Flash Objects 總共包括三個 COM Objects : SwfMovie 、 SwfObject 和 SwfAction 。 通過創建這三個物件來生成 Flash 動畫的過程是:創建 SwfMovie 動畫物件;設置動畫屬性;在幀中創建、插入、刪除 SwfObject 元素物件和 SwfAction 動作物件;最後輸出 Flash 動畫。 下面是這三個物件應用方法介紹。 1 .SwfMovie 動畫物件 SwfMovie 物件代表即將生成的 Flash 動畫,首先需要設置的是動畫的大小, SwfMovie 物件的 SetSize 方法用於設置動畫的尺寸。要注意Swf中座標單位是 twip ,即 1/1440 英寸,或者說是 1/20 圖元,例如動畫尺寸爲 400 x 300 圖元,即爲 8000 x 6000 twip 。必須這樣調用: setsize(8000, 6000) 。 setFrameRate(12) ,就是動畫每秒放 12 幀,每秒幀速高,動畫平滑,但是 Swf文件會變大,影響下載速度,故需要權衡利弊。用 GotoFrame 方法定位到指定幀,然後插入元素或者動作, SwfMovie 物件自動增加幀數到調用 GotoFrame 方法的最大數目。 插入和刪除元素的方法是 AddObject , RemoveObject ,插入動作的方法是 AddAction 。 WriteMovie 方法就是按照指定的檔案名生成 sWF 文件。 SwfMovie 的 Content 屬性是 VARIANT 類型,也可以用 AsP 中的 response.binarywite 輸出到網頁中。 2 . SwfObject 元素物件 SwfObject 像是一個千面人,創建這個物件以後,可以用其 MakePolygon 方法使其變成多邊形;用 MakeRectangle 方法變成矩形;用 MakeOval 方法變成橢圓形;用 MakeCircle 方法變成圓形;用 MakePitcure 方法變成 Jpeg 圖像;用 MakeButton 方法變成按鈕;用 Makesound 方法變成聲音;用 MakeFont 方法變成字體;用 MakeText 方法變成文字等等。sWF 中的文字處理比較特殊,需要先將 TrueType 字體轉換成字體物件,再用字體物件生成文字。 SwfObject 的 Translate 方法用於平移元素,座標定位 twip ; Rotate 方法用於旋轉元素; scale 用於縮放元素。注意旋轉和縮放方法的參數單位也比較特殊,稱爲 Fixed ,簡單的換算方法是乘以 65536 ,例如旋轉 10 度,需要用 10×65536 ,放大 2倍,需要用 2×65536 ,依次類推。 SwfObject 的 setLineWidth 方法用於設置物件邊框線的寬度,單位 twip ; setLineColorA 方法用於設置物件邊框線的顔色,它有四個參數,分別代表紅、綠、藍和 Alpha 。Alpha 參數規定顔色的透明程度。 Alpha=255 不透明,完全覆蓋下面的圖形; Alpha=0 全透明,讓下面的圖形全部透出來,自己就看不見了。 SwfObject 的 setNoFill 方法用於設置物件不填充, setsolidFill 用於設置物件用單色填充,也可以用 alpha 規定透明程度。 setLinearFill 方法用於設置物件從一個顔色到另外一個顔色逐漸線性過渡, setLinearFillCenter 方法用於設置顔色線性過渡的中心點。setRadialFill 方法用於設置物件從一個顔色到另外一個顔色放射性逐漸過渡。 setRadialFillCenter 方法用於設置顔色放射性過渡的中心點。 SwfObject 變成按鈕的方法的過程稍微複雜些,因爲按鈕需要四個圖形,分別代表按鈕普通狀態、滑鼠劃過狀態、滑鼠下落狀態和提示狀態的圖形。按鈕被按動後將激發的動作,需要用 QueueEvent 方法加入動作物件。 3 . SwfAction 動作物件 目前, Bukoo Flash Objects 支援五個動作:停止動畫、播放動畫、跳轉到某個幀、導航到 URL ,以及在使某個 html frame 導航到 URL 。與 SwfObject 一樣, SwfAction 物件創建後,可以用 MakeActionstop 、 MakeActionPlay 、 MakeActionGotoFrame 、 MakeActionGotoURL 以及 MakeActionGotoURLTarget 變成相應的動作。 四、 ASP 範例 這個 ASP 程式( sample1.asp )將動態創建 Flash 動畫,包含放射性填充背景、一個自右向左移動的文字和三個擴張的圓形,Swf文件將以二進位流的方式被寫入到瀏覽器中。 sample1.asp源代碼。 如果需要將動態生成的 Flash 動畫插入其他網頁,可以用參照 dispswf.asp 來做。 兩個 ASP 配合使用的 URL 爲: http://localhost/swf/dispswf.asp?swf_url=sample1.asp&width=300&height=50 五、進一步討論 通過 COM 技術, Bukoo Flash Objects 在VC++的SWF SDK和VC++ 以外的其他程式設計語言或者環境之間架設了橋梁,使得利用 ASP 、Delphi 和其他語言能夠很方便地生成Flash 動畫。 但是,SWF SDK 中包含了許多錯誤 (bug) ,下載和使用SWF SDK 的讀者需要特別注意,例如,沒有將 TrueType 字體轉換爲 Flash 字體的功能、物件的幾何變換公式是錯誤的等等。這些問題在 openswf.org 和 flashkit.com 的討論組中有很多討論。筆者在製作 Bukoo Flash Objects 時,已經儘量改了一批類似的缺陷和錯誤。估計難免還有遺漏之處,這將大大影響 Bukoo Flash Objects 的質量。隨著 Flash 5 的正式發佈,預計SWF 5 的SDK不久也會推出,希望它能修正其中的 bug。屆時,筆者將用新的 SDK 重新編譯 Bukoo Flash Objects 。 下一個版本的 Bukoo Flash Objects 計劃將增加對中文、對嵌入動畫 (sprite) 和對變形 (morph) 的支援。 歡迎讀者對 Bukoo Flash Objects 提出建議和批評。 *********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together!
希望能大家敞開心胸,將知識寶庫結合一起
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
bugmans
高階會員 發表:95 回覆:322 積分:188 註冊:2003-04-12 發送簡訊給我 |
原本在sourceforge的bukoo專案已經連不上了,只剩下http://www.geocities.com/yiyisun/bukoo/
還有個hello,Bukoo的flash動畫,我將目前找到的資料補上,並將資料備份在Delphi Ktop上 檔案下載http://delphi.ktop.com.tw/download.php?download=upload/475040850fd56_bukoo.rar VB範例 SWF Generator http://www.planet-source-code.com/vb/sc ripts/ShowCode.asp?txtCodeId=32249&lngWId=1 (請將全形空白去除後就是正確的網址) awesome FLASH MOVIE maker with great effects!!! http://www.planetsourcecode.com/vb/sc ripts/ShowCode.asp?txtCodeId=42583&lngWId=1 (請將全形空白去除後就是正確的網址) 幸好此範例還有將swfobjs.dll備份下來,不至於全部的檔案都消失了 另外http://www.ponx.org/download/CD/Python/的swfobjs_2.zip也有這個檔案 安裝時請在dll所在目錄執行regsvr32.exe swfobjs.dll來註冊此dll檔 在http://dev.faqts.com/knowledge_base/view.phtml/aid/25323有Delphi的範例 只是我沒有Delphi無法確認是否可以執行 Delphi: Graphics: File: Animation: Flash: Create: How to create flash .swf files in Delphi? [code delphi] unit Unit2; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, ShockwaveFlashObjects_TLB; type TForm1 = class(TForm) Button1: TButton; ShockwaveFlash1: TShockwaveFlash; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} uses comObj, ShellAPI; procedure TForm1.Button2Click(Sender: TObject); begin // Flash ActiveX Control ShockwaveFlash1.play; end; procedure TForm1.Button3Click(Sender: TObject); begin // Flash ActiveX Control ShockwaveFlash1.Stop; end; procedure TForm1.Button1Click(Sender: TObject); const filename = 'c:\sample2.swf'; var vv, txt, obj: variant; ii: integer; begin // Bukoo Flash Objects vv := CreateOLEObject('swfObjs.swfMovie'); vv.SetSize(6400, 3700); txt := CreateOLEObject('swfObjs.swfObject'); obj := CreateOLEObject('swfObjs.swfObject'); // obj.MakeRectangle(0, 0, 6380, 3680); obj.SetRadialFill(255, 255, 255, 255, 255, 224, 224, 255); obj.SetRadialFillCenter (3190, 1895); obj.SetDepth(0); vv.AddObject(obj); // obj.MakeFont('MyFont'); obj.AddGlyph('Arial', 'Hello,', ord('H')); obj.AddGlyph('Arial', 'Bukoo', ord('B')); // txt.MakeText('HB', obj); txt.translate(500, 1500); txt.SetSolidFill(255, 0, 0, 250); txt.Scale(65536 div 2, 65536 div 2); vv.AddObject(txt); // for ii := 10 to 50 do begin vv.GotoFrame(ii); if ii >= 10 then vv.RemoveObject(txt); txt.rotate( (50-ii)*65536 * 9); txt.Scale( (60-ii)*6553, (60-ii)*6553); txt.SetSolidFill(255, 0, 0, (ii-9)*5); vv.AddObject(txt); end; // SWF vv.WriteMovie(filename); // SWF Flash ActiveX Control ShockwaveFlash1.Movie := filename; ShockwaveFlash1.play; end; end [/code] 至於原始碼在底下的網址可以下載,但沒有直接下載的壓縮檔,只能一個一個檔案下載 但我下載後到現在還無法用vc6編譯成功 http://www.koders.com/info.aspx?c=ProjectInfo&pid=GDGZPURZHF9U4MGT84N7741KQF 在swfobjs.idl可以找到三種物件所有的函式和屬性 IswfMovie 屬性 filename([out, retval] BSTR *pVal); filename([in] BSTR newVal); Content([out, retval] VARIANT *pVal); 函式 WriteMovie([in] BSTR fname); SetSize([in] long cx, [in] long cy); SetFrameRate([in] long framerate); AddObject([in] IUnknown* pUnk); GotoFrame([in] long index); SetFrameBkColor([in] unsigned char red, [in] unsigned char green, [in] unsigned char blue); RemoveObject([in] IUnknown* pUnk); AddAction([in] IUnknown* pUnk); MakeMovie(); SetTempDir([in] BSTR tempDir); DeleteTempFile(); ReadFileContent([in] BSTR fname, [out, retval] VARIANT *pVal); IswfObject 屬性 ObjectType([out, retval] short *pVal); ObjectType([in] short newVal); 函式 MakeRectangle([in] long xmin, [in] long ymin, [in] long xmax, [in] long ymax); MakeCircle([in] long center_x, [in] long center_y, [in] long radius); MakePolygon([in] long originX, [in] long originY); MakeOval([in] long xMin, [in] long yMin, [in] long xMax, [in] long yMax); SetLineWidth([in] long lineWidth ); SetLineColorA([in] unsigned char red, [in] unsigned char green, [in] unsigned char blue, [in] unsigned char alpha); SetSolidFill([in] unsigned char red, [in] unsigned char green, [in] unsigned char blue, [in] unsigned char alpha); SetLinearFill([in] unsigned char red1, [in] unsigned char green1, [in] unsigned char blue1, [in] unsigned char alpha1, [in] unsigned char red2, [in] unsigned char green2, [in] unsigned char blue2, [in] unsigned char alpha2); HRESULT SetLinearFillCenter([in] long centerX, [in] long centerY); SetRadialFill([in] unsigned char red1, [in] unsigned char green1, [in] unsigned char blue1, [in] unsigned char alpha1, [in] unsigned char red2, [in] unsigned char green2, [in] unsigned char blue2, [in] unsigned char alpha2); HRESULT SetRadialFillCenter([in] long centerX, [in] long centerY); Translate([in] long x, [in] long y); Rotate([in] long degree); Scale([in] long scaleX, [in] long scaleY); SetNoFill(); AddCurvedLine([in] long controlDX, [in] long controlDY, [in] long anchorDX, [in] long anchorDY); AddStraightLine([in] long dx, [in] long dy); Delete(); MakeEditText([in] long xmin, [in] long ymin, [in] long xmax, [in] long ymax, [in] BSTR Text); SetEditTextHeight([in] long height); SetEditTextEditable([in] BOOL editable); SetEditTextColor([in] unsigned char red, [in] unsigned char green, [in] unsigned char blue); MakePicture([in] long xmin, [in] long ymin, [in] long xmax, [in] long ymax, [in] long bitmap_x, [in] long bitmap_y, [in] BSTR filename); SetDepth([in] long depth); MakeSound([in] BSTR filename); MakeButton([in] IUnknown *p1, [in] IUnknown *p2, [in] IUnknown *p3, [in] IUnknown *p4); QueueEvent([in] IUnknown *Action, [in] long iEvent); SetBitmapFillJpeg([in] long bitmap_x, [in] long bitmap_y, [in] BSTR filename); MakeFont([in] BSTR name); MakeText([in] BSTR text, [in] IUnknown *pUnk); AddGlyph([in] BSTR font, [in] BSTR text, [in] long unicode); MakeButtonSimple([in] IUnknown* p1, [in] short r1, [in] short g1, [in] short b1, [in] short a1, [in] short r2, [in] short g2, [in] short b2, [in] short a2); SetLineColor([in] unsigned char red, [in] unsigned char green, [in] unsigned char blue, [in] unsigned char alpha); AddGlyphEx([in] BSTR font, [in] BSTR text, [in] long unicode, [in] long advance); MakeTextEx([in] BSTR text, [in] IUnknown *pUnk, [in] long x, [in] long y, [in] long size); ScaleEx(long scaleX, long scaleY); MakeTextSimple([in] BSTR fontname, [in] BSTR text, [in] long x, [in] long y, [in] long size); AddNewPath([in] long dx, [in] long dy); IswfAction 函式 MakeActionStop(); MakeActionPlay(); MakeActionGotoFrame([in] long frame); MakeActionGotoURL([in] BSTR url); MakeActionGotoURLTarget([in] BSTR url, [in] BSTR target);
編輯記錄
bugmans 重新編輯於 2007-12-01 00:59:41, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |