Tải bản đầy đủ (.pdf) (133 trang)

Giáo trình Lập trình nâng cao (Nghề Lập trình máy tính): Phần 1 - Tổng cục dạy nghề

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.96 MB, 133 trang )

BỘ LAO ĐỘNG - THƯƠNG BINH VÀ XÃ HỘI
TỔNG CỤC DẠY NGHỀ

GIÁO TRÌNH
Mơn học: LẬP TRÌNH NÂNG CAO
Mã số: ITPRRG03
NGHỀ: LẬP TRÌNH MÁY TÍNH
Trình độ Cao đẳng nghề

NĂM 2012


Tuyên bố bản quyền :
Tài liệu này thuộc loại sách giáo trình
Cho nên các nguồn thơng tin có thể
được
phép dùng ngun bản hoặc trích dùng
cho các mục đích về đào tạo và tham
khảo .
Mọi mục đích khác có ý đồ lệch lạc hoặc
sử dụng với mục đích kinh doanh thiếu
lành
mạnh sẽ bị nghiêm cấm.
Tổng Cục Dạy nghề sẽ làm mọi cách để
bảo vệ bản quyền của mình.
Tổng Cục Dạy Nghề cám ơn và hoan
nghênh các thông tin giúp cho việc tu
sửa
và hoàn thiện tốt hơn tàI liệu này.

Địa chỉ liên hệ:


Dự án giáo dục kỹ thuật và nghề nghiệp
Tiểu Ban Phát triển Chương trình Học
liệu
………………………………………………
................................................................


LỜI TỰA
Để đáp ứng nhu cầu học tập của người học, chúng tơi đã tiến hành biên soạn giáo trình
Lập trình nâng cao để làm tài liệu tham thảo cho người học và người nghiên cứu. Cuốn
sách này được biên soạn dựa trên các tài liệu tiếng Anh của C++ Builder, đặc biệt là
dựa trên tài liệu User Guide của Borland. Đồng thời lồng ghép những kinh nghiệm giảng
dạy các mơn lập trình của chúng tơi.
Tài liệu này được biên soạn theo đề cương chi tiết mơn học Lập trình nâng cao của
Tổng cục dạy nghề với mã ITPRG03. Mục tiêu của nó nhằm giúp các bạn sinh viên
chuyên ngành có một tài liệu cơ đọng dùng làm tài liệu học tập, nhưng chúng tơi cũng
khơng loại trừ tồn bộ các đối tượng khác tham khảo. Chúng tôi hi vọng người đọc sẽ
tìm thấy được những kiến thức bổ ích trong tài liệu này.
Mặc dù đã rất cố gắng nhiều trong quá trình biên soạn giáo trình nhưng chắc chắn giáo
trình sẽ cịn nhiều thiếu sót và hạn chế. Rất mong nhận được sự đóng góp ý kiến quý
báu
của của những người đọc và người học để giáo trình ngày một hoàn thiện hơn.


MỤC LỤC

ĐỀ MỤC TRANG
BÀI 1 C++ BUILDER VÀ CÁC ƯU THẾ SO VỚI C++........................................................9
1.1 Lịch sử phát triển C++ Builder.......................................................................................9
1.2 Các tính năng tiên tiến.................................................................................................11

1.3 Ưu thế của C++ Builder so với Visual C++..................................................................12
BÀI 2 GIỚI THIỆU VỀ C++ BUILDER..............................................................................13
2.1 Giới thiệu C++ Builder.................................................................................................13
2.2 Mơi trường phát triển tích hợp IDE và các công cụ đặc trưng.....................................18
2.3 Xây dựng chương trình Text Editor.............................................................................28
2.4. Thực hành.................................................................................................................. 37
BÀI 3 TỔNG QUAN VỀ VCL.............................................................................................38
3.1 Giới thiệu VCL............................................................................................................. 38
3.2 Mơ hình phân cấp VCL................................................................................................39
3.3 Các thuộc tính, biến cố chung với TControl.................................................................40
3.4 Các thuộc tính, biến cố chung với TWinControl...........................................................44
3.5 Các đối tượng, thành phần chuẩn của VCL.................................................................47
3.6 Thực hành................................................................................................................... 80
BÀI 4 PHÁT TRIỂN GIAO DIỆN NGƯỜI DÙNG ỨNG DỤNG..........................................82
4.1 Tổng quan về phát triển giao diện người dùng............................................................82
4.2 Tạo và quản lý các form..............................................................................................84
4.3. Làm việc với thành phần.............................................................................................89
4.4 Xử lý đầu vào từ chuột................................................................................................89
4.5 Làm việc với bàn phím.................................................................................................92
4.6 Tạo và quản lý các menu.............................................................................................96
4.7 Các đối tượng hành động..........................................................................................102
4.8 Thực hành................................................................................................................. 103
BÀI 5 LÀM VIỆC VỚI CÁC ĐIỀU KHIỂN........................................................................104
5.1 Thực hiện các hành động kéo và thả.........................................................................104
5.2 Thực hiện các hành động rê và kết dính....................................................................116
5.3 Làm việc với văn bản trong các điều khiển................................................................117
5.4 Thêm đồ hoạ vào điều khiển......................................................................................119
5.5 Thực hành................................................................................................................. 121
BÀI 6 TƯƠNG TÁC GIỮA NGƯỜI DÙNG VỚI ỨNG DỤNG.........................................122



