SlideShare ist ein Scribd-Unternehmen logo
1 von 91
Downloaden Sie, um offline zu lesen
相容於 node.js 的
網頁型桌面程式設計
( 使用 Electron.js 開發 )
陳鍾誠
2017 年 10 月 23 日
程式人《十分鐘系列》程式人《十分鐘系列》
本文衍生自維基百科
這年頭
● 大家的焦點好像都在《 APP 和網
站》,傳統的視窗程式愈來愈少人
關注了 ...
這種現象
● 和《手機興起,微軟衰落》
的大環境應該有密切的關係!
但是
●桌機上的《視窗程式》,終
究還是有需要的 ...
不過令人感到困擾的是
● 傳統微軟的 WinForm 已然過時,
微軟的 WPF 看來也快過時了,
但新的 Xamarin 又前途未卜 ...
開放原始碼的 Qt 視窗開發工具
● 感覺很強大
● 而且還支援 JavaScript/QML ,甚至可
以在 Android/iOS 上跑 …
● 但很可惜難以支援 Node.js 的 npm
套件 ...
對於已經把主力
●轉到 Node/JavaScript 的我
●不能使用 npm 套件的 Qt 似乎
沒有足夠的吸引力!
於是
●我把眼光轉到 electron.js
這個開發工具上 ...
這學期
●我就用 electron.js
來教視窗程式設計了。
當然
● 這是經過測試評估的結果 ...
到底
●甚麼是 electron.js 呢?
簡單的說
● Electron.js 就是一套可以讓你用
HTML/CSS/JavaScript 等 web 開發技術,來
開發桌面應用的工具
● 而且 Electron.js 和 node.js 幾乎完全
相容,幾乎可以使用全部的 npm 套件!
以下是 electron.js 的官網
https://electron.atom.io/
要使用 electron.js 開發視窗程式
●您首先必須安裝 node.js
–https://nodejs.org/
裝好後、使用 npm 指令
●安裝 electron.js
–npm install -g electron
安裝完畢之後
●就可以開始寫 electron.js
的專案程式了!
問題是
●怎麼開始寫呢?
這常常是現今學程式的人
●需要面對的第一個問題!
解決方法通常是
●上官網看看範例在哪裡
●然後下載來執行看看!
以下是 electron.js 的官網範例
執行範例後你會看到下列畫面
基本上只是個 Hello 程度的專案而已
● 其檔案列表如下:
讓我們詳細看看內容
首先看 package.json
這和 node.js 的 package.json 幾乎一模一樣
其中的 main 欄位指出了主程式是 main.js
如果您還不熟悉 node.js
可以參考另一篇十分鐘系列
https://www.slideshare.net/ccckmit/javascript-npm
當我們打入
●electron 《專案路徑》
–例如 : electron .
的時候,就會執行該主程式
在主程式 main.js 中
會用 loadURL() 函數載入網頁
於是我們就可以
●啟動《網頁型視窗介面》了
–像是範例中的 index.html
上述範例的 index.html 如下
注意這裡可以引入像
node.js 一樣的模組
( 這是和一般 HTML 不一樣的地方 )
該範例基本上只是用來顯示
Node/Electron/Chromium 的版本號而已
● 所以你才會看到下列畫面
現在
●你已經看完第一個範例了
但是
●應該還有很多疑問 ...
為了釐清這些疑問
●您可以下載我課程用的範例
課程範例網址如下
https://github.com/cccnqu/wp106a
請使用下列 git 指令取得範例
● git clone https://github.com/cccnqu/wp106a.git
然後、讓我們一個一個範例執行
第一個範例就是
剛剛的 Hello 等級範例
不過我把主程式 main.js 簡化了一下
看起來應該簡單清楚多了
接著讓我們看
範例 02-calculator
會寫網頁的應該已經猜到怎麼做的了
裡面用了 eval 來計算運算式
計算使用者輸入
的運算式欄位
接著是第三個範例 - 電子鐘
電子鐘主要用了 setTimeout 函數
讓時間可以每秒更新一次
第四個範例是翻譯系統
我們把一個小字典直接寫在程式裡面
但是以上這幾個範例
● 其實都只是瀏覽器就能做的事!
接下來才會碰到一些
● 原本瀏覽器不太方便做的事
像是
● 開關檔案
● 顯示對跨框選取檔案
● 印表機與 PDF 列印
● 抓取畫面並存檔
● 開很多網頁並互相通訊 …
所以接下來
● 讓我們開始看一些有使用到桌面功能
的範例程式 ...
首先是媒體播放程式 05-media
雖然看起來網頁也做得到
但是程式中用到了開檔對話框
dialog.showOpenDialog()
這是原本瀏覽器所不支援的功能
接著我們在 06-editor 範例中
同樣用對話框來製作開檔功能
而且開檔存檔功能
是放在《主功能表》上的
其功能表的程式碼如下
功能表裏還可以
輕易地掛入一些預設功能
然後我們在 06-editor/b 中
繼續延伸出《開新檔案》與《另存新檔》的功能
接著引入一個稱為 marked 的 npm 模組
marked 可以用來把 markdown 格式轉為 HTML
於是我們寫了一個 markdown 編輯器
利用 marked 將文件轉為 HTML 呈現
當然、執行這個程式前必須先安裝 marked
我們會在程式裡
用 marked 將 markdown 轉為 html
您除了可以做先前的檔案功能之外
● 還可以按滑鼠右鍵檢視開過那些檔案
並且可以點選超連結連到另一個檔案
當然也可以編輯 markdown 原始碼
然後進行檢視或存檔的動作
從 markdown 編輯器的範例中
● 您應該可以看到在 electron.js 中
使用 npm 模組是非常容易的事情!
接著讓我們再看幾個例子
像是自製瀏覽器
您可以使用 webview
這個特殊的 HTML 標記
然後加上對應的控制程式
就能完成
●一個內嵌瀏覽器了
接著是印表功能的範例
按下 print 時會出現列印視窗
您也可以儲存為 PDF 後檢視
然後再決定要不要印 ...
這些功能的程式碼也都不難
因為都內建在 electron.js 裏面了
然後也可以做抓取螢幕畫面的程式
主要程式碼片段如下
如果您想做個像《檔案總管》的程式
當然也是可行的
只是程式碼會比較長
這樣
● 我們就看完了不少 Electron.js 的
程式範例了
但是最後
●請您必須注意一件事 ...
Node.js
● 是單行程 Single Process 的架構
Electron.js
● 則通常不只包含一個 Process
Electron.js
● 其主程式為一個行程 ( 稱為 Main Process)
● 每個 BrowserWindow 載入網頁又是一個行
程 ( 稱為 Render Process)
Render Process
● 可以透過 remote 物件存取主行程的內容
也可以透過 ipc 互相通訊
透過 Electron.js
● 我們就可以輕易地寫出《網頁型的
視窗程式》
● 並且可以任意的存取 node.js 的
npm 套件或程式了。
這樣
● 原本使用 node.js 的朋友們
● 就可以輕易地寫出桌面程式了!
這就是我們今天的
●十分鐘系列!
希望您會喜歡!
我們下回見!
Bye Bye!

