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:
Upvote 0
Mạnh có bài gì hay up lên cho mọi người học hỏi với :D:D:D:D:D:D:D:D:D:D:D:D:D:D
 
Upvote 0
Mạnh có bài gì hay up lên cho mọi người học hỏi với :D:D:D:D:D:D:D:D:D:D:D:D:D:D
bạn chỉ cho Mình cách tạo 1 cái Form cho File DLL đi có nghĩa như sau:
1/ tao 1 Form ko phải là Form.exe đâu nha
2/ cách khai báo gọi form Show từ DLL
3/ cách sử dụng hàm trong DLL khai báo trên Form
4/ xong Mình làm thủ tục gọi Form từ Excel ... to DLL cái Form đó nó Show

Xong bài này vài ngày nữa ta chuyển qua ADO cho Access he ... Mạnh viết cho vài hàm Mẫu ... đơn giản thôi mà ... Mạnh nhìn code họ viết vọc một hồi là ok à

chịu khó giúp Mạnh bước qua cái ngưỡng khai báo và sử dụng thì coi như là ok ròi đó

Cảm ơn nhiều
 
Upvote 0
bạn chỉ cho Mình cách tạo 1 cái Form cho File DLL đi có nghĩa như sau:
1/ tao 1 Form ko phải là Form.exe đâu nha
2/ cách khai báo gọi form Show từ DLL
3/ cách sử dụng hàm trong DLL khai báo trên Form
4/ xong Mình làm thủ tục gọi Form từ Excel ... to DLL cái Form đó nó Show

Xong bài này vài ngày nữa ta chuyển qua ADO cho Access he ... Mạnh viết cho vài hàm Mẫu ... đơn giản thôi mà ... Mạnh nhìn code họ viết vọc một hồi là ok à

chịu khó giúp Mạnh bước qua cái ngưỡng khai báo và sử dụng thì coi như là ok ròi đó
Code Form
Cảm ơn nhiều
Tạo Form
Mã:
var
  Form1: TForm1;
  f: TForm1;
  implementation

{$R *.dfm}
procedure adxtShowPrintSheet;
begin
  f := TForm1.Create(nil);
  try
    f.Show; //.ShowModal;
  finally

  end;
end;
Code Dlll
Mã:
  Unit1 in 'Form\Unit1.pas' {Form1};

procedure goiform; stdcall;
begin
adxtShowPrintSheet;
end;

Excel
Mã:
Declare PtrSafe Sub goiform Lib "DllATuan.dll" ()
Private Sub Test4()
Call goiform
End Sub
 
Upvote 0
Tạo Form
Mã:
var
  Form1: TForm1;
  f: TForm1;
  implementation

{$R *.dfm}
procedure adxtShowPrintSheet;
begin
  f := TForm1.Create(nil);
  try
    f.Show; //.ShowModal;
  finally

  end;
end;
Code Dlll
Mã:
  Unit1 in 'Form\Unit1.pas' {Form1};

procedure goiform; stdcall;
begin
adxtShowPrintSheet;
end;

Excel
Mã:
Declare PtrSafe Sub goiform Lib "DllATuan.dll" ()
Private Sub Test4()
Call goiform
End Sub
Mới Thử nó báo đỏ dòng sau:
Mã:
adxtShowPrintSheet
trong Sub
Mã:
procedure goiform; stdcall;
  begin
    adxtShowPrintSheet;
  end;
bạn xem dùm mình khai báo gì nữa ko
 
Upvote 0
Mới Thử nó báo đỏ dòng sau:
Mã:
adxtShowPrintSheet
trong Sub
Mã:
procedure goiform; stdcall;
  begin
    adxtShowPrintSheet;
  end;
bạn xem dùm mình khai báo gì nữa ko
mạnh phại khai báo dong này
procedure adxtShowPrintSheet;
phía trên var nữa
Mã:
procedure adxtShowPrintSheet;
var
  Form1: TForm1;
  f: TForm1;
  implementation

{$R *.dfm}
procedure adxtShowPrintSheet;
begin
  f := TForm1.Create(nil);
  try
    f.Show; //.ShowModal;
  finally

  end;
end;
 
Upvote 0
mạnh phại khai báo dong này
procedure adxtShowPrintSheet;
phía trên var nữa
Mã:
procedure adxtShowPrintSheet;
var
  Form1: TForm1;
  f: TForm1;
  implementation

{$R *.dfm}
procedure adxtShowPrintSheet;
begin
  f := TForm1.Create(nil);
  try
    f.Show; //.ShowModal;
  finally

  end;
end;
OK đã làm xong ...hhhhhhhhhhhhh.PNG
Chỉ cho Mạnh cách khai báo sử dụng hàm trong DLL cho Form với
 
Upvote 0
OK đã làm xong ...View attachment 205351
Chỉ cho Mạnh cách khai báo sử dụng hàm trong DLL cho Form với
thì cái Unit của mạnh tên gì thì mạnh khai báo Uses "tên của Unit" trong form roi goi hàm
Ví dụ:
mạnh nhấp chuột phải vào CT tạo AddNew - Chọn Unit
Cái Unit của Mạnh tên là UDFExcel có hàm CheckTypeName

