Giáo án - Bài giảng: GIÁO TRÌNH BORLAND C++ BUILDER

175 1.2K 3
Giáo án - Bài giảng: GIÁO TRÌNH BORLAND C++ BUILDER

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Lê Xuân Thạch-0949740777 Borland C++ Builder MỤC LỤC BÀI 1- GIỚI THIỆU C++ BUILDER Ưu C++ Builder so với Visual C++ 2 Giới thiệu C++ Builder Môi trường phát triển tích hợp IDE cơng cụ đặc trưng BÀI 2- TỔNG QUAN VỀ VCL 15 Giới thiệu VCL 15 Mơ hình phân cấp VCL 15 Các thuộc tính, biến cố chung với TControl 16 Các thuộc tính, biến cố chung với TWinControl 20 Các đối tượng, thành phần chuẩn VCL 22 BÀI 3- LÀM VIỆC VỚI CÁC ĐIỀU KHIỂN 53 1.Thực hành động rê thả 53 Thực hành động rê kết dính 63 Làm việc với văn điều khiển 64 Thêm đồ hoạ vào điều khiển 65 BÀI 4- TƯƠNG TÁC GIỮA NGƯỜI DÙNG VÀ ỨNG DỤNG 68 Sử dụng hộp thoại 68 Hộp thoại Windows dùng chung 77 Tạo quản lý hộp thoại 78 Sử dụng đa biểu mẫu 87 Xây dựng chương trình TextEditor 103 BÀI 5- ĐỒ HỌA VÀ MULTIMEDIA 112 Tổng quan lập trình đồ hoạ 112 Các thành phần đồ hoạ VCL 112 Sử dụng thuộc tính phương thức đối tượng Canvas 112 Tạo quản lý vẽ 115 Lập trình multimedia 141 BÀI 6- LIÊN KẾT CƠ SỞ DỮ LIỆU 152 Các kỹ thuật truy cập liệu C++ Builder 152 Các thành phần truy cập sở liệu C++ Builder 153 Các điều khiển nhận biết liệu C++ Builder 156 Các thành phần sở liệu 158 Xây dựng chương trình quản lý danh bạ 160 BÀI – LẬP TRÌNH MẠNG 167 Các tính đặc biệt C++ Builder 167 Lập trình mạng với Socket 167 BÀI 8- XÂY DỰNG VÀ TRIỂN KHAI CÁC ỨNG DỤNG 171 Các kỹ thuật gỡ rối C++ Builder 171 Sử dụng tài nguyên Windows để xây dựng trợ giúp trực tuyến 171 Sử dụng chương trình InstallShield Express 174 Trường Cao Đẳng Nghề Đà Lạt Trang 1/175 Lê Xuân Thạch-0949740777 Borland C++ Builder BÀI 1- GIỚI THIỆU C++ BUILDER Ưu C++ Builder so với Visual C++ C++ Builder có nhiều ưu so với Visual C++, sau chúng tơi liệt kê số tính ưu việt: - C++ Builder công cụ phát triển phần mềm nhanh, cung cấp thành phần trực quan gói gọn mà tránh gọi lệnh WinAPI visual C++ Tuy nhiên, C++ Builder hỗ trợ cho người lập trình khả gọi hàm WinAPI - C++ Builder lập trình với giao diện đơn giản trình sinh mã tự động mang lại hiệu cao mà không cần phải viết đoạn lệnh để tạo cửa sổ từ đầu Visual C++ - C++ Builder gói chương trình thành phần liên quan vào tập tin Visual C++ phải phụ thuộc vào MFCxx.DLL tập tin DLL khác - C++ Builder cho phép lập trình tảng chéo Visual C++ lập trình Windows - C++ Builder sử dụng thành phần VCL visual C++ sử dụng MFC Thành phần VCL bao gồm vào cài đặt C++ Builder giúp người lập trình tùy biến theo ý thích - C++ Builder cho phép phát triển phần mềm tảng chéo (Linux Windows) Visual C++ cho phép phát triển Windows - Visual C++ kết nối với sở liệu sử dụng công nghệ dựa tảng ADO C++ Builder cịn kết nối sở liệu sử dụng BDE SQL Links Giới thiệu C++ Builder Borland C++ Builderlà biên dịch cho phép bạn sử dụng đối tượng gọi thành phần cách sử dụng chuột di chuyển xung quanh để thay đổi thiết kế trực quan chương trình sử dụng đoạn mã lệnh để thực điều Cốt lõi kỹ thuật lập trình thành phần, thành phần chạy với tốc độ nhanh, chí đối tượng ẩn mà mắt chưa kịp nhìn thấy nhấn chuột lên Lập trình với Borland C++ Builder dễ đến mức bất ngờ C++ Builder tạo thêm sôi cho ngơn ngữ lập trình C++ Đây cơng cụ tốt để phát triển nhanh chương trình cách dễ dàng tạo chương trình mạnh C++ Builder cho phép sử dụng đầy đủ thành phần cao cấp C++, bao gồm mẫu (templates), khơng gian tên (name spaces), phép tốn nạp chồng toàn hàm Windows API, kể hàm dùng cho DirectX, OLE ActiveX Ngôn ngữ C++ cốt lõi C++ Builder C++ Builder đưa cấp độ cao để hỗ trợ ngôn ngữ C++ Borland C++ Builder tích hợp thư viện thành 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, C++ Builder lại sử dụng ngôn ngữ C++ Tuy nhiên, dựa phê chuẩn ANSI, Borland thêm thành phần để hỗ trợ cho C++ Trong ngôn ngữ lập trình hướng đối tượng, biến thành viên dùng để lưu trữ giá trị trạng thái đối tượng suốt thời gian sống Tuy nhiên, biến lại truy cập trực tiếp, đó, phần chương trình làm gãy chương trình đưa vào giá trị không phù hợp Để giải vấn đề trên, nhiều nhà phát triển ứng dụng hướng đối tượng tạo hàm thành viên gọi hàm lấy giá trị cài đặt giá trị nhằm mục đích không cho phép truy cập trực tiếp biến thành viên đồng thời tạo truy bắt ngoại lệ nhằm áp đặt giá trị luôn phù hợp với biến lưu trữ Phương pháp cho phép lập trình viên ẩn dạng biến dùng để lưu trữ liệu chẳng hạn tập tin, sở liệu, kiểu liệu phức hợp Borland tạo ngôn ngữ C++ Builder cung cấp thuộc tính nhằm thống hai hàm thành viên lấy giá trị cài đặt giá trị thành thành viên lớp Trong lớp C++ Buider, thuộc tính thường gồm biến khai báo với bổ từ private hàm dùng để lấy giá trị cài Trường Cao Đẳng Nghề Đà Lạt Trang 2/175 Borland C++ Builder Lê Xuân Thạch-0949740777 đặt giá trị khai báo với bổ từ protected, khai báo thuộc tính với bổ từ public Sau 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 đó, sử dụng cài đặt lớp để truy cập thuộc tính MemberVariable sau: AClassWithAProperty ClassWithAProperty; ClassWithAProperty.MemberVariable = 2; int Something = ClassWithAProperty.MemberVariable; Các thuộc tính sử dụng nhiều thành phần C++ Builder Để trợ giúp cho môi trường trực quan cung cấp C++ Buidler, Borland tạo phần đặc biệt cho lớp, định nghĩa published tương tự hai phần public private ví dụ Nếu thuộc tính đặt phần published, nhìn thấy cửa sổ điều chỉnh thuộc tính q trình thiết kế Sau minh họa thuộc tính đặt 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 }; }; Trường Cao Đẳng Nghề Đà Lạt Trang 3/175 Borland C++ Builder Lê Xn Thạch-0949740777 Khi thuộc tính MemberVariable điều chỉnh trực tiếp cửa sổ điều chỉnh thuộc tính Borland C++ Builder (Object inspector) Như nói trên, C++ Builder thưa hưởng nhiều đặc tính C++ Builder C++ Builder cung cấp thuộc tính mặc định Với thuộc tính này, truy cập cách dùng phép toán số Chúng ta truy cập thuộc tính mặc định sau: (*StringListVariable)[Index] hồn tồn tương thích với cách truy cập sau Strings thuộc tính mặc định: StringListVariable->Strings[Index] Ngôn ngữ C++ Builder giới thiệu thành phần cho phép truy bắt ngoại lệ chấp nhận Java Trong C++ Builder, dùng finally try để truy bắt ngoại lệ Ví dụ: TStringList *List = new TStringList; try { // thực câu lệnh } finally { delete List; Đoạn lệnh đặt finally thực câu lệnh try thực xong hay có ngoại lệ xảy Khi viết chương trình Borland C++ Builder, dùng thư viện thành phần trực quan (VCL – Visual Component Library) VCL nguồn gốc cho thành phần sử dụng để tạo ứng dụng C++ Builder (các thành phần tương tự VCL dùng đê phát triển đa tảng gọi CLX) Một thành phần đối tượng, thường trực quan, chẳng hạn hộp đánh dấu (checkbox), danh sách chọn ổ đĩa, hình ảnh Các thành phần khơng trực quan, chẳng hạn kết nối sở liệu kết nối mạng Các thành phần chọn từ bảng thành phần (component palette) IDE dùng chuột trái để chọn đặt chúng lên vùng làm việc Hình – IDE Borland C++ Builder Chúng ta thêm viết thêm thành phần chúng ta, VCL thực giảm bớt mức độ khó cho q trình làm việc Tất thành phần có thuộc tính, điều chỉnh cửa sổ object inspector (xem hình 1) Trường Cao Đẳng Nghề Đà Lạt Trang 4/175 Borland C++ Builder Lê Xuân Thạch-0949740777 Khi tạo ứng dụng C++ Builder, biểu mẫu (form) trống tạo cách tự động Để xây dựng giao diện ứng dụng chúng ta, cách đơn giản thêm đối tượng trực quan vào biểu mẫu, sau điều chỉnh vị trí kích thước cho phù hợp Chúng ta thêm thành phần khơng trực quan vào biểu mẫu, chẳng hạn timer; thành phần hiển thị biểu tượng trình thiết kế khơng nhìn thấy chương trình thực thi Chúng ta tạo biểu mẫu đặc biệt tool window dialog Một chương trình có nhiều biểu mẫu có biểu mẫu làm biểu mẫu (main form) Mặc định, người sử dụng chạy chương trình chúng ta, biểu mẫu hiển thị lên hình, biểu mẫu hiển thị vị trí mà thiết kế hình IDE, vị trí điều chỉnh lại Object Inspector Để đưa thành phần vào biểu mẫu, phải sử dụng thành phần bảng thành phần Bảng thành phần (Component Palette) nằm menu chính, chứa tất thành phần VCL Các thành phần nhóm thành nhóm theo tên chủ đề ngăn (tab) thành phần Để lựa chọn thành phần, nhấn chuột trái lên nó, sau nhấn lại lần lên biểu mẫu để đặt đối tượng vào vị trí mà muốn Như đề cập trên, điều chỉnh thuộc tính thành phần Object Inspector Chúng ta điều chỉnh lại thành phần trực quan cách rê cạnh biên để điều chỉnh kích thước nó, rê đến vị trí Để đối tượng tương tác với người sử dụng, phải viết mã lệnh để thực thi nhằm đáp ứng kiện (events) người dùng phát sinh hay hệ điều hành phát sinh Các mã lệnh để đáp ứng kiện gọi giải kiện Một ví dụ việc sử dụng kiện C++ Builder, đưa nút nhấn (Button) đơn giản vào sau: Hình 2-Nút nhấn Button1 nằm biểu mẫu C++ Builder tạo nút nhấn phần chương trình Tại thời điểm này, nút nhấn chưa thể thực gì, nghĩa chương trình biên dịch thực thi khơng có kết nhấn chuột vào nút Chúng ta dùng đoạn mã lệnh để đáp ứng kiện nhằm thực vài hành động như: lưu thông tin người sử dụng nhập vào, hiển thị hộp thoại thơng báo, việc Khi nút nhấn nhấn chuột thời điểm thực thi, kiện phát sinh Ứng dụng phải có đoạn mã lệnh để xử lý, đoạn mã lệnh tự động thực kiện tương ứng phát sinh Để giải vấn đề này, C++ Builder tạo kiện OnClick để viết mã lệnh nhằm thực thi kiện nhấn chuột phát sinh Để viết lệnh cho kiện này, cửa sổ Object Inspector, chọn ngăn Events, chọn tên kiện OnClick, nhấn đơi chuột trái lên đơn giản hơn, nhấn đơi chuột lên đối tượng Trường Cao Đẳng Nghề Đà Lạt Trang 5/175 Borland C++ Builder Lê Xuân Thạch-0949740777 Button1 biểu mẫu Khi đó, cửa sổ soạn thảo mã lệnh (Source code editor Window) xuất với văn sau: Cấu trúc kiện OnClick sau: void fastcall TForm1::Button1Click(TObject *Sender) { } Nếu nhấn chuột phải cửa sổ soạn thảo mã lệnh chọn Open Source/Header File, nhìn thấy đoạn mã lệnh sau: // -#ifndef Unit1 #define Unit1 // -#include #include #include #include // -class TForm1 : public TForm { published: // IDE-managed Components TButton *Button1; void fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations fastcall TForm1(TComponent* Owner); }; // -extern PACKAGE TForm1 *Form1; // -#endif Đoạn mã lệnh sinh cách tự động C++ Buider Tôi đưa vào để nhìn thấy mà C++ Builder làm cho cách tự động Bây giờ, thêm đoạn mã lệnh để hiển thị hộp thoại thông báo người sử dụng nhấn chuột lên nút nhấn Trong cửa sổ soạn thảo mã lệnh, nhấn vào ngăn Unit1.cpp để chuyển vị trí viết mã lệnh cho kiện Button Thêm đoạn mã lệnh vào để 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 kiện phát sinh, đoạn mã lệnh thực thi hiển thị lên hình thơng báo Khi người sử dụng đóng thơng báo lại, chương trình dừng câu lệnh Close() Mơi trường phát triển tích hợp IDE công cụ đặc trưng Khi khởi động C++ Builder, đặt môi trường phát triển tích hợp gọi IDE (Integrated Development Environment) IDE cung cấp cho tất công cụ cần thiết để thiết kế, phát triển, kiểm tra, gỡ rối (debug) triển khai ứng dụng, cho phép phát triển ứng dụng với thời gian phát triển nhanh IDE gồm công cụ sau: * Cửa sổ cơng cụ Trường Cao Đẳng Nghề Đà Lạt Trang 6/175 Borland C++ Builder Lê Xuân Thạch-0949740777 Cửa sổ IDE khít với phần hình Nó chứa cơng cụ khác nhau, bao gồm hệ thống thực đơn (menu bar), tất chúng di chuyển Chúng ta thêm loại bỏ nút nhấn cách sử dụng chức Customize từ thực đơn đổ xuống (Popup menu) công cụ Chúng ta kéo thả (drag and drop) lệnh liệt kê hộp thoại ngăn Commands hộp thoại Customize vào cơng cụ Chúng ta sử dụng cơng cụ có mà khơng tạo cơng cụ xóa chúng Sử dụng cách tương tự để loại bỏ nút nhấn cách chọn chức customize kéo nút nhấn khỏi công cụ giữ * Project Manager Project Manager khơng hiển thị cách mặc định thường quan trọng Để hiển thị cửa sổ (dĩ nhiên trường hợp chưa hiển thị), chọn từ thực đơn View Project Manager cho phép quản lý dự án (project) làm việc Hình 3- Cửa sổ Project Manager Như hình minh họa trên, cửa sổ project manager hiển thị tập tin dự án làm việc Chúng ta xếp lại thứ tự biên dịch file cửa sổ Project Manager thực nhiều thao tác khác nhờ thực đơn đổ xuống cho tập tin cho dự án IDE cung cấp hai đường để phát triển cách kết hợp cửa sổ thiết kế biểu mẫu cửa sổ mã lệnh Project Manager dùng chủ yếu cho quản lý tập tin dự án C++ Buider Các dự án C++ Builder bao gồm nhiều kiểu tập tin khác C++ Builder tạo vài tập tin cách tự động; dự án khởi tạo hay thành phần (như tập tin, hình ảnh ngồi, …) thêm vào dự án có Các tập tin dự án mà cần quan tâm chia thành chủ đề sau: Các tập tin dự án: Khi tạo dự án mới, ba tập tin sau 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 tạo biểu mẫu, C++ Builder sinh 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 - tập tin chứa khai báo hàm, lớp, … ): UnitName.h Các tập tin gói: Các gói đơn giản thư viện liên kết động chia sẻ cho nhiều ứng dụng C++ Builder Nó cho phép chia sẻ lớp, thành phần liệu ứng dụng Ví dụ, đối tượng thường dùng C++ Builder cư trú gói gọi VCL Hầu hết ứng dụng tạo C++ Builder chia sẻ đoạn mã lệnh gói này, gói có tên VCL60.bpl Trường Cao Đẳng Nghề Đà Lạt Trang 7/175 Lê Xuân Thạch-0949740777 Borland C++ Builder Khi tạo thành phần riêng thư viện riêng chúng ta, phải tạo chúng dự án gói (package project) Dự án gói chứa tập tin bpk giống tập tin bpr dùng cho dự án gói Tập tin tạo chọn thực đơn File/New/Package Dự án gói sau biên dịch trở thành thư viện gói (Package Library), chúng có phần mở rộng bpl Đây thư viện thực thi (nghĩa không chứa mã lệnh, chứa mã nhị phân) sinh cho gói Nó giống thư viện DLL, ngoại trừ chúng chứa thành phần định C++ Builder thiết kế Mỗi lần biên dịch gói, tập tin có phần mở rộng bpi tạo ra, tập tin gọi thư viện nhập (import library) Chúng ta bàn kỹ vấn đề chương khác Các tập tin lưu để dự trữ: C++ Builder tiến hành lưu tập tin dự án lần dự án lưu lại, dĩ nhiên, ngoại trừ lần lưu Các tập tin có tiếp đầu ngữ ~ cho phần mở rộng * Sắp xếp cửa sổ IDE Các cửa sổ môi trường IDE neo lại với Chức cho phép tùy biến bố cục (layout) giao diện theo nhu cầu Thao tác điều chỉnh thật đơn giản cách kéo thả cửa sổ Chẳng hạn, hình minh họa sau, cửa sổ Object Tree View neo vào góc cửa sổ Object Inspector theo hình minh họa sau: Hình - Hai cửa sổ chưa neo Trường Cao Đẳng Nghề Đà Lạt Trang 8/175 Borland C++ Builder Lê Xuân Thạch-0949740777 Hình - Đang neo cửa sổ Trường Cao Đẳng Nghề Đà Lạt Trang 9/175 Borland C++ Builder Lê Xuân Thạch-0949740777 Hình - Đã neo xong cửa sổ * Object Inspector Hình 7-Cửa sổ Object Inspector Trường Cao Đẳng Nghề Đà Lạt Trang 10/175 Lê Xuân Thạch-0949740777 Borland C++ Builder Hình 111-Tab tìm kiếm nâng cao Chúng ta tiến hành thiết kế chương trình sau: Bước 1: Thiết kế sở liệu DANHBA.MDB gồm có bảng DANHSACH chứa thơng tin sau: Tên trường Kiểu liệu #ID Autonumber HOVATEN Text(70) DIACHI Text(79) DIENTHOAINHA Text(11) DIENTHOAICOQUAN Text(11) DIENTHOAIDIDONG Text(11) Email Text(50) HINHANH OLE Oject Bước 2: Thiết kế hình NoPic.bmp hình sau: Hình 112- Hình NoPic.Bmp Trường Cao Đẳng Nghề Đà Lạt Trang 161/175 Lê Xuân Thạch-0949740777 Borland C++ Builder Bước 3: Tạo đối tượng PageControl gồm có Tab, TabSheetChiTiet TabSheetDanhSach, sau đặt đối tượng ngăn Data Controls, Data Access, dbGo, Standard để đạt giao diện theo yêu cầu, cấu trúc đối tượng hình sau: Hình 113-FrmMain TabSheetChiTiet Hình 114-TabSheetDanhSach Panel tìm kiếm Bước 4: Viết mã lệnh: - Sự kiện FormCreate để tự động điều chỉnh kết nối sở liệu, lấy đường dẫn chương trình (Khi biên dịch chạy phần mềm thường nằm thư mục Debug hay Release, cần phải copy tập tin sở liệu, tập tin NoPic.bmp vào thư mục này): duongdan = ExtractFilePath(Application->ExeName); UnicodeString tam; tam = "Provider=Microsoft.Jet.OLEDB.4.0;"; tam += "User ID=Admin;"; tam += "Data Source=" + duongdan + "\\DANHBA.mdb;"; tam += "Mode=Share Deny None;"; tam += "Extended Properties=\"\";"; tam += "Jet OLEDB:System database=\"\";"; tam += "Jet OLEDB:Registry Path=\"\";"; Trường Cao Đẳng Nghề Đà Lạt Trang 162/175 Borland C++ Builder Lê Xuân Thạch-0949740777 tam += "Jet OLEDB:Database Password=\"\";"; tam += "Jet OLEDB:Engine Type=5;"; tam += "Jet OLEDB:Database Locking Mode=1;"; tam += "Jet OLEDB:Global Partial Bulk Ops=2;"; tam += "Jet OLEDB:Global Bulk Transactions=1;"; tam += "Jet OLEDB:New Database Password=\"\";"; tam += "Jet OLEDB:Create System Database=False;"; tam += "Jet OLEDB:Encrypt Database=False;"; tam += "Jet OLEDB:Don't Copy Locale on Compact=False;"; tam += "Jet OLEDB:Compact Without Replica Repair=False;"; tam += "Jet OLEDB:SFP=False"; this->ADOConnection1->Connected = false; this->ADOConnection1->ConnectionString = tam; this->DataSetDanhSach->Active = true; - Sự kiện OnClick DBNavigator1 để thêm tải hình tự động vào hình ảnh, hình tự động NoPic.bmp thiết kế sau: if (Button == nbInsert) { this->DBImageHinhAnh->Picture->LoadFromFile(duongdan + "\\NoPic.bmp"); } - Bỏ thuộc tính Delete Confirm DBNavigator1 để viết mã lệnh cho kiện OnBeforeActiion nhằm thực hiển thị hộp thoại hỏi người dùng xóa ghi: if (Button == nbDelete) { if (Application->MessageBoxA(L"Bạn muốn xóa ghi này?", L"Confirm", MB_YESNO | MB_ICONQUESTION) == IDNO) { Abort(); } } - Viết mã lệnh OnDblClick hình ảnh để hiển thị hộp thoại chọn hình ảnh tải vào hình ảnh: if (this->OpenPictureDialog->Execute(this->Handle)) { this->DBImageHinhAnh->Picture->LoadFromFile (this->OpenPictureDialog->FileName); } - Viết mã lệnh cho nút nhấn tìm kiếm để tìm kiếm theo ngữ cảnh, nghĩa cột tìm kiếm theo cột đó: UnicodeString st = this->EditTimKiem->Text.Trim(); if (st == "") { this->DataSetDanhSach->Filtered = false; } else { this->DataSetDanhSach->Filtered = false; TField *t = this->DBGridDanhSach->SelectedField; if (t == NULL) { this->DataSetDanhSach->Filter = "HOVATEN Like %" + st + "%"; } else { this->DataSetDanhSach->Filter = t->FieldName + " like %" + st + "%"; } this->DataSetDanhSach->Filtered = true; } - Xây dựng hàm DieuChinhKichThuoc(void) khai báo thêm biến bool TimKiemNangCao để thực điều chỉnh kích thước biểu mẫu hiển thị panel tìm kiếm: + Khai báo ngăn private tập tin h sau: Trường Cao Đẳng Nghề Đà Lạt Trang 163/175 Borland C++ Builder Lê Xuân Thạch-0949740777 UnicodeString duongdan; //Đường dẫn chương trình bool TimKiemNangCao; void DieuChinhKichThuoc(); + Thêm dòng lệnh sau vào kiện FormCreate: this->TimKiemNangCao = false; + Viết mã lệnh cho phương thức DieuChinhKichThuoc sau: void TfrmMain::DieuChinhKichThuoc() { int PanelHeight = 166; int FormHeight = 457; if (this->PageControl->ActivePage == this->TabSheetChiTiet) { //Ẩn tìm kiếm nâng cao tình this->PanelTimKiem->Visible = false; if (this->Height >= FormHeight) { for (int i = PanelHeight; i > 0; i -= 2) { this->Height -= 2; Application->ProcessMessages(); Sleep(5); } } } else { if (!this->TimKiemNangCao) { //Nếu khơng tìm kiếm nâng cao điều chỉnh kích thước Form if (this->Height >= FormHeight) { for (int i = PanelHeight; i > 0; i -= 2) { this->Height -= 2; Application->ProcessMessages(); Sleep(5); } } } else { //Nếu tìm kiếm nâng cao mở rộng form this->PanelTimKiem->Visible = true; while (this->Height < FormHeight) { this->Height += 2; Application->ProcessMessages(); Sleep(5); } } } } - Viết mã lệnh cho kiện OnActive form OnChage PageControl để tiến hành điều chỉnh kích thước: void fastcall TfrmMain::FormActivate(TObject *Sender) { this->DieuChinhKichThuoc(); } void fastcall TfrmMain::PageControlChange(TObject *Sender) { this->DieuChinhKichThuoc(); } - Viết mã lệnh cho nút nhấn mở rộng để tiến hành hiển thị hay đóng Panel tìm kiếm nâng cao: if (this->ButtonMoRong->Caption == "&>>") { Trường Cao Đẳng Nghề Đà Lạt Trang 164/175 Lê Xuân Thạch-0949740777 Borland C++ Builder this->ButtonMoRong->Caption = "&>"; this->TimKiemNangCao = false; this->EditTimKiem->Enabled = true; this->PanelTimKiem->Visible = false; } this->DieuChinhKichThuoc(); - Viết mã lệnh cho kiện OnClick nút tìm kiếm Panel tìm kiếm nâng cao: UnicodeString HoVaTen, SoDienThoai, DiaChi, Email; UnicodeString BoLoc; bool ChinhXac = this->CheckBoxChinhXac->Checked; HoVaTen = this->EditHoVaTen->Text.Trim(); SoDienThoai = this->EditDienThoai->Text.Trim(); DiaChi = this->EditDiaChi->Text.Trim(); Email = this->EditEmail->Text.Trim(); if (HoVaTen != "") { if (ChinhXac) { HoVaTen = "(HOVATEN = '" + HoVaTen + "')"; } else { HoVaTen = "(HOVATEN Like %" + HoVaTen + "%)"; } } BoLoc = HoVaTen; if (SoDienThoai != "") { if (ChinhXac) { SoDienThoai = "(DIENTHOAINHA ='" + SoDienThoai + "') OR (DIENTHOAICOQUAN ='" + SoDienThoai + "') OR (DIENTHOAIDIDONG ='" + SoDienThoai + "')"; } else { SoDienThoai = "(DIENTHOAINHA Like %" + SoDienThoai + "%) OR (DIENTHOAICOQUAN Like %" + SoDienThoai + "%) OR (DIENTHOAIDIDONG Like %" + SoDienThoai + "%)"; } if (BoLoc != "") { BoLoc += " OR (" + SoDienThoai + ")"; } else { BoLoc = SoDienThoai; } } if (DiaChi != "") { if (ChinhXac) { DiaChi = "(DIACHI = '" + DiaChi + "')"; } else { Trường Cao Đẳng Nghề Đà Lạt Trang 165/175 Lê Xuân Thạch-0949740777 Borland C++ Builder DiaChi = "(DIACHI Like %" + DiaChi + "%)"; } if (BoLoc != "") { BoLoc += " OR (" + DiaChi + ")"; } else { BoLoc = DiaChi; } } if (Email != "") { if (ChinhXac) { Email = "(EMAIL = '" + Email + "')"; } else { Email = "(EMAIL Like %" + Email + "%)"; } if (BoLoc != "") { BoLoc += " OR (" + Email + ")"; } else { BoLoc = DiaChi; } } this->DataSetDanhSach->Filtered = false; if (BoLoc != "") { this->DataSetDanhSach->Filter = BoLoc; this->DataSetDanhSach->Filtered = true; } Trường Cao Đẳng Nghề Đà Lạt Trang 166/175 Lê Xuân Thạch-0949740777 Borland C++ Builder BÀI – LẬP TRÌNH MẠNG Các tính đặc biệt C++ Builder Trong nội dung mục này, giới thiệu sơ lược số tính đặc biệt khác C++ Buider - C++ Builder hỗ trợ đầy đủ hàm API, đó, người lập trình sử dụng chức tùy biến hệ điều hành hay tận dụng sức mạnh API để mang lại tính độc đáo cho chương trình cấp độ hệ điều hành - C++ Builder cung cấp cơng cụ lập trình song song tảng, nghĩa lập trình Windows với cơng cụ VCL có cơng cụ tương tự hỗ trợ cho hệ thống không Windows CLX - C++ Builder hỗ trợ công cụ cho chuyển ứng dụng từ Visual C++ sang Borland C++ Builder cách nhanh chóng với sửa đổi - C++ Builder cơng cụ gần khơng phụ thuộc tảng cài có mã nguồn VCL Do đó, mang lại điều kiện thuận lợi để công ty thứ phát triển công cụ mở rộng Đặc biệt C++ Builder chức lập trình mạng với mã lệnh mà hiệu đạt cao Chúng ta nghiên cứu thông qua đề mục Lập trình mạng với Socket Socket hiểu ổ cắm nối máy chủ máy Mỗi ổ cắm quy định cổng (port) để mở kết nối Người lập trình sử dụng socket để kết nối phải tránh cổng quy định thành chuẩn cho mạng riêng biệt sau đây: Dịch vụ Số cổng Ftp 21 Http 80 Telnet 23 Finger 79 Sntp 25 Mơ hình lập trình mạng thơng qua Socket thơng qua hai đối tượng sau: Đối tượng TServerSocket: Dùng phục vụ cho máy chủ Sau thuộc tính kiện quan trọng: Thuộc tính Ý nghĩa Active Đặt server socket vào trạng thái hoạt động tạm dừng Port Số cổng mà server socket phục vụ Service Tên ứng dụng hay dịch (không bắt buộc) Sự kiện Ý nghĩa OnAccept Chấp nhận kết nối từ máy hay không OnClientConnect Tiếp nhận kết nối từ client OnClientDisconnect Ngắt kết nối với client OnClientRead Đọc liệu máy client gởi đến Đối tượng TClientSocket dùng để phục vụ cho máy Sau liệt kê thuộc tính kiện TClientSocket Thuộc tính Active Trường Cao Đẳng Nghề Đà Lạt Phương thức Yêu cầu ngắt kết nối với Server Trang 167/175 Lê Xuân Thạch-0949740777 Borland C++ Builder Address Địa máy chủ Port Cổng phục vụ máy chủ Service Tưởng tự máy chủ Host Địa IP Các kiện thông dụng Sự kiện Ý nghĩa OnConnect Kết nối thành công với máy chủ OnDisconnect Ngắt kết nối với máy chủ OnError Quá trình kết nối hay chuyển liệu bị lỗi OnRead Đọc liệu trả từ máy chủ Chúng ta nghiên cứu thơng qua chương trình chat sau: Hình 115-Chương trình chat đơn giản Mã lệnh liệt kê kèm theo thích sau: void fastcall TChatForm::FileListenItemClick(TObject *Sender) { FileListenItem->Checked = !FileListenItem->Checked; if (FileListenItem->Checked) { ClientSocket->Active = false; ServerSocket->Active = true; StatusBar1->Panels->Items[0]->Text = "Listening "; }else { if (ServerSocket->Active) { ServerSocket->Active = false; } StatusBar1->Panels->Items[0]->Text = ""; } } // // void fastcall TChatForm::FileConnectItemClick(TObject *Sender) { if (ClientSocket->Active) { Trường Cao Đẳng Nghề Đà Lạt Trang 168/175 Borland C++ Builder Lê Xuân Thạch-0949740777 ClientSocket->Active = false; } if (InputQuery("Computer to connect to", "Address Name:", Server)) { if (Server.Length() > 0) { ClientSocket->Host = Server; ClientSocket->Active = true; FileListenItem->Checked = false; } } } // // void fastcall TChatForm::Exit1Click(TObject *Sender) { ServerSocket->Close(); ClientSocket->Close(); Close(); } // // void fastcall TChatForm::Memo1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if (Key == VK_RETURN) { if (IsServer){ServerSocket->Socket->Connections[0]->SendText( Memo1->Lines->Strings[Memo1->Lines->Count - 1]); } else { ClientSocket->Socket->SendText(Memo1->Lines->Strings[ Memo1->Lines->Count -1]);} } } // // void fastcall TChatForm::FormCreate(TObject *Sender) { FileListenItemClick(NULL); } // // void fastcall TChatForm::ClientSocketConnect(TObject *Sender, TCustomWinSocket *Socket) { StatusBar1->Panels->Items[0]->Text = "Connect to: " + Socket->RemoteHost; } // // void fastcall TChatForm::Disconnect1Click(TObject *Sender) { ClientSocket->Active = false; ServerSocket->Active = true; Trường Cao Đẳng Nghề Đà Lạt Trang 169/175 Borland C++ Builder Lê Xuân Thạch-0949740777 StatusBar1->Panels->Items[0]->Text = "Listening "; } // // void fastcall TChatForm::ClientSocketRead(TObject *Sender, TCustomWinSocket *Socket) { Memo2->Lines->Add(Socket->ReceiveText()); } // // void fastcall TChatForm::ServerSocketClientRead(TObject *Sender, TCustomWinSocket *Socket) { Memo2->Lines->Add(Socket->ReceiveText()); } // // void fastcall TChatForm::ServerSocketAccept(TObject *Sender, TCustomWinSocket *Socket) { IsServer = true; StatusBar1->Panels->Items[0]->Text = "Connect to: " + Socket->RemoteAddress; } // // void fastcall TChatForm::ServerSocketClientConnect(TObject *Sender, TCustomWinSocket *Socket) { Memo2->Lines->Clear(); } // // void fastcall TChatForm::ClientSocketDisconnect(TObject *Sender, TCustomWinSocket *Socket) { FileListenItemClick(NULL); } // // void fastcall TChatForm::ClientSocketError(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode) { Memo2->Lines->Add("Error connecting to:" + Server); ErrorCode = 0; } // // void fastcall TChatForm::ServerSocketClientDisconnect(TObject *Sender, TCustomWinSocket *Socket) { StatusBar1->Panels->Items[0]->Text = "Listening "; } Trường Cao Đẳng Nghề Đà Lạt Trang 170/175 Borland C++ Builder Lê Xuân Thạch-0949740777 BÀI 8- XÂY DỰNG VÀ TRIỂN KHAI CÁC ỨNG DỤNG Các kỹ thuật gỡ rối C++ Builder Khi lập trình với C++ Builder, chương trình biên dịch thành tập tin exe mặc định kèm chương trình gỡ rối biên dịch bên Chương trình có nhiệm vụ kiểm sốt lỗi phát sinh q trình thực thi chương trình lỗi lập trình lỗi hệ điều hành phát sinh Các chức kích hoạt điều chỉnh hộp thoại Tools/Debugger Options Hình 116-Hộp thoại tinh chỉnh Debugger Options Thơng thường chức cài đặt mặc định C++ Builder phù hợp với đa số chương trình mà tạo Tuy nhiên, đề nghị để truy bắt lỗi ngoại lệ phát sinh trình lập trình chủ quan Chúng ta nên dùng chức truy bắt ngoại lệ C++ Builder C++ Builder cung cấp khối lệnh try để truy bắt lỗi chặc chẽ hai trường hợp lỗi chương trình lỗi phát sinh Chúng ta nghiên cứu thêm lĩnh vực tài liệu hướng dẫn C++ Builder Sử dụng tài nguyên Windows để xây dựng trợ giúp trực tuyến Sau cài đặt xong C++ Builder, nhận cơng cụ miễn phí Html Help Workshop Cơng cụ cho phép tạo tập tin trợ giúp dạng hlp Chúng ta khởi động cách chọn Start/Program Files/HTML Help Workshop/HTML Help Workshop Khi khởi động xong nhận giao diện sau: Trường Cao Đẳng Nghề Đà Lạt Trang 171/175 Lê Xuân Thạch-0949740777 Borland C++ Builder Hình 117-Cửa sổ chương trình HTML Help Workshop Trước tiên cần tạo nội dung cho file Help Để tạo nội dung file mở FontPage express, FrontPage 98, 2000 đánh vào nội dung mà cần để hướng dẫn người sử dụng Sau lưu file lên đĩa với tên sau: Congty.htm, Diachi.htm, hdCaidat.htm, hdSudung.htm, Sanpham.htm, Ykien.htm, Index.htm (dùng ví dụ này) Một ví dụ cách tạo file dùng FrontPage 2000 (tương tự cho Frontpage 98 FrontPage express): Nhấn Start/Programs/Microsoft Frontpage hình xuất hiện, gõ nội dung vào cửa sổ soạn thảo Chúng ta chọn Tab Normal (ngầm định chọn) đánh nội dung vào hình bỏ trắng Nếu thích dùng tab HTML để tạo nội dung thay cho tab Normal có kiến thức HTML Tab Preview cho biết trước nội dung vừa nhập xuất Sau nhập đầy đủ nội dung lưu file lên đĩa cách nhấn File/Save, chọn thư mục lưu trữ đánh tên file vào, chẳng hạn Vidu.htm Sau hoàn thành nội dung cho file Congty.htm, Diachi.htm, hdCaidat.htm, hdSudung.htm, Sanpham.htm, Ykien.htm tiếp tục công việc tạo lập file trợ giúp cho ứng dụng Quản lý Nhân Tiền lương Đến gọi trình ứng dụng tạo lập Help (Start/Programs/HTML Help Workshop/HTML Help Workshop) bắt đầu đặt nội dung, mục cho file nội dung Đầu tiên cần tạo file Project (.hhp) file mà sau dịch file Help.chm riêng chúng ta, cửa sổ HTML Help Workshop chọn File/New cửa sổ sau xuất Chúng ta chọn vào Project (có màu sáng khác biệt) nhấn OK, hình trợ giúp xuất Chúng ta đánh vào khoảng trắng Browse C:\My Documents\nstlHelp.hhp, muốn tạo thư mục khác với thư mục C:\My Document nhấn chọn Browse để tìm thư mục lưu file Project đánh vào tên file (ngầm định có phần mở rộng hhp), ta đánh vào nstlHelp.hhp nhấn Open thấy xuất tên đường dẫn thư mục chứa file nstlHelp.hhp kèm Trường Cao Đẳng Nghề Đà Lạt Trang 172/175 Borland C++ Builder Lê Xuân Thạch-0949740777 Tiếp tục nhấn Next hình xuất Check vào HTML files (.htm) tiếp tục nhấn Next hình xuất hiện: Chúng ta nhấn vào nút Add thêm vào tất file.htm mà tạo nội dung lúc trước FrontPage 2000: Tiếp tục nhấn Next hình xuất hiện, hình nhấn chọn Finish để tạo Project chúng ta, muốn chỉnh sửa thêm, bớt file nội dung htm hay nhấn nút Back để thay đổi lại mặc định lúc trước cuối ta nhấn Finish để kết thúc việc tạo File Project Sau nhấn chọn Finish kết là: Trong tab Project nhấn vào Change Project Options tab Project thấy xuất cửa sổ, cửa sổ lựa chọn tab General đánh nội dung vào khung Title (hướng dẫn sử dụng) nhấn OK, title xuất góc trái file Help sau dịch hoàn chỉnh - Tiếp tục nhấn chọn tab Contents (ngay bên phải tab Project) thấy xuất cửa sổ sau: Nhấn chọn Create a new contents file nhấn OK, thấy xuất cửa sổ yêu cầu thư mục chứa đánh vào tên cho file.hhc để lưu giữ file nội dung (ở ta đánh tên file Contents.hhc lưu thư mục với file.htm tạo) Trong tab Contents nhấn chọn Contents Properties (ngay bên tab Contents) để chọn font chữ thích hợp muốn đánh tiếng Việt Tiếp tục nhấn vào nút insert a heading (ngay nút Contents Properties có biểu tượng thư mục): - Đánh nội dung "Hướng dẫn" vào phần Entrry title nhấn OK Tiếp theo nhấn vào nút Insert a page (ngay nút Insert a heading) thấy xuất hiện: Chúng ta chọn No (để trang chèn vào nằm heading vừa tạo), thấy xuất cửa sổ giống lúc nhấn vào nút Insert a heading, đánh nội dung "hướng dẫn cài đặt" vào phần Entry Title, nhấn vào nút Add cửa sổ này, cửa sổ xuất nhấn vào Nút Browse cửa sổ để mở file hdCaidat.htm (file tạo nội dung từ bước đầu), cuối liên tiếp chọn Open, OK để đóng cửa sổ vào (khi mở xong file nội dung hdSudung.htm) Tương tự, nhấn vào Insert a page nhập nội dung "Hướng dẫn sử dụng" vào Phần Entry title, nhấn Add để liên kết đến file hdSudung.htm Chúng ta tiếp tục nhìn vào hình phần Contents thấy phía gần có nút, nhấn vào đề mục "Hướng dẫn cài đặt" "Hướng dẫn sử dụng", sau nhấn vào mũi tên sang phải "đ" để đề mục lùi vào phía chút (nhằm phân biệt rõ Heading Page - hình thức) Tương tự, tiếp tục thực cho Heading "Giới thiệu" gồm đề mục là: "Giới thiệu công ty" liên kết với file Congty.htm "Giới thiệu sản phẩm" liên kết với Sanpham.htm hai đề mục đẩy lùi vào chút nhờ nhấn vào nút lệnh có hình mũi tên sang phải Cuối tạo tương tự cho đề mục đứng độc lập "Đóng góp ý kiến" liên kết với file Ykien.htm "Địa liên lạc" liên kết tới file Diachi.htm, có điều đề mục để ngun vịt trí khơng nhấn vào nút lệnh có hình mũi tên sang phải để lùi vào chút (vì chúng ngang hàng với Heading kia) Đến bước hoàn thành xong phần Contents, tiếp tục làm việc với trang Index sát bên phải trang Contents (chúng ta cố kiên nhẫn chút thành sẵp đạt rồi) Chúng ta nhấn chuột vào tab Index, cửa sổ ra, nhấn vào lựa chọn Crêat a new index file nhập vào tên file Index cho hệ thống trợ giúp (ở nhập vào tên file Index.hhk thư mục lưu trưc file nội dung lúc trước): Để thay đổi font chữ nhấn vào nút lệnh Index properties (ở tab Index) chọn font chữ thích hợp Trường Cao Đẳng Nghề Đà Lạt Trang 173/175 Borland C++ Builder Lê Xuân Thạch-0949740777 Chúng ta tiếp tục cơng việc cách nhấn vào nút lệnh Insert a keyword có hình chìa khoá bên nút lệnh Index properties, nhập vào nội dung "About Company" cho phần Keyword, tiếp tục nhấn vào nút Add để tạo liên kết tới file Congty.htm cho keyword này: Tương tự, tiếp tục tạo keyword: "About Software" liên kết với file Sanpham.htm, "Address" liên kết tới file Diachi.htm, "Feedback" liên kết với file Ykien.htm, "Guide to Setup" liên kết tới file hdCaidat.htm "Guide to Use" liên kết tới file hdSudung.htm Cuối cùng, nhấn vào nút lệnh có chữ A Z mũi tên kèm theo chúng để xếp Index theo thứ tự "a, b, c" Bước cuối cùng, nhấn chọn lại tab Project nhấn vào nút lệnh Save all project files and compile có hình đĩa mềm phễu để lưu lại tất file Contents, Index tạo bước dịch chúng thành file Help tổng hợp chạy độc lập môi trường khác (ở sau dịch tạo file Help có tên nstlHelp.chm chứa thư mục C:\My Documents): Đến hoàn toàn làm chủ file Help dạng chm đưa vào ứng dụng khác cách dễ dàng (tương tự cách đưa vào ứng dụng file Help dạng hlp loại cũ mà nhiều số báo đề cập đến) Cuối cùng, sử dụng chương trình ABC Chm Convert để chuyển tập tin chm thành tập tin hlp Sau chuyển xong thành tập tin hlp, vào cửa sổ Project/Options, chọn ngăn Application tiến hành liên kết tập tin hướng dẫn hlp vào ứng dụng thông qua mục chọn Help File Sử dụng chương trình InstallShield Express Phần mềm InstallShield Express (ISXpress) phần mềm kèm theo cài Borland C++ Builder Sau khởi động, phần mềm có giao diện sau: Hình 118-Cửa sổ chương trình InstallShield Express Để tạo cài mới, theo bước sau (bộ cài ví dụ caidat.exe hay caidat.msi) - Chọn lệnh File/New Project đặt tên cho project đầy đủ sau: C:\Documents and Settings\lt01\My Documents\caidat\Caidat.ism Trường Cao Đẳng Nghề Đà Lạt Trang 174/175 Borland C++ Builder Lê Xuân Thạch-0949740777 - Nhấn nút ok gặp hộp thoại sau: Hình 119-Cửa sổ tinh chỉnh cho cài đặt Trong cửa sổ làm việc bên khung bên trái sử dụng chức sau: - Nhóm mục chọn 1: Cho phép khai báo thông tin cài đặt như: thông tin chương trình, gói cài đặt tùy chọn, đường dẫn cập nhật - Nhóm mục chọn 2: Những định liệu chương trình bao gồm: tập tin thành phần, mô đun cần thêm vào, sở liệu, - Nhóm mục chọn 3: Cho phép khai báo cài đặt cho máy tính cài phần mềm bao gồm: lối tắt, khóa registry, kết nối ODBC, tập tin INI, biến môi trường, - Nhóm mục chọn 4: Cho phép tinh chỉnh đưa vào văn bản, hình ảnh, hộp thoại hiển thị trình cài đặt chương trình - Nhóm mục chọn 5: Chứa đựng yêu cầu hệ thống như: RAM, hệ điều hành, tập tin yêu cầu khai báo hành động tùy biến đáp ứng cho nhu cầu hệ thống - Nhóm mục chọn 6: Cho phép tiến hành đóng gói sản phẩm thành cài EXE Trường Cao Đẳng Nghề Đà Lạt Trang 175/175 ... Xuân Thạch-0949740777 Borland C++ Builder BÀI 1- GIỚI THIỆU C++ BUILDER Ưu C++ Builder so với Visual C++ C++ Builder có nhiều ưu so với Visual C++, sau liệt kê số tính ưu việt: - C++ Builder cơng... (YlstOne->Top) this-> lstOne -> TopIndex = this-> lstOne -> TopIndex-1; else if(Y>this-> lstOne -> Top+ this-> lstOne -> Height) this-> lstOne -> TopIndex = this-> lstOne -> TopIndex-1; //xác... *Sender) { int i; for (i= this->lstDich->Count-1;i>=0;i ) if (this->lstDich->Selected[i]) { this->lstNguon->Items->Add(this->lstDich->Items->Strings[i]); this->lstDich->Items->Delete(i); } } Bước 5:

Ngày đăng: 16/04/2014, 15:07

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan