Hướng dẫn lập trình Delphi cơ bản từ Bluesofts.net (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,854
Được thích
10,345
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Delphi hiện là một trong các ngôn ngữ lập trình mạnh trên thế giới, cho phép lập trình duy nhất một code và biên dịch cho các nền tảng hệ điều hành Windows (32, 64-bit), Mac OSX, iPhone, Android, Linux. Lập trình trên Delphi rất trực quan, các component phong phú, tương tác linh hoạt với hệ điều hành. Ngôn ngữ lập trình là Object Pascal, cho phép nhúng cả ngôn ngữ ASM , những người đã học Pascal học sẽ rất nhanh. Delphi biên dịch phần mềm ra mã máy (Native code) tốc độ rất là nhanh, không giống như .NET, Java, Ruby chỉ là thông dịch. Delphi cho phép xây dựng rất nhiều loại ứng dụng: Database, Server, Game, Music, Service, Application,... Delphi thực sự rất mạnh mẽ, làm chủ ngôn ngữ này bạn có cơ hội trở thành một cao thủ lập trình hệ thống, lập trình ứng dụng đa nền tảng....

Trong topic này tôi chia sẻ với các bạn các bài học lập trình Delphi cơ bản sẽ giúp các bạn bước đầu tiếp cận với ngôn ngữ lập trình mạnh mẽ này dễ dàng nhất.

BÀI 01: Lập trình Delphi cơ bản Bài 01 Tạo chương trình đầu tiên
Video này tôi hướng dẫn các bạn cách tạo một ứng dụng đầu tiên - Project và hiểu về cách Delphi chạy code và biên dịch ra các nền tảng 32, 64 bit.

BÀI 02: Lập trình Delphi với Form, thiết lập thông tin phần mềm của bạn
Video này tôi hướng dẫn cách lập trình Delphi với Form, thiết lập thông tin phần mềm, thuộc tính của Form. Lập trình Form mẹ gọi form con với cách truyền tham số nút bấm từ TButton.ModalResult...

Các bạn xem thêm các bài học Delphi cơ bản tại đây.
 
Lần chỉnh sửa cuối:
BÀI 04: Lập trình Delphi cơ bản - Chuyển đổi kiểu dữ liệu, ứng dụng helper
Lập trình Delphi cơ bản Bài 04 cung cấp kiến thức về chuyển đổi kiểu dữ liệu, ứng dụng helper để thêm thành phần kiểu dữ liệu từ đây việc lập trình sẽ đơn giản và ngắn gọn hơn bởi việc chọn thành phần kiểu dữ liệu tạo ra thay vì dùng hàm chuyển đổi nhiều lần...

 
Video demo phần mềm lập trình bởi Delphi chạy độc lập nhưng cho phép kết nối tới các phần mềm Excel, Word và từ VBA kết nối ngược về phần mềm đó,....
 
Delphi hiện là một trong các ngôn ngữ lập trình mạnh trên thế giới, cho phép lập trình duy nhất một code và biên dịch cho các nền tảng hệ điều hành Windows (32, 64-bit), Mac OSX, iPhone, Android, Linux. Lập trình trên Delphi rất trực quan, các component phong phú, tương tác linh hoạt với hệ điều hành. Ngôn ngữ lập trình là Object Pascal, cho phép nhúng cả ngôn ngữ ASM , những người đã học Pascal học sẽ rất nhanh. Delphi biên dịch phần mềm ra mã máy (Native code) tốc độ rất là nhanh, không giống như .NET, Java, Ruby chỉ là thông dịch. Delphi cho phép xây dựng rất nhiều loại ứng dụng: Database, Server, Game, Music, Service, Application,... Delphi thực sự rất mạnh mẽ, làm chủ ngôn ngữ này bạn có cơ hội trở thành một cao thủ lập trình hệ thống, lập trình ứng dụng đa nền tảng....

Trong topic này tôi chia sẻ với các bạn các bài học lập trình Delphi cơ bản sẽ giúp các bạn bước đầu tiếp cận với ngôn ngữ lập trình mạnh mẽ này dễ dàng nhất.

BÀI 01: Lập trình Delphi cơ bản Bài 01 Tạo chương trình đầu tiên
Video này tôi hướng dẫn các bạn cách tạo một ứng dụng đầu tiên - Project và hiểu về cách Delphi chạy code và biên dịch ra các nền tảng 32, 64 bit.

BÀI 02: Lập trình Delphi với Form, thiết lập thông tin phần mềm của bạn
Video này tôi hướng dẫn cách lập trình Delphi với Form, thiết lập thông tin phần mềm, thuộc tính của Form. Lập trình Form mẹ gọi form con với cách truyền tham số nút bấm từ TButton.ModalResult...
Cho em hỏi là làm sao mình thoát hẳn cái form mẹ (Không ẩn) khi load thành công cái form con vậy anh?
Cám ơn anh
 
Hai lúa nói kỹ hơn đc không vì mình chưa hiểu rõ ý.
Giống như mình làm cái form đăng nhập ấy anh. Khi click ok thì thoát (Không ẩn) rồi tiếp tục mở form main đó anh. Tương tự khi đăng nhập xong từ form main muốn đóng form main và đăng nhập lại.
Cám ơn anh,
 
Giống như mình làm cái form đăng nhập ấy anh. Khi click ok thì thoát (Không ẩn) rồi tiếp tục mở form main đó anh. Tương tự khi đăng nhập xong từ form main muốn đóng form main và đăng nhập lại.
Cám ơn anh,

Bạn vào phần Source của Project và sửa code như sau

Mã:
program TestExcel;

uses
  Vcl.Forms,
  Unit2 in 'Unit2.pas' {Form2 -> Main form của chương trình};
  Unit3 in 'Unit3.pas' {Form3 - > form login };

{$R *.res}

var frmLogin: TForm3;
    LogFine: Boolean;
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;

  frmLogin:= TForm3.Create(nil);
  try
    LogFine := (frmLogin.ShowModal = mrOk); //Mở form đăng nhập và user chọn nút Ok (có ModalResult là mrOk
  finally
    frmLogin.Free;
  end;

  if LogFine then
  begin
    Application.CreateForm(TForm2, Form2);
    Application.Run;
  end;
end.
 
Bạn vào phần Source của Project và sửa code như sau

Mã:
program TestExcel;

uses
  Vcl.Forms,
  Unit2 in 'Unit2.pas' {Form2 -> Main form của chương trình};
  Unit3 in 'Unit3.pas' {Form3 - > form login };

{$R *.res}

var frmLogin: TForm3;
    LogFine: Boolean;
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;

  frmLogin:= TForm3.Create(nil);
  try
    LogFine := (frmLogin.ShowModal = mrOk); //Mở form đăng nhập và user chọn nút Ok (có ModalResult là mrOk
  finally
    frmLogin.Free;
  end;

  if LogFine then
  begin
    Application.CreateForm(TForm2, Form2);
    Application.Run;
  end;
end.
Anh cho em demo nhé anh, vì mới làm quen nên chưa thể chỉnh đúng được anh.
Cám ơn anh
 
Trong Video 1, 2 mình có nói về cấu trúc code của Project. Hai lua nhấp chuột phải trên Project -> View Sourcecode. Bây giờ đã nhìn thấy cấu trúc code để khởi tạo chương trình, nó có cấu trúc Pascal

Program TenProject;
begin
end;

Và hãy sửa theo cấu trúc code mình đã nói là ok.
 
Trong Video 1, 2 mình có nói về cấu trúc code của Project. Hai lua nhấp chuột phải trên Project -> View Sourcecode. Bây giờ đã nhìn thấy cấu trúc code để khởi tạo chương trình, nó có cấu trúc Pascal

Program TenProject;
begin
end;

Và hãy sửa theo cấu trúc code mình đã nói là ok.
Em đã làm theo nhưng không biết là nó lỗi chỗ nào báo là mrOK...
Em đã set ModalResult cái nút ok là mrOK
Anh xem giúp em nhé.
1542438589111.png
Cám ơn anh
 

File đính kèm

  • 1542437886954.png
    1542437886954.png
    137.5 KB · Đọc: 19
Lần chỉnh sửa cuối:
Em đã làm theo nhưng không biết là nó lỗi chỗ nào báo là mrOK...
Em đã set ModalResult cái nút ok là mrOK
Anh xem giúp em nhé.
View attachment 207859
Cám ơn anh

Bên Form login có nút bấm gán mrOk nó không báo lỗi có nghĩa là các unit có hằng số này đã được khai báo ở phần đầu. Hai lúa sang form đó copy danh sách unit dán sang bên Program là được.

Lưu ý thêm là bên form có nút gám ModalResult thì hãy lập trình đóng form trên nút này (OnClick) bằng dòng lệnh
CloseModal;
 
Bên Form login có nút bấm gán mrOk nó không báo lỗi có nghĩa là các unit có hằng số này đã được khai báo ở phần đầu. Hai lúa sang form đó copy danh sách unit dán sang bên Program là được.

Lưu ý thêm là bên form có nút gám ModalResult thì hãy lập trình đóng form trên nút này (OnClick) bằng dòng lệnh
CloseModal;
Nó trả về kiểu Integer anh. Do đó em chỉnh lại từ mrOK sang 1 thì đã hết lỗi.

1542439464463.png

Cám ơn anh đã hướng dẫn.
 
Thực chất mrOk là tên hằng số (const) mang giá trị số 1 . Các hằng số liên quan đến Controls thì thường nó đc khai báo trong Unit “Vcl.Controls” . Giống như vba mình có thể dùng tên hằng số hoặc dùng giá trị của nó cũng đc.
 
Còn vấn đề này nữa, mong anh hướng dẫn giúp

Trong Source Project của em

Rich (BB code):
program Test_1;

uses
  Vcl.Forms,
  Test in 'Test.pas' {frmTest-> Main form của chương trình},
  FormLogin in 'FormLogin.pas' {Form1- > form login},
  Vcl.Themes,
  Vcl.Styles,
  GlobalVar in 'GlobalVar.pas';

{$R *.res}
    var frmLogin: TForm1;

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  frmLogin:= TForm1.Create(nil);
  TStyleManager.TrySetStyle('Luna');

  try
    globalLogFine := (frmLogin.ShowModal = 1); //Mở form đăng nhập và user chọn nút Ok (có ModalResult là mrOk
  finally
    frmLogin.Free;
  end;

 if globalLogFine then
  begin
    Application.CreateForm(TfrmTest, frmTest);
  Application.Run;
  end;
end.

Code trong LoginForm không biết nó sai chỗ nào mà khi nhấn ok thì cho dù giá trị recordset =0 thì nó vẫn hiện formMain.

Mã:
unit FormLogin;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Data.DB, Data.Win.ADODB,
  Vcl.OleServer, Vcl.CmAdmCtl;

type

  TForm1 = class(TForm)
    ADOConnection: TADOConnection;
    ADO_Login: TADODataSet;
    DataSource_Login: TDataSource;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    COMAdminCatalog1: TCOMAdminCatalog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
//uses Test;
procedure TForm1.Button1Click(Sender: TObject);

  var S:string;
  var s1:string;
 // var
 // frm:TfrmTest;

  begin
    if (Edit1.Text = '') or (Edit2.Text = '') then
      begin
        Application.MessageBox('Phải nhập đầy đủ tên đăng nhập và mật khẩu của bạn', 'Đăng nhập', MB_ICONINFORMATION);
        edit1.SetFocus ;

      end


    else
      begin

        screen.cursor:=crHourGlass; {show busy cursor}
        S:='select * FROM  tblEmployees  where strEmpName=' + QuotedStr(edit1.Text) + ' and strEmpPassword ='+QuotedStr(edit2.Text) ;
        // ShowMessage(S );
        ADO_login.Active:=false;
        ADO_login.CommandText:=S;
        ADO_login.Active:=true;
        if (ADO_login.RecordCount = 1)  then
          begin
           // frm:=TfrmTest.Create (nil)  ;
           // frm.ShowModal;
            //frm.Free ;
            CloseModal;
          end
        else
          begin
            Application.MessageBox('Thông tin đăng nhập không chính xác, vui lòng kiểm tra lại', 'Đăng nhập', MB_ICONstop);

          end;
      end;
      screen.cursor:=crDefault;  {show normal cursor}
  end;


procedure TForm1.Button2Click(Sender: TObject);
  begin
    CloseModal;

  end;

end.

Anh xem và chỉ em chỗ sai với,

Cám ơn anh,
 
Trong nhánh IF kiểm tra nếu trường hợp đăng nhập sai thì lệnh đóng là Close;
Nếu làm thế roiif mà vẫn sai logic thì vô lý?
 
Bạn chưa có lệnh đóng Form khi RecordCOunt= 0 kìa.
 
Đã thử các kiểu rồi anh. Giờ chỉ chờ demo của anh để so sánh mà thôi.
Đã giải quyết xong vấn đề này. Cám ơn anh @Nguyễn Duy Tuân đã nhiệt tình hướng dẫn.
Cái nút ok đế đã thiết lập thuộc tính ModalResult = mrOK do đó khi ta click vào nút này thì mrOK được thiết lập, cho dù nó có những cái bẫy lỗi. Lỗi phát sinh là trong các sự kiện khác dựa vào cái thuộc tính này để làm điều kiện mở form Main. Những cái bẫy lỗi đó nếu như điều kiện trả về sai thì ta nên thiết lập cái ModalResult này là mrNone để tránh trường hợp mà tôi gặp phải như trên.
 
Công nghệ lập trình Object Pascal có từ năm 1986. Biên dịch ra EXE chạy không cần có Windows (chạy từ DOS). Ngày nay nay Delphi sử dụng để lập trình phần mềm cho Windows, MacOS, iOS, Android, Linux.

 
Hì hì, Turbo Vision Libary (TVision) của Borland/Turbo Pascal. Mấy chục năm rồi giờ mới nhìn thấy nó lại ;)
TVision nó làm hết rồi, nên bác Tuân thấy đơn giản vậy, chứ tự viết cái GUI DOS như của TVision làm ra, chảy máu mắt đấy.
Còn 1 thư viện nữa của Borland, hồi nó còn nổi tiếng hơn MFC của MS: OWL Object Windows Library. Có trong Turbo/Borland Pascal for Windows, Borland C++ for Windows. Bác Tuân biết không ?
OWL là tiền thân của Delphi VCL sau này. Borland coder port, viết lại OWL thành VCL của Delphi.
 
