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

Delphi XE5 開發 Android 應用程式原來也可以很輕鬆(首部曲)

 
itwawa
一般會員


發表:5
回覆:15
積分:9
註冊:2008-08-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2014-03-10 04:09:32 IP:59.127.xxx.xxx 訂閱
 今天看到連站長都 PO 文出來,除了想向站長及PD版主請教一些問題外,我也分享一些我的心得,諸位參考看看...
給還沒開始使用 XE5 設計 Andriod 新手的一些建議
【背景介紹】
我是從今天一月底除夕前不小心看到縹緲's blog快快樂樂學習 delphi XE5 for Android ap,既然是快
樂學習我也來試試看,很感謝縹緲的這些文章,讓我們能快速學習。
從開始接觸到現在差不多一個多月,我的電腦 CPU i5,4G RAM,一台1T硬碟,其它顯示卡、光碟機等都沒有,
夠陽春吧!! 手機一台最便宜的小米1S,還是朋友送的,只有一條充電用的USB線及插頭。Delphi 我是從2.0
開始使用,一直停留在Delphi5,中間有升級到Delphi2010,但也只是要 Uinicode這個功能而已,所以我等於是從
Delphi5 直接跳到 XE5,我的配備如此簡單,相信各位的配備、技術應該都比我好,也可以快樂輕鬆學習。
【避免事項】
1.驅動程式盡量找原廠網站下載,一開始我也是從網上抓一個號稱小米1S的驅動程式,但總裝不起來,後來趕快
上原廠官網下載就OK了,不要在這點浪費時間,也不需要什麼特殊的連接線,看過本站一些文章,很多人在這點
浪費太多時間。
2.模擬器可中裝可不裝,要裝的話注意2點,(1)Use Host GPU 記得要打勾。(2)CPU選 ARM,Delphi目前只支援ARM
指令集,這點很可惜,Intel ATOM 速度跟真機差不多蠻快的,可惜 XE5 不支援,我已測試過,安裝apk到模擬器
都沒問題,但一執行就會出現錯誤,各位就不要再浪費時間測了。
【學習重點摘要】
1.先看Delphi XE5移動開發入門手冊。
2.看縹緲's blog快快樂樂學習、及輕鬆學習系列,先不用看其他的,等有基礎後再上網爬文,這樣最省時有效。
【設計重點摘要】
畫面佈局設計:
1.直接用 TScaleLayout,Align設alFit,不用管手機尺寸大小及解析度,可以WYSISWYG,其它可視原件都掛在
TScaleLayout下,我用圓型圖案不會變橢圓,還是正圓,簡單好用,很多人在這點也是浪費太多時間。稍微留
意一下,此法 X 座標沒什麼問題,Y座標會有負值,是因為相對於原點TScaleLayout而言才會有負值,但不影響
顯示。
2.畫面美觀問題:不一定要用 TMS 元件等元件,若只是為了美觀可善用 TRectangle...,搭配 Fill Gradient
屬性,還有 Effects 如 TShadowEffect 等,可以做出向像 ios 美美的外觀。放些沒太大用處的元件,還不如
放 Indy 來得有用一些。這點純粹看個人創意與巧思。我已經成功模擬 FB 選單可用手指拖拉,拉一半還可以
彈回去,連畫面都差不多一樣。
技術方面:
原則上跟Windows差別並不是太大,EMBD 為了跨平台,使用 FireMonkey,有些像 caption 變成在 text 上設定,
習慣了就好。ShowMessage適度使用,ShowMessage的問題網上已經討論很多,自己做一個類ShowMessage也很容易。
其他就看您設計內容再求所需技術。
今天就先簡介到此,以後有時間再介紹些更重要的觀念。
還再觀望等 XE6 的網友們,不用再等了,以我對 Delphi 的了解,現在 XE5 遇到的問題,XE 6 改進的機會不大,
只會又再資料庫上加強,Delphi 擅長的是分散式資料庫,現又專注於跨平台,所以才逐漸從 BDE、MIDAS 轉為
DataSnap DBExpress。
祝新手們有個愉快的開始...
【請教站長、縹緲、PD版大、各路高手們以下幾個問題】
1.急!! 我最頭大也最重要的問題,Addriod DataSnap Client 端,TSQLConnection Driver 的 CommunicationTimeout、
及 ConnectTimeOut 設定為 500 或 1000,但都不起作用,若主機沒開差不多要二十多秒才會有Error回應,我希望
如果主機沒開的情況下,Client 端能照 TSQLConnection 設定的 Timeout 時間回應不要 Hold 住那麼久,此需求譬如
應用程式一執行,會先跟主機連線做如詢問有無新版等訊息,我的電腦不會24小時都開著,所以有此需求。因DataSnap
功能太強,太好用了,但卡在這點上實在很可惜,讓我現只能先用 Indy TcpSercer 及 Indy TcpClient 先取代,希望
諸位高手能多多幫忙,看能否解決此問題。
2.Andriod Client 端如何透過 http 通訊方式 跟 DataSnap Server 取得一筆資料?
3.SQLite之前我也沒用過,這次學 Andriod 才知道有 SQLite,會選主要是因 Andriod 及 ios 都內嵌 SQLite,
雖然不是很好用,但不曉得還有什麼更好的選擇嗎? SQLite 最大的問題是免費版無 Encrypt,資料型態也很鬆散,
站長建議的 CDS,不曉得有 Encrypt功能嗎? 我指的是Local Database,Andriod 可免裝驅動程式嗎? 或者方便安裝?
另 CDS 還有一個問題,我猜 CDS 應該是 ClientDataset Saveto, Loadfrom 之類的用法,這樣1個 Table 就會有一個
CDS 檔,能否像 SQLite 把所有的 Table 包成一個 Database 檔,這樣也就方便安裝,否則一堆 CDS 檔也很頭大!!
4.我的手機是小米1S,物理解析度是標准四吋 854x480,但讀取如 Screen.Size.Height 及 Width 確只有 569x320,
試過好幾種方式讀取到的都是569x320,不知是何原因?
【回答站長問題】
ANDROID的DEBUG 我從沒試成功過,不知道Dear P.D, and itwawa,可以成功用Android手機DEBUG中斷點嗎?
答:用過,可正常使用沒問題。
Main Chen
高階會員


