AI muốn lập trình DLL cho Excel và các loại bằng Delphi thì xem video này nhé!

Liên hệ QC

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,649
Được thích
10,138
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Lần chỉnh sửa cuối:
Anh dùng thử hàm SubString nhé.
Mới thử xong sao nó lấy ko chính Xác
Mã:
xx := Ext.SubString(3);
    ShowMessage('xx  ' + xx);
Lấy 3 mà nó lấy có 2 ... hay Mình chưa biết xài ta ???

Cái sau OK ... Lưu vào đây cho các Bạn sau này cần Cứ thế mà xài
Mã:
System.StrUtils.RightStr
Up to Parent: System.StrUtils
Delphi
function RightStr(const AText: AnsiString; const ACount: Integer): AnsiString; overload;
function RightStr(const AText: string; const ACount: Integer): string; overload;
 
Lần chỉnh sửa cuối:
Upvote 0
Mới thử xong sao nó lấy ko chính Xác
Mã:
xx := Ext.SubString(3);
    ShowMessage('xx  ' + xx);
Lấy 3 mà nó lấy có 2 ... hay Mình chưa biết xài ta ???
3 có nghĩa là lấy từ ký tự có chỉ số là 3. Chỉ số tính từ 0, vậy lấy từ ký tự thứ 4. Nếu chuỗi là 'abcdef' thì 3 có nghĩa là lấy từ 'd'
Cái sau OK ... Lưu vào đây cho các Bạn sau này cần Cứ thế mà xài
Mã:
System.StrUtils.RightStr
Up to Parent: System.StrUtils
Delphi
function RightStr(const AText: AnsiString; const ACount: Integer): AnsiString; overload;
function RightStr(const AText: string; const ACount: Integer): string; overload;
Nói bao lần nhưng như nước đổ đầu vịt.
Tìm gì thì trước tiên cũng phải tìm trong nhà. Trong nhà không có mới tìm ngoài đường. Đã bảo luôn đọc help mà không chịu. Trong Delphi có nhiều "quyển" help. Nếu "Help -> Delphi help -> System Library help" thì đọc mệt nghỉ. Chả phải tìm ở đâu xa, chả phải lưu ở đâu cả.

help.jpg

Trong Help có bằng này mục.

help2.jpg

Chỉ sợ không đủ thời gian để đọc hết. Cần gì mò mẫm tìm trên mạng, lưu trên mạng?

Có nhìn thấy mục "Examples and Samples" không? Đó là các ví dụ của Delphi có trên mạng, nhưng cũng đồng thời có trong thư mục con cài đặt "Embarcadero\ ... \Samples". Xem lướt qua các ví dụ thôi là khỏi hỏi những câu ngớ ngẩn, thuộc hạng cơ bản ABC.

Tôi từ xưa tới nay cứ bập vào cái gì là tôi lôi help ra đọc nát bươm mới thôi. Delphi, Windows API hay Excel VBA ... Có những cái chỉ cần đọc lướt qua để biết, khi cầm tìm cái gì đó thì biết phạm vi tìm ở đâu.
 
Upvote 0
3 có nghĩa là lấy từ ký tự có chỉ số là 3. Chỉ số tính từ 0, vậy lấy từ ký tự thứ 4. Nếu chuỗi là 'abcdef' thì 3 có nghĩa là lấy từ 'd'

Nói bao lần nhưng như nước đổ đầu vịt.
Tìm gì thì trước tiên cũng phải tìm trong nhà. Trong nhà không có mới tìm ngoài đường. Đã bảo luôn đọc help mà không chịu. Trong Delphi có nhiều "quyển" help. Nếu "Help -> Delphi help -> System Library help" thì đọc mệt nghỉ. Chả phải tìm ở đâu xa, chả phải lưu ở đâu cả.

View attachment 240085

Trong Help có bằng này mục.

View attachment 240086