Lần chỉnh sửa cuối:
Hì hì, Turbo Vision Libary (TVision) của Borland/Turbo Pascal. Mấy chục năm rồi giờ mới nhìn thấy nó lại ;)
TVision nó làm hết rồi, nên bác Tuân thấy đơn giản vậy, chứ tự viết cái GUI DOS như của TVision làm ra, chảy máu mắt đấy.
Còn 1 thư viện nữa của Borland, hồi nó còn nổi tiếng hơn MFC của MS: OWL Object Windows Library. Có trong Turbo/Borland Pascal for Windows, Borland C++ for Windows. Bác Tuân biết không ?
OWL là tiền thân của Delphi VCL sau này. Borland coder port, viết lại OWL thành VCL của Delphi.

Đúng rồi bác. Môi trường DOS những năm 90 làm được như TVision này là rất đẳng cấp (nó là framework để nhiều pm làm app kiểu TUI). Thời đó mình chỉ đọc Object Pascal và ứng dụng thôi mà đã hoa mắt rồi. Mất bao nhiều tiền để in tutor1..12 để gối đầy giường :). Sau này Pascal for Windows (TPW) ra đời thì mê tít nhưng đọc cũng quá khó vì lúc đó không có tài liệu để học có đầu đuôi. Cái OWL cách làm việc giống như lập trình C++ cho Windows nếu ai biết cái này rồi thì đọc hiểu cách làm việc của OWL còn không thì mờ mắt lâu lâu :). Phải công nhận đội chuyên gia của Borland tài năng, tạo ra IDE rất tuyệt từ thập niên 80, tiếc là sau này không giữ được để phát triển Borland - một đế chế lập trình.
 