發表:29
回覆:134
積分:127
註冊:2002-10-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2014-03-10 06:09:15 IP:220.134.xxx.xxx 訂閱
需要再乘以 Scale 就是實際的大小:

Screen.Size.Height * FWinService.GetWindowScale(Self)

===================引 用 itwawa 文 章===================

4.我的手機是小米1S,物理解析度是標准四吋 854x480,但讀取如 Screen.Size.Height 及 Width 確只有 569x320,
試過好幾種方式讀取到的都是569x320,不知是何原因?
itwawa
一般會員


發表:5
回覆:15
積分:9
註冊:2008-08-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2014-03-10 22:31:24 IP:59.127.xxx.xxx 訂閱
對了,上次用ScreenService.GetScreenScale 抓出來 Scale 是1.5 沒錯,謝謝提醒。

是我問錯了,給它有點健忘,應該是問:不管選 Google Nexus4,7....其中哪一個,為什麼 FormFactor
的 Height x Width 永遠都是 480x 320? 改了好像也不起什麼作用? FormFactor裡的那些屬性有什麼作用?
什麼情況下才會有作用?
編輯記錄
itwawa 重新編輯於 2014-03-10 23:06:07, 註解 無‧
Main Chen
高階會員


發表:29
回覆:134
積分:127
註冊:2002-10-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2014-03-11 07:32:12 IP:112.104.xxx.xxx 訂閱
查 Help 裡的 FormFactor 並沒有很詳細的說明它的用途。

我猜想應該是:

Form1.FormFactor : 設計時期用

