• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

CommonDialog.Show Open Chọn nhiều File

Các thủ thuật liên quan đến việc xử lý ứng dụng, biểu mẫu và control
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4761
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

CommonDialog.Show Open Chọn nhiều File

Gửi bàigửi bởi truongphu » CN 08/03/2009 4:01 pm

Thủ thuật: CommonDialog.Show Open Chọn nhiều File
Tác giả: truongphu
Mô tả: CommonDialog.Show Open Chọn nhiều File
Unicode Full Controls ™ Version 1.7.3 [21/11/2008] của bạn DQHung có nói đến nhưng lỗi
Tôi viết lại để hoạt động êm hơn


Mã: Chọn hết

  1. Private Const CD_FLAGS = cdlOFNAllowMultiselect + cdlOFNExplorer + cdlOFNLongNames
  2.  
  3. Private Sub Command1_Click()
  4.     Dim i%, Path$, Files() As String
  5.    
  6.     With CommonDialog1
  7.         .MaxFileSize = 32000 'max buffer
  8.         .Flags = CD_FLAGS
  9.         .ShowOpen
  10.         Files = Split(.FileName, vbNullChar)
  11.         Select Case UBound(Files)
  12.             Case 0 ' 1 file
  13.                 List1.AddItem Files(0)
  14.             Case Is > 0
  15.                 For i = 1 To UBound(Files)
  16.                     Path = Files(0) & IIf(Right(Files(0), 1) <> "\", "\", "") & Files(i)
  17.                     List1.AddItem Path
  18.                 Next i
  19.         End Select
  20.     End With
  21. End Sub


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4761
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: CommonDialog.Show Open Chọn nhiều File

Gửi bàigửi bởi truongphu » T.Năm 24/09/2009 9:30 am

Thêm một cách nữa: gọi showopen của MSword

Mã: Chọn hết

  1. Sub  Dialog
  2. Const msoFileDialogOpen = 1
  3. Set objWord = CreateObject("Word.Application")
  4. objWord.ChangeFileOpenDirectory ("D:\My Documents\")
  5.  
  6. objWord.FileDialog(msoFileDialogOpen).Title = "Select the files"
  7. objWord.FileDialog(msoFileDialogOpen).AllowMultiSelect = True
  8.  
  9. If objWord.FileDialog(msoFileDialogOpen).Show = -1 Then
  10.     objWord.WindowState = 2
  11.     For Each objFile In objWord.FileDialog(msoFileDialogOpen).SelectedItems
  12.         aaa =  aaa & objFile & VBCrLf
  13.     Next
  14. End If
  15. objWord.Quit
  16. msgbox aaa
  17. End sub

Dialog Word.rar
(662 Byte) Đã tải 509 lần


Cách Script nhiều file

Mã: Chọn hết

  1. Set objDialog = CreateObject("UserAccounts.CommonDialog")
  2. objDialog.Filter = "VBScript Scripts|*.vbs|All Files|*.*"
  3. objDialog.Flags = &H0200
  4. objDialog.FilterIndex = 1
  5. objDialog.InitialDir = "C:\"
  6. intResult = objDialog.ShowOpen
  7.  
  8. If intResult = 0 Then
  9.     Exit Sub
  10. Else
  11.     msgbox objDialog.FileName
  12. End If



--------------------
* DialogSave:
Mở Hộp thoại Save bằng code Script
viewtopic.php?f=29&t=900&start=0

* DialogOpen 1 file

Mã: Chọn hết

  1. Set objDialog = CreateObject("UserAccounts.CommonDialog")
  2.  
  3. objDialog.Filter = "All Files|*.*"
  4. objDialog.InitialDir = "C:\"
  5. intResult = objDialog.ShowOpen
  6.  
  7. If intResult = 0 Then
  8.     exit sub
  9. Else
  10.     Msgbox objDialog.FileName
  11. End If


* OpenFolder

Mã: Chọn hết

  1. Const WINDOW_HANDLE = 0
  2. Const OPTIONS = 0
  3.  
  4. Set objShell = CreateObject("Shell.Application")
  5. Set objFolder = objShell.BrowseForFolder _
  6.     (WINDOW_HANDLE, "Select a folder:", OPTIONS, "C:\")
  7.  
  8. If objFolder Is Nothing Then
  9.     Exit Sub
  10. End If
  11.  
  12. Set objFolderItem = objFolder.Self
  13. objPath = objFolderItem.Path
  14.  
  15. MsgBox objPath
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

thinh18tt
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 167
Ngày tham gia: T.Ba 18/05/2010 11:49 pm
Has thanked: 7 time

Re: CommonDialog.Show Open Chọn nhiều File

Gửi bàigửi bởi thinh18tt » CN 07/11/2010 11:11 pm

Bác ơi, objDialog = CreateObject("UserAccounts.CommonDialog") này có bao nhiêu properties? Em cần cái .Title mà không có.

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4761
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: CommonDialog.Show Open Chọn nhiều File

Gửi bàigửi bởi truongphu » T.Hai 08/11/2010 8:15 am

thinh18tt đã viết:objDialog = CreateObject("UserAccounts.CommonDialog") này có bao nhiêu properties? Em cần cái .Title mà không có.


Thư viện và class UserAccounts.CommonDialog (thuộc NUSRMGR.CPL) là thư viện và class đơn giản, chỉ có bấy nhiêu properties. Chúng được MS tạo ra để mọi người sử dụng và không bản quyền (mà mọi máy Windows đều hổ trợ).

Nếu bạn muốn properties đầy đủ, buộc lòng phải sử dụng thư viện CommonDialog chính thức, đấy là Control CommonDialog1 mà bạn chèn vào Project. (Lưu ý có thể có máy Windows không có).

Và nếu bạn thích dùng hàm CreateObject thay vì chèn thư viện Project\Component\..
thì bạn có thể thay thư viện UserAccounts bằng thư viện MSComDlg, bạn viết như sau:

Mã: Chọn hết

Set objDialog = CreateObject("MSComDlg.CommonDialog")

Lúc nầy thì bạn đã có properties đầy đủ để viết Title của CommonDialog:

Mã: Chọn hết

objDialog.DialogTitle = "Chon nhiêu File..."

-----------
*** Các Properties của thư viện MSComDlg.CommonDialog thì bạn tự tìm: cứ chèn một control CommonDialog1 như bình thường, viết CommonDialog1 rồi gõ dấu . sẽ hiện ra nhiều prop
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

thinh18tt
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 167
Ngày tham gia: T.Ba 18/05/2010 11:49 pm
Has thanked: 7 time

Re: CommonDialog.Show Open Chọn nhiều File

Gửi bàigửi bởi thinh18tt » T.Hai 08/11/2010 8:45 am

Nhưng em dùng control này thì chương trình không đọc được tên file Unicode. Bác có cách nào khác không? Còn nữa, trong win 7 em không dùng được cái dialog UserAccounts.CommonDialog

thinh18tt
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 167
Ngày tham gia: T.Ba 18/05/2010 11:49 pm
Has thanked: 7 time

Re: CommonDialog.Show Open Chọn nhiều File

Gửi bàigửi bởi thinh18tt » T.Tư 10/11/2010 8:00 am

truongphu đã viết:
thinh18tt đã viết:objDialog = CreateObject("UserAccounts.CommonDialog") này có bao nhiêu properties? Em cần cái .Title mà không có.


Thư viện và class UserAccounts.CommonDialog (thuộc NUSRMGR.CPL) là thư viện và class đơn giản, chỉ có bấy nhiêu properties. Chúng được MS tạo ra để mọi người sử dụng và không bản quyền (mà mọi máy Windows đều hổ trợ).

Nếu bạn muốn properties đầy đủ, buộc lòng phải sử dụng thư viện CommonDialog chính thức, đấy là Control CommonDialog1 mà bạn chèn vào Project. (Lưu ý có thể có máy Windows không có).

Và nếu bạn thích dùng hàm CreateObject thay vì chèn thư viện Project\Component\..
thì bạn có thể thay thư viện UserAccounts bằng thư viện MSComDlg, bạn viết như sau:

Mã: Chọn hết

Set objDialog = CreateObject("MSComDlg.CommonDialog")

Lúc nầy thì bạn đã có properties đầy đủ để viết Title của CommonDialog:

Mã: Chọn hết

objDialog.DialogTitle = "Chon nhiêu File..."

-----------
*** Các Properties của thư viện MSComDlg.CommonDialog thì bạn tự tìm: cứ chèn một control CommonDialog1 như bình thường, viết CommonDialog1 rồi gõ dấu . sẽ hiện ra nhiều prop


Bác Phú ơi!

Em đang cần 1 cái commondialog hỗ trợ unicode với các properties sau:
.flags
.maxfilesize
.multiselection
.title
Cái SP6 của Microsoft không hỗ trợ Unicode.

Mong nhận được hồi âm của bác sơm!

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4761
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: CommonDialog.Show Open Chọn nhiều File

Gửi bàigửi bởi truongphu » T.Tư 10/11/2010 9:38 am

thinh18tt đã viết:Bác Phú ơi!
Em đang cần 1 cái commondialog hỗ trợ unicode với các properties sau:
.flags
.maxfilesize
.multiselection
.title
Cái SP6 của Microsoft không hỗ trợ Unicode.
Mong nhận được hồi âm của bác sơm!


Chú em nầy đại lộn xộn!

1- các control chúng ta hay dùng gần như đều có bản quyền, (nghĩa là phải mua), không phải muốn gì được nấy.
* UserAccounts.CommonDialog tích hợp trong Windows, nên ai dùng Windows (bản quyền) đều có thể sử dụng vô tư. (hổ trợ uni)
* MSComDlg.CommonDialog (SP6) lại là control bản quyền (không uni) và có nhiều properties hổ trợ

Vậy thì: tùy nhu cầu của mình mà cân nhắc dùng cái nào thích hợp.

2- hãy xem lại từ đầu trang: tôi viết nhiều code về commondialog, chú em phải lựa chọn và ứng dụng chứ. Tìm và vận dụng sẽ có điều phù hợp cho mình. Hay hỏi (những điều quá dễ) sẽ không tiến xa!

Hãy xem lại bài 2 ở trên:
Thêm một cách nữa: gọi showopen của MSword


lần cuối nha:
  1. Sub Dialog()
  2. With CreateObject("Word.Application")
  3.     .ChangeFileOpenDirectory ("D:\My Documents\")
  4.     .FileDialog(1).Title = "Ch" & ChrW(7885) & "n Nhi" & ChrW(7873) & "u Unicode File"
  5.     .FileDialog(1).AllowMultiSelect = True
  6.     If .FileDialog(1).Show = -1 Then
  7.         .WindowState = 2
  8.         For Each objFile In .FileDialog(1).SelectedItems
  9.             ListBox1.AddItem objFile
  10.         Next
  11.     End If
  12. End With
  13. End Sub
Tập tin đính kèm
Dialog Word MultiSelect Unicode.rar
(1.67 KiB) Đã tải 398 lần
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

thinh18tt
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 167
Ngày tham gia: T.Ba 18/05/2010 11:49 pm
Has thanked: 7 time

Re: CommonDialog.Show Open Chọn nhiều File

Gửi bàigửi bởi thinh18tt » T.Tư 10/11/2010 2:41 pm

Cảm ơn bác nhiều, bác mắng hay lắm, em sẽ rút kinh nghiệm.


Quay về “[VB] Ứng dụng - Form và Control”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.2 khách