Ờ, tiếc cho Borland, thần tượng 1 thời của tui. Hồi đó ghét MS lắm, chỉ mê Borland thôi. Dòng đời đưa đẩy, cuối cùng cũng phải về với Visual Studio của MS.
 
Công nhận thiên hạ chơi đồ chiến thiệt.
Hồi những năm cuối 70's mình dùng Fortran 77 để tính địa hình cho mấy tay khảo sát địa chất đã thấy ngon lắm rồi. Qua những năm đầu 80's thì dùng BASIC để vẽ địa hình lòng hải cảng cho mấy tay hải trắc địa. Những năm giữa 80's lại cũng dùng BASIC để làm mấy cái phần mềm kế toán.
Hồi đó cái floppy nó lớn cả gang tay chứ đâu được cái nho nhỏ của IBM-PC.
Băng từ từng cuộn đường kính 30cm. Cái hardisk bự như cái thúng; drive của nó không nhỏ hơn cái máy giặt.
 
Công nhận thiên hạ chơi đồ chiến thiệt.
Hồi những năm cuối 70's mình dùng Fortran 77 để tính địa hình cho mấy tay khảo sát địa chất đã thấy ngon lắm rồi. Qua những năm đầu 80's thì dùng BASIC để vẽ địa hình lòng hải cảng cho mấy tay hải trắc địa. Những năm giữa 80's lại cũng dùng BASIC để làm mấy cái phần mềm kế toán.
Hồi đó cái floppy nó lớn cả gang tay chứ đâu được cái nho nhỏ của IBM-PC.
Băng từ từng cuộn đường kính 30cm. Cái hardisk bự như cái thúng; drive của nó không nhỏ hơn cái máy giặt.

