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,652
Được thích
10,140
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Lần chỉnh sửa cuối:
Tôi không dùng các phiên bản mới nên không biết.

Còn khi tôi cài Delphi 5 thì có 2 thư viện sách đồ sộ: Delphi và Windows API. Ngoài ra khi mở Delphi thì icon và menu Help cũng có ngay.

Thôi thì biết tên các hàm rồi thì gõ của bác google thôi.

Thử xem nhé

http://www.mediafire.com/file/9awswaw3zcwhx4u/Help.rar/file

View attachment 205126
View attachment 205127
View attachment 205128
Ủa cái Win của anh ngồ ngộ Win tiếng gì vậy anh
 
Upvote 0
phải nói thật là em cũng chưa biết xài help trong Delphi sao nữa ... bấm cái gì nó ra help ... Em xài bản XE6
tiện đây Anh chỉ Em luôn với
Cảm ơn Anh
View attachment 205123
Em mới thử F1 nó báo lỗi
View attachment 205125
Anh úp cho Em xin cái File help trên máy Anh với

Mình có tìm được 1 file tài liệu về Delphi https://drive.google.com/file/d/15_kuVNP3wnj3SYcyJN7ReGPwXsHGhb9L/view?usp=sharing
 
Upvote 0
Cái File help Anh @batman1 cho trong đó coi nhiều cái cơ bản rất hay
từ nay khi nào rảnh lại mở help ra coi code cơ bản 1 thời gian dài là tạm ok
Help.PNG
Bài đã được tự động gộp:

hay đó là sách của trang sau
http://www.delphibasics.co.uk/index.html
trong đó rất cơ bản có hết và list Function .... mình coi trang đó thấy bài nào hay toàn lưu lại nay có hết trong 1 Ebook rồi cảm ơn bạn
 
Lần chỉnh sửa cuối:
Upvote 0
Chuột phải chọn save as ....eeeeeeeeee.PNG
 
Upvote 0
Ban kiểm tra Type của OleVariant được mà
if String then....
if Date then ....
if number then....
Cho mình hỏi chút trên VBA mình có thể kiểm tra Type của 1 biến bằng cách sau ...

Còn trong Delphi mình kiểm tra sao Bạn nhỉ ...?!
Tại vì biết 1 chút code két nên khai báo chứ trong Delphi ko biết chi luôn
Mã:
Sub CheckTypeName()
    Dim i&, str$, j#, k!, n@, b%
    MsgBox TypeName(i): Rem Dim i&        <===>    Dim i As long
    MsgBox TypeName(str): Rem Dim str$    <===>    Dim str As String
    MsgBox TypeName(j): Rem Dim j#        <===>    Dim j As Double_'La mot kieu bien la so(co nhieu kieu bien so)
    MsgBox TypeName(k): Rem Dim k!        <===>    Dim k As Single
    MsgBox TypeName(n): Rem Dim n@        <===>    Dim n As Currency
    MsgBox TypeName(b): Rem Dim b%        <===>    Dim b As Integer
End Sub
 
Upvote 0
Cho mình hỏi chút trên VBA mình có thể kiểm tra Type của 1 biến bằng cách sau ...

Còn trong Delphi mình kiểm tra sao Bạn nhỉ ...?!
Tại vì biết 1 chút code két nên khai báo chứ trong Delphi ko biết chi luôn
Mã:
Sub CheckTypeName()
    Dim i&, str$, j#, k!, n@, b%
    MsgBox TypeName(i): Rem Dim i&        <===>    Dim i As long
    MsgBox TypeName(str): Rem Dim str$    <===>    Dim str As String
    MsgBox TypeName(j): Rem Dim j#        <===>    Dim j As Double_'La mot kieu bien la so(co nhieu kieu bien so)
    MsgBox TypeName(k): Rem Dim k!        <===>    Dim k As Single
    MsgBox TypeName(n): Rem Dim n@        <===>    Dim n As Currency
    MsgBox TypeName(b): Rem Dim b%        <===>    Dim b As Integer
End Sub
mình cũng đang đau đầu vì nó đây
var
TypeName : string;
CheckType : Integer;

CheckType := VarType(varVar) and VarTypeMask;
case CheckType of
varEmpty : TypeName:= 'varEmpty';
varNull : TypeName := 'varNull';
End;
Bài đã được tự động gộp:

mình cũng đang đau đầu vì nó đây
var
TypeName : string;
CheckType : Integer;

CheckType := VarType(varVar) and VarTypeMask;
case CheckType of
varEmpty : TypeName:= 'varEmpty';
varNull : TypeName := 'varNull';
End;
Gán từng dòng vào Cell thì ok, mà gán nguyên Arr vào Rang đang bí, tự nó nhiều định dạng quá
 
Upvote 0
mình cũng đang đau đầu vì nó đây
var
TypeName : string;
CheckType : Integer;

CheckType := VarType(varVar) and VarTypeMask;
case CheckType of
varEmpty : TypeName:= 'varEmpty';
varNull : TypeName := 'varNull';
End;
Bài đã được tự động gộp:


Gán từng dòng vào Cell thì ok, mà gán nguyên Arr vào Rang đang bí, tự nó nhiều định dạng quá
khó là ta không khai báo type là nó báo lỗi làm sao mà viết code checkType được đây
 
Upvote 0
khó là ta không khai báo type là nó báo lỗi làm sao mà viết code checkType được đây
ua minh goi roi mà

Mã:
function IscheckType(varVar: Variant):String;
var
TypeName : string;
CheckType : Integer;
Begin
CheckType := VarType(varVar) and VarTypeMask;
case CheckType of
    varEmpty : TypeName:= 'varEmpty';
    varNull : TypeName := 'varNull';
    varSmallInt  : TypeName := 'varSmallInt';
    varInteger   : TypeName := 'varInteger';
    varSingle    : TypeName := 'varSingle';
    varDouble    : TypeName := 'varDouble';
    varCurrency  : TypeName := 'varCurrency';
    varDate      : TypeName := 'varDate';
    varOleStr    : TypeName := 'varOleStr';
    varDispatch  : TypeName := 'varDispatch';
    varError     : TypeName := 'varError';
    varByte      : TypeName := 'varByte';
    varWord      : TypeName := 'varWord';
    varLongWord  : TypeName := 'varLongWord';
    varInt64     : TypeName := 'varInt64';
    varStrArg    : TypeName := 'varStrArg';
    varString    : TypeName := 'varString';
    varAny       : TypeName := 'varAny';
    varBoolean   : TypeName := 'varBoolean';
    varVariant   : TypeName := 'varVariant';
    varUnknown   : TypeName := 'varUnknown';
    varTypeMask  : TypeName := 'varTypeMask';
End;
  Result:=TypeName;
end;

//Code Run
ShowMessage(checkType(Src[i, n]));
 
Upvote 0
To @thuyyeu99
Bạn có thể khai báo như sau là có thể xài Dic như @Nguyễn Duy Tuân chỉ dẫn ok rồi đó
Ta làm đơn giản đi một chút ??!!
Mã:
Var
dict: TDictionary<string, Integer>;
begin
dict := TDictionary<string, Integer>.create;
try
..... code
finally
dict.free;
end;
Cách khởi tạo này @Nguyễn Duy Tuân chỉ hay đó hãy thử 1 triệu dòng xem ha
tham khảo thêm về Dic cho Delphi
https://spring4d.4delphi.com/docs/m...ring.Collections.IDictionary(TKey,TValue).htm
 
Lần chỉnh sửa cuối:
Upvote 0
To @thuyyeu99
Bạn có thể khai báo như sau là có thể xài Dic như @Nguyễn Duy Tuân chỉ dẫn ok rồi đó
Ta làm đơn giản đi một chút ??!!
Mã:
Var
dict: TDictionary<string, Integer>;
begin
try
dict := TDictionary<string, Integer>.create;
..... code
finally
dict.free;
end;
Cách khởi tạo này @Nguyễn Duy Tuân chỉ hay đó hãy thử 1 triệu dòng xem ha
tham khảo thêm về Dic cho Delphi
https://spring4d.4delphi.com/docs/m...ring.Collections.IDictionary(TKey,TValue).htm
Niếu cột mình chưa biết trước và định dạng chưa biết trước thì có dùng được không, nếu được bạn cho mình 1 cái ví dụ với.
Ví dụ Range chạy lần đầu minh có 3 cột
Cột 1 integer
cột 2 String
Cột 3 Date

Range chạy lần thứ minh có 8 cột
Cột 1 String
cột 2 Date
Cột 3 String
Cột 4 integer
Cột 5 String
Cột 6 integer
Cột 7 integer
Cột 8 Double

thì có làm được không ?
 
Upvote 0
1048576 dòng
loc.jpg

Lọc trên List
loc list.jpg
 
Lần chỉnh sửa cuối:
Upvote 0
Úp cho Mình cái File dữ liệu đủ thứ đó mình thử xem cái đã (ít dữ liệu thôi )
tại mới biết cách viết ngày hôm qua lang thang kiến tài liệu tìm cái này nó lại ra cái khác ... tiện thấy thử luôn nó chạy ... mừng thấy bà hihihihi
Code tây nó viết như sau Bạn có thể tham khảo thêm ... sau khi có file bạn úp mình test xong úp code luôn cho ... nó đơn giản thay mấy từ à
Mã:
var
  Dic : TDictionary<Integer,TPerson>;
  p : TPerson;
  i : integer;
begin
  //Create dictionary
  Dic := TDictionary<Integer,TPerson>.Create;
  Dic.Add(1, TPerson.Create('Delphi', 'Mr'));
  Dic.Add(2, TPerson.Create('Generic', 'Bill'));
  Dic.Add(3, TPerson.Create('nonymous', 'An'));
  try

  //Travel the strings
  for p in Dic.Values  do begin
    ShowMessage(p.FullName);
  end;

  //Travel the keys
  for i in Dic.Keys do begin
    ShowMessage(IntToStr(i) + ': ' +
                             Dic.Items[i].FullName);
  end;

  //Find some key
  if Dic.TryGetValue(3, p) then begin
    ShowMessage('Found it!: ' + p.FullName);
  end;

  finally
    for p in Dic.Values do
      p.Free;

    //Also free Values and KeyCollection
    //other wise you have a memoryleak
    //Is this a bug?
    Dic.Values.Free;
    Dic.Keys.Free;

    //Free the dictionary
    Dic.Free;
  end;
Bạn tham khảo code trên cách duyệt dic của nó trước nha
 
Lần chỉnh sửa cuối:
Upvote 0
Úp cho Mình cái File dữ liệu đủ thứ đó mình thử xem cái đã (ít dữ liệu thôi )
tại mới biết cách viết ngày hôm qua lang thang kiến tài liệu tìm cái này nó lại ra cái khác ... tiện thấy thử luôn nó chạy ... mừng thấy bà hihihihi
Code tây nó viết như sau Bạn có thể tham khảo thêm ... sau khi có file bạn úp mình test xong úp code luôn cho ... nó đơn giản thay mấy từ à
Mã:
var
  Dic : TDictionary<Integer,TPerson>;
  p : TPerson;
  i : integer;
begin
  //Create dictionary
  Dic := TDictionary<Integer,TPerson>.Create;
  Dic.Add(1, TPerson.Create('Delphi', 'Mr'));
  Dic.Add(2, TPerson.Create('Generic', 'Bill'));
  Dic.Add(3, TPerson.Create('nonymous', 'An'));
  try

  //Travel the strings
  for p in Dic.Values  do begin
    ShowMessage(p.FullName);
  end;

  //Travel the keys
  for i in Dic.Keys do begin
    ShowMessage(IntToStr(i) + ': ' +
                             Dic.Items[i].FullName);
  end;

  //Find some key
  if Dic.TryGetValue(3, p) then begin
    ShowMessage('Found it!: ' + p.FullName);
  end;

  finally
    for p in Dic.Values do
      p.Free;

    //Also free Values and KeyCollection
    //other wise you have a memoryleak
    //Is this a bug?
    Dic.Values.Free;
    Dic.Keys.Free;

    //Free the dictionary
    Dic.Free;
  end;