Chỉ sợ không đủ thời gian để đọc hết. Cần gì mò mẫm tìm trên mạng, lưu trên mạng?

Có nhìn thấy mục "Examples and Samples" không? Đó là các ví dụ của Delphi có trên mạng, nhưng cũng đồng thời có trong thư mục con cài đặt "Embarcadero\ ... \Samples". Xem lướt qua các ví dụ thôi là khỏi hỏi những câu ngớ ngẩn, thuộc hạng cơ bản ABC.

Tôi từ xưa tới nay cứ bập vào cái gì là tôi lôi help ra đọc nát bươm mới thôi. Delphi, Windows API hay Excel VBA ... Có những cái chỉ cần đọc lướt qua để biết, khi cầm tìm cái gì đó thì biết phạm vi tìm ở đâu.
Cái vụ này Em xử xong rồi ... Em cảm ơn
Anh cho Em hỏi chút trên VBA Em tạo 1 cái Form xong Em vẻ 1 cái TextBox1 lên đó hay VB6 cũng vậy xong khi chạy code Em gõ cái gì vào đó cũng được Khi Form Show

vậy trong Delphi Em tìm cái Control gì đại ý nó như cái TextBox1 trên VBA và VB6 vậy ....
Trên Form Delphi Em vẻ cái TEdit mà khi Form Show nó ko cho gõ vào đó hay Em chưa biết sử dụng Anh nhỉ
 
Upvote 0
Cái vụ này Em xử xong rồi ... Em cảm ơn
Anh cho Em hỏi chút trên VBA Em tạo 1 cái Form xong Em vẻ 1 cái TextBox1 lên đó hay VB6 cũng vậy xong khi chạy code Em gõ cái gì vào đó cũng được Khi Form Show

vậy trong Delphi Em tìm cái Control gì đại ý nó như cái TextBox1 trên VBA và VB6 vậy ....
Trên Form Delphi Em vẻ cái TEdit mà khi Form Show nó ko cho gõ vào đó hay Em chưa biết sử dụng Anh nhỉ
Bạn nói cụt lủn thế thì tôi làm sao biết bạn đã làm thế nào. Cũng như hôm trước bạn đính kèm cái ảnh với ListBox rồi bạn than là chỉ chọn được mục đầu tiên. Không một lời giải thích, mô tả.

Về Edit tôi thử thao tác: File -> New -> VLC Forms Application - Delphi -> gõ TEdit vào ô search của Tool Palette -> tìm được ở thẻ Standard -> click vào TEdit -> click vào Form -> trên Form đã có Edit.

Nhấn Run -> có thể nhập gì đó tùy ý trong Edit.

Bạn không mô tả các thao tác của bạn nên tôi chịu.

Mà thôi. Bạn cố gắng đọc help nhé.
 
Upvote 0
Bạn nói cụt lủn thế thì tôi làm sao biết bạn đã làm thế nào. Cũng như hôm trước bạn đính kèm cái ảnh với ListBox rồi bạn than là chỉ chọn được mục đầu tiên. Không một lời giải thích, mô tả.

Về Edit tôi thử thao tác: File -> New -> VLC Forms Application - Delphi -> gõ TEdit vào ô search của Tool Palette -> tìm được ở thẻ Standard -> click vào TEdit -> click vào Form -> trên Form đã có Edit.

Nhấn Run -> có thể nhập gì đó tùy ý trong Edit.

Bạn không mô tả các thao tác của bạn nên tôi chịu.

Mà thôi. Bạn cố gắng đọc help nhé.
Em Úp file Anh giúp Em chút ... Em có tạo 2 File khác nhau

1/ 1 File là Form.exe thì Em vẻ lên đó cái TEdit và Memo khi em chạy File thì gõ cái gì vào đó cũng được