Qua thời cái đĩa mềm bằng cái bánh đa thì đến thế hệ của em nó còn bằng quả na :D . Em không biết Fortran nhưng nó vẫn đang có cộng đồng khá mạnh trên thế giới?
Đôi khi em thích thú với những đồ cổ vì thấy rất cảm xúc... :)
 
.... Em không biết Fortran nhưng nó vẫn đang có cộng đồng khá mạnh trên thế giới? ...
Tôi là dân ứng dụng. Cứ cái gì giúp được đi từ dữ liệu thô sang tin tức hữu ích là tôi xài (from raw data to useful information).
Sỡ dĩ tôi biết nhiều ngôn ngữ là do thời gian làm software quality control (giai đoạn cuối trước khi giao cho khách hàng), phải viết mấy cái test scripts cho bọn lập trình viên và testers.
Tôi nhớ thì Fortran, Cobol, và Basic là ba ngôn ngữ chính mà dùng lệnh theo hàng. Người ta có thể thuê lập trình viên trả tiền theo dòng code. Nhất là Cobol 80.
 
Các tool nổi tiếng 1 thời của Borland, thường đi kèm các bộ IDE, compiler của Borland như Turbo Debugger 16/32, Turbo Profiler, Turbo Assembler... không biết bây giờ còn duy trì, có trong các bộ RAD Studio của Embraco hay không bác Tuân nhỉ ?
 
