Avatar billede computopic Nybegynder
28. juni 2004 - 15:37 Der er 9 kommentarer og
1 løsning

valg af fil sti, i min form.

Det skal være muligt at vælge en fil via min form. Altså en filebrowser. Hvordan indsætter jeg sådan en i min form? eller finder sådan en?
Den skal entligt bare levere stien til den fil brugeren angiver..
Avatar billede vbcoder Nybegynder
28. juni 2004 - 17:11 #1
Prøv dette - i første omgang skal du ikke tænke over koden.
Der findes også andre måder men denne er en af de bedste ;o)

Tilføj et nyt modul i dit projekt

åbn modulet og indsæt nedenstående kode i dit modul

'indsættes start
' Browse For Folder API's
Option Explicit
Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long

'BROWSEINFO.ulFlags values:
Public Const BIF_RETURNONLYFSDIRS = &H1      'Only file system directories
Public Const BIF_DONTGOBELOWDOMAIN = &H2    'No network folders below domain level
Public Const BIF_STATUSTEXT = &H4            'Includes status area in the dialog (for callback)
Public Const BIF_RETURNFSANCESTORS = &H8    'Only returns file system ancestors
Public Const BIF_EDITBOX = &H10              'Allows user to rename selection
Public Const BIF_VALIDATE = &H20            'Insist on valid edit box result (or CANCEL)
Public Const BIF_USENEWUI = &H40            'Version 5.0. Use the new user-interface.
                                            'Setting this flag provides the user with
                                            'a larger dialog box that can be resized.
                                            'It has several new capabilities including:
                                            'dialog box, reordering, context menus, new
                                            'folders, drag and drop capability within
                                            'the delete, and other context menu commands.
                                            'To use you must call OleInitialize or
                                            'CoInitialize before calling SHBrowseForFolder.
Public Const BIF_BROWSEFORCOMPUTER = &H1000  'Only returns computers.
Public Const BIF_BROWSEFORPRINTER = &H2000  'Only returns printers.
Public Const BIF_BROWSEINCLUDEFILES = &H4000 'Browse for everything
Public Const MAX_PATH = 260

Private Type BROWSEINFO
  hOwner As Long
  pidlRoot As Long
  pszDisplayName  As String
  lpszTitle As String
  ulFlags As Long
  lpfn As Long
  lParam As Long
  iImage As Long
End Type
   
Private Type SHITEMID
  cb As Long
  abID As Byte
End Type

Private Type ITEMIDLIST
  mkid As SHITEMID
End Type

' Open File Dialog API
Private Const OFN_ALLOWMULTISELECT  As Long = &H200
Private Const OFN_CREATEPROMPT  As Long = &H2000
Private Const OFN_ENABLEHOOK  As Long = &H20
Private Const OFN_ENABLETEMPLATE  As Long = &H40
Private Const OFN_ENABLETEMPLATEHANDLE As Long = &H80
Private Const OFN_EXPLORER  As Long = &H80000
Private Const OFN_EXTENSIONDIFFERENT  As Long = &H400
Private Const OFN_FILEMUSTEXIST  As Long = &H1000
Private Const OFN_HIDEREADONLY  As Long = &H4
Private Const OFN_LONGNAMES As Long = &H200000
Private Const OFN_NOCHANGEDIR  As Long = &H8
Private Const OFN_NODEREFERENCELINKS  As Long = &H100000
Private Const OFN_NOLONGNAMES  As Long = &H40000
Private Const OFN_NONETWORKBUTTON  As Long = &H20000
Private Const OFN_NOREADONLYRETURN  As Long = &H8000
Private Const OFN_NOTESTFILECREATE  As Long = &H10000
Private Const OFN_NOVALIDATE  As Long = &H100
Private Const OFN_OVERWRITEPROMPT  As Long = &H2
Private Const OFN_PATHMUSTEXIST  As Long = &H800
Private Const OFN_READONLY  As Long = &H1
Private Const OFN_SHAREAWARE  As Long = &H4000
Private Const OFN_SHAREFALLTHROUGH  As Long = 2
Private Const OFN_SHAREWARN  As Long = 0
Private Const OFN_SHARENOWARN  As Long = 1
Private Const OFN_SHOWHELP  As Long = &H10
Private Const OFS_MAXPATHNAME  As Long = 128

Private Const OFS_FILE_OPEN_FLAGS  As Long = OFN_EXPLORER Or OFN_LONGNAMES Or OFN_CREATEPROMPT Or OFN_NODEREFERENCELINKS
Private Const OFS_FILE_SAVE_FLAGS  As Long = OFN_EXPLORER Or OFN_LONGNAMES Or OFN_OVERWRITEPROMPT Or OFN_HIDEREADONLY

Private Type OPENFILENAME
  nStructSize As Long
  hwndOwner As Long
  hInstance As Long
  sFilter As String
  sCustomFilter As String
  nCustFilterSize As Long
  nFilterIndex As Long
  sFile As String
  nFileSize As Long
  sFileTitle As String
  nTitleSize As Long
  sInitDir As String
  sDlgTitle As String
  flags As Long
  nFileOffset As Integer
  nFileExt As Integer
  sDefFileExt As String
  nCustDataSize As Long
  fnHook As Long
  sTemplateName As String