Application.FormFactor : 執行時期用(程式執行後 Application.FormFactor.Width & Height 就是正確的大小)

不過你可以查 XE5 的 Source 看看它做了那些事。


===================引 用 itwawa 文 章===================
對了,上次用ScreenService.GetScreenScale 抓出來 Scale 是1.5 沒錯,謝謝提醒。

是我問錯了,給它有點健忘,應該是問:不管選 Google Nexus4,7....其中哪一個,為什麼 FormFactor
的 Height x Width 永遠都是 480x 320? 改了好像也不起什麼作用? FormFactor裡的那些屬性有什麼作用?
什麼情況下才會有作用?
P.D.
版主


發表:571
回覆:3888
積分:3677
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2014-03-12 01:27:07 IP:118.169.xxx.xxx 未訂閱
有關所提到的第一點, 我也是遇到, 但我實測不只 20秒, 我曾經遇到 4分鐘才跳出來, 

以前在 win32平台上其實連結 server資料庫也是會有這個問題, 但我曾經用一種方式解決, 不知是否有用(在手機上)

我利用 socket server / client 架構一個通訊介面,

把 socket server 放在與資料庫同台的pc上, client 端先以 socket client 呼叫 socket server
這段的回應是很快的(不到1秒), 如果能通, 幾乎可以判斷 server alive, 再進行資料庫的連結

通常資料庫連不上, 大部份原因是
1. ip位址不對
2. 主機 port 不通
3. 主機沒開

當然 socket 有自已的 port , 所以 socket 通, 不代表 database port 可以通, 但至少可以解決 1, 3 問題,
因為這也會造成連線逾時很久的狀況
不過手機上的開發還沒研究到那裡, 所以不確定是不是可行?
itwawa
一般會員


發表:5
回覆:15
積分:9
註冊:2008-08-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2014-03-12 05:52:24 IP:59.127.xxx.xxx 訂閱
 謝謝 PD 版大及 Main Chen 的回覆
socket client 我在 XE5 沒看到,以前用過 TClientSocket現 XE5 也沒有了。TCPClient 又無 Timeout屬性,所以只
好用 IdTCPClient,可覺得 IdTCPClient 又有點大。
現用的方法跟版大建議的方式差不多,手機是用IdTCPClient(有Timeout及ReadTimeout),實做可立即偵測主機是否有開,
連送檔案也OK。
Delphi 通訊元件常改來改去,Indy9 跟 Indy 10 的寫法也不太一樣,所以看能不能直接從 TSQLConnection 來解決,免得
以後版本又不一樣。這個問題早在 delphi 2009 老外就有跟 EMBD 提報錯誤編號為80954,跟我說的一樣,TSQLConnection
本身就有 Timeout 屬性,但偏偏沒作用,真是奇怪!!
Timeout這個問題有點麻煩,有人覺得default時間太短,像我就覺得太久,看每個人的需求不同而定。我主要是用來檢查
有無新版軟體,故不能讓 user 查覺也不能 Hold 住,而我的主機不會常開,所以才需先偵測主機是否有開,要是沒開就
直接 pass。
Main Chen提的可以看 Source,不知道是試用版的關係嗎? 在 C:\Program Files(x86)\Embarcadero\RAD Studio\12.0\source
下也沒看到 delphi 的原始程式? 請教 Main Chen,Source code 到底在哪裡?
試了下 Application.FormFactor.Width 跟 Screen.Size.Width 是一樣的。
Main Chen
高階會員


發表:29
回覆:134
積分:127
註冊:2002-10-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2014-03-12 06:25:11 IP:220.134.xxx.xxx 訂閱
原始程式需要正式版才有提供,試用版沒有。

沒錯! Application.FormFactor.Width 跟 Screen.Size.Width 在原始程式裡,取得來源相同。

===================引 用 itwawa 文 章===================