Weitere ähnliche Inhalte

Was ist angesagt?

西洋史 (你或許不知道但卻影響現代教育的那些事)
西洋史  (你或許不知道但卻影響現代教育的那些事)西洋史  (你或許不知道但卻影響現代教育的那些事)
西洋史 (你或許不知道但卻影響現代教育的那些事)
鍾誠 陳鍾誠
 

Was ist angesagt? (20)

用十分鐘理解 《微分方程》
用十分鐘理解  《微分方程》用十分鐘理解  《微分方程》
用十分鐘理解 《微分方程》
 
怎樣才算是一個合格的資工系畢業生
怎樣才算是一個合格的資工系畢業生怎樣才算是一個合格的資工系畢業生
怎樣才算是一個合格的資工系畢業生
 
那些我們幾乎都沒學過 ,但是也不太會想去學的 《非歐幾何學》
那些我們幾乎都沒學過 ,但是也不太會想去學的  《非歐幾何學》那些我們幾乎都沒學過 ,但是也不太會想去學的  《非歐幾何學》
那些我們幾乎都沒學過 ,但是也不太會想去學的 《非歐幾何學》
 
用十分鐘瞭解 陳鍾誠的程式設計課 (採用JavaScript + C的原因)
用十分鐘瞭解  陳鍾誠的程式設計課  (採用JavaScript + C的原因)用十分鐘瞭解  陳鍾誠的程式設計課  (採用JavaScript + C的原因)
用十分鐘瞭解 陳鍾誠的程式設計課 (採用JavaScript + C的原因)
 
用20分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》
用20分鐘搞懂   《系統分析、軟體工程、專案管理與設計模式》用20分鐘搞懂   《系統分析、軟體工程、專案管理與設計模式》
用20分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》
 
如何用十分鐘快速瞭解一個程式語言 《以JavaScript和C語言為例》
如何用十分鐘快速瞭解一個程式語言  《以JavaScript和C語言為例》如何用十分鐘快速瞭解一個程式語言  《以JavaScript和C語言為例》
如何用十分鐘快速瞭解一個程式語言 《以JavaScript和C語言為例》
 
用十分鐘欣賞《物理學公理系統的演化史》
用十分鐘欣賞《物理學公理系統的演化史》用十分鐘欣賞《物理學公理系統的演化史》
用十分鐘欣賞《物理學公理系統的演化史》
 
西洋史 (你或許不知道但卻影響現代教育的那些事)
西洋史  (你或許不知道但卻影響現代教育的那些事)西洋史  (你或許不知道但卻影響現代教育的那些事)
西洋史 (你或許不知道但卻影響現代教育的那些事)
 
用十分鐘了解 《大學老師到底是一個甚麼樣的工作》?
用十分鐘了解 《大學老師到底是一個甚麼樣的工作》?用十分鐘了解 《大學老師到底是一個甚麼樣的工作》?
用十分鐘了解 《大學老師到底是一個甚麼樣的工作》?
 
適合資工系畢業生的 一百零一種工作
適合資工系畢業生的  一百零一種工作適合資工系畢業生的  一百零一種工作
適合資工系畢業生的 一百零一種工作
 
區塊鏈 (比特幣背後的關鍵技術) -- 十分鐘系列
區塊鏈  (比特幣背後的關鍵技術)   -- 十分鐘系列區塊鏈  (比特幣背後的關鍵技術)   -- 十分鐘系列
區塊鏈 (比特幣背後的關鍵技術) -- 十分鐘系列
 
用十分鐘瞭解陳鍾誠的 《課程、教材與學習方法》
用十分鐘瞭解陳鍾誠的  《課程、教材與學習方法》用十分鐘瞭解陳鍾誠的  《課程、教材與學習方法》
用十分鐘瞭解陳鍾誠的 《課程、教材與學習方法》
 
用20分鐘向 nand2tetris 學會設計處理器
用20分鐘向 nand2tetris 學會設計處理器用20分鐘向 nand2tetris 學會設計處理器
用20分鐘向 nand2tetris 學會設計處理器
 
張量與相對論
張量與相對論張量與相對論
張量與相對論
 
用十分鐘瞭解 新竹科學園區的發展史
用十分鐘瞭解  新竹科學園區的發展史用十分鐘瞭解  新竹科學園區的發展史
用十分鐘瞭解 新竹科學園區的發展史
 
假如我是個大學資工系畢業生
假如我是個大學資工系畢業生假如我是個大學資工系畢業生
假如我是個大學資工系畢業生
 
梯度下降法 (隱藏在深度學習背後的演算法) -- 十分鐘系列
梯度下降法  (隱藏在深度學習背後的演算法) -- 十分鐘系列梯度下降法  (隱藏在深度學習背後的演算法) -- 十分鐘系列
梯度下降法 (隱藏在深度學習背後的演算法) -- 十分鐘系列
 
用十分鐘瞭解 機率、統計、還有R軟體
用十分鐘瞭解  機率、統計、還有R軟體用十分鐘瞭解  機率、統計、還有R軟體
用十分鐘瞭解 機率、統計、還有R軟體
 
那些年、我們還沒學會就已經過時的那些技術
那些年、我們還沒學會就已經過時的那些技術那些年、我們還沒學會就已經過時的那些技術
那些年、我們還沒學會就已經過時的那些技術
 
對程式人有用的《幾何學》
對程式人有用的《幾何學》對程式人有用的《幾何學》
對程式人有用的《幾何學》
 

Ähnlich wie 相容於node.js的 網頁型桌面程式設計 (使用Electron.js 開發)

20120524 App開發流程與小工具分享@UI Cafe
20120524 App開發流程與小工具分享@UI Cafe20120524 App開發流程與小工具分享@UI Cafe
20120524 App開發流程與小工具分享@UI Cafe
Justin Lee
 
完全用GNU/Linux工作
完全用GNU/Linux工作完全用GNU/Linux工作
完全用GNU/Linux工作
maolins
 
完全用GNU/Linux工作
完全用GNU/Linux工作完全用GNU/Linux工作
完全用GNU/Linux工作
maolins
 
《Linux运维趋势》2012年5月号 总第19期
《Linux运维趋势》2012年5月号 总第19期《Linux运维趋势》2012年5月号 总第19期
《Linux运维趋势》2012年5月号 总第19期
51CTO
 

Ähnlich wie 相容於node.js的 網頁型桌面程式設計 (使用Electron.js 開發) (9)

20120524 App開發流程與小工具分享@UI Cafe
20120524 App開發流程與小工具分享@UI Cafe20120524 App開發流程與小工具分享@UI Cafe
20120524 App開發流程與小工具分享@UI Cafe
 