2/ 1 File là cái Add-ins DLL có cái Form khi mở Excel thì nó sẻ load cái Form đó Show lên . trên Form Em cũng tạo 1 cái TEdit và Memo nhưng khi em gõ vào đó thì nó thoát ngay Form xuống và mình gõ cái gì thì nó vào gán vào Cells Excel luôn. Em loay hoay chưa biết xử lý sao và lý do tại sao

3/ Anh chỉ em làm file mục số 2 với ... ( File đó là VD: còn thực tế thì Em làm cái Menu trên Excel khi nào có nhu cầu thì gọi Form lên xong thoát ... xong lại gọi khi có nhu cầu )

Untitled.png)

4/ Hình Ảnh kèm theo Em gõ lên Form thì nó lại gán xuống Cells

Cảm ơn Anh
 

File đính kèm

  • InputInExcel_Add-Ins.rar
    73.8 KB · Đọc: 8
Upvote 0
Em Úp file Anh giúp Em chút ... Em có tạo 2 File khác nhau

1/ 1 File là Form.exe thì Em vẻ lên đó cái TEdit và Memo khi em chạy File thì gõ cái gì vào đó cũng được

2/ 1 File là cái Add-ins DLL có cái Form khi mở Excel thì nó sẻ load cái Form đó Show lên . trên Form Em cũng tạo 1 cái TEdit và Memo nhưng khi em gõ vào đó thì nó thoát ngay Form xuống và mình gõ cái gì thì nó vào gán vào Cells Excel luôn. Em loay hoay chưa biết xử lý sao và lý do tại sao
Tại sao bạn không nói điều này ngay từ đầu mà chỉ có thói quen nói cụt lủn?

Về EXE + Excel thì dễ hiểu. Cả EXE và Excel đều là những quá trình độc lập, hoạt động trong không gian địa chỉ khác biệt của mình. Về DLL + Excel thì lại khác. DLL không là quá trình độc lập. DLL được load vào không gian địa chỉ của Excel và hoạt động trong không gian địa chỉ ấy. Nhưng quá trình Excel thâu tóm bàn phím. Tức mọi input từ bàn phím sẽ được thâu tóm bởi Excel và xử lý, vd. đưa vào ActiveCell. Vì thế khi gõ vd. "Ngày mai em đi" thì nó sẽ "hạ cánh" ở ô đang active trên sheet. Bạn cứ thử kiểm tra ô đang active mà xem.

Nguyên nhân chắc chắn là thế. Còn khắc phục thế nào thì bạn tìm tòi, thử nghiệm nhé. Tôi không có Delphi để tìm và thử nghiệm thay bạn. Tôi tò mò muốn biết Delphi bây giờ mặt mũi thế nào. Nhưng chỉ là tìm hiểu chay, đọc chay thôi. Máy cà tàng của tôi không cài được Delphi đời mới. Những ảnh mà tôi đính kèm gần đây là tôi nhờ người khác chụp hộ thôi.
 
Upvote 0
Tại sao bạn không nói điều này ngay từ đầu mà chỉ có thói quen nói cụt lủn?

Về EXE + Excel thì dễ hiểu. Cả EXE và Excel đều là những quá trình độc lập, hoạt động trong không gian địa chỉ khác biệt của mình. Về DLL + Excel thì lại khác. DLL không là quá trình độc lập. DLL được load vào không gian địa chỉ của Excel và hoạt động trong không gian địa chỉ ấy. Nhưng quá trình Excel thâu tóm bàn phím. Tức mọi input từ bàn phím sẽ được thâu tóm bởi Excel và xử lý, vd. đưa vào ActiveCell. Vì thế khi gõ vd. "Ngày mai em đi" thì nó sẽ "hạ cánh" ở ô đang active trên sheet. Bạn cứ thử kiểm tra ô đang active mà xem.

