1. Sau khi biên dịch chuơng trình viết bằng Delphi thành một file giả sử là ABC.exe. Làm sao buộc người sử dụng khi nhấp đúp vào file ABC.exe này thì chuơng trình phải thực thi với quyền Admin?

2. Trong Delphi 2010 khi biên dịch chuơng trình có sử dụng menu dạng ribbon thì mặc dù trong lúc thiết kế đã chọn font Segoe UI nhưng khi chạy lại không hiển thị font này mà là font Tahoma? (các thành phần khác luôn hiển thị đúng Font).

3. Giả sử chỉ thiết kế 1 form là Form1 gồm có 1 nút là Button1. Tôi có thể viết code để khi chạy ứng dụng, chỉ cần nhấn Button1 (OnClick) thì sẽ xuất hiện 1 Form tạm thời (để thực hiện công việc nào đó), nhưng Form đó (tạm gọi là Form2) chỉ là 1 form trống rỗng. Muốn có các Button, Label, Edit,... trên Form2 thì phải viết code thế nào? Xin chỉ giúp đoạn code để thao tác với các thành phần Button, Edit,... trên Form2, sau khi nhấn chuột vào một thành phần nào đó hoặc Button Close chẳng hạn thì Form2 được giải phóng.

4. Tôi thấy ứng dụng Calculator của Win7 có thể tính toán và cho hiển thị kết quả với rất nhiều chữ số (~ 30 số). Với chuơng trình viết bằng Delphi, làm thế nào để sau khi tính toán, kết quả hiển thị trên Edit vượt hơn 15 con số. VD: 10/3 = 3,333333333333333333333333333.