Main Chen提的可以看 Source,不知道是試用版的關係嗎? 在 C:\Program Files(x86)\Embarcadero\RAD Studio\12.0\source
下也沒看到 delphi 的原始程式? 請教 Main Chen,Source code 到底在哪裡?
試了下 Application.FormFactor.Width 跟 Screen.Size.Width 是一樣的。
itwawa
一般會員


發表:5
回覆:15
積分:9
註冊:2008-08-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2014-03-12 19:25:51 IP:59.127.xxx.xxx 訂閱
請教 自定 Gestures 也是一樣,試用版不能自行設計自己要的手勢嗎?

看youtube 示範影片,Gestures 可以自定義,但我點了 Gestures Design 都沒反應!!
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#9 引用回覆 回覆 發表時間:2014-04-12 07:00:51 IP:114.33.xxx.xxx 訂閱
itwawa您好,您也是潛了很久,被XE5吸出來了.
感謝您的分享與回覆,試著回答您的問題
1.DataSnap Client 我有用過最後還是放棄, 理由是個人覺的速度太慢,
現在我用自己的方法:Client端用 TCPHTTP , Server端用php mysql,
自行修改ClientDataset中的事件, AutoUpdate並重組SQL語法寫回遠端Server的DB
2.Timeout的問題,是否可以在連資料庫前先用IDTCP去連上主機的IP與Port,並設好Timeout,如果有通再連資料庫?
3.SQLLite我也放棄了,理由是太陽春了效能也不好,以前用C#開發Windows Mobile手機採用SQLCE資料庫,
SQLCE資料庫在手機上執行的效能超快超好的,可惜M$不爭氣,Mobile手機都敗陣下來,害我們這些老人得重新上陣用XE5
或許您可以試試IBLite 資料庫看看(我還沒試過)
4.真是Scale的問題,我也還在摸索中
5.另感謝您的回答,我都先切到win32中去Debug,分發時才回到真機,改天我試看看



