2015年11月1日 星期日

Lazarus 系列–1. 環境簡介

Lazarus 是一個 Open Source、跨平台的 Free Pascal 整合開發環境,可以稱得上是 Delphi 的 open source 替代品。詳細的歷程就請大家自行前往 Wiki官網 收看,這裡就不再多說了。

這一篇是介紹 Lazarus 的安裝與開發環境的巡覽

 

一、安裝

官網的下載頁 依據您的環境下載適當的版本,在 Windows 上安裝很簡單,就是下一步下一步而已,Linux 的使用者可能就稍微複雜一點,不同的發行版的安裝方式可能會有些不同。

安裝完成之後,首次執行會檢查必要的組件是否安裝,Windows 版本就不用煩惱,一定是全部都安裝好的,Linux 版本就要看一下了,可能要補安裝一些必要組件

 

二、開發環境巡覽

2015-11-01_214911

看到這個畫面,用過老版本 Delphi (D7及以前) 的人一定感到很親切,幾乎是一模一樣的嘛!接下來一個個視窗來說明

  1. 主功能表、工具列與元件盤
  2. 物件檢視器 Object Inspector
    顯示及修改目前選取到的物件的屬性、事件
  3. 專案檢視器 Project Inspector
    顯示專案的結構
  4. 程式碼編輯器 Source Editor
    這裡當然就是編輯程式碼的地方
  5. 訊息視窗 Messages
    顯示編譯輸出、錯誤訊息的地方
  6. 畫面設計視窗
    用拖拉方式來設計畫面的地方

看起來跟老版本 Delphi 幾乎都一樣,是吧!接下來說說跟 Delphi 不一樣的地方

  1. 可以編譯出 x86 與 x64 的應用程式,不過得安裝兩套,而且必須安裝在不同的目錄
  2. 原生支援 Unicode
  3. 程式碼編輯器採用的是 SynEdit 元件,比起 Delphi 的程式碼編輯器有蠻大的進步
  4. 程式碼的副檔名不同 dpr –> lpr、dfm –> lfm,故無法直接開 Delphi 的程式來編譯,必須經過轉換
  5. 熱鍵可以更改,也就是 Ctrl-Space 這個最常用的熱鍵可以改成別的,我個人是改成 Alt-Right (與 Visual Studio 相同)
  6. VCL 元件不是 100% 對應過來的,有些元件在 Lazarus 沒有,反之亦然
  7. 資料庫存取相關元件方面,沒有 BDE、ADO、dbExpress、FireDAC,也沒有 DataSnap,Lazarus 有一套自己的,叫做 SQLdb,支援的資料庫有 MSSQL、Sybase、MySQL、PostgreSQL、Firebird (Interbase)、Oracle、ODBC 和 SQLite,市面上常見的可以說都支援了。
  8. 對於檔案型資料庫的支援有 DBF、CSV、SDF(沒用過這個)、以及固定長度格式
  9. 安裝 package 必須重新編譯 Lazarus 開發環境
  10. 市面上的 3rd party 元件組,通常在 Lazarus 上不可用
  11. 其他還有很多,就請大家自己去發現了!

總之,要拿 Lazarus 來寫一些自己用的小程式,是完全可行的。如果要拿來寫商用軟體,則需要很大的努力,如果抱著「為什麼 Delphi 可以 Lazarus 不行」這樣的心態來對待 Lazarus,那就直接用 Delphi 就好了,不是嗎?

 

附記一:程式碼編輯器在 Linux 環境無法輸入中文的臨時解決方法

程式碼編輯器在 Linux 環境無法輸入中文,有一個勉強還可以接受的方法是按 Ctrl-Alt-T 熱鍵插入「ToDo」,輸入完之後再把
{ TODO : } 刪除掉
2015-11-01_220005

按下 OK 之後,就成了這樣
2015-11-01_220042

2015年5月12日 星期二

用 ZXing 製作帶有中文的 QRCode

ZXing 是一個一維/二維條碼製作與識別的 library,計畫首頁在 https://github.com/zxing
本文要說的是如何製作帶有中文的 QRCode。不用囉唆了,直接看 code

using ZXing;
using ZXing.Common;
using ZXing.QrCode;
using ZXing.QrCode.Internal;

IBarcodeWriter writer = new BarcodeWriter()
{
    Format = BarcodeFormat.QR_CODE,
    Options = new QrCodeEncodingOptions()
    {
        ErrorCorrection = ErrorCorrectionLevel.M,
        Margin = 0,
        Width = 150,
        Height = 150,
        CharacterSet = "UTF-8"   // 少了這一行中文就亂碼了
    }
};

