2019/01/30

Test DevExtreme DataGrid data binding

DataGrid 是 DevExtreme 主打的元件之一,把 PHP 環境架設好之後,就拿了官方範例來使用。
範例都很佛的放在 Github 供人下載

範例 JS 的這段程式碼讓我覺得非常奇怪:
    var url = "php/service.php";
    var db = DevExpress.data.AspNet.createStore({
        key: "ID",
        loadUrl: url,
        insertUrl: url,
        updateUrl: url,
        deleteUrl: url
    });
後端使用了 PHP,卻在前端使用 AspNet 建構式。

除了 DevExtreme 主程式外,還需要額外下載 ASP.NET 外掛程式 (JavaScript)

再看看 PHP 是怎麼寫的:

2019/01/28

WebBroker and Unicode


以下的內容在 Delphi 10.2 (含)以上版本已經解決,新版使用者可以略過不看。

===========================================

TWebRequest 遇到 Unicode

出來江湖混,該還的還是要還。

前端寫久了,還是遇到了 Unicode 解析問題。

以 HTTP Method GET 為例:
http://{local}/action?id=許功蓋堃

已知:
Delphi 2009 以上的 string = UTF-16 格式。

而取得的內容是這樣的:

看到這個心都涼了半截

仔細攻略了 IdHTTPWebBrokerBridge 和 HTTPApp 兩個單元後,才發現裡頭大部份的函式及屬性都是 AnsiString 而非 String 基礎類別。

而 IdHTTPWebBrokerBridge 單元主要只應用在 HTTP Server 上,搬上 IIS 後就和它無關,所以可以直接忽略這個單元不看,雖然我也是看了它很久很久才驚覺這個答案。(眼神死)


接著再把注意力轉到 HTTPApp 單元,最關鍵的就在這句話:
一律使用 AnsiString,Unicode 都不 Unicode 了

ExtractHeaderFields 這個函式遇到要解析的內容僅僅只做了百分比符號轉換,還少做了一道Unicode / UTF-8 (UTF8) 編碼轉換的工作。

於是我們的 Unicode 文字就被轉成亂碼直出了。

現在,到底是該 Debug HTTPApp 還是有其它 3rd party 的解法呢?


2018/12/24

Delphi in Depth. Windows Message vs Thread.

程式很忙


同事最近遇到程式運作流程不如預想的情形,來找我幫忙解決。

研究程式碼的過程中,發現他用到大量的 PostMessage / SendMessage,這是相當有趣的走向,同事解說是在於在 Event call Event 時,有時會因為 UI 刷新造成互相干擾進而發生例外,所以才這樣寫。

PostMessage 和 SendMessage 兩者差異說明如下:
Non Blocking 和 Blocking,也等同 Asynchronous (非同步) 和 Synchronous (同步) 的關係。

PostMessage 的場合:主程式 (Main Thread) 執行到此句時會把 Message 放進 Message Queue 裡 (可以視為 Sub Thread) 依序排好,等待 Main Thread Idle 時才會把 Message Queue 依序派送到主程式的對應函式處理。

程式流程如下:

2018/11/29

JavaScript for WebBroker framework



前端網頁寫久了,還是覺得 Delphi JavaScript DataSnap framework 在 AJAX 上使用來得方便,官方範例的 ReverseString 是這樣寫的:

2018/11/08

Bootstrap 4 學習雜記 (01)

設計心法:
以最小設備畫面進行設計,之後的放大會自適應。

單位:
只認 em / rem (相對單位),不建議使用 px。

骨架:
  • Column 以 12 為邊界,每個 Sub column 可再切分 12 Columns,以此類推。
  • 尺寸後贅 (小 -> 大):.col-* (xs-*) -sm-* -md-* -lg-* -xl-*。
  • 上述尺寸後贅大多可套用在像 Button 等物件類別宣告中,和 Grid 配置相呼應。


See also: