• Thứ Ba, 03/02/2009 07:34 (GMT+7)

    Delphi năm 2009 có gì mới

    Tiếp sau sự kiện ngày 01/07/2008, khi CodeGear chính thức được Embarcadero Technologies mua lại từ Borland với giá 24.5 triệu USD, năm 2008 tiếp tục ghi dấu ấn với người dùng Delphi nói riêng và các tín đồ của Borland nói chung bằng sự kiện phiên bản Delphi 2009 và C++Builder 2009 chính thức có mặt trên thị trường.

    Trong buổi lễ trang trọng được tổ chức ngày 25/8/2008 tại San Francisco, Embarcadero Technologies chính thức công bố bộ công cụ lập trình CodeGear RAD Studio 2009 cho hệ điều hành Windows với hai công cụ chính là Delphi 2009 (cho cả phiên bản Win32 và phiên bản .NET) và C++ Builder 2009.

    Đối với những người đã từng sử dụng Delphi hoặc C++ Builder thì bản cập nhật CodeGear RAD Studio 2009 thực sự quan trọng vì gần như giải quyết được hầu hết các đòi hỏi mà các lập trình viên cũng như những nhà cung cấp đã đặt ra đối với các phiên bản trước đó.

    Hình 1: Toàn cảnh IDE của Delphi 2009, có thể thấy Delphi 2009 đã hỗ trợ Unicode.

    Trong bài viết này, chúng ta sẽ tìm hiểu một số cải tiến đặc biệt quan trọng trong phiên bản Delphi 2009 (tên mã là Tiburon).

    Thay đổi quan trọng và đáng kể nhất trong Delphi 2009 là khả năng hỗ trợ Unicode hoàn hảo. Delphi 2009 hỗ trợ Unicode đầy đủ trong trình biên dịch, RTL, VCL, IDE, COM, dbExpress,... Các ứng dụng Unicode được viết bằng Delphi 2009 là thuần tuý 32-bit và không yêu cầu cài đặt thêm .NET Framework.

    Để giải quyết triệt để vấn đề về Unicode, Delphi 2009 đưa vào đối tượng TStrings hai hàm LoadFromFile và SaveToFile với cú pháp như sau:

    procedure TStrings.LoadFromFile(const FileName: string);
    procedure TStrings.LoadFromFile(const FileName: string; Encoding: TEncoding);
    procedure TStrings.SaveToFile(const FileName: string);
    procedure TStrings.SaveToFile(const FileName: string; Encoding: TEncoding);

    Hình 2: Ví dụ về giao diện kiểu Ribbon cho ứng dụng viết bằng Delphi 2009.

    Ví dụ, câu lệnh sau sẽ đọc nội dung file c:\temp\MyListBoxItems.txt với định dạng UTF8 sau đó chèn vào Listbox1:

    Listbox1.Items.LoadFromFile(c:\temp\MyListBoxItems.txt,TEncoding.
    UTF8
    );

    Delphi 2009 cũng chính thức hỗ trợ việc tạo giao diện người dùng kiểu Microsoft Office 2007 (tên gọi Ribbon).

    Kể từ Delphi 2009, định dạng file ảnh PNG (Portable Network Graphics) cũng được chính thức hỗ trợ. Với việc hỗ trợ này, giao diện các chương trình viết bằng Delphi sẽ bóng bẩy hơn.
    Chính thức xuất hiện từ Delphi 3 với tên mã Midas và được đổi tên là DataSnap kể từ Delphi 6, DataSnap đã được tu sửa và tối ưu trong Delphi 2009. Quá trình sử dụng cho thấy việc sử dụng DataSnap dễ dàng và tiện lợi.

    Về mặt ngôn ngữ, Delphi 2009 hỗ trợ hai cách tiếp cận mới là Generics và Anonymous, đây chính là điểm nhấn quan trọng nhất trong Delphi 2009. Gần như với 2 cách tiếp cận này, Delphi 2009 mở ra cho người sử dụng sự tự do trong việc viết mã lệnh. Chúng ta hãy quan sát hai đoạn mã lệnh ví dụ sau để hiểu rõ 2 cách tiếp cận mới này:

    Phương pháp Generics:

    Khai báo:

    TList = class
    private
    FItems: array of T;
    FCount: Integer;
    procedure Grow(ACapacity: Integer);
    function GetItem(AIndex: Integer): T;
    procedure SetItem(AIndex: Integer; AValue: T);
    public
    procedure Add(const AItem: T);
    procedure AddRange(const AItems: array of T);
    procedure RemoveAt(AIndex: Integer);
    procedure Clear;
    property Item[AIndex: Integer]: T
    read GetItem write SetItem; default;
    property Count: Integer read FCount;
    end;
    Cách sử dụng:
    var
    ilist: TList;
    slist: TList;

    procedure PrintListInteger;
    var
    i: Integer;
    begin
    for i := 0 to ilist.Count - 1 do
    Write(ilist[i], ' ');
    Writeln;
    end;

    procedure PrintListString;
    var
    i: Integer;
    begin
    for i := 0 to slist.Count - 1 do
    Write(slist[i], ' ');
    Writeln;
    end;

    begin
    ilist := TList.Create;
    try
    ilist.AddRange([1, 2, 3]);
    PrintListInteger;
    ilist.RemoveAt(1);
    PrintListInteger;
    ilist.Clear;
    PrintListInteger;
    finally
    ilist.Free;
    end;
    slist := TList.Create;
    try
    slist.AddRange(['one', 'two', 'three']);
    PrintListString;
    slist.RemoveAt(1);
    PrintListString;
    slist.Clear;
    PrintListString;
    finally
    slist.Free;
    end;
    Readln;
    end.


    Hình 3: Hộp tìm kiếm cho bảng công cụ Tool Palette.

    Phương pháp Anonymous:
    Khai báo:
    type
    TProc = reference to procedure(x: Integer);

    procedure Call(const proc: TProc);
    begin
    proc(42);
    end;
    Cách sử dụng:
    var
    proc: TProc;
    begin
    proc := procedure(a: Integer)
    begin
    Writeln(a);
    end;

    Call(proc);
    readln
    end
    .

    Một điểm khác đáng chú ý trong phiên bản 2009 này là sự xuất hiện của câu lệnh Exit với đối số. Chúng ta hãy theo dõi hai đoạn mã lệnh sau cho kết quả như nhau:

    function DoSomething(aInteger: integer): string;
    begin
    if aInteger < 0 then
    begin
    Exit(Negative);
    end;
    Result := Positive;
    end;

    function DoSomething(aInteger: integer): string;
    begin
    if aInteger < 0 then
    begin
    Result := Negative;
    Exit;
    end;
    Result := Positive;
    end;

    Hình 4: Trên nền Windows Vista, Delphi 2009 thật bóng bẩy.

    Trong phiên bản 2009 này, Delphi IDE cũng có nhiều cải tiến đáng kể. Điều dễ nhận thấy nhất đó là sự xuất hiện của rất nhiều hộp tìm kiếm, nhờ có chúng, giờ đây bạn có thể dễ dàng tìm được các component cần thiết.

    Ngoài ra, còn một loạt thay đổi trong các component của Delphi 2009 nhằm mục đích đem lại sự tuỳ biến cao cho người sử dụng. Xem các hình ảnh minh hoạ (hình 5, 6, 7).

    Tính tới thời điểm hoàn thành bài viết này, các gói công cụ sau đã hỗ trợ Delphi 2009 (chi tiết các bạn có thể xem tại đây: http://dn.codegear.com/article/38459):

    • TMS Component Pack: http://www.tmssoftware.com/site/tmspack.asp

    • JCL và JVCL:
    http://www.delphi-jedi.org

    Hình 5: TCategoryPanels, TButtonedEdit, TLinkLabel và TBallonHint.

    SmartInspect: http://www.gurock.com/products/smartinspect

    • Castalia: http://www.twodesk.com/castalia

    • MySQL Data Access Components: http://devart.com/mydac

    • Oracle Data Access Components: http://devart.com/odac

    • SQL Server Data Access Components: http://devart.com/sdac

    • InterBase Data Access Components: http://devart.com/ibdac

    Hình 6: Đối tượng TButton được bổ sung thêm nhiều tuỳ chọn như bsCommandLink hoặc là  bsSplitButton.

    • Devrace FIBPlus: http://www.devrace.com/en/fibplus

    • LMD: http://www.lmd.de

    • GExperts: http://www.gexperts.org

    • Nexus: http://www.nexusdb.com/support/index.php

    • TsiLang Components Suite: http://www.tsilang.com

    • Raize Components: http://www.raize.com/DevTools/RzComps

    • QuickReports: http://www.qusoft.com

    • TeeChart Pro: http://www.steema.com/products/teechart/whatsnew.html

    • ComponentAce:
    http://www.componentace.com

    Hình 7: Đối tượng TProgressBar với nhiều tuỳ chọn khác nhau.

    Lời kết: Hiện tại Delphi 2009 chỉ hỗ trợ Windows trên nền tảng 32-bit, theo tiến trình mà CodeGear đưa ra, phải đến giữa năm 2009, thế hệ tiếp theo của Delphi 2009 với tên mã là Commodore sẽ hỗ trợ song song cả 32-bit và 64-bit. Không có nhiều thông tin từ phía CodeGear về hậu duệ của Commodore cũng như Delphi cho Linux, tuy nhiên theo phán đoán và những thông tin mà chúng tôi nhận được thì CodeGear sẽ hỗ trợ nhiều hơn nữa các ứng dụng Web, AJAX, và đặc biệt là các thiết bị cầm tay PDA trong thời gian sắp tới. Bản dùng thử của Delphi 2009 có tại địa chỉ http://cc.codegear.com/free/delphi. Và bạn còn chờ gì nữa mà không thử?

    Ngô Quốc Anh
    National University of Singapore
    Email: bookworm_vn@yahoo.com

    Tài liệu tham khảo:
    • http://dn.codegear.com/article/38478
    • http://blogs.codegear.com/nickhodges
    • http://www.codegear.com
    • http://dn.codegear.com/article/36620

    ID: A0901_104