End Type

Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Declare Function CommDlgExtendedError Lib "comdlg32.dll" () As Long

Function GetBrowseDirectory(Owner As Form, Caption As String, Optional IncludeFiles As Boolean = False) As String
   
' This function will show the BrowseForFolder
' dialog. This can be used to select a folder
' that exists on the current system.
' Will return a string containing the selected
' folder or an empty string if cancel is
' selected.
   
Dim bi As BROWSEINFO
Dim IDL As ITEMIDLIST
Dim r As Long
Dim pidl As Long
Dim tmpPath As String
Dim pos As Integer
   
  With bi
      .hOwner = Owner.hWnd
      .pidlRoot = 0&
      .lpszTitle = Caption
      If IncludeFiles Then
        .ulFlags = BIF_BROWSEINCLUDEFILES
      Else
        .ulFlags = BIF_RETURNONLYFSDIRS + BIF_USENEWUI
      End If
  End With
   
  pidl = SHBrowseForFolder(bi)
  tmpPath = Space$(512)
  r = SHGetPathFromIDList(ByVal pidl, ByVal tmpPath)
   
  If r Then
      pos = InStr(tmpPath, Chr$(0))
      tmpPath = Left$(tmpPath, pos - 1)
      If Right$(tmpPath, 1) <> "\" And IncludeFiles = False Then
        tmpPath = tmpPath & "\"
      End If
      GetBrowseDirectory = tmpPath
    Else
      GetBrowseDirectory = ""
  End If

End Function
'indsættes slut

på din form laver du en textbox og en knap

text1 og command1

under command1 sættes denne kode

text1.text = GetBrowseDirectory(Me, "Udpeg filen, True)
Avatar billede vbcoder Nybegynder
28. juni 2004 - 17:19 #2
en anden model kunne være at placere en textbox, en drivelistbox, en dirlistbox og en filelistbox på formen

Hvis du beholder standardnavnene vil du med nedenstående kode på formen få den valgte fil i tekstboksen

'kode start
Private Sub Dir1_Change()
  File1.Path = Dir1.Path
End Sub

Private Sub Drive1_Change()
  Dir1.Path = Drive1.Drive
End Sub

Private Sub File1_Click()
  Text1.Text = Dir1.Path & File1.FileName
End Sub

Private Sub Form_Load()
  Text1.Text = ""
End Sub
'kode slut
Avatar billede vbcoder Nybegynder
28. juni 2004 - 17:20 #3
du kan også bruge commondialog
Avatar billede vbcoder Nybegynder
28. juni 2004 - 17:25 #4
commondialog skal tilføjes under project components

læg en tekstbox, en commandbutton og en commondialog på formen.

når du har gjort det kan du bruge denne kode

'kode start
Private Sub Command1_Click()
  With CommonDialog1
      .ShowOpen
  End With
  Text1.Text = CommonDialog1.FileName
End Sub

Private Sub Form_Load()
  Text1.Text = ""
End Sub
'kode slut
Avatar billede computopic Nybegynder
30. juni 2004 - 15:31 #5
Ov der er jo et par muligheder.. Jeg prøver det lige af..
Avatar billede computopic Nybegynder
05. juli 2004 - 15:17 #6
Jeg har ikke rigtig held med ovenstående script.. Tænker at det muligvis er grundet at jeg måske ikke har forklare helt hvilket program j sider i.. så deg gør jeg her..
Jeg sider i Microsoft Visual Basic 6.0 som jeg starter via min skabelon i word..
Ved ik om det gør forskel?

>> VBCORDER, jeg har tilføjet dit modul, men intet sker der.. skal der ikke være en referance til modulet i de andre koder?
Avatar billede computopic Nybegynder
06. juli 2004 - 13:15 #7
Jeg kan ikke vælge project components i VB6, nogen der har en løsning? Prøv eventuelt at starte vb via word.. Jeg tror der er nogle restriktioner..
Avatar billede computopic Nybegynder
06. juli 2004 - 14:18 #8
Jeg har også forsøgt mig med:
Application.FileDialog(FileDialogType:=msoFileDialogOpen).Filters.Add _
    Description:="Word Documents (*.doc)", _
    Extensions:="*.doc"
Men den skriver at den ikke kender: FileDialog
Avatar billede vbcoder Nybegynder
07. juli 2004 - 08:03 #9
vba og vb er kun delvis det samme.

jeg har ikke den store erfaring i vba selvom sproget er det samme.

Der er mange officespecifikke ting og vba er i den danske officepakke på dansk og det gøre det ikke nemmere for mig der tænker på engelsk når jeg programmerer.
Avatar billede computopic Nybegynder
09. september 2004 - 11:37 #10
Ingen brugbare svar da jeg koder vb til word..
De angivet koder kan kun benyttes i rigtig vb.. og vb .net

Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester