2019年4月16日 星期二

Delphi TList 在 iOS 的坑!?

開發環境:Delphi XE10 Seattle Version 23.0.20618.2753
執行環境:Win10x64, iOS 12.2

以下的程式碼,Win32 版可以正常執行 Button1Click 但在 iOS 則會出現
Run-time Error : Access violation at address xxxx

type
  TMyObj = class(TObject)
  public
    Name, Value: string;
  end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    MyList: TList;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
var
  temp: TMyObj;
begin
  temp := MyList.Items[3];
  Memo1.Lines.Add(temp.Name);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  myObj: TMyObj;
  i: Integer;
begin
  MyList := TList.Create();

  for i := 0 to 10 do
  begin
    myObj := TMyObj.Create();
    myObj.Name := 'Name'+i.ToString;
    myObj.Value := 'Value'+i.ToString;
    MyList.Add(myObj);
  end;
end;

發現要改用 TListT<MyObj> 或 TObjectList<MyObj> 在 iOS 才會正常


uses Generics.Collections;
var
  MyList: TObjectList<TMyObj>;

MyList := TObjectList<TMyObj>.Create();

2018年12月22日 星期六

如何在 Blogger 顯示程式碼


● 設定方式參考:
[探索 3 分鐘] 用 JavaScript 與 css 客製化部落格 blogger
使用Google Code Prettify漂亮顯示讓程式碼自動分辨顏色
在 Google Blogger 顯示程式碼

● 選用樣式:
https://rawgit.com/google/code-prettify/master/styles/index.html
https://jmblog.github.io/color-themes-for-google-code-prettify/

例如:選用 Sunburst 的樣式,把 sunburst.css 裡面的碼,貼到 「HTML / JavaScript 」小工具的 style 區塊中

● 設定 Delphi 語言顯示:
在文章的 code 區塊中,設定 class="pascal"

● 程式碼中有 html 語法標籤的時候要轉碼
http://demo.smarttutorials.net/html-xml-adsense-parser/

<pre class="prettyprint">
<code class="pascal">
</code>
</pre>

Delphi XE10.3 Rio 實作 Android 8 的 Notification Channels

 
{$IFDEF ANDROID}

uses FMX.PushNotification.Android, Androidapi.Helpers, Androidapi.Jni.Os,
  Androidapi.Jni.App, Androidapi.Jni.GraphicsContentViewText,
  Androidapi.Jni.JavaTypes, Androidapi.JNIBridge;
{$ENDIF}

procedure TForm1.createNotificationChannel();
var
  LService: JObject;
  FNotificationManager : JNotificationManager;
  FNotificationChannel: JNotificationChannel;
  LApplicationInfo: JApplicationInfo;
  targetSdkVersion: Integer;
begin
{$IFDEF ANDROID}
  LService := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.NOTIFICATION_SERVICE);
  FNotificationManager  := TJNotificationManager.Wrap((LService as ILocalObject).GetObjectID);

//    if TAndroidHelperEx.CheckBuildAndTarget(TAndroidHelperEx.OREO) then
// Tony 參考 https://github.com/DelphiWorlds/KastriFree/blob/master/Core/DW.Android.Helpers.pas 改寫
  LApplicationInfo := TAndroidHelper.Context.getPackageManager.
    getApplicationInfo(TAndroidHelper.Context.getPackageName, 0);
  targetSdkVersion := LApplicationInfo.targetSdkVersion;

  if (TJBuild_VERSION.JavaClass.SDK_INT >= 26) and (targetSdkVersion >= 26) then
  begin
    FNotificationChannel := TJNotificationChannel.JavaClass.init(TAndroidHelper.Context.getPackageName, StrToJCharSequence('default'), 4);
    FNotificationChannel.enableLights(True);
    FNotificationChannel.enableVibration(True);
    FNotificationChannel.setLightColor(TJColor.JavaClass.GREEN);
    FNotificationChannel.setLockscreenVisibility(TJNotification.JavaClass.VISIBILITY_PRIVATE);
    FNotificationManager.createNotificationChannel(FNotificationChannel);
  end;
{$ENDIF}
end;

2018年3月14日 星期三

聖經 App 分享


除了我們常看的「新標點和合本」聖經之外
(CUNP - Chinese Union Version with New Punctuation) ,還有許多其它的翻譯版本 (推薦如下)

中文:
新譯本 (CNV)、
新普及譯本 (CNLT - Chinese New Living Translation)

英文:
The Message (MSG)、
New Living Translation (NLT)、
New International Version (NIV)

註:King James Version (KJV) 是古英文的版本

[ 聖經 (YouVersion.com) - Life.Church ]
 Android APP / iOS APP

<特色>
● 需要 Google 或 e-mail 註冊 / 登入
● 無廣告 (可捐款支持他們!)
● 介面簡潔、功能多
● 語音聖經:CUNP, CNV, NLT, MSG…等
● 離線版聖經(可下載):
   新標點和合版 (神 / 上帝)、MSG、NIV…等
● 線上版聖經(需連上網路):
   新譯本、NLT…等




[ 漢語聖經 Chinese Bible - 漢語聖經協會 ]
Android APP / iOS APP


<特色>
● 無廣告
● 二種版本對照功能
● 字典
● 免費版本:和合本、七十士譯本 (Septuagint LXX)…等
● 付費版本:新普及譯本 (CNLT)
   價格:Android NT$320, iOS NT$300

Tony 註:2018/03/15 目前找到唯一提供此版本的 App






[ 中文聖經 圣经  - ps23 ]
只限 Android APP (作者網址 http://iesus-bible.blogspot.com)

<特色>
● 無廣告
● 區分舊約、新約、章:可以快速找到經文所在
● 功能精簡、可調字體大小、書籤、醒目
● 夜間模式 (黑底白字)

Tony註 : 搜尋功能有時候會異常(找不到東西)





[ 漢語聖經網頁版 ]
http://www.chinesebible.org.hk/onlinebible/index.php




2016年7月6日 星期三

番茄土豆 - 這不是一道菜


個人時間管理 -- 一次專注做好一件事情

番茄土豆 ]
就是番茄鐘(Pomodoro) + 土豆 (To-Do-List) 組成的 GTD  (Getting Things Done ) 時間理理利器
參考:番茄土豆: 番茄鐘 + GTD 夢寐以求的時間管理利器


10個幫你提升工作效率的好用手機App、Chrome套件

Keep Focused 保持25分鐘專注力的 Pomodoro 工作法小工具

PC Mac 桌面上最好的番茄鐘軟體,中文免費版下載

Focus Booster 善用桌面電子番茄鐘,讓工作專注力加速

[ 番茄 ]

POMODORO TECHNIQUE --- DO MORE AND HAVE FUN WITH TIME MANAGEMENT

Keep Focused - an enhanced tool for Time Management using Pomodoro Technique

番茄鐘工作法: 25 分鐘改變效率的 10 個番茄鐘工具

[ Android ] -- 發條番茄鐘、 番茄土豆

[ 同場加映 ] -- Time Meter Time Tracker


2016年6月22日 星期三

BCB6 TServerSocket 元件注意事項

常會發生 Asynchronou Socket Error #1000xxx

解決方式如下:
 一、將相關的程式碼用 try catch 包起來,以免出現 Exception 程式就卡住
二、將 ErrorCode 清掉,並關閉 Socket

void __fastcall TForm1::ServerSocket1ClientError(TObject *Sender, TCustomWinSocket *Socket,
TErrorEvent ErrorEvent, int &ErrorCode)
{
 //分析錯誤
 ErrorCode=0;
 Socket->Close();
}