6.1 Sử dụng các hộp thoại...............................................................................................122
6.2 Hộp thoại Windows dùng chung................................................................................133
6.3 Tạo và quản lý các hộp thoại.....................................................................................134
6.4. Sử dụng đa biểu mẫu...............................................................................................143
6.5 Thực hành................................................................................................................. 160
BÀI 7 ĐỒ HOẠ VÀ MULTIMEDIA...................................................................................160
7.1 Tổng quan về lập trình đồ hoạ...................................................................................160
7.2 Các thành phần đồ hoạ VCL......................................................................................160
7.3 Sử dụng các thuộc tính và các phương thức của đối tượng Canvas........................161
7.4. Tạo và quản lý các bức vẽ........................................................................................164
7.5 Lập trình multimedia..................................................................................................196
7.6 Thực hành................................................................................................................. 216
BÀI 8 LIÊN KẾT CƠ SỞ DỮ LIỆU.................................................................................217
8.1 Các kỹ thuật truy cập dữ liệu trong C++ Builder........................................................218
8.2 Các thành phần truy cập cơ sở dữ liệu của C++ Builder...........................................218
8.3. Các điều khiển nhận biết dữ liệu của C++ Builder....................................................223
8.4 Các thành phần cơ sở dữ liệu cơ bản.......................................................................224
8.5. Xây dựng chương trình Marine................................................................................226
8.6 Thực hành................................................................................................................. 227
BÀI 9 XÂY DỰNG VÀ TRIỄN KHAI CÁC ỨNG DỤNG

260

9.1 Các kỹ thuật gỡ rối trong C++ Builder........................................................................261
9.2 Sử dụng tài nguyên Windows để xây dựng trợ giúp trực tuyến.................................261
9.3 Sử dụng chương trình InstallShield Express.............................................................263
9.4 Thực hành................................................................................................................. 264
BÀI 10 MỘT SỐ TÍNH NĂNG ĐẶC BIỆT KHÁC.............................................................266
10.1 Các tính năng đặc biệt khác trong C++ Builder........................................................266

10.2 Lập trình mạng với Socket.......................................................................................266
10.3 Thực hành............................................................................................................... 268
THUẬT NGỮ CHUYÊN MÔN..........................................................................................271
TÀI LIỆU THAM KHẢO....................................................................................................272


GIỚI THIỆU VỀ MƠ ĐUN/MƠN HỌC

Vị trí, ý nghĩa, vai trị mơn học :
Khi học lập trình căn bản, chúng ta đã lập trình và làm việc với ngơn ngữ C++ bằng
công cụ Turbo C++. Trong môn học này, chúng ta sẽ phát triển ứng dụng cao cấp dành
cho Windows bằng ngôn ngữ C++ với công cụ Borland C++ Builder. Do đó, để nghiên
cứu tốt mơn học này, chúng ta cần phải nắm vững ngơn ngữ lập trình C++ và một số
khái niệm của Windows như ListBox, Button, Multimedia, …
Mục tiêu của môn học:
Sau khi học xong môn học này học viên có khả năng:
Nêu được tính năng tiên tiến và các ưu thế của các mơi trường lập trình mới. Biết sử
dụng các đối tượng thành phần và điều khiển trong các thư viện lập trình thơng dụng.
Biết thiết kế các giao diện người dùng ứng dụng,sử dụng các thao tác trên các điều
khiển. Biết tạo các tương tác giữa người dùng với ứng dụng. Biết tạo và xử lý các đối
tượng đồ hoạ, đưa âm thanh hay các video clip vào ứng dụng. Biết xây dựng các ứng
dụng cơ sở dữ liệu đơn giản, biết tạo các chương trình ứng dụng đơn giản.
Mục tiêu thực hiện của môn học:
Học xong mơn học này học viên có khả năng:
Khái qt được q trình phát triển phần mềm trên cơng cụ C++ Builder. Nêu các tính năng tiên tiến của
C++ Builder. Nhận biết các ưu thế của C++ Builder so với Visual C++.
Hiểu biết về mơi trường lập trình Borland C++ Builder. Sử dụng IDE của C++ Builder để soạn thảo
chương trình nguồn, biên dịch, liên kết và chạy kiểm tra các chương trình. Mơ tả một số cơng cụ đặc
trưng của C++ Builder. Hiểu cách xây dựng một ứng dụng Windows với C++ Builder.
Hiểu biết về thư viện nền Visual Component library (VCL). Mơ tả vắn tắt về mơ hình phân cấp của thư

viện VCL. Liệt kê các đối tượng, thành phần và điều khiển trong thư viện VCL. Sử dụng một số thành
phần chuẩn của thư viện VCL.
Tạo và quản lý các Form. Làm việc với các thành phần trên Form. Xử lý thông tin đầu vào từ chuột và
bàn phím. Tạo và quản lý các menu, sử dụng menu designer. Sử dụng các hành động, tạo, đăng ký, viết
các bộ soạn thảo danh sách hành động.
Xử lý các hành động rê và thả, rê và liên kết với các đối tượng trên form. Sử dụng các văn bản trong điều
khiển, sử dụng đối tượng clipboard. Thêm các đối tượng đồ hoạ vào các điều khiển.
Sử dụng các hộp thoại. Phân biệt các hộp thoại modal và modeless. Sử dụng các thành phần hộp thoại
Windows dùng chung. Tạo và quản lý các hộp thoại. Sử dụng đa biểu mẫu.
Hiểu biết về các thành phần đồ hoạ thuộc thư viện VCL. Sử dụng các thuộc tính của đối tượng Canvas.
Sử dụng các phương thức của Canvas để vẽ các đối tượng đồ hoạ. Tạo và quản lý các bức vẽ. Thêm
âm thanh hay các video clip vào ứng dụng.
Sử dụng các thành phần nhận biết dữ liệu, các thành phần truy cập dữ liệu và một số thành phần khác.
Hiểu biết cách xây dựng một ứng dụng cơ sở dữ liệu. Cơ bản về tổ chức, quản lý và khai thác các cơ sở
dữ liệu.


Sử dụng một số kỹ thuật gỡ lỗi trong bộ công cụ C++ Builder. Sử dụng và khai thác các tài nguyên
Windows. Hiểu biết cách xây dựng các trợ giúp trực tuyến. Sử dụng chương trình cài đặt InstallShield.
Xây dựng một ứng dụng Windows đơn giản và hoàn chỉnh.
Nắm bắt các tính năng đặc biệt của bộ cơng cụ C++ Builder. Áp dụng vào việc lập trình Client/Server, lập
trình Internet, lập trình với Socket ở mức độ đơn giản.


Sơ đồ quan hệ theo trình tự học nghề
Hệ thống
máy tính

Giao diện
người máy