Bitmap bm =
    writer.Write(“腦殘賤貓的備忘錄 http://maolaoda.blogspot.tw/”);


這樣就得到了一個 QRCode 圖片

image

簡單吧!

2014年3月10日 星期一

檢舉亂標註人的Facebook粉絲專頁步驟,以及防止自己被亂標註的方法

最近有很多FB的好友被不知名的粉絲專頁標註於照片之上,那些專頁通常都是賣東西的,讓好友以及好友的好友造成很大的困擾,以為是被盜帳號了。依個人的經驗,提供檢舉這種專頁的步驟如下

1. 進入該粉絲專頁
1

2. 點擊齒輪圖示,選取「檢舉粉絲專頁」
2 

3. 選擇「這騷擾到我或我認識的人」
3

4. 勾選「向 Facebook 提出檢舉」
4

5. 完成
5 

 

同場加映:防止自己被亂標註的方法

1. 於 Facebook 網頁的右上角,點擊齒輪圖示,選擇「設定」
6

2. 左邊點選「動態時報與標籤」
7 

3. 點擊「誰可以在我的動態時報新增貼文?」項目之下的第二個,紅框處選擇為「啟用」
8

4. 點擊「我該如何管理別人加上的標籤以及標籤建議?」項目之下的第一個,紅框處選擇為「啟用」
9

這樣子任何人要在你的動態時報中貼文或是將你標註在照片中,都要先經過你的核准才能貼出去或是標註

2013年6月10日 星期一

ASP.Net 隱藏 RadioButtonList 裡的項目

ASP.Net 的 RadioButtonList 是一個蠻好用的控制項,用了他就不用拉好幾個 RadioButton 了。不過有一個困擾的地方就是他的 Item 並沒有 Visible 的屬性,使得有時想要隱藏某些項目時感覺有些困擾

其實,沒有 Visible 屬性也沒有關係,他有 Arrtibutes 屬性可以用,只要用
RadioButtonList1.Items[0].Attributes.Add("style", "display:none");
或是
RadioButtonList1.Items[0].Attributes["style"] = "display:none";
就可以隱藏第 0 個 item 了

提供給大家參考

2013年6月7日 星期五

在 Windows Server 2003 上執行 ASP.Net 網站,無法呼叫 MSDTC 的注意事項

  1. 確定 MSDTC 服務確實有啟動
    可以到控制台的服務,或是於 cmd 視窗下輸入 sc query msdtc 來檢查
    看到 STATE 是 4 RUNNING 就表示 MSDTC 正常服務中
    2013-06-07_163511
  2. 確定 IIS 有安裝「啟用網路 DTC 存取」
    這一點常常會漏勾喔
     2013-06-07_163826

2012年9月13日 星期四

使用 ADO 透過 ODBC 連接至 SQLite,用 OpenSchema 取得 Table Name 會亂碼的解決方法

最近開始使用 SQLite 當作應用程式的本地資料儲存媒體,當然也想要針對 SQLite 資料庫做一些管理跟查詢工作。雖然網路上可以找到需付費或是不須付費的 SQLite 管理工具,但是還是想使用自製的 DB 工具來查詢資料。畢竟用慣了,哪裡用得不爽還可以自己改一改。

但是自製的 DB 工具使用的是 ADO 來連接資料庫,對於 SQLite 的免費連接方案只有 SQLite ODBC Driver

連接上是沒有問題,也可以正常的擷取資料,無亂碼
不過使用 OpenSchema 來取得資料庫中的 table,以及 table 中的欄位時,卻出現了亂碼

2012-09-13_085411

解決方法如下:
開啟 ODBC 設定,將「OEMCP Translation」打勾,就 OK 了

2012-09-13_085738

設定完成之後,就可以正確的抓到中文的 table name 跟 column name 了

2012-09-13_090117

2012年3月21日 星期三

ASP.Net 要透過加入 AD 的 ExchangeServer 發郵件的方法

1. 讓 ASP.Net 信任 ExchangeServer 的自訂憑證

在 Global.asax.cs 裡面的 Application_Start 事件加入以下這行:

ServicePointManager.ServerCertificateValidationCallback += 
    new RemoteCertificateValidationCallback(ValidateServerCertificate);

以及在 Global.asax.cs 加入這個靜態方法

public static bool ValidateServerCertificate(Object sender, 
    X509Certificate certificate, X509Chain chain, 
    SslPolicyErrors sslPolicyErrors)
{
    return true;
}

using 要加入

using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;

2. 發郵件時程式

SmtpClient sc = new SmtpClient();
sc.Credentials = CredentialCache.DefaultNetworkCredentials;
sc.EnableSsl = true;
sc.Send(mm);    // mm 是 MailMessage

3. 在 web.config 中設定好

<system.net>
    <mailSettings>
        <smtp from="寄信人信箱" deliveryMethod="Network">
            <network host="郵件主機"
                port="埠號"
                userName="登入帳號"
                password="登入密碼"
                defaultCredentials="true" />
        </smtp>
    </mailSettings>
</system.net>

4. 將 IIS 的應用程式集區設定為「整合式」