" />
  • Thứ Ba, 25/01/2011 07:51 (GMT+7)

    Chương trình Delphi

    Câu hỏi :

    1. Sau khi biên dịch chuơng trình viết bằng Delphi thành một file giả sử là ABC.exe. Làm sao buộc người sử dụng khi nhấp đúp vào file ABC.exe này thì chuơng trình phải thực thi với quyền Admin?

    2. Trong Delphi 2010 khi biên dịch chuơng trình có sử dụng menu dạng ribbon thì mặc dù trong lúc thiết kế đã chọn font Segoe UI nhưng khi chạy lại không hiển thị font này mà là font Tahoma? (các thành phần khác luôn hiển thị đúng Font).

    3. Giả sử chỉ thiết kế 1 form là Form1 gồm có 1 nút là Button1. Tôi có thể viết code để khi chạy ứng dụng, chỉ cần nhấn Button1 (OnClick) thì sẽ xuất hiện 1 Form tạm thời (để thực hiện công việc nào đó), nhưng Form đó (tạm gọi là Form2) chỉ là 1 form trống rỗng. Muốn có các Button, Label, Edit,... trên Form2 thì phải viết code thế nào? Xin chỉ giúp đoạn code để thao tác với các thành phần Button, Edit,... trên Form2, sau khi nhấn chuột vào một thành phần nào đó hoặc Button Close chẳng hạn thì Form2 được giải phóng.

    4. Tôi thấy ứng dụng Calculator của Win7 có thể tính toán và cho hiển thị kết quả với rất nhiều chữ số (~ 30 số). Với chuơng trình viết bằng Delphi, làm thế nào để sau khi tính toán, kết quả hiển thị trên Edit vượt hơn 15 con số. VD: 10/3 = 3,333333333333333333333333333.



    Trả lời :

    1. Trên các hệ điều hành hỗ trợ tốt vấn đề bảo mật, mỗi người dùng đều phải có 1 tài khoản (account) xác định để làm việc được với máy tính. Người quản trị máy (administrator) đã thiết lập quyền hạn cụ thể của từng account: account có thể truy xuất được tài nguyên nào, tính chất và mức độ truy xuất cụ thể trên tài nguyên đó là gì. Người dùng sử dụng máy sẽ được quản lý theo 2 bước:

    - Bước 1: Máy xác nhận người dùng bằng cách yêu cầu người dùng nhập thông tin về account (username+password), nếu thông tin nhập không trùng với bất kỳ account nào do máy đang quản lý, máy sẽ không cho phép người dùng tiếp tục làm việc. Trong trường hợp người dùng nhập đúng account, máy sẽ biết account này có những quyền hạn gì.

    - Bước 2: Mỗi khi người dùng yêu cầu 1 chức năng nào đó, mày sẽ kiểm tra xem có hợp pháp không bằng cách xem thông tin trong account của người dùng tương ứng có cho phép chức năng này không. Nếu không, máy không phục vụ. Khi người dùng chạy 1 ứng dụng nào đó, ứng dụng này sẽ được gán quyền hạn của user tương ứng. Trong lúc ứng dụng chạy, mỗi lần ứng dụng yêu cầu 1 chức năng nào đó, mày sẽ kiểm tra xem hợp pháp không, nếu hợp pháp máy mới phục vụ. 

    Tóm lại, phần mềm không có quyền thực thi cố định, mỗi khi được chạy bởi ai, nó có quyền hạn của người dùng kích hoạt nó. Phần mềm đang chạy với account có quyền hạn ít không thể tự nâng mình lên để có quyền cao hơn (thí dụ tự động chuyển sang quyền admin).

    2. Theo kiểm tra sơ bộ, chúng tôi nhận thấy các đối tượng giao diện chuẩn của Delphi 2010 như TPopupmenu, TMainMenu, TMenuItem… luôn dùng font hệ thống của Windows để hiển thị chuỗi "caption" của mình. Nếu muốn chúng dùng font khác để hiển thị chuỗi "caption" thì bạn có thể dùng một trong các phương án sau:

    - Đổi các font hệ thống như MS San Serif, System font thành font mà bạn cần dùng. Cách này dễ dàng thực hiện nhưng rất bất tiện và độ an toàn không cao, bạn không thể kiểm soát hoàn toàn được vì khi cài driver màn hình hay cài phần mềm khác, font hệ thống lại có thể bị cập nhật lại.

    - Sử dụng các component của hãng thứ 3 (free khá nhiều) cho phép lập trình thiết lập lại font mà chúng sử dụng. 

    - Đặt thuộc tính ownerdraw=true và viết hàm xử lý sự kiện OnOwnerdraw của Form để tự hiển thị chuỗi caption của từng thành phần menu theo font chữ mà bạn thích.

    3. Khi lập trình bằng Delphi (hay bằng một môi trường trực quan khác), bạn sẽ tạo Project để quản lý chương trình mình viết. Delphi 2010 cho phép tạo nhiều loại Project khác nhau như : SDI Application (phần mềm có 1 cửa sổ làm việc), MDI Application (phần mềm có nhiều cửa sổ làm việc đồng thời), VCL Form Application (phần mềm dùng form giao tiếp),… Khi bạn dùng loại Project "VCL Form Application", phần mềm lúc đầu chỉ có 1 Form. Tuy nhiên bạn có quyền tạo thêm nhiều form khác tùy nhu cầu. Để tạo form mới, bạn dời chuột về cửa sổ chứa cây Project (thường nằm ở trên phải màn hình), ấn phải chuột vào mục gốc (Project1.exe), chọn mục Add New.Form. Sau khi đã tạo mới form rỗng, bạn thiết kế các đối tượng giao diện vào form theo yêu cầu riêng, viết các hàm xử lý sự kiện trên các đối tượng giao diện... Về mặt mã nguồn, mỗi form được đặc tả bởi 1 Unit, Unit này chứa đặc tả class đối tượng form tương ứng. Thí dụ form đầu tiên thường có tên là TForm1, form kế tiếp là TForm2,... Trong 1 form, bạn có quyền tạo form khác và hiển thị nó để làm việc với người dùng, thí dụ thủ tục xử lý sự kiện nhấn chuột trên button Button1 trong form1 sau đây:

    procedure TForm1.Button1Click(Sender: TObject);
    {định nghĩa biến form }
    var rf:TForm2;
    begin
    {tạo đối tượng form2 }
    rf:=TForm2.Create(self);
    {hiển thị form2 để làm việc với người dùng }
    rf.ShowModal;
    {đóng form2 khi giao tiếp xong }
    rf.Free;
    end;

    4. Khi lập trình, ta dùng biến để chứa dữ liệu cần xử lý, mỗi biến phải thuộc 1 kiểu dữ liệu xác định và chiếm 1 vùng nhớ xác định, thí dụ biến nguyên, biến thực, biến chuỗi… Mỗi biến chỉ chứa được các giá trị thuộc kiểu của mình. Mỗi ngôn ngữ lập trình sẽ cung cấp 1 số kiểu dữ liệu cụ thể và cho phép người dùng định nghĩa kiểu "user-defined" theo yêu cầu riêng. Để miêu tả và xử lý số thực, ngôn ngữ Pascal trong môi trường lập trình Delphi 2010 cung cấp nhiều kiểu khác nhau, trong đó kiểu Double chiếm 8 byte và miêu tả được số thực với độ chính xác khoảng 15 ký số thập phân, còn kiểu Extended chiếm 10 byte và miêu tả được số thực với độ chính xác tối đa 20 ký số thập phân.

    Nếu có nhu cầu độ chính xác cao hơn, bạn phải tự thiết kế kiểu dữ liệu mới cho riêng mình rồi viết các đoạn code xử lý các phép toán trên các dữ liệu thuộc kiểu mới này.

    Chuyên mục: Hệ thống, Lập trình