Lập trình
căn bản

Lập trình
nâng cao

Lập trình hướng
đối tượng

Mạng căn bản
Cấu trúc dữ liệu
và thuật giải

Kỹ năng tin học
văn phịng
Kỹ năng
Giao tiếp

Cơ sở dữ liệu

Phân tích thiết
kế hệ thống

Thiết kế
hướng đối
tượng
Ứng dụng
CNTT trong
doanh nghiệp


Công nghệ
phần mềm

Kỹ năng
Internet & WWW

Thiết kế Web

Cơ sở tốn học

Quản lý dự án
phần mềm

Cơng nghệ Đa
phương tiện
Lập trình
Visual Basic
Anh văn
cho tin học

Lập trình
Web

Phần cứng
máy tính

Hệ cơ sở dữ
liệu

Hướng dẫn đồ

án tốt nghiệp

An toàn
lao động

Thi
tốt nghiệp


CÁC HÌNH THỨC HỌC TẬP TRONG MƠ ĐUN
1. Học tại phịng lý thuyết
- Trình bày đầy đủ các đối tượng và phương pháp triển khai các bài tập của từng bài
học.
- Phân tích và thiết kế các phép tốn hợp lý bằng mơ hình.
- Học sinh phải tập trung hết sức và phải tận dụng thời gian giải lao để giải lao thật tốt.
- Học sinh luôn rèn luyện khả năng tư duy logic để phân tích, tổng hợp các vấn đề cần
giải quyết. Không ngừng học hỏi các kiến thức về ngơn ngữ lập trình. Ln chú ý rèn
luyện các thao tác chính xác, cẩn thận khi lập trình.
2. Học tại phòng thực hành
- Cài đặt các bài tập.
- Phân tích các bài tốn thật kỹ lưỡng và cài đặt nhiều lần các bài tập.
- Học viên phải tập trung hết sức và phải tận dụng thời gian giải lao để giải lao thật tốt.

YÊU CẦU VỀ ĐÁNH GIÁ HỒN THÀNH MƠ ĐUN/MƠN HỌC
Đánh giá thơng qua kiểm tra trắc nghiệm:
Kiểm tra trắc nghiệm được thực hiện trên máy tính và chấm cho kết quả ngay
Xây dựng ngân hàng các câu hỏi. Học viên sẽ nhận được ngẫu nhiên các câu hỏi trắc
nghiệm 100 câu (mỗi chức năng 20 câu), Thời gian kiểm tra hạn chế trong 60 phút.
Thang điểm:
0-49


: Khơng đạt

50-69

: Đạt trung bình

70-85

: Đạt khá

86-100

: Đạt Giỏi

Đánh giá thông qua các tiểu đề tài :
Các tiểu đề tài được các nhóm học viên chuẩn bị và thực hiện trên máy tính có thể
chấm và cho kết quả ngay. Xây dựng một bộ các tiểu đề tài. Học viên sẽ được nhận
ngẫu nhiên các tiểu đề tài theo nhóm. Có thời gian chuẩn bị trước.
Nội dung chính của môn học :

9


BÀI 1
C++ BUILDER VÀ CÁC ƯU THẾ SO VỚI C++
Mã bài : ITPRG03.1
Giới thiệu :
Trong nội dung môn học này, chúng ta sẽ quan sát sơ lược về lịch sử phát triển của
C++ Builder, các tính năng tiên tiến của C++ Builder, so sánh giữa C++ Builder với

Visual C++. Bài học này mang lại một tầm nhìn tổng quan về ưu thế của C++ Builder
cho chúng ta.
Mục tiêu thực hiện:
Học xong bài này học viên sẽ có khả năng:
Khái quát lịch sử phát triển C++ Builder
Liệt kê một số tính năng tiên tiến của C++ Builder.
Liệt kê các ưu thế của C++ Builder so với Visual C++.

Nội dung chính:
1.1 Lịch sử phát triển C++ Builder

C++ Builder originally targeted only the Microsoft Windows platform. Later versions
incorporated Borland CLX, a cross-platform development visual component library
based on Qt, that supports Windows and Linux.
Sau một số năm, Borland ấn bản phiên bản Borland C++ Builder 2006, cung cấp
chức năng quản lý mạnh và sửa các lỗi. C++ Builder 2006 là một phần của Borland
Developer Studio, một gói chứa Delphi, C++ Builder và C# Builder. Borland cũng làm
sống lại nhánh “Turbo” và ấn bản hai phiên bản “Turbo” của C++ Builder: Turbo C++
Professional và Turbo C++ Explorer (miễn phí):

Tên sản phẩm



Ngày ấn bản

?Delphi 2008? - ?CF?

Highlander


?

Delphi for PHP - PHP a-la Delphi

Astro

2007, Mar 27

Delphi 2007 for Windows Vista and
Spacely
AJAX

2007, Mar 19

Chrome 1.5.5 by RemObjects (VS
2005, .Net 2.0)

2006, Oct 27

Free Pascal 2.0.4

2006, Aug 28

Borland Developer Studio 2006 Delphi (W32 and .Net), C++ and C# DeXter
under one IDE

2005, Oct 10

10



Chrome - Object Pascal in VS by
RemObjects

2005, May 1

Free Pascal 2.0

2005, May

Borland Delphi 2005 - C# and Delphi Diamondba
under one IDE
ck

2004, Oct 12

Borland Delphi 8 for .Net

Octane

2003, Dec 22

Borland C++BuilderX

Tomahawk

2003, Aug 28

Borland C#Builder 1.0


Sidewinder
(Galileo IDE 2003, Jun 16
1.0)

Borland Delphi.NET compiler

Morpheus

Borland Delphi 7

Aurora

2002, Aug 9

Borland C++ Builder 6.0

Riptide

2002, Feb 1

Borland Delphi 6

Illiad

2001, May 21

Free Pascal 1.0

2000, Jul


Borland C++ Builder 5.0

Rampage

2000, Jan 30

Borland Delphi 5

Argus

1999, Aug 10

Borland C++ Builder 4.0
Borland Delphi 4