Bạn tham khảo code trên cách duyệt dic của nó trước nha
Mình đang bí cái chỗ này chưa nghĩ ra cách làm bằng dictionary :oops:
Theo mình nghĩ cái dictionary ban khai báo cái
TPerson
trong đó
Delphi: String;
Generic: String;
nonymous: String;

Tự vì Code này dùng cho nhiều trường hợp. ví dụ mình chạy Code với trường hợp có 5 cột có cách nào không viết lại code mà vẫn dùng Code đó để chạy rồi Add vào Range
TPerson
trong đó
Day: Tdate;
SL: Doubler;
Dongia: Integer;
ThanhTien: Doubler;
Note: String;

Được Mạnh hướng dẫn giúp nhé. Thank You
 

File đính kèm

  • Loc duy nhat nhieu truong hop.xlsx
    20.6 KB · Đọc: 10
Lần chỉnh sửa cuối:
Upvote 0
Mình đang bí cái chỗ này chưa nghĩ ra cách làm bằng dictionary :oops:
Theo mình nghĩ cái dictionary ban khai báo cái
TPerson
trong đó
Delphi: String;
Generic: String;
nonymous: String;

Tự vì Code này dùng cho nhiều trường hợp. ví dụ mình chạy Code với trường hợp có 5 cột có cách nào không viết lại code mà vẫn dùng Code đó để chạy rồi Add vào Range
TPerson
trong đó
Day: Tdate;
SL: Doubler;
Dongia: Integer;
ThanhTien: Doubler;
Note: String;

Được Mạnh hướng dẫn giúp nhé. Cảm ơn
Bạn thử code dùm Mình

1/ Tại [B1] bạn gõ 1 xong chạy code ... 2,3,4,+n xong chạy code
2/ có 1 sai sót là khi Cols loc duy nhất có 1 dòng mà nó cứ lấy thêm 1 dòng là 2 .... chưa xủ lý được
Bạn gõ 9 = cột Ghi Chú là thấy
3/ xong bài này ta làm 1 cái Dic thật phúc tạp hơn nữa xem sao ha
Mã:
function GetDictionaryKeys(sArr: OleVariant; const ColDic : longint):OleVariant; stdcall;
var
   Tmp,Arr    : OleVariant;
   i, j,k    : Longint;
   lcols,lRows    : Longint;
   dic: TDictionary<string, Integer>;
begin
   dic := TDictionary<string, Integer>.create;
   try
     k := 0;
     lRows := VarArrayHighBound(sArr, 1);
     lCols := VarArrayHighBound(sArr, 2);
     Arr := VarArrayCreate([1, lRows , 1, lcols],varVariant);
     if ColDic <= lCols then  begin
         for i := 1 to lRows do begin
           Tmp := trim(sArr[i, ColDic]);
          if not dic.ContainsKey(Tmp) then begin
              k := k + 1;
              Dic.Add(Tmp, k);
              For j := 1 To lcols do begin
                Arr[k, j] := sArr[i, j];
              End;
          end;
         end;
         Result := Arr;
     end;
   finally
     dic.free;
   end;
end;
Sử dụng code
Mã:
Sub Test_GetDictionaryKeys()
    On Error Resume Next ''xu ly loi khi gan ket qua Mang Arr = Empty
    Dim Arr As Variant
    Arr = Sheet4.Range("A2:I1000").Value
    Range("G4:P1000").ClearContents
    Rem Range("B1") la Tham so cot can loc duy nhat(Go 1,2,3,...Run Code)
    Arr = GetDictionaryKeys(Arr, Range("B1"))
    Range("G4").Resize(UBound(Arr), UBound(Arr, 2)) = Arr
End Sub
Bạn xem cần chỉnh sửa gì bổ sung gì thêm xong chỉ dùm mình nhé ... Học tập tương tác qua lại mà he
 
Upvote 0
Thấy trang Dic cho Delphi nó nói vầy
Loại tham số

1/ TKey
Loại khóa trong từ điển.

2/ TValue
Loại giá trị trong từ điển.

3/ Loại IDictionary <TKey, TValue> hiển thị các thành viên sau.
 
Upvote 0
To @thuyyeu99 test code sao rồi mà thấy im re vậy ... hay ko chạy được
 
Upvote 0
Web KT
Back
Top Bottom