===================引 用 itwawa 文 章===================
今天看到連站長都 PO 文出來,除了想向站長及PD版主請教一些問題外,我也分享一些我的心得,諸位參考看看...
給還沒開始使用 XE5 設計 Andriod 新手的一些建議
【背景介紹】
我是從今天一月底除夕前不小心看到縹緲's blog快快樂樂學習 delphi XE5 for Android ap,既然是快
樂學習我也來試試看,很感謝縹緲的這些文章,讓我們能快速學習。
從開始接觸到現在差不多一個多月,我的電腦 CPU i5,4G RAM,一台1T硬碟,其它顯示卡、光碟機等都沒有,
夠陽春吧!! 手機一台最便宜的小米1S,還是朋友送的,只有一條充電用的USB線及插頭。Delphi 我是從2.0
開始使用,一直停留在Delphi5,中間有升級到Delphi2010,但也只是要 Uinicode這個功能而已,所以我等於是從
Delphi5 直接跳到 XE5,我的配備如此簡單,相信各位的配備、技術應該都比我好,也可以快樂輕鬆學習。
【避免事項】
1.驅動程式盡量找原廠網站下載,一開始我也是從網上抓一個號稱小米1S的驅動程式,但總裝不起來,後來趕快
上原廠官網下載就OK了,不要在這點浪費時間,也不需要什麼特殊的連接線,看過本站一些文章,很多人在這點
浪費太多時間。
2.模擬器可中裝可不裝,要裝的話注意2點,(1)Use Host GPU 記得要打勾。(2)CPU選 ARM,Delphi目前只支援ARM
指令集,這點很可惜,Intel ATOM 速度跟真機差不多蠻快的,可惜 XE5 不支援,我已測試過,安裝apk到模擬器
都沒問題,但一執行就會出現錯誤,各位就不要再浪費時間測了。
【學習重點摘要】
1.先看Delphi XE5移動開發入門手冊。
2.看縹緲's blog快快樂樂學習、及輕鬆學習系列,先不用看其他的,等有基礎後再上網爬文,這樣最省時有效。
【設計重點摘要】
畫面佈局設計:
1.直接用 TScaleLayout,Align設alFit,不用管手機尺寸大小及解析度,可以WYSISWYG,其它可視原件都掛在
TScaleLayout下,我用圓型圖案不會變橢圓,還是正圓,簡單好用,很多人在這點也是浪費太多時間。稍微留
意一下,此法 X 座標沒什麼問題,Y座標會有負值,是因為相對於原點TScaleLayout而言才會有負值,但不影響
顯示。
2.畫面美觀問題:不一定要用 TMS 元件等元件,若只是為了美觀可善用 TRectangle...,搭配 Fill Gradient
屬性,還有 Effects 如 TShadowEffect 等,可以做出向像 ios 美美的外觀。放些沒太大用處的元件,還不如
放 Indy 來得有用一些。這點純粹看個人創意與巧思。我已經成功模擬 FB 選單可用手指拖拉,拉一半還可以
彈回去,連畫面都差不多一樣。
技術方面:
原則上跟Windows差別並不是太大,EMBD 為了跨平台,使用 FireMonkey,有些像 caption 變成在 text 上設定,
習慣了就好。ShowMessage適度使用,ShowMessage的問題網上已經討論很多,自己做一個類ShowMessage也很容易。
其他就看您設計內容再求所需技術。
今天就先簡介到此,以後有時間再介紹些更重要的觀念。
還再觀望等 XE6 的網友們,不用再等了,以我對 Delphi 的了解,現在 XE5 遇到的問題,XE 6 改進的機會不大,
只會又再資料庫上加強,Delphi 擅長的是分散式資料庫,現又專注於跨平台,所以才逐漸從 BDE、MIDAS 轉為
DataSnap DBExpress。
祝新手們有個愉快的開始...
【請教站長、縹緲、PD版大、各路高手們以下幾個問題】
1.急!! 我最頭大也最重要的問題,Addriod DataSnap Client 端,TSQLConnection Driver 的 CommunicationTimeout、
及 ConnectTimeOut 設定為 500 或 1000,但都不起作用,若主機沒開差不多要二十多秒才會有Error回應,我希望
如果主機沒開的情況下,Client 端能照 TSQLConnection 設定的 Timeout 時間回應不要 Hold 住那麼久,此需求譬如
應用程式一執行,會先跟主機連線做如詢問有無新版等訊息,我的電腦不會24小時都開著,所以有此需求。因DataSnap
功能太強,太好用了,但卡在這點上實在很可惜,讓我現只能先用 Indy TcpSercer 及 Indy TcpClient 先取代,希望
諸位高手能多多幫忙,看能否解決此問題。
2.Andriod Client 端如何透過 http 通訊方式 跟 DataSnap Server 取得一筆資料?
3.SQLite之前我也沒用過,這次學 Andriod 才知道有 SQLite,會選主要是因 Andriod 及 ios 都內嵌 SQLite,
雖然不是很好用,但不曉得還有什麼更好的選擇嗎? SQLite 最大的問題是免費版無 Encrypt,資料型態也很鬆散,
站長建議的 CDS,不曉得有 Encrypt功能嗎? 我指的是Local Database,Andriod 可免裝驅動程式嗎? 或者方便安裝?
另 CDS 還有一個問題,我猜 CDS 應該是 ClientDataset Saveto, Loadfrom 之類的用法,這樣1個 Table 就會有一個
CDS 檔,能否像 SQLite 把所有的 Table 包成一個 Database 檔,這樣也就方便安裝,否則一堆 CDS 檔也很頭大!!
4.我的手機是小米1S,物理解析度是標准四吋 854x480,但讀取如 Screen.Size.Height 及 Width 確只有 569x320,
試過好幾種方式讀取到的都是569x320,不知是何原因?
【回答站長問題】
ANDROID的DEBUG 我從沒試成功過,不知道Dear P.D, and itwawa,可以成功用Android手機DEBUG中斷點嗎?
答:用過,可正常使用沒問題。
------
~~~Delphi K.Top討論區站長~~~
系統時間:2017-12-17 11:59:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!