線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4710
推到 Plurk!
推到 Facebook!

用ASP 或者Delphi生成 Flash 動畫

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-06 17:32:08 IP:61.64.xxx.xxx 未訂閱
此為轉貼資料    用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-06 17:50:22 IP:61.64.xxx.xxx 未訂閱
此為轉貼資料 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-12-01 00:56:02 IP:125.225.xxx.xxx 未訂閱
原本在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, 註解 無‧
系統時間:2024-04-25 22:42:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!