Nguyên nhân chắc chắn là thế. Còn khắc phục thế nào thì bạn tìm tòi, thử nghiệm nhé. Tôi không có Delphi để tìm và thử nghiệm thay bạn. Tôi tò mò muốn biết Delphi bây giờ mặt mũi thế nào. Nhưng chỉ là tìm hiểu chay, đọc chay thôi. Máy cà tàng của tôi không cài được Delphi đời mới. Những ảnh mà tôi đính kèm gần đây là tôi nhờ người khác chụp hộ thôi.
chính xác như anh nói ... em giờ chịu hết cách cũng ko biết xử lý sao nữa
 
Upvote 0
chính xác như anh nói ... em giờ chịu hết cách cũng ko biết xử lý sao nữa
Ý tưởng thì tôi có, nhưng tôi không có Delphi để kiểm nghiệm.
Đằng nào bạn cũng show Form từ menu. Vậy trong menu bạn thử code
Mã:
Form1.ShowModal;

1. Tại sao không thể Form1.ShowModal trong OnStartupComplete?
Bởi nếu có code Form1.ShowModal trong OnStartupComplete thì thứ tự sẽ là: hiển thị Form1, và chỉ đến khi đóng Form1 thì sheet (workbook) trong Excel mới hiển thị. Nó giống như trong VBA. Nếu trong VBA sau dòng UserForm1.Show (show modal) có thêm một số dòng code thì chỉ khi đóng UserForm1 thì những dòng code kia mới được thực hiện.

2. Do Form1.ShowModal đặt trong menu nên ở thời điểm chọn menu thì sheet trong Excel đã được hiển thị.

Tuy nhiên tôi tin chắc 200% rằng sẽ có lỗi. Cái ShowModal kia chắc chắn xung đột với code của Excel. Mục đích ShowModal chỉ để bạn mục sở thị là lúc này input từ bàn phím sẽ "đi" vào Edit hoặc Memo. Tức ý tưởng ShowModal hiện thời chỉ là để thỏa chí tò mò, rằng có thể nhập vào Edit. Nhưng ShowModal chắc chắn sẽ gây ra lỗi nếu sau đó code thao tác, tương tác với Excel: tức khi nhấn Button để nhập "Kiều Mạnh" vào ô trên sheet. Nếu không cẩn thận code ngoại lai rất dễ xung đột với code của Excel.
 
Upvote 0
Ý tưởng thì tôi có, nhưng tôi không có Delphi để kiểm nghiệm.
Đằng nào bạn cũng show Form từ menu. Vậy trong menu bạn thử code
Mã:
Form1.ShowModal;

1. Tại sao không thể Form1.ShowModal trong OnStartupComplete?
Bởi nếu có code Form1.ShowModal trong OnStartupComplete thì thứ tự sẽ là: hiển thị Form1, và chỉ đến khi đóng Form1 thì sheet (workbook) trong Excel mới hiển thị. Nó giống như trong VBA. Nếu trong VBA sau dòng UserForm1.Show (show modal) có thêm một số dòng code thì chỉ khi đóng UserForm1 thì những dòng code kia mới được thực hiện.

2. Do Form1.ShowModal đặt trong menu nên ở thời điểm chọn menu thì sheet trong Excel đã được hiển thị.

Tuy nhiên tôi tin chắc 200% rằng sẽ có lỗi. Cái ShowModal kia chắc chắn xung đột với code của Excel. Mục đích ShowModal chỉ để bạn mục sở thị là lúc này input từ bàn phím sẽ "đi" vào Edit hoặc Memo. Tức ý tưởng ShowModal hiện thời chỉ là để thỏa chí tò mò, rằng có thể nhập vào Edit. Nhưng ShowModal chắc chắn sẽ gây ra lỗi nếu sau đó code thao tác, tương tác với Excel: tức khi nhấn Button để nhập "Kiều Mạnh" vào ô trên sheet. Nếu không cẩn thận code ngoại lai rất dễ xung đột với code của Excel.
Em mới thử Form1.ShowModal thì khi gõ nó vẫn trả về Cells ngay lập tức