Các tool nổi tiếng 1 thời của Borland, thường đi kèm các bộ IDE, compiler của Borland như Turbo Debugger 16/32, Turbo Profiler, Turbo Assembler... không biết bây giờ còn duy trì, có trong các bộ RAD Studio của Embraco hay không bác Tuân nhỉ ?

Turbo Asembler hình như đổi tên là TAsm32, debug có, profile gì đó mình không rõ nữa. Bác kiểm tra danh sách ở đây xem?

220406
 
Cảm ơn bác Tuân, vẫn còn TASM32 (vẫn chưa lên 64). TD32 và TProfiler không còn .
 
Demo Delphi 10.3
 
Delphi hiện là một trong các ngôn ngữ lập trình mạnh trên thế giới, cho phép lập trình duy nhất một code và biên dịch cho các nền tảng hệ điều hành Windows (32, 64-bit), Mac OSX, iPhone, Android, Linux. Lập trình trên Delphi rất trực quan, các component phong phú, tương tác linh hoạt với hệ điều hành. Ngôn ngữ lập trình là Object Pascal, cho phép nhúng cả ngôn ngữ ASM , những người đã học Pascal học sẽ rất nhanh. Delphi biên dịch phần mềm ra mã máy (Native code) tốc độ rất là nhanh, không giống như .NET, Java, Ruby chỉ là thông dịch. Delphi cho phép xây dựng rất nhiều loại ứng dụng: Database, Server, Game, Music, Service, Application,... Delphi thực sự rất mạnh mẽ, làm chủ ngôn ngữ này bạn có cơ hội trở thành một cao thủ lập trình hệ thống, lập trình ứng dụng đa nền tảng....

Trong topic này tôi chia sẻ với các bạn các bài học lập trình Delphi cơ bản sẽ giúp các bạn bước đầu tiếp cận với ngôn ngữ lập trình mạnh mẽ này dễ dàng nhất.

BÀI 01: Lập trình Delphi cơ bản Bài 01 Tạo chương trình đầu tiên
Video này tôi hướng dẫn các bạn cách tạo một ứng dụng đầu tiên - Project và hiểu về cách Delphi chạy code và biên dịch ra các nền tảng 32, 64 bit.

BÀI 02: Lập trình Delphi với Form, thiết lập thông tin phần mềm của bạn
Video này tôi hướng dẫn cách lập trình Delphi với Form, thiết lập thông tin phần mềm, thuộc tính của Form. Lập trình Form mẹ gọi form con với cách truyền tham số nút bấm từ TButton.ModalResult...
thầy ơi cho e xin link full khóa học đc k ạ
 