1999, Jan 26
Allegro

Borland C++ Builder 3.0
Borland Delphi 3

1998, Jun 17
1998, Feb 8

Ivory

1997, Aug 5

Borland C++ 5.0


1997, Mar 25

Borland C++ Builder 1.0

1997, Feb 4

Borland Delphi 2

Polaris

1996, Feb 10

Borland C++ 4.5

1995, Aug 29

Turbo C++ for Windows 4.5

1995, Apr 28

Borland Delphi 1

Delphi95,
Wasabi,
Mango,
AppBuilder
11

1995, Feb 14



Borland C++ 4.0

1993, Dec 15

Delphi project hatched

mid 1993

Free Pascal (project born)

1993, Jun

Borland Pascal 7

1992, Oct 27

Borland C++ 3.1

1992, Jun 10

Turbo Pascal for Windows 1.5

1992, Jun 8

Turbo C++ for DOS 3.0

1992, Feb 18

Borland C++ 3.0


1991, Nov 11

Turbo C++ for Windows 3.0

1991, Nov 11

Turbo Pascal for Windows 1.0

1991, Feb 13

Borland C++ 2.0

1991, Feb 13

Turbo Pascal 6.0

1990, Oct 23

Turbo C++ for DOS 1.0

1990, May 4

Turbo C for DOS 2.0

1989, May 11

Turbo Pascal 5.5

1989, May 2


Turbo C for DOS 1.5

1988, Dec 10

Turbo Pascal 5

1988, Aug 24

Turbo C for DOS 1.0

1987, May 13

Turbo Pascal 4

1987, Nov 20

Turbo Pascal 3

1986, Sept 17

Turbo Pascal 2

1984, Apr 17

Turbo Pascal 1 (Compass Pascal 3.0)

1983, Nov 20

Pascal as Modula


1977

Pascal - first book by Wirth and Jensen

1975

Pascal implemented

1973

Pascal defined by Prof. Niklaus Wirth

1971

1.2 Các tính năng tiên tiến

12


Tính năng tiên tiến nhất của C++ Builder là hỗ trợ kiểu dữ liệu AnsiString thay thế
cho kiểu dữ liệu chuỗi char truyền thống.
Nói tạm biệt với char* cho cơng việc điều tác chuỗi. Chúng ta chuyển sang sử dụng
lớp AnsiString để điều tác chuỗi. Một sự minh họa cho sự chuyển đổi sử dụng cho
chuỗi ở dưới đây:
int __cdecl printf(const char* format, ...);
int __cdecl cat_printf(const char* format, ...);
AnsiString& __cdecl sprintf(const char* format, ...);
AnsiString& __cdecl cat_sprintf(const char* format, ...);
Phiên bản này còn cung cấp một loạt các phương thức để làm việc chuỗi một cách

linh hoạt mang lại phong cách lập trình mới đối với chuỗi.
C++ Builder cung cấp thêm kiểu dữ liệu tập hợp, đây là một kiểu dữ liệu mới tương
thích với kiểu dữ liệu tập hợp của Pascal. Các giá trị được thêm vào kiểu tập hợp
qua phép toán << và được loại bỏ qua phép toán >>. Ví dụ, để thêm hai phần tử có
giá trị bằng mbNoToAll và mbNo vào kiểu tập hợp TMsgDlgButtons(), chúng ta sử
dụng lệnh TMsgDlgButtons() << mbNoToAll << mbNo;.
C++ Builder còn thống nhất tất cả các đối tượng được tạo ra bởi C++ Builder đều
được sử dụng dưới dạng con trỏ. Tuy nhiên, người dùng vẫn có thể tạo các biến
hoặc các đối tượng truyền thống mà không phải dùng con trỏ. Chúng tôi khuyến cáo
nên khai báo tất cả các đối tượng thành con trỏ vì C++ Builder hỗ trợ một lớp các đối
tượng chỉ làm việc trên con trỏ. Nghĩa là, nếu chúng ta có một đối tượng Label1 thì
việc truy cập thuộc tính Name của đối tượng này phải được viết Label1->Name.
Các đối tượng trong C++ Builder phải được khởi tạo bởi từ khóa new và xóa bằng
việc sử dụng từ khóa delete. Ví dụ:
TButton *Button1;
và lệnh khởi tạo:
Button1 = new TButton(this);
sau khi sử dụng xong Button1, chúng ta sẽ hủy bỏ đối tượng này bằng lệnh:
delete Button1;
Ngoài ra, C++ Builder còn cung cấp một bộ biên dịch để tạo ra các chương trình
thực thi với dung lượng thấp nhất và tốc độ chạy nhanh nhất.
1.3 Ưu thế của C++ Builder so với Visual C++

C++ Builder có nhiều ưu thế hơn so với Visual C++, sau đây chúng tơi liệt kê một số
tính năng ưu việt:
- C++ Builder là công cụ phát triển phần mềm nhanh, cung cấp các thành phần trực
quan được gói gọn mà tránh gọi các lệnh WinAPI như visual C++. Tuy nhiên, C++
Builder vẫn hỗ trợ cho người lập trình khả năng gọi các hàm WinAPI.
- C++ Builder lập trình với giao diện đơn giản và trình sinh mã tự động mang lại hiệu
quả cao mà không cần phải viết các đoạn lệnh để tạo cửa sổ từ đầu như Visual C++.

- C++ Builder có thể gói chương trình và các thành phần liên quan vào một tập tin
duy nhất trong khi Visual C++ phải phụ thuộc vào MFCxx.DLL và các tập tin .DLL
khác.

13


