Translate

ebook【Delphi跨平台資料庫程式設計火速上手】電子書出版 (CHT)

Delphi 跨平台資料庫程式設計火速上手,是本關於整合 Delphi 的跨平台技術打造 2-Tier 架構的跨平台 APP 的入門技術書。 全書沒有需要理解的技術知識,只講套路。 力求短時間把製作 APP 的工法熟悉,未來要開發其它的應用程式也能舉一反三。 底下...

2018/07/19

RAD Studio Community Edition 快速安裝介紹

可先到 Delphi Community Edition Landing Page 下載 ESD 安裝檔。C++ Builder Community Edition 在此

下載 ESD 的同時會發序號 email 給你

要注意的是,Community ESD 線上安裝除了介紹所需的 .Net 套件外,還需要自行下載 DirectX 9.0c 轉發套件,若未安裝時,進行到安裝 DirectX 9.0c 時會安裝失敗,屆時只能移除重裝。

2018/07/08

JavaScript iframe Variable Scope Test


目的:
測試 JavaScript Variable 在重複載入時是否共用同一個 Variable。

測試方式:
建立多個 iframe,但指向同一個 html 檔案。

JavaScript code is below:

  var MyVar = 0;
  function onButtonClick() {
    $("#A1").html(MyVar);
    MyVar += 1;
  }


預期:載入 base.html 時,MyVal 會預設歸零,藉以測試其它重複載入的 iframe 裡的同名變數是否會被影響。

測試步驟:
1. 建立 iframe 並累加 5 次變數
2. 以再建立 iframe 的方式重複載入該 html 檔案
3. 回到原 iframe,再累加變數,檢查變數是否歸零
4.切換到 2. 所建的 iframe 並累加變數,檢查變數是否被 3. 累加

結論:
各別的 iframe 就算是載入相同 JavaScript 檔,裡面同名 Variable Scope 也僅限在該 iframe 裡。

結果符合預期,收工。



See also :



2018/07/05

JSONObject Sort by Delphi


在 KTOP 看到有人在問 JSON 物件能否排序。

第一時間想著官方沒有類似 TJSONObject.Sort 的方法,除非再自行加工改寫。

後來看到其他會員回答的排序法,而樓主似乎也不排斥『要自己寫程式』的方式。

內容使用到『泛型物件』和『DBXJSON』,一時手癢,就自己試著玩玩看:

2018/06/28

Async callback in JS DataSnap Framework

This is a question about a obsessive-compulsive disorder patient. photo from



In the default Datasnap REST application, if there is a specified build of the Sample Methods :

The "echostring" and "ReverseString" two method and corresponding pages are added to the template. By opening the Reversestring template, you can learn that JavaScript is written like this:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
function onReverseStringClick()
{
  if (loginRequired && (AdminInst == null))
  {
    showLogin(true);
    return;
  }
  var valueField = document.getElementById('valueField');
  var s = serverMethods().ReverseString(valueField.value);
  valueField.value = s.result;
}

2018/06/06

Boost Regex and Unicode in C++ Builder

Boost - Bast C++ Library
Because "String" default is unicode in C++ Builer 2009 later.

And same std::wstring.

so, We should to use prefix "w" class, like:
wregex, wsmatch etc.

The Sample code below:

2018/06/01

Delphi Base Class - TProc (CHT)

圖片來源

TProc 在 Delphi 的宣告是:
1
2
3
4
5
TProc = reference to procedure;
TProc<T> = reference to procedure (Arg1: T);
TProc<T1,T2> = reference to procedure (Arg1: T1; Arg2: T2);
TProc<T1,T2,T3> = reference to procedure (Arg1: T1; Arg2: T2; Arg3: T3);
TProc<T1,T2,T3,T4> = reference to procedure (Arg1: T1; Arg2: T2; Arg3: T3; Arg4: T4);


最近在寫測速程式時突然應用到它,我是這麼寫的:

2018/05/24

WebBroker cookie in ISAPI (CHT)


Cookie 在網頁開發幾乎是必須,而它有幾個限制:

  • 容量為 4 KB
  • 明碼傳遞
  • 會強制放在 Request / Response 一起傳送,增加傳輸流量

增加 4 KB 的傳輸流量在現在這個動不動就幾個 Mbit 的網路速度來說,離負載也差得太遠。

Https 也快要成為主流,所以明碼傳遞也不是問題。

最近的問事中,有一項是開發 WebBroker 專案中,在 Cookie 設計上遇到些麻煩:

  1. Exe / Debug Server 模式下,Cookie 在 Server 及 Client 皆可正確存取。
  2. ISAPI 模式下,Server 可以存取由 Server 建構的 Cookie,但 Client 找不到,反之亦然。

Delphi 3 以來,從沒見過有人提出這類問題。

2018/05/03

利用Google Book API查詢ISBN取得書籍資料(CHT)





最近在【Google Book APIを使ってISBNコードから書籍情報を取得する】有提到利用 Google Book API 查詢 ISBN 並取回結果,操作方式還相當簡單。


接下來有兩個問題:
  • Google Book API 有沒有限制?
  • 舊版 Delphi 和 Starter 版是否可以支援?

首先來看看 Google 怎麼說的

2018/04/07

About New Threads On FMX For Android (CHT)

在 Delphi Tokyo (10.2) 後,Delphi UI 的 Thread 在 Android 下發生了一點變化,原文如下:

Unification of Delphi and Java threads on Android: CallInUIThread has been deprecated. All code is now running in the Java UI Thread, removing the need for thread synchronization.
由此可推斷出,以前 FMX 在 Android 的運作模式如下:

FMX for android in  before Delphi 10.1

因為 Delphi UI Thread 是基於 Java UI 之上,使用者操作 Java UI 層時,還需要經過 Delphi UI 層的同步處理才能觸發 Delphi 物件的相關事件,故效能和原生的 Java App 相比下會來得差一點。


而在 10.2 之後,不再是雙 Thread 並行,除了執行效能有顯著提升外,連 FMX 在 Android 平台都【自動升格為 Thrad safe 】了!



但問題來了,這種底層架構的調整,對於 FMX for Android 舊版本專案會有影響嗎?

答案很明顯的……



















一定有!但不大

問題不大的原因在於,絕大多數的開發方式並不會使用到 Thread,也就是說,UI 層的問題在編譯程式時就已經解決了。

而最大的問題在:邏輯層面的 Bug。

既然是 Thread 層的修正,那問題一定也會出在 Thread 上。

首當其衝的當然就是『3rd party』了!(笑)



FGX-FireMonkey】的範例就有用上 Thread (TfgActivityDialog, TfgProgressDialog),相當經典,但在 10.2 時卻會發生元件畫面無法出現的問題。

相同的程式碼在 10.1 以前的程式流程是這樣的:

TfgAD = TfgActivityDialog

如果程式碼不改變的情況,在 10.2 後『純 Java UI Thread』下的流程會是這樣:



於是 TfgActivityDialog 自然就看不到囉!(笑)


結論
FMX 還是一個年輕且在成長的框架,所以每當底層架構有所變化時,都要檢視一下自己的專案是否會因改版而必須有所更動,每一個版本的 What's New 內容非常重要,務必好好研讀。

其實上圖之所以會有這個問題不是 FGX 作者的問題 (就算是,作者也不再維護了……),主因還是會回到 Thread 控制根本上的不同,隨著架構的變化而重構專案程式碼才會是最佳解。



See also:


2018/02/26

使用 ZXIng 試作 QRCode (CHT)

Photo from Thinkstock
QRCode 在行動裝置上有【規格一制性】的特色,Barcode 一整個被比了下去。

而在 Delphi 平台上也常遇到有人在問 QRCode 要怎麼繪製,一直到最近在 KTOP 才出現一個比較正式的回答。

核心的方案是 DelphiZXingQRCode,它採用的是【Apache 2.0】的授權,不僅免費,連商業使用都沒問題,實在是太佛心。

2018/02/13

XLSX 檔案格式除錯 (CHT)

最近同事傳來一個轉檔為 xlsx 後出現的一個錯誤,訊息大致如下:
【Excel 發現無法讀取的內容 您是否要回復此活頁簿內容...】

修正後,會取得以下的資訊:

2018/01/20

JSON build and parser with C++ Builder (CHT)

圖片來源

開始學習網頁技術後,大致上都在 JSON 上面繞圈圈。

由於 C++ 本身沒有相關的函式庫,所以必須要找 3rd library 加以載入後才能使用。

然而 Delphi 已經有提供 JSON Framework,想必 C++ Builer 也一定會有,問題在於……