Xin chia sẻ với các bạn hiện tại hoặc tương lai muốn lập trình Delphi (ngôn ngữ gốc Object Pascal) Lập trình với Excel từ Delphi - Tạo biểu đồ. Video này hướng dẫn tự động tạo Excel, đẩy dữ liệu từ Form vào Excel và tạo biểu đồ. Bài giảng có kết hợp với mã VBA để người biết VBA dễ dàng liên hệ giữa hai ngôn ngữ lập trình.
 
BÀI 01: Lập trình Delphi cơ bản Bài 01 Tạo chương trình đầu tiên
Video này tôi hướng dẫn các bạn cách tạo một ứng dụng đầu tiên - Project và hiểu về cách Delphi chạy code và biên dịch ra các nền tảng 32, 64 bit.
em chào thầy, chúc thầy có một buổi tối vui vẻ bên gia đình và người thân, nếu thầy có rảnh ngồi lướt diễn đàn và có đọc thấy bài này giúp giùm em với, em mới cài delphi 10.2.3 và có làm theo Clip bài 1
có đoạn thầy nhấn vào button và gõ lệnh Close; thì chương trình có hiện ra gợi ý để mình chọn, nhưng trên máy em thì không hiện gì cả. em mới cài và làm theo clip nên không có vọc vạch cài đặt gì cả.
em có làm theo hướng dẫn tại đây thì thấy mọi cài đặt đều giống nhau hết mà vẫn không hiện gợi ý lệnh được ạ.
hình này trên clip của thầy
z2059747187918_5d9af253a83a60bae84e329929a82f3a.jpg
đây là khi em làm theo

z2059697840624_220e2abca1a9d2b7ca22e8a214bfa934.jpg
còn đây là trong Options em xem theo hướng dẫn bên trên thì y chang.
z2059755968081_810848df06e21ddf48fbd77e8d8044b9.png
mong sớm nhận được hồi âm từ thầy.
 

File đính kèm

  • 2020-09-04_17-45-40.gif
    2020-09-04_17-45-40.gif
    72 KB · Đọc: 4
có đoạn thầy nhấn vào button và gõ lệnh Close; thì chương trình có hiện ra gợi ý để mình chọn, nhưng trên máy em thì không hiện gì cả. em mới cài và làm theo clip nên không có vọc vạch cài đặt gì cả.
còn đây là trong Options em xem theo hướng dẫn bên trên thì y chang.
View attachment 244859
Nhìn hình của bạn tôi đoán thế này...

Bạn thử đánh dấu chọn "Auto invoke" xem sao.
 
Nhấn CTRL + SPACE
 
e có câu hỏi khi học về mảng trong delphi nhờ các ACE giải thích giúp ạ, sự khác nhau giữa các cách khai báo này là gì ạ
Mã:
var
  charArray1:TArray<Char>;
  charArray2:TCharArray;
  charArray3:Array of char;
Em có code bên dưới, khi khai báo TArray<string> thì nó có hiện dòng = array of T, nhưng nếu e sữa khai báo strArray:array of string thì lại báo lỗi
Mã:
var
   strArray:TArray<string>;
  str:string;
begin
  str:='giai phap excel';
  strArray:=str.Split([' ']);
  ShowMessage(strArray[2]);
end;
 
Em có code bên dưới, khi khai báo TArray<string> thì nó có hiện dòng = array of T, nhưng nếu e sữa khai báo strArray:array of string thì lại báo lỗi
Mã:
var
   strArray:TArray<string>;
  str:string;
begin
  str:='giai phap excel';
  strArray:=str.Split([' ']);
  ShowMessage(strArray[2]);
end;
Tôi không sử dụng Delphi đời mới bao giờ nên chỉ đoán mò. Hiện tại không có lỗi thì ắt là str.Split([' ']) trả về TArray<string>. Khi đổi thành strArray:array of string thì có lỗi bởi 1 bên (strArray) là array of string, còn bên kia (str.Split([' '])) là TArray<string>. Tức 2 kiểu không tương thích.
 
e có câu hỏi khi học về mảng trong delphi nhờ các ACE giải thích giúp ạ, sự khác nhau giữa các cách khai báo này là gì ạ
Mã:
var
  charArray1:TArray<Char>;
  charArray2:TCharArray;
  charArray3:Array of char;
Em có code bên dưới, khi khai báo TArray<string> thì nó có hiện dòng = array of T, nhưng nếu e sữa khai báo strArray:array of string thì lại báo lỗi
Mã:
var
   strArray:TArray<string>;
  str:string;
begin
  str:='giai phap excel';
  strArray:=str.Split([' ']);
  ShowMessage(strArray[2]);