- C++ Builder cho phép chúng ta lập trình trên nền tảng chéo trong khi Visual C++ chỉ
lập trình trên Windows.
- C++ Builder sử dụng các thành phần VCL trong khi visual C++ sử dụng MFC.
Thành phần VCL được bao gồm vào bộ cài đặt C++ Builder giúp người lập trình có
thể tùy biến theo ý mình thích.
- C++ Builder cho phép phát triển các phần mềm trên nền tảng chéo (Linux và
Windows) trong khi Visual C++ chỉ cho phép phát triển trên nền Windows.
- Visual C++ kết nối với cơ sở dữ liệu chỉ sử dụng công nghệ dựa trên nền tảng ADO
trong khi C++ Builder cịn có thể kết nối cơ sở dữ liệu có thể sử dụng BDE và SQL
Links.
BÀI 2
GIỚI THIỆU VỀ C++ BUILDER
Mã bài : ITPRG03.2
Giới thiệu :
Trong bài học này học viên sẽ làm quen với các khái niệm mà C++ Builder đưa ra, các
công cụ của C++ Builder cũng như có thể hiểu được mơi trường làm việc của Borland
C++ Builder 6.0. Bài học này càng cung cấp cho chúng ta các thuật ngữ mới, các
phương pháp làm việc cũng như quy tắc lưu trữ của C++ Builder. Để nghiên cứu thành
công nội dung bài học, chúng ta phải cố gắng quan sát và ghi chép những điều cần thiết
của các công cụ trong môi trường cũng như những thuật ngữ mới.

Mục tiêu thực hiện:
Học xong bài này học viên sẽ có khả năng:

Mơ tả các thành phần chính của C++ Builder
Mơ tả một số công cụ đặc trưng của C++ Builder.
Mô tả các bước để xây dựng một chương trình Windows với C++ Builder.

Nội dung chính:
2.1 Giới thiệu C++ Builder.

Borland C++ Builderlà một trong những bộ biên dịch đầu tiên cho phép bạn sử dụng
các đối tượng được gọi là những thành phần bằng cách sử dụng chuột và di chuyển
xung quanh để thay đổi thiết kế trực quan của chương trình hơn là sử dụng các đoạn
mã lệnh để thực hiện điều này. Cốt lõi của kỹ thuật này là lập trình thành phần, các
thành phần có thể chạy với một tốc độ rất nhanh, thậm chí một đối tượng có thể hiện
ra và ẩn đi mà mắt chúng ta chưa kịp nhìn thấy và nhấn chuột lên nó.
Lập trình với Borland C++ Builder dễ đến mức bất ngờ. C++ Builder tạo thêm sự sơi
nổi cho ngơn ngữ lập trình C++. Đây là một công cụ tốt để chúng ta phát triển nhanh
các chương trình một cách dễ dàng và tạo được các chương trình mạnh. C++
Builder cho phép sử dụng đầy đủ các thành phần cao cấp của C++, bao gồm mẫu
(templates), khơng gian tên (name spaces), phép tốn nạp chồng và toàn bộ hàm
Windows API, kể cả các hàm dùng cho DirectX, OLE và ActiveX.
Ngôn ngữ C++ vẫn là cốt lõi của C++ Builder. C++ Builder đưa ra một cấp độ cao
hơn để hỗ trợ ngôn ngữ C++. Borland C++ Builder tích hợp thư viện các thành
14


phần trực quan (Visual Component Library) vào để dùng cho ngôn ngữ C++. Vấn đề
nằm ở chỗ C++ Builder sử dụng ngơn ngữ Pascal, trong khi đó C++ Builder lại sử
dụng ngôn ngữ C++. Tuy nhiên, dựa trên sự phê chuẩn của ANSI, Borland đã thêm
các thành phần để hỗ trợ cho C++.
Trong ngơn ngữ lập trình hướng đối tượng, các biến thành viên dùng để lưu trữ các
giá trị hoặc trạng thái của đối tượng trong suốt thời gian sống của nó. Tuy nhiên,