完全用GNU/Linux工作
完全用GNU/Linux工作完全用GNU/Linux工作
完全用GNU/Linux工作
 
完全用GNU/Linux工作
完全用GNU/Linux工作完全用GNU/Linux工作
完全用GNU/Linux工作
 
初窺 Flutter 開發.pdf
初窺 Flutter 開發.pdf初窺 Flutter 開發.pdf
初窺 Flutter 開發.pdf
 
Node.js 進攻桌面開發
Node.js 進攻桌面開發Node.js 進攻桌面開發
Node.js 進攻桌面開發
 
最周刊第一期
最周刊第一期最周刊第一期
最周刊第一期
 
The Rational Behind Implementing an Open Source OS for Universal Apps
The Rational Behind Implementing an Open Source OS for Universal AppsThe Rational Behind Implementing an Open Source OS for Universal Apps
The Rational Behind Implementing an Open Source OS for Universal Apps
 
用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式
 
《Linux运维趋势》2012年5月号 总第19期
《Linux运维趋势》2012年5月号 总第19期《Linux运维趋势》2012年5月号 总第19期
《Linux运维趋势》2012年5月号 总第19期
 

Mehr von 鍾誠 陳鍾誠

Mehr von 鍾誠 陳鍾誠 (20)

用十分鐘搞懂 λ-Calculus
用十分鐘搞懂 λ-Calculus用十分鐘搞懂 λ-Calculus
用十分鐘搞懂 λ-Calculus
 
交⼤資訊⼯程學系備審資料 ⾱詠祥
交⼤資訊⼯程學系備審資料 ⾱詠祥交⼤資訊⼯程學系備審資料 ⾱詠祥
交⼤資訊⼯程學系備審資料 ⾱詠祥
 
smallpt: Global Illumination in 99 lines of C++
smallpt:  Global Illumination in 99 lines of C++smallpt:  Global Illumination in 99 lines of C++
smallpt: Global Illumination in 99 lines of C++
 
區塊鏈 (比特幣背後的關鍵技術) -- 十分鐘系列
區塊鏈  (比特幣背後的關鍵技術)   -- 十分鐘系列區塊鏈  (比特幣背後的關鍵技術)   -- 十分鐘系列
區塊鏈 (比特幣背後的關鍵技術) -- 十分鐘系列
 
系統程式 -- 前言
系統程式 -- 前言系統程式 -- 前言
系統程式 -- 前言
 
系統程式 -- 附錄
系統程式 -- 附錄系統程式 -- 附錄
系統程式 -- 附錄
 
系統程式 -- 第 12 章 系統軟體實作
系統程式 -- 第 12 章 系統軟體實作系統程式 -- 第 12 章 系統軟體實作
系統程式 -- 第 12 章 系統軟體實作
 
系統程式 -- 第 11 章 嵌入式系統
系統程式 -- 第 11 章 嵌入式系統系統程式 -- 第 11 章 嵌入式系統
系統程式 -- 第 11 章 嵌入式系統
 
系統程式 -- 第 10 章 作業系統
系統程式 -- 第 10 章 作業系統系統程式 -- 第 10 章 作業系統
系統程式 -- 第 10 章 作業系統
 
系統程式 -- 第 9 章 虛擬機器
系統程式 -- 第 9 章 虛擬機器系統程式 -- 第 9 章 虛擬機器
系統程式 -- 第 9 章 虛擬機器
 
系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器系統程式 -- 第 8 章 編譯器
系統程式 -- 第 8 章 編譯器
 
系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言系統程式 -- 第 7 章 高階語言
系統程式 -- 第 7 章 高階語言
 
系統程式 -- 第 6 章 巨集處理器
系統程式 -- 第 6 章 巨集處理器系統程式 -- 第 6 章 巨集處理器
系統程式 -- 第 6 章 巨集處理器
 
系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入系統程式 -- 第 5 章 連結與載入
系統程式 -- 第 5 章 連結與載入
 
系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器系統程式 -- 第 4 章 組譯器
系統程式 -- 第 4 章 組譯器
 
系統程式 -- 第 3 章 組合語言
系統程式 -- 第 3 章 組合語言系統程式 -- 第 3 章 組合語言
系統程式 -- 第 3 章 組合語言
 
系統程式 -- 第 1 章 系統軟體
系統程式 -- 第 1 章 系統軟體系統程式 -- 第 1 章 系統軟體
系統程式 -- 第 1 章 系統軟體
 
系統程式 - 第二章
系統程式 - 第二章系統程式 - 第二章
系統程式 - 第二章
 