end;

TCharArray chính là kiểu được khai báo
Type TCharArray = array of Char;
Vì thế 3 khai báo bên coi là như nhau.
Lỗi thứ hai là do kiểu dữ liệu không đồng nhất. Như a Batman1 đã giải thích.
 
nhưng nếu e sữa khai báo strArray:array of string thì lại báo lỗi
Cách xử lý ... :D

Bạn phải đọc kỹ help, vì nhiều khi triết lý của Delphi rất khó hiểu đối với bạn. Ví như code sau

Mã:
var
  Int1: array[1..2] of Integer;
  Int2: array[1..2] of Integer;
begin
  Int1[1] := 2;
  Int1[2] := 3;
  Int2 := Int1;
end;
compiler Delphi sẽ không chấp nhận dòng cuối vì "incompatible types". Nếu tôi lần đầu nhìn thấy code này thì tôi đoán mò là Int1 và Int2 tương thích với nhau. Nhưng với Delphi chúng không tương thích.

Int1 và Int2 chỉ tương thích khi có Int1, Int2: array[1..2] of Integer;

Nhìn TArray<string> thì chắc chắn là Delphi đời mới. Còn array of string ̣(array of ...) thì có ít nhất là từ Delphi 5 (tôi chỉ nghịch thời Delphi 5), là mảng động. Tôi đoán là TArray<string> cũng là mảng động - mảng các chuỗi. Nhưng có thể Delphi cho là chúng không tương thích về kiểu nên có lỗi.

Trong trường hợp cụ thể của bạn thì tôi đoán mò là chỉ cần ép kiểu, Delphi hết càu nhàu :D
Mã:
var
  strArray:array of string; //TArray<string>;
  str:string;
begin
  str:='giai phap excel';
  TArray<string>(strArray):=str.Split([' ']);
  ShowMessage(strArray[2]);
end;
 
@batman1 đúng như a nói, khi ép kiểu thì nó hoạt động ổn định, trong thư viện system có định nghĩa:
Mã:
 TArray<T> = array of T;
vậy ta có thể hiểu 2 mảng động đó là tương đương nhau không anh, có thể là trong trường hợp dùng split bên trên do hàm split định nghĩa kiểu trả về là TArray<string> nên ta bắt buộc phải dùng đúng như thế.
Mã:
function TStringHelper.Split(const Separator: array of Char): TArray<string>;
 
@batman1 đúng như a nói, khi ép kiểu thì nó hoạt động ổn định, trong thư viện system có định nghĩa:
Mã:
 TArray<T> = array of T;
vậy ta có thể hiểu 2 mảng động đó là tương đương nhau không anh, có thể là trong trường hợp dùng split bên trên do hàm split định nghĩa kiểu trả về là TArray<string> nên ta bắt buộc phải dùng đúng như thế.
Mã:
function TStringHelper.Split(const Separator: array of Char): TArray<string>;
Tôi nghỉ chơi từ hồi Delphi 5 rồi nên bạn tự đọc help nhé. Tôi thì cho là 2 mảng như nhau nhưng Delphi nó có triết lý của nó. Ví như Int1 và Int2 mà tôi đưa ra ấy, tôi dám mang đầu ra cá là Int1 và Int2 tương thích với nhau nếu là tôi phán. Nhưng Delphi phán là không tương thích thì phải nghe theo vì đó là đồ chơi do Delphi đưa ra mà. Rõ ràng cả 2 NHÌN đều là array[1:2] of integer mà còn không tương thích thì nói chi đến 1 bên NHÌN là array of string và bên kia NHÌN là TArray<string>. Rõ ràng mắt nhìn như nhau còn không tương thích thì khi mắt nhìn đã thấy khác thì sự không tương thích dường như có vẻ mạnh hơn. Tất nhiên Delphi nó có "lý do" của nó.
 
@batman1 để sử dụng khai báo như trên của anh
Mã:
Int1: array[1..2] of Integer;
 Int2: array[1..2] of Integer;
Em không biết cách nào để gán mảng int1 cho mảng int2, buộc phải khai báo 1 Kiểu dữ liệu
Mã:
type
  TArrayinteger = array of integer;
- Nếu không khai báo kiểu dữ liệu này mà cho kiểu trả về của hàm là "array of integer" thì sẽ báo lỗi, mà mặc dù đã định nghĩa "TArrayinteger = array of integer" , nhưng nếu 1 bên có kiểu dữ liệu "array of integer", bên kia là "TArrayinteger" thì vẫn lỗi.
Mã:
Function GanArray(const Arr: TArrayinteger): array of integer; // Lỗi
--------------------------------------------------------------------------
Mã:
procedure THelloForm.btnDemoClick(Sender: TObject);
var
  Int1: TArrayinteger;
  Int2: TArrayinteger;