những biến lại được truy cập trực tiếp, do đó, có thể một phần nào đó của chương
trình sẽ làm gãy chương trình vì đã đưa vào các giá trị không phù hợp.
Để giải quyết vấn đề trên, rất nhiều nhà phát triển ứng dụng hướng đối tượng tạo ra
các hàm thành viên gọi là hàm lấy giá trị và cài đặt giá trị nhằm mục đích khơng cho
phép truy cập trực tiếp các biến thành viên đồng thời cũng tạo ra các truy bắt ngoại
lệ nhằm áp đặt giá trị luôn luôn phù hợp với biến lưu trữ. Phương pháp này cịn cho
phép lập trình viên có thể ẩn được các dạng biến dùng để lưu trữ dữ liệu chẳng hạn
như tập tin, cơ sở dữ liệu, hoặc một kiểu dữ liệu phức hợp.
Borland tạo ra ngơn ngữ C++ Builder đã cung cấp thuộc tính nhằm thống nhất hai
hàm thành viên lấy giá trị và cài đặt giá trị thành một thành viên trong lớp. Trong lớp
của C++ Buider, một thuộc tính thường gồm một biến khai báo với bổ từ private và
một hàm dùng để lấy giá trị và cài đặt giá trị được khai báo với bổ từ protected, một
khai báo thuộc tính với bổ từ public. Sau đây là một minh họa:
class aClassWithAProperty //khai báo lớp aClassWithAProperty
{
private:
int myMemberVariable; //biến thành viên
protected:
int __fastcall GetMemberVariable(void) //hàm lấy giá trị
{
return myMemberVariable;
};
void __fastcall SetMemberVariable(int theMemberVariable)
//hàm cài đặt giá trị
{
myMemberVariable = theMemberVariable;
};
public:
__property int MemberVariable = //thuộc tính
{

read=GetMemberVariable,
write=SetMemberVariable
};
Khi đó, chúng ta có thể sử dụng cài đặt của lớp để truy cập thuộc tính
MemberVariable như sau:
15


AClassWithAProperty ClassWithAProperty;
ClassWithAProperty.MemberVariable = 2;
int Something = ClassWithAProperty.MemberVariable;
Các thuộc tính được sử dụng rất nhiều trong các thành phần C++ Builder. Để trợ
giúp cho môi trường trực quan được cung cấp bởi C++ Buidler, Borland đã tạo ra
một phần đặc biệt cho lớp, được định nghĩa bởi __published tương tự như hai phần
public và private ở ví dụ trên. Nếu một thuộc tính được đặt trong phần __published,
nó sẽ được nhìn thấy trong cửa sổ điều chỉnh thuộc tính trong quá trình thiết kế.
Sau đây là minh họa về thuộc tính được đặt trong phần published:
class aClassWithAProperty: public TComponent
{
private:
int myMemberVariable;
protected:
int __fastcall GetMemberVariable(void)
{
return myMemberVariable;
};
void __fastcall SetMemberVariable(int theMemberVariable)
{
myMemberVariable = theMemberVariable;
};

__published:
__property int MemberVariable =
{
read=GetMemberVariable,
write=SetMemberVariable
};
};
Khi đó thuộc tính MemberVariable có thể được điều chỉnh trực tiếp trong cửa sổ điều
chỉnh thuộc tính của Borland C++ Builder (Object inspector).
Như đã nói ở trên, C++ Builder thưa hưởng rất nhiều đặc tính của C++ Builder. C++
Builder cung cấp một thuộc tính mặc định. Với thuộc tính này, chúng ta có thể truy
cập bằng cách dùng phép tốn chỉ số. Chúng ta có thể truy cập thuộc tính mặc định
này như sau:
(*StringListVariable)[Index]
hồn tồn tương thích với cách truy cập sau vì Strings là thuộc tính mặc định:
StringListVariable->Strings[Index]

16


Ngôn ngữ C++ Builder giới thiệu một thành phần cho phép truy bắt ngoại lệ được
chấp nhận bởi Java. Trong C++ Builder, chúng ta dùng __finally và try để truy bắt
các ngoại lệ.
Ví dụ:
TStringList *List = new TStringList;
try
{
// thực hiện các câu lệnh
}
__finally

{
delete List;
Đoạn lệnh đặt trong __finally sẽ thực hiện khi các câu lệnh trong try đã được thực
hiện xong hay có một ngoại lệ xảy ra.
Khi viết chương trình bằng Borland C++ Builder, chúng ta dùng thư viện thành phần
trực quan (VCL – Visual Component Library). VCL là nguồn gốc cho các thành phần
được sử dụng để tạo các ứng dụng C++ Builder (các thành phần tương tự VCL dùng
đê phát triển đa nền tảng gọi là CLX). Một thành phần là một đối tượng, thường trực
quan, chẳng hạn một hộp đánh dấu (checkbox), một danh sách chọn ổ đĩa, hoặc một
hình ảnh. Các thành phần cũng có thể không trực quan, chẳng hạn như các kết nối
cơ sở dữ liệu hoặc các kết nối mạng. Các thành phần có thể được chọn từ bảng
thành phần (component palette) của IDE bằng dùng chuột trái để chọn và đặt chúng
lên vùng làm việc.

Hình 1 – IDE của Borland C++ Builder
Chúng ta cũng có thể thêm hoặc viết thêm cái thành phần của chúng ta, VCL thực
sự đã giảm bớt mức độ khó cho q trình làm việc của chúng ta.
Tất cả các thành phần đều có các thuộc tính, chúng ta có thể điều chỉnh bằng cửa sổ
object inspector (xem hình 1)

17


Khi chúng ta tạo một ứng dụng mới trong C++ Builder, một biểu mẫu (form) trống sẽ
được tạo một cách tự động. Để xây dựng giao diện ứng dụng của chúng ta, một
cách đơn giản là thêm các đối tượng trực quan vào biểu mẫu, sau đó điều chỉnh vị trí
và kích thước cho phù hợp. Chúng ta cũng có thể thêm các thành phần không trực
quan vào một biểu mẫu, chẳng hạn như các timer; những thành phần này sẽ hiển thị
một biểu tượng trong quá trình thiết kế nhưng sẽ khơng nhìn thấy khi chương trình
được thực thi. Chúng ta cũng có thể tạo các biểu mẫu đặc biệt như tool window hoặc

dialog. Một chương trình có thể có nhiều biểu mẫu nhưng chỉ có một biểu mẫu làm
biểu mẫu chính (main form). Mặc định, khi người sử dụng chạy chương trình của
chúng ta, biểu mẫu chính sẽ hiển thị lên màn hình, các biểu mẫu sẽ hiển thị đúng vị
trí mà chúng ta đã thiết kế trên màn hình IDE, vị trí này có thể được điều chỉnh lại bởi
Object Inspector.
Để đưa các thành phần vào biểu mẫu, chúng ta phải sử dụng các thành phần trong
bảng thành phần.
Bảng thành phần (Component Palette) nằm ở dưới menu chính, chứa tất cả các
thành phần trong VCL. Các thành phần này được nhóm thành từng nhóm theo tên
chủ đề trên các ngăn (tab) trên các thành phần. Để lựa chọn một thành phần, nhấn
chuột trái lên nó, sau đó nhấn lại một lần nữa lên biểu mẫu để đặt đối tượng vào vị
trí mà chúng ta muốn. Như đã đề cập ở trên, chúng ta có thể điều chỉnh các thuộc
tính của thành phần bằng Object Inspector. Chúng ta cũng có thể điều chỉnh lại các
thành phần trực quan bằng cách rê cạnh biên để điều chỉnh kích thước của nó, hoặc
có thể rê nó đến vị trí mới.
Để đối tượng có thể tương tác được với người sử dụng, chúng ta phải viết mã lệnh
để thực thi nhằm đáp ứng các sự kiện (events) do người dùng phát sinh hay do hệ
điều hành phát sinh. Các mã lệnh để đáp ứng một sự kiện nào đó gọi là giải quyết
sự kiện.
Một ví dụ đầu tiên về việc sử dụng sự kiện trong C++ Builder, chúng ta hãy đưa một
nút nhấn (Button) đơn giản vào giữa màn hình như sau:

Hình 2-Nút nhấn Button1 nằm giữa biểu mẫu
C++ Builder đã tạo một nút nhấn như một phần của chương trình. Tại thời điểm này,
nút nhấn này vẫn chưa thể thực hiện được gì, nghĩa là nếu chương trình được biên
dịch và thực thi thì sẽ khơng có kết quả gì khi chúng ta nhấn chuột vào nút trên.
Chúng ta có thể dùng các đoạn mã lệnh để đáp ứng sự kiện nhằm thực hiện một vài
hành động như: lưu thông tin người sử dụng nhập vào, hiển thị một hộp thoại thơng
báo, hoặc bất cứ việc gì có thể.
18



Khi nút nhấn được nhấn chuột tại thời điểm thực thi, một sự kiện được phát sinh.
Ứng dụng của chúng ta phải có đoạn mã lệnh để xử lý, đoạn mã lệnh này sẽ tự động
thực hiện mỗi khi sự kiện tương ứng được phát sinh. Để giải quyết vấn đề này, C++
Builder đã tạo ra sự kiện OnClick để viết các mã lệnh nhằm thực thi khi sự kiện nhấn
chuột được phát sinh. Để viết lệnh cho sự kiện này, trong cửa sổ Object Inspector,
chúng ta chọn ngăn Events, chọn tên sự kiện OnClick, nhấn đôi chuột trái lên nó
hoặc đơn giản hơn, chúng ta có thể nhấn đơi chuột lên đối tượng Button1 trên biểu
mẫu. Khi đó, cửa sổ soạn thảo mã lệnh (Source code editor Window) sẽ xuất hiện
với văn bản như sau:
Cấu trúc của sự kiện OnClick như sau:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
}
Nếu chúng ta nhấn chuột phải trong cửa sổ soạn thảo mã lệnh và chọn Open
Source/Header File, chúng ta sẽ nhìn thấy được đoạn mã lệnh sau:
//---------------------------------------------------------------------------#ifndef Unit1
#define Unit1
//---------------------------------------------------------------------------#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------class TForm1 : public TForm
{
__published:

// IDE-managed Components

TButton *Button1;

void __fastcall Button1Click(TObject *Sender);
private:
public:

// User declarations
// User declarations

__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------#endif
Đoạn mã lệnh trên được sinh ra một cách tự động bởi C++ Buider. Tơi đưa vào đây
để chúng ta có thể nhìn thấy những gì mà C++ Builder có thể làm cho chúng ta một
cách tự động.
19


Bây giờ, chúng ta sẽ thêm một đoạn mã lệnh để hiển thị một hộp thoại thông báo khi
người sử dụng nhấn chuột lên nút nhấn trên. Trong cửa sổ soạn thảo mã lệnh,
chúng ta nhấn vào ngăn Unit1.cpp để chuyển về vị trí viết mã lệnh cho sự kiện của
Button. Thêm đoạn mã lệnh vào để có được đoạn mã lệnh sau:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage("Hello world! This is a test application! Press OK");
Close();
}
Khi chương trình thực thi, người sử dụng nhấn chuột vào nút nhấn và sự kiện được
phát sinh, đoạn mã lệnh trên sẽ được thực thi và hiển thị lên màn hình một thơng
báo. Khi người sử dụng đóng thơng báo này lại, chương trình sẽ được dừng bởi câu
lệnh Close().

2.2 Mơi trường phát triển tích hợp IDE và các công cụ đặc trưng

Khi chúng ta khởi động C++ Builder, chúng ta được đặt trong một môi trường phát
triển tích hợp gọi là IDE (Integrated Development Environment). IDE cung cấp cho
chúng ta tất cả các công cụ cần thiết để thiết kế, phát triển, kiểm tra, gỡ rối (debug)
và triển khai các ứng dụng, cho phép phát triển các ứng dụng với thời gian phát triển
nhanh hơn.
IDE gồm các cơng cụ sau:
* Cửa sổ chính và các cơng cụ
Cửa sổ chính của IDE khít với phần trên của màn hình. Nó chứa các cơng cụ khác
nhau, bao gồm hệ thống thực đơn (menu bar), tất cả chúng có thể được di chuyển.
Chúng ta có thể thêm hoặc loại bỏ các nút nhấn bằng cách sử dụng chức năng
Customize từ thực đơn đổ xuống (Popup menu) trên bất kỳ thanh cơng cụ nào.
Chúng ta cũng có thể kéo và thả (drag and drop) bất kỳ lệnh nào được liệt kê trong
hộp thoại ngăn Commands của hộp thoại Customize vào bất kỳ thanh cơng cụ nào.
Chúng ta chỉ có thể sử dụng những cơng cụ đã có mà khơng được tạo ra bất kỳ
cơng cụ nào cũng như xóa chúng đi. Sử dụng cách tương tự như trên để loại bỏ các
nút nhấn bằng cách chọn chức năng customize và kéo nút nhấn ra khỏi thanh công
cụ đang giữ nó.
* Project Manager
Project Manager khơng hiển thị một cách mặc định nhưng nó thường rất quan trọng.
Để hiển thị cửa sổ này (dĩ nhiên trong trường hợp nó chưa hiển thị), chúng ta chọn
nó từ thực đơn View. Project Manager cho phép chúng ta quản lý dự án (project)
đang làm việc.

20


Hình 3- Cửa sổ Project Manager


Như hình minh họa trên, cửa sổ project manager hiển thị các tập tin trong dự án
đang làm việc. Chúng ta có thể sắp xếp lại thứ tự biên dịch của những file này trong
cửa sổ Project Manager và thực hiện nhiều thao tác khác nhờ thực đơn đổ xuống
cho từng tập tin hoặc cho cả dự án.
Understanding C++Builder Projects
IDE cung cấp hai con đường để phát triển bằng cách kết hợp cửa sổ thiết kế biểu
mẫu và cửa sổ mã lệnh. Project Manager được dùng chủ yếu cho quản lý các tập tin
trong dự án của C++ Buider.
Các dự án của C++ Builder bao gồm rất nhiều kiểu tập tin khác nhau. C++ Builder
tạo một vài tập tin một cách tự động; khi một dự án mới được khởi tạo hay khi một
thành phần (như tập tin, hình ảnh ngồi, …) được thêm vào dự án hiện có. Các tập
tin trong dự án mà chúng ta cần quan tâm có thể chia ra thành các chủ đề như sau:
Các tập tin chính của dự án: Khi chúng ta tạo một dự án mới, ba tập tin sau đây
được tạo:
- Tập tin dự án: ProjectName .bpr
- Tập tin mã nguồn: ProjectName .cpp
- Tập tin tài nguyên (resource): ProjectName .res
Các tập tin biểu mẫu: Khi chúng ta tạo một biểu mẫu, C++ Builder sẽ sinh ra các tập
tin sau:
- Tập tin bố cục (layout): Unitname.dfm
- Tập tin mã nguồn: UnitName.cpp
- Tập tin tiêu đề (header - một tập tin chứa các khai báo hàm, lớp, … ): UnitName.h
Các tập tin gói: Các gói đơn giản là các thư viện liên kết động được chia sẻ cho
nhiều ứng dụng C++ Builder. Nó cho phép chúng ta chia sẻ các lớp, các thành phần
và dữ liệu giữa các ứng dụng. Ví dụ, các đối tượng thường dùng trong C++ Builder
cư trú trong một gói gọi là VCL. Hầu hết các ứng dụng được tạo bằng C++ Builder
đều chia sẻ các đoạn mã lệnh trong gói này, gói này có tên VCL60.bpl.
Khi chúng ta tạo ra các thành phần riêng hoặc thư viện của riêng chúng ta, chúng ta
phải tạo chúng trong một dự án gói (package project). Dự án gói chứa một tập
21



tin .bpk giống như tập tin .bpr nhưng nó chỉ dùng cho dự án gói. Tập tin này được
tạo ra khi chúng ta chọn thực đơn File/New/Package. Dự án gói sau khi được biên
dịch sẽ trở thành thư viện gói (Package Library), chúng sẽ có phần mở rộng .bpl.
Đây là thư viện thực thi (nghĩa là không chứa mã lệnh, chỉ chứa mã nhị phân) được
sinh ra cho gói. Nó giống như thư viện DLL, ngoại trừ chúng chứa các thành phần
được chỉ định trong C++ Builder khi chúng ta thiết kế nó. Mỗi một lần chúng ta biên
dịch một gói, một tập tin có phần mở rộng .bpi sẽ được tạo ra, tập tin này gọi là thư
viện nhập khẩu (import library). Chúng ta sẽ bàn kỹ hơn về vấn đề này trong một
chương khác.
The IDE can be set to save the layout automatically when you close the project.
From the menu, select Tools, Environment Options. This will take you to the
Environment Options dialog. Select the Preferences tab and check AutoSave
Options, Project Desktop.
Các tập tin sao lưu để dự trữ: C++ Builder sẽ tiến hành sao lưu các tập tin trong dự
án mỗi lần dự án được lưu lại, dĩ nhiên, ngoại trừ lần lưu đầu tiên. Các tập tin này có
tiếp đầu ngữ ~ cho phần mở rộng của nó.
* Sắp xếp cửa sổ trong IDE
Các cửa sổ trong mơi trường IDE có thể neo lại với nhau. Chức năng này cho phép
chúng ta tùy biến bố cục (layout) giao diện theo nhu cầu của chúng ta. Thao tác điều
chỉnh thật hết sức đơn giản bằng cách kéo và thả các cửa sổ. Chẳng hạn, trong hình
minh họa sau, cửa sổ Object Tree View được neo vào góc dưới của cửa sổ Object
Inspector theo các hình minh họa sau:

Hình 4 - Hai cửa sổ chưa được neo

22



Hình 5 - Đang neo cửa sổ

Hình 6 - Đã neo xong cửa sổ
* Object Inspector
23


Hình 7-Cửa sổ Object Inspector
Cửa sổ Object Inspector hiển thị các thuộc tính cho đối tượng hay biểu mẫu đang
được chọn. Chúng ta cũng có thể lựa chọn các thành phần từ danh sách đổ xuống
(drop-down list) ở trên cùng của cửa sổ Object inspector.
Hình minh họa cho thấy Object Inspector đang hiển thị các thuộc tính của thành
phần TclientDataSet , tuy nhiên các thuộc tính có thể sẽ khơng giống nhau cho mỗi
thành phần.
Chúng ta có thể nhấn nút cộng (+) để xem thêm các thuộc tính khác nằm trong một
thuộc tính. Object inspector dùng màu sắc để hiển thị bản chất của thuộc tính.
Những thuộc tính có tên màu đỏ chỉ rằng nó tham chiếu đến những thành phần
khác. Màu xanh lá cây (green) chỉ định thuộc tính này được mang sang từ những
đối tượng được tham chiếu bởi thuộc tính này nhằm tiện nghi trong việc sửa chữa
các thuộc tính của thành phần đang tham chiếu.
* Object Tree View
Object Tree View là một bổ trợ quan trọng cho Object Inspector. Trong trường hợp
các đối tượng có hơn mười hay nhiều hơn, Object Inspector sẽ hiển thị không phù
hợp. Trong khi đó, cửa sổ Object Tree View hiển thị với quan hệ cha con và có thể
cuộn lên xuống. Dĩ nhiên, nếu trường hợp các đối tượng con q nhiều, chúng ta
vẫn khơng thể nhìn thấy phần tử cha của nó (đã bị cuộn lên trên), do đó, vẫn khó
khăn khi click chuột lên đối tượng cha.

24



Hình 8-Cửa sổ Object TreeView

Chúng ta có thể sử dụng Object TreeView để điều chỉnh các đối tượng, chẳng hạn
như tạo bảng sao.
* Cửa sổ soạn thảo mã lệnh
Cửa sổ soạn thảo mã lệnh đươc minh họa như hình sau:

Hình 9-Cửa sổ soạn thảo mã lệnh
Cửa sổ được chia thành nhiều ngăn, mỗi ngăn chứa một tập tin được mở. Nó cho
phép mở và chỉnh sửa nhiều loại tập tin tin khác nhau như các tập tin của C++, các
tập tin của C++ Builder, tập tin văn bản, …
* Ngăn Diagram
Ngăn này cho phép chúng ta điều chỉnh sơ đồ đang hiện có giữa các đối tượng.

25


×