thì trong Form mạnh khai báo Uses giống như system.Varita mà mạnh gọi hàm ý
Uses UDFExcel;

rồi code Form chỉ việc đánh tên hàm
CheckTypeName;
unit.jpgUntitled2.jpg
 
Lần chỉnh sửa cuối:
Upvote 0
thì cái Unit của mạnh tên gì thì mạnh khai báo Uses "tên của Unit" trong form roi goi hàm
Ví dụ:
mạnh nhấp chuột phải vào CT tạo AddNew - Chọn Unit
Cái Unit của Mạnh tên là UDFExcel có hàm CheckTypeName

thì trong Form mạnh khai báo Uses giống như system.Varita mà mạnh gọi hàm ý
Uses UDFExcel;

rồi code Form chỉ việc đánh tên hàm
CheckTypeName;
View attachment 205357View attachment 205358
sao đến khúc này rối ko làm được mình chụp hình bạn chỉ dùm
thao tác Add new nó ra cái Unit mới ?!
Capture.PNG
 
Upvote 0
Làm dòng thứ 2 nó ko thấy cái Form nào cả
View attachment 205362
No dau phải là form, nó giống như Modul trong vba để mạnh viết code trong đó rồi muốn gọi ở đâu thì gọi.

Viết code trong đó rồi vào Form mà gọi code
1. mạnh viết cái hàm trong đó
2. vào Form gọi hàm trong đó bằng cách khai báo
Mã:
implementation
Uses UDFExcel;// day la ten của Unit2
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
WriteFormula // day là hàm trong Unit2
end;
 
Upvote 0
bạn úp cho Mình xin Toàn bộ VD với
Bài đã được tự động gộp:

No dau phải là form, nó giống như Modul trong vba để mạnh viết code trong đó rồi muốn gọi ở đâu thì gọi.

Viết code trong đó rồi vào Form mà gọi code
1. mạnh viết cái hàm trong đó
2. vào Form gọi hàm trong đó bằng cách khai báo
Mã:
implementation
Uses UDFExcel;// day la ten của Unit2
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
WriteFormula // day là hàm trong Unit2
end;
Vậy ko gọi hàm trong DLL được sao
 
Upvote 0
ý là viết code trên Form có xài lại các Hàm trong DLL ấy
Khai báo sử dụng lại ko phải mất công viết thêm nữa ... chỉ truyền tham số vào là chạy thôi
trời cái đó mình chưa thử nên cũng không biết (Thay vì bạn viết hàm dùng chung trong Dll sao không viết ra cái Unit), mình thường viết hàm dùng chung ra 1 Unit1, rồi từ Dll hay Form gọi hàm từ Unit
 
Upvote 0
trời cái đó mình chưa thử nên cũng không biết (Thay vì bạn viết hàm dùng chung trong Dll sao không viết ra cái Unit), mình thường viết hàm dùng chung ra 1 Unit1, rồi từ Dll hay Form gọi hàm từ Unit
ồ vậy sao ... ai biết ... bạn viết cho xin 1 code mẫu đi ... xong cho mình xin cái Source ây mình mở lên coi biết à
VD: hàm sau Viết trong Unit
Mã:
Function GetSum(a, b : Integer) : Integer;
begin
  Result := a + b;
end;
Xong làm thủ tục gọi hàm trên Form và DLL
 
Upvote 0
ồ vậy sao ... ai biết ... bạn viết cho xin 1 code mẫu đi ... xong cho mình xin cái Source ây mình mở lên coi biết à
VD: hàm sau Viết trong Unit
Mã:
Function GetSum(a, b : Integer) : Integer;
begin
  Result := a + b;
end;
Xong làm thủ tục gọi hàm trên Form và DLL
Code Unit
Mã:
unit UDFExcel;

interface



implementation
Uses ComObj, Classes, Variants;

Function GetSumUnit(a, b : Integer) : Integer;
begin
  Result := a + b;
end;

end.

Code Dll
Mã:
library DllATuan;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

//uses
//  System.SysUtils,
//  System.Classes;
uses
  Winapi.Windows,
  Winapi.Messages,
  System.SysUtils,
  System.Variants,
  System.Classes,
  Vcl.Graphics,
  Vcl.Controls,
  Vcl.Forms,
  Vcl.Dialogs,
  ComObj,
  Excel2000,
  Vcl.StdCtrls,
  Math,
  Vcl.ComCtrls,
  DateUtils,
  System.StrUtils,
  ActiveX,
  Data.DB,
  Data.Win.ADODB,
  System.Generics.Collections,
  UDFExcel in 'UDFExcel.pas',
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}



Function GetSumDLL(a, b : Integer) : Integer;
begin
  Result := GetSumUnit(a,b);
end;


exports
 GetSumDLL;

begin

end.

Code trong Form

Mã:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
Uses UDFExcel; //ten cua Unit
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
ketqua,a,b:integer;
begin
a:=10;
b:=5;
ketqua:=GetSumUnit(a,b);
end;


end.
 
Upvote 0
Web KT
Back
Top Bottom