begin
  SetLength(Int1,2);
  Int1[0] := 2;
  Int1[1] := 3;
  Int2 := GanArray(int1);
  ShowMessage(inttostr(Int2[1]));
end;
Mã:
function THelloForm.GanArray(const Arr: TArrayinteger): TArrayinteger;
var
  i: Integer;
begin
  SetLength(Result,length(Arr));
  for i := low(Arr) to High(Arr) do
  begin
      Result[i]:=Arr[i];
  end;
end;
 
Delphi hiện là một trong các ngôn ngữ lập trình mạnh trên thế giới, cho phép lập trình duy nhất một code và biên dịch cho các nền tảng hệ điều hành Windows (32, 64-bit), Mac OSX, iPhone, Android, Linux. Lập trình trên Delphi rất trực quan, các component phong phú, tương tác linh hoạt với hệ điều hành. Ngôn ngữ lập trình là Object Pascal, cho phép nhúng cả ngôn ngữ ASM , những người đã học Pascal học sẽ rất nhanh. Delphi biên dịch phần mềm ra mã máy (Native code) tốc độ rất là nhanh, không giống như .NET, Java, Ruby chỉ là thông dịch. Delphi cho phép xây dựng rất nhiều loại ứng dụng: Database, Server, Game, Music, Service, Application,... Delphi thực sự rất mạnh mẽ, làm chủ ngôn ngữ này bạn có cơ hội trở thành một cao thủ lập trình hệ thống, lập trình ứng dụng đa nền tảng....

Trong topic này tôi chia sẻ với các bạn các bài học lập trình Delphi cơ bản sẽ giúp các bạn bước đầu tiếp cận với ngôn ngữ lập trình mạnh mẽ này dễ dàng nhất.

BÀI 01: Lập trình Delphi cơ bản Bài 01 Tạo chương trình đầu tiên
Video này tôi hướng dẫn các bạn cách tạo một ứng dụng đầu tiên - Project và hiểu về cách Delphi chạy code và biên dịch ra các nền tảng 32, 64 bit.

BÀI 02: Lập trình Delphi với Form, thiết lập thông tin phần mềm của bạn
Video này tôi hướng dẫn cách lập trình Delphi với Form, thiết lập thông tin phần mềm, thuộc tính của Form. Lập trình Form mẹ gọi form con với cách truyền tham số nút bấm từ TButton.ModalResult...

Các bạn xem thêm các bài học Delphi cơ bản tại đây.
Anh có thể cho em xin bộ cài Delphi với ạ, em đang muốn tìm hiểu về ngôn ngữ này ạ. Em cảm ơn anh
 
Anh có thể cho em xin bộ cài Delphi với ạ, em đang muốn tìm hiểu về ngôn ngữ này ạ. Em cảm ơn anh

Đây là phiên bản cộng đồng nhé
Delphi & C++Builder FREE Community Editions updated to version 10.4.2 are now available! The Community Editions of Delphi & C++Builder are for students and hobbyists. Download it now! https://embt.co/CommunityEditions10-4-2 #developers #programming #softwaredevelopment
 
Đây là phiên bản cộng đồng nhé
Delphi & C++Builder FREE Community Editions updated to version 10.4.2 are now available! The Community Editions of Delphi & C++Builder are for students and hobbyists. Download it now! https://embt.co/CommunityEditions10-4-2 #developers #programming #softwaredevelopment
Em mày mò cài Delphi 12 rồi anh ạ, giờ em mới tìm xem bắt đầu từ đâu đây. Thời gian tới phải mày mò và kiên trì nhiều rồi anh ạ
 
Trên Fanpage Fb “Delphi Việt Nam” có tài liệu cơ bản đấy.
Vâng, Em sẽ tìm hiểu thêm. Em cảm ơn anh, em đang theo dõi Video bài 1 của anh ạ
Bài đã được tự động gộp:

Trên Fanpage Fb “Delphi Việt Nam” có tài liệu cơ bản đấy.
Anh cho em hỏi là anh thao tác là có từ gợi ý thì phải làm thế nào ạ?
 
Lần chỉnh sửa cuối:

Bài viết mới nhất

Back
Top Bottom