Page 1 of 1

CommonDialog.Show Open Chọn nhiều File

Posted: Sun 08/03/2009 4:01 pm
by truongphu
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

Code: Select all

Private Const CD_FLAGS = cdlOFNAllowMultiselect + cdlOFNExplorer + cdlOFNLongNames Private Sub Command1_Click()    Dim i%, Path$, Files() As String       With CommonDialog1        .MaxFileSize = 32000 'max buffer        .Flags = CD_FLAGS        .ShowOpen        Files = Split(.FileName, vbNullChar)        Select Case UBound(Files)            Case 0 ' 1 file                List1.AddItem Files(0)            Case Is > 0                For i = 1 To UBound(Files)                    Path = Files(0) & IIf(Right(Files(0), 1) <> "\", "\", "") & Files(i)                    List1.AddItem Path                Next i        End Select    End WithEnd Sub

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

Posted: Thu 24/09/2009 9:30 am
by truongphu
Thêm một cách nữa: gọi showopen của MSword

Code: Select all

Sub  DialogConst msoFileDialogOpen = 1Set objWord = CreateObject("Word.Application")objWord.ChangeFileOpenDirectory ("D:\My Documents\") objWord.FileDialog(msoFileDialogOpen).Title = "Select the files"objWord.FileDialog(msoFileDialogOpen).AllowMultiSelect = True If objWord.FileDialog(msoFileDialogOpen).Show = -1 Then    objWord.WindowState = 2    For Each objFile In objWord.FileDialog(msoFileDialogOpen).SelectedItems        aaa =  aaa & objFile & VBCrLf    NextEnd IfobjWord.Quitmsgbox aaaEnd sub
Dialog Word.rar
(662 Bytes) Downloaded 570 times
Cách Script nhiều file

Code: Select all

Set objDialog = CreateObject("UserAccounts.CommonDialog")objDialog.Filter = "VBScript Scripts|*.vbs|All Files|*.*"objDialog.Flags = &H0200objDialog.FilterIndex = 1objDialog.InitialDir = "C:\"intResult = objDialog.ShowOpen If intResult = 0 Then    Exit SubElse    msgbox objDialog.FileNameEnd If

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

* DialogOpen 1 file

Code: Select all

Set objDialog = CreateObject("UserAccounts.CommonDialog") objDialog.Filter = "All Files|*.*"objDialog.InitialDir = "C:\"intResult = objDialog.ShowOpen If intResult = 0 Then    exit subElse    Msgbox objDialog.FileNameEnd If
* OpenFolder

Code: Select all

Const WINDOW_HANDLE = 0Const OPTIONS = 0 Set objShell = CreateObject("Shell.Application")Set objFolder = objShell.BrowseForFolder _    (WINDOW_HANDLE, "Select a folder:", OPTIONS, "C:\")  If objFolder Is Nothing Then    Exit SubEnd If Set objFolderItem = objFolder.SelfobjPath = objFolderItem.Path MsgBox objPath

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

Posted: Sun 07/11/2010 11:11 pm
by thinh18tt
Bác ơi, objDialog = CreateObject("UserAccounts.CommonDialog") này có bao nhiêu properties? Em cần cái .Title mà không có.

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

Posted: Mon 08/11/2010 8:15 am
by truongphu
thinh18tt wrote: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:

Code: Select all

Set objDialog = CreateObject("MSComDlg.CommonDialog")
Lúc nầy thì bạn đã có properties đầy đủ để viết Title của CommonDialog:

Code: Select all

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

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

Posted: Mon 08/11/2010 8:45 am
by thinh18tt
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

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

Posted: Wed 10/11/2010 8:00 am
by thinh18tt
truongphu wrote:
thinh18tt wrote: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:

Code: Select all

Set objDialog = CreateObject("MSComDlg.CommonDialog")
Lúc nầy thì bạn đã có properties đầy đủ để viết Title của CommonDialog:

Code: Select all

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!

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

Posted: Wed 10/11/2010 9:38 am
by truongphu
thinh18tt wrote: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

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

Posted: Wed 10/11/2010 2:41 pm
by thinh18tt
Cảm ơn bác nhiều, bác mắng hay lắm, em sẽ rút kinh nghiệm.