thử cho Form1.ShowModal vào OnStartupComplete thì nó cũng như thế ... có điều cho vào mục này em thấy bất tiện quá vì mỗi lần mở Excel nó lại Show lên mà nhu cầu xài chưa có hay có vào lúc khác khi cần

( Trên máy Em có 1 File code mẫu Em tải của trang nước ngoài hình như viết trên Delphi 7 thì phải nó cũng là COM Delphi cho Excel ...File này chỉ tham khảo )


Cảm ơn Anh
 

File đính kèm

  • COMAddInSample03.zip
    555.1 KB · Đọc: 8
Lần chỉnh sửa cuối:
Upvote 0
Em mới thử Form1.ShowModal thì khi gõ nó vẫn trả về Cells ngay lập tức
Thế thì hơi lạ.

Thì thử cách khác.
1. Vẫn để Form1.Show trong On...
2. Đặt CheckBox1 trên Form. Code cho OnClick là
Mã:
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  Form1.Hide;
  if CheckBox1.State = cbChecked then
    Form1.ShowModal
  else
    Form1.Show;
end;
3. Thử nghiệm: kích hoạt Excel -> click CheckBox1 để đánh dấu và From1.ShowModal -> click vào Edit và gõ. Trong Edit có đoạn gõ?

Tuy nhiên như tôi đã nói, chỉ là để kiểm tra xem liệu có thể gõ trong Edit không thôi. Còn tôi vẫn tin là nếu sau đó nhấn button để nhập "Kiều Mạnh" vào cell (tương tác với trang tính) thì sẽ có lỗi. Thậm chí sau khi ShowModal mà ta lại click CheckBox để chỉ Show thì khi nhấn button có lẽ vẫn sẽ có lỗi.
 
Upvote 0
Thế thì hơi lạ.

Thì thử cách khác.
1. Vẫn để Form1.Show trong On...
2. Đặt CheckBox1 trên Form. Code cho OnClick là
Mã:
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  Form1.Hide;
  if CheckBox1.State = cbChecked then
    Form1.ShowModal
  else
    Form1.Show;
end;
3. Thử nghiệm: kích hoạt Excel -> click CheckBox1 để đánh dấu và From1.ShowModal -> click vào Edit và gõ. Trong Edit có đoạn gõ?

Tuy nhiên như tôi đã nói, chỉ là để kiểm tra xem liệu có thể gõ trong Edit không thôi. Còn tôi vẫn tin là nếu sau đó nhấn button để nhập "Kiều Mạnh" vào cell (tương tác với trang tính) thì sẽ có lỗi. Thậm chí sau khi ShowModal mà ta lại click CheckBox để chỉ Show thì khi nhấn button có lẽ vẫn sẽ có lỗi.
Em mới thử vậy thì gõ Ok đó Anh tuy nhiên lỗi hay phát sinh gì thêm thì em chưa lường hết hay biết trước
Mai chủ nhật Em kẹt ... Thứ 2 Em thử các kiểu xem sao có gì em báo lại Anh

1593265371250.png
Em mới thử bấm Buuton trên Form get Range thấy Ok
1593265713652.png

Nó phát sinh 1 cái khó chịu là cái Form nó làm kẹt cứng lại ko thao tác gì được hết ... trừ khi tắt Form đi
 
Lần chỉnh sửa cuối:
Upvote 0
Em mới thử vậy thì gõ Ok đó Anh tuy nhiên lỗi hay phát sinh gì thêm thì em chưa lường hết hay biết trước
Em mới thử bấm Buuton trên Form get Range thấy Ok
Nó phát sinh 1 cái khó chịu là cái Form nó làm kẹt cứng lại ko thao tác gì được hết ... trừ khi tắt Form đi
Thì tôi đã nói rồi còn gì. Đang có ShowModal mà.

