Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB6: CommonDialog WinAPI:n kautta

Antti Laaksonen [08.03.2002 16:31:56]

#

CommonDialogControl on todella käyttökelpoinen moniin tarkoituksiin, mutta haittapuolena on se, että ohjelma vaatii toimiakseen suurehkon ocx-tiedoston mukaan. Onneksi sama onnistuu API:n kautta. Esimerkki luo tiedostonavaamisikkunan API-funktion GetOpenFileName avulla.

Pääohjelma

Private Sub Form_Click()

    Dim OpenFile As OPENFILENAME

    'pakollinen: tietueen koko
    OpenFile.lStructSize = Len(OpenFile)
    'mille ikkunalle kuuluu
    OpenFile.hwndOwner = Form1.hWnd
    'valittavat tiedostotarkenteet
    OpenFile.lpstrFilter = "Tekstitiedostot (*.txt)" & Chr(0) & "*.TXT" & Chr(0) & _
    "Kaikki tiedostot (*.*)" & Chr(0) & "*.*" & Chr(0)
    'pakollinen: tiedostonimen alustus
    OpenFile.lpstrFile = String(257, 0)
    'pakollinen: tiedostonimen koko
    OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
    'ikkunan otsikko
    OpenFile.lpstrTitle = "Valitse tiedosto"

    'ikkunan näyttäminen
    lReturn = GetOpenFileName(OpenFile)

    'valittu tiedostonimi löytyy OpenFile.lpstrFile -muuttujasta
    MsgBox "Valitsit " & Trim(OpenFile.lpstrFile)

End Sub

Määrittelyt bas-tiedostoon

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

Public Type OPENFILENAME
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As Long
        nFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpstrInitialDir As String
        lpstrTitle As String
        flags As Long
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
End Type

progo [23.12.2002 21:37:10]

#

Upea vinkki, juuri niin kuin niiden on tarkoitus palvella koodaajaa ;)

sooda [23.10.2003 08:45:33]

#

Juu sikahyvä on mutta mitkäs functiot näyttää colori/fontti ikkunat?

MoonD [01.06.2006 16:04:38]

#

Kiitoksia vinkistä, autatteko vielä kertomalla missä bas-tiedosto on tai miten sitä pääsee editoimaan?

MoonD [01.06.2006 17:01:40]

#

Itse itselleni vastaten: Tiedot lisättävä VBA-projektissa johonkin moduuliin. Vielä en kuitenkaan päässyt puusta pidemmälle. Herjaukset tyypistä(Type) loppui, mutta nyt saan runtime errorin "Object required" pääohjelman rivillä 9. Oltaisin, että ongelma on ettei uutta objektia ole alusteuttu, mutta mitehköhän se sitten tapahtuu?

Antti Laaksonen [01.06.2006 20:15:27]

#

Rivin 9 (hwndOwner) voi poistaa, jolloin ohjelma toimii myös VBA:ssa.

moptim [11.09.2006 19:26:34]

#

tänhän sais funkkariks kivasti, funkkari palauttais valitun tiedoston.
EDIT: ja sitten GetSaveFileName tekee tallenna-ikkunan

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta