unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender:
通過 SuperObject 的公用函數 SO 實現一個 ISuperObject 介面非常方便;前面都是給它一個字串參數, 它的參數可以是任一類型甚至是常數數組.SA 和 SO 都是返回一 ISuperObject;SO 可以產生一個 stArray 類型的 ISuperObject, 但 SA 只會產生 stArray 類型的 ISuperObject;SA 的參數也只能是常數數組.unit Unit1;interfaceuses Windows, Messages, SysUtils,
TObjectList<T>、TObjectQueue<T>、TObjectStack<T> 分別繼承自:TList<T>、TQueue<T>、TStack<T>;它們是專門用於對象的列表, 都增加了一個 OwnsObjects 布爾屬性, 決定對象會不會自動釋放(這也通過 Create 的參數來決定)其他基本同它們的父類, 僅給 TObjectList<T> 測試一例(至此泛型相關內容學習完畢):unit
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure
SuperObject 檔案包中還有一個 SuperXmlParser 單元, 可以從 XML 中解析出 ISuperObject.SuperXmlParser 只有三個函數: XMLParseString、XMLParseStream、XMLParseFile, 分別從字串、流、檔案中解析.遺憾的是對中文不夠友好.unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics,
以前沒見過這個類, 它是在 TStringBuilder 的基礎上實現的; 使用它可以方便地把各種資料類型寫入字串.unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton;
SuperObject 的 JSON 對象中還可以包含 "方法", 這太有意思了; 其方法的格式是:procedure Method(const This, Params: ISuperObject; var Result: ISuperObject);//另外, 這是其資料類型的枚舉:TSuperType = (stNull, stBoolean, stDouble, stInt, stObject, stArray, stString, stMethod);測試代碼:unit
TStringReader 比 TStringWriter 的方法少得多, 分別可按: 字元、行或全部讀取; 讀取字元時得到的是字元編碼, 全部或按行讀取得到是字串, 也可讀取到字元數組.unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm)
在 JSON 中, 字串應該在雙引號中; 從上個例子才發現: 原來這個雙引號可以省略, 有空格都行當然只是在程式碼中可以省略, 對象會自動識別添加的.即如此, 下面寫法都可以:uses SuperObject;procedure TForm1.Button1Click(Sender: TObject);var jo1,jo2,jo3: ISuperObject;begin jo1 := SO('{"Name":"張三", "Age":"李四"}');
這幾天學習 JSON - SuperObject, 非常幸運地得到了其作者 Henri Gourvest 大師的同步指點! (Henri 大師也是 DSPack 和 GDI+ 標頭檔的作者; 大師是法國人, 竟能用中文給我回複, 沒想到!).學習中發現 SuperObject 有些地方對中文(或者說 Unicode)支援不是所期望的, 現在專貼提出來供大師鑒別.以下例子都會出現亂碼, 雖然都可以有變通的方案, 但如果不亂碼就太好了!unit Unit1;interfaceuses
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end;var Form1:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure
class helper 可能是從 Delphi 2007 增加的新文法, 因為感覺不太實用, 直到今天才測試了一下.試過之後才知道: 挺有意思的! 準系統就是修改已存在的類.Txxx = class helper for T... {T... 表示已存在的類} {可以替換已存在的方法} {也可以有新的方法、成員}end;//這之後再使用 T... 類及其子孫類時, 都會優先使用 Txxx 的修改.例一:unit Unit1;interfaceuses Windows, Messages,
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure
一直盼著 Delphi 能夠直接支援 "Regex" 與 "JSON";Delphi 2009 剛來的時候, 有了 JSON, 但不好, 那時嘗試過一點. 這是以前的連結: 什麼是 JSON?Delphi 2010 帶了兩個相關單元: DBXJSON、DBXJSONReflect 貌似很強大, 但主要是給 DataSnap 準備的; 嘗試了半天, 也很失望: 可能給 DataSnap 網路資料傳遞夠用了, 但太簡陋了, 好像是沒寫完, 對中文支援也有問題.我想不等了, 找第三方吧,
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender:
SuperObject 構建一個 JSON 的常用方法: 從字串、從檔案、從流.unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton;
通過 ISuperObject.AsObject 可擷取一個 TSuperTableString 對象.TSuperTableString 的常用屬性: count、GetNames、GetValuesvar jo: ISuperObject; jts: TSuperTableString;begin jo := SO('{A:1, B:2, C:3, D:{x:4, y:5, z:6}}'); jts := jo.AsObject; ShowMessage(IntToStr(jts.
測試資料提前加入 Memo1 中:{ "name": "張三", /* 注釋 */ "age": 33, "sex": true, "weight": 123.456, "tel": ["86-1111111", "86-2222222"], "addresses":{"address":"A省B市", "pc":"100001"}, "children": [ { "name": "張繼", "age": "22", "sex": true
通過 ISuperObject.GetEnumerator 可擷取一個 TSuperEnumerator 對象.TSuperEnumerator 主要有: MoveNext 方法、Current 屬性; 使用舉例:var jo: ISuperObject; e: TSuperEnumerator;begin jo := SO('{A:1, B:2, C:3, D:[4, 5, {X:6}, {Y:[7,8,{m:9}]}]}'); e := jo.GetEnumerator;