nand2tetris 舊版投影片 -- 第五章 計算機結構
nand2tetris 舊版投影片 -- 第五章 計算機結構nand2tetris 舊版投影片 -- 第五章 計算機結構
nand2tetris 舊版投影片 -- 第五章 計算機結構
 
nand2tetris 舊版投影片 -- 第四章 機器語言
nand2tetris 舊版投影片 -- 第四章 機器語言nand2tetris 舊版投影片 -- 第四章 機器語言
nand2tetris 舊版投影片 -- 第四章 機器語言
 

Kürzlich hochgeladen

1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂
1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂
1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂
PUAXINYEEMoe
 
法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个
法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个
法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个
michaelell902
 
10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习
10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习
10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习
PUAXINYEEMoe
 

Kürzlich hochgeladen (9)

1.🎉“黑客”如何修改成绩?🤔🎉 在这个信息爆炸的时代,我们经常会看到各种作弊手段。但是你知道吗?有一种作弊方式可能比你想象中更巧妙:它就是——黑客![单...
1.🎉“黑客”如何修改成绩?🤔🎉 在这个信息爆炸的时代,我们经常会看到各种作弊手段。但是你知道吗?有一种作弊方式可能比你想象中更巧妙:它就是——黑客![单...1.🎉“黑客”如何修改成绩?🤔🎉 在这个信息爆炸的时代,我们经常会看到各种作弊手段。但是你知道吗?有一种作弊方式可能比你想象中更巧妙:它就是——黑客![单...
1.🎉“黑客”如何修改成绩?🤔🎉 在这个信息爆炸的时代,我们经常会看到各种作弊手段。但是你知道吗?有一种作弊方式可能比你想象中更巧妙:它就是——黑客![单...
 
1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂
1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂
1.1.3急救你必须懂四年级设计与工艺练习活页练习单元一四年级设计与工艺急救你必须懂
 
taibif_資料標準概念介紹_20240509_20240509_20340509.pdf
taibif_資料標準概念介紹_20240509_20240509_20340509.pdftaibif_資料標準概念介紹_20240509_20240509_20340509.pdf
taibif_資料標準概念介紹_20240509_20240509_20340509.pdf
 
taibif_開放資料流程-清理資料01-通則_20240509_20240509.pdf
taibif_開放資料流程-清理資料01-通則_20240509_20240509.pdftaibif_開放資料流程-清理資料01-通則_20240509_20240509.pdf
taibif_開放資料流程-清理資料01-通則_20240509_20240509.pdf
 
啟思中國語文 - 中二 單元一 - 孟嘗君列傳 - 記敍的方法和人稱1.pptx
啟思中國語文 - 中二 單元一 - 孟嘗君列傳 - 記敍的方法和人稱1.pptx啟思中國語文 - 中二 單元一 - 孟嘗君列傳 - 記敍的方法和人稱1.pptx
啟思中國語文 - 中二 單元一 - 孟嘗君列傳 - 記敍的方法和人稱1.pptx
 
法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个
法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个
法国蒙彼利埃国家高等建筑学院毕业证制作/德语歌德B1证书/加拿大新斯科舍省农业学院文凭加急制作一个
 
10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习
10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习
10.2.1 马来西亚各州名称的由来六年级历史单元练习马来西亚各州名称的由来练习
 
1.🎉成绩单,你的成绩! 💡🔥每个人都有自己的成绩单,它记录着我们努力的成果。但有时候,看着这些数字,却发现它们好像在嘲笑我?别担心,让我来告诉你们怎么改...
1.🎉成绩单,你的成绩! 💡🔥每个人都有自己的成绩单,它记录着我们努力的成果。但有时候,看着这些数字,却发现它们好像在嘲笑我?别担心,让我来告诉你们怎么改...1.🎉成绩单,你的成绩! 💡🔥每个人都有自己的成绩单,它记录着我们努力的成果。但有时候,看着这些数字,却发现它们好像在嘲笑我?别担心,让我来告诉你们怎么改...
1.🎉成绩单,你的成绩! 💡🔥每个人都有自己的成绩单,它记录着我们努力的成果。但有时候,看着这些数字,却发现它们好像在嘲笑我?别担心,让我来告诉你们怎么改...
 
Math Chapter3-教學PPT第03單元形體關係、體積與表面積Grade Six
Math Chapter3-教學PPT第03單元形體關係、體積與表面積Grade SixMath Chapter3-教學PPT第03單元形體關係、體積與表面積Grade Six
Math Chapter3-教學PPT第03單元形體關係、體積與表面積Grade Six
 

相容於node.js的 網頁型桌面程式設計 (使用Electron.js 開發)