Mà nếu chưa có lỗi thì còn may đấy. Vì tôi đã chắc chắn 200% là sẽ có lỗi vi phạm truy cập - AV (access violation) cơ.

Tôi nói rồi: tôi đề nghị thử ShowModal chẳng qua chỉ để cho bạn mục sở thị, rằng có thể nhập vào Edit. Thế thôi.
 
Upvote 0
Thì tôi đã nói rồi còn gì. Đang có ShowModal mà.

Mà nếu chưa có lỗi thì còn may đấy. Vì tôi đã chắc chắn 200% là sẽ có lỗi vi phạm truy cập - AV (access violation) cơ.

Tôi nói rồi: tôi đề nghị thử ShowModal chẳng qua chỉ để cho bạn mục sở thị, rằng có thể nhập vào Edit. Thế thôi.
Em tìm kiếm Google mà cũng ko biết từ khóa tìm kiếm nó là gì và xử lý sao nữa .... khó quá chắc em tạm gác lại khi nào mò ra hay ai đó giúp cho lại lục lại tính Tiếp
Cảm ơn Anh
 
Upvote 0
Kiên trì mò thêm 1 ngày nữa mà ko ra và cũng ko biết bắt đầu từ đâu ... Bạn nào biết chỉ Mạnh xử lý dùm ... hay từ khóa tìm kiếm Google để Mạnh tìm ... Xin cảm ơn
 
Upvote 0
Tìm thêm 1 ngày nữa thấy tây nó cũng bị như vậy
Trình Delphi của Mạnh thuộc hạng ruồi thì tịt toàn tập ... may ra có ai giúp thì mới Ok
Bạn phải hỏi trực tiếp những người mà bạn chắc chắn là:
1. Có cài Delphi, và có ít nhất cơ bản về Delphi, và về lập trình.
2. Liên tục học hỏi hoặc làm việc hàng ngày với Delphi.
3. Đã có những code ít nhất là chạy được.

Tôi nghĩ có ít nhất là 2 người như thế: tác giả của chủ đề này, và bạn @thuyyeu99. Bạn @thuyyeu99 liên tục trao đổi với bạn, và nhiều lần "khoe" những gì bản thân đã làm được. Mà những cái đó lại trùng hợp với cái bạn định làm.
 
Upvote 0
Bạn phải hỏi trực tiếp những người mà bạn chắc chắn là:
1. Có cài Delphi, và có ít nhất cơ bản về Delphi, và về lập trình.
2. Liên tục học hỏi hoặc làm việc hàng ngày với Delphi.
3. Đã có những code ít nhất là chạy được.

Tôi nghĩ có ít nhất là 2 người như thế: tác giả của chủ đề này, và bạn @thuyyeu99. Bạn @thuyyeu99 liên tục trao đổi với bạn, và nhiều lần "khoe" những gì bản thân đã làm được. Mà những cái đó lại trùng hợp với cái bạn định làm.
Anh giúp Em xử vụ này đi ... Em thua toàn tập rồi đó :D
 
Upvote 0
Tìm cả tối qua vẫn tịt toàn tập , tuy nhiên có Web sau cũng mô tả tình trạng như vậy và cách xử lý mã C
Mã:
protected override void WndProc(ref Message m)
{
  const int WM_PARENTNOTIFY = 528;
  if(m.Msg == WM_PARENTNOTIFY && !this.Focused)
  {
    this.Focus();
  }
  base.WndProc(ref m);
}
Xem code đó càng mù tịt hơn -0-0-0-

Bạn @Nguyễn Duy Tuân Giúp Mạnh xử lý Nhập liệu trên Form của DLL Add-Ins Delphi như mô tả lỗi ở mấy bài trước được ko ???
Trên GPE này Nhờ tới Bạn là hy vọng cuối Cùng :D rất mong giúp Mạnh

Mạnh Cảm Ơn
 
Upvote 0
Web KT
Back
Top Bottom