Toon posts:

[VB6] Windows Common dialog gebruiken, probs..

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
In mijn applicatie gebruik ik de common dialog box (showopen) om een file te openen (comdlg32.ocx als component). De box mag alleen dbf files laten zien, dus stel ik het filter hierop in. Dit gaat allemaal prima op de machine waarop ik het programma maak. Als ik het programma compileer, en de exe file op andere compu's draai, gebeuren er rare dingen. Op sommige machines werkt de dialog prima, op andere wordt de filter-setting niet meegenomen en worden alle typen files getoond.

Het programma is gemaakt op NT4-sp6, het draait goed op een willekeurige win98 machine, goed op een win2k prof machine, maar weer niet goed op een andere winnt4 en win2k machine (er komt dan wel een dialog maar filter werkt niet).

Bij 1 pc (met win98) bestond de file comdlg32.ocx niet, ik kreeg een activeX error. Ik heb de ocx file van een willekeurige site gedownload, waarna het programma weer prima werkte.

Wat kan hier aan de hand zijn? Bij die laatste machine, waar ik de ocx handmatig heb geinstalleerd, wordt toch ook door alle windows programma';s de dialog box gebruikt? Wordt dan gebruik gemaakt van de dll ipv de ocx ofzo?

Hoe kan ik het beste mijn programma veranderen zodat er ALTIJD een goede dialog box kan worden gebruikt?

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 07:05

johnwoo

3S-GTE

Op woensdag 28 november 2001 11:34 schreef Sjoerd het volgende:
[...]

Wat kan hier aan de hand zijn? Bij die laatste machine, waar ik de ocx handmatig heb geinstalleerd, wordt toch ook door alle windows programma';s de dialog box gebruikt? Wordt dan gebruik gemaakt van de dll ipv de ocx ofzo?

Hoe kan ik het beste mijn programma veranderen zodat er ALTIJD een goede dialog box kan worden gebruikt?
De meeste programma's gebruiken idd rechtstreeks de DLL. Het beste kun je dat zelf ook doen, dan ben je niet meer afhankelijk van die OCX. Zoek maar eens op de volgende API functies, allemaal te vinden in comdlg32.dll:
GetOpenFileName
GetSaveFileName
ChooseFont
ChooseColor
PrintDialog
(en nog een of twee anderen)

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


Verwijderd

Topicstarter
OK bedankt! Ik heb online (hier op de TU werkt msdn weer eens niet) een artikel gevonden, alleen in dit voorbeeld is nogal wat code gebruikt....is het de bedoeling al deze code te implementeren of kan het anders?

zie artikel(ik hoop dat de link een beetje over komt):

http://support.microsoft.com/support/kb/articles/Q161/2/86.asp?LN=EN-US&SD=msdn&FR=0&qry=common%20dialog%20getopenfilename&rnk=2&src=DHCS_MSPSS_msdn_SRCH&SPR=VBB

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 07:05

johnwoo

3S-GTE

Op woensdag 28 november 2001 12:28 schreef Sjoerd het volgende:
OK bedankt! Ik heb online (hier op de TU werkt msdn weer eens niet) een artikel gevonden, alleen in dit voorbeeld is nogal wat code gebruikt....is het de bedoeling al deze code te implementeren of kan het anders?

zie artikel(ik hoop dat de link een beetje over komt):

http://support.microsoft.com/support/kb/articles/Q161/2/86.asp?LN=EN-US&SD=msdn&FR=0&qry=common%20dialog%20getopenfilename&rnk=2&src=DHCS_MSPSS_msdn_SRCH&SPR=VBB
Je moet inderdaad die hele structure gaan vullen enzo ja... Dat kan best onoverzichtelijk worden in je module. Daarom bouw ik er meestal een functie omheen die ik overal in mn project in 1 regel kan gebruiken. Bijvoorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public Function OpenFileDlg(Title As String, Optional InitialDir As String = "", Optional Filter As String = "") As String
    Dim OpenFile As OPENFILENAME
    
    If InitialDir = "" Then InitialDir = CurDir$
    OpenFile.lStructSize = Len(OpenFile)
    OpenFile.hwndOwner = Form1.hWnd
    OpenFile.hInstance = App.hInstance
    OpenFile.lpstrFilter = Filter
    OpenFile.nFilterIndex = 1
    OpenFile.lpstrFile = String(257, 0)
    OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
    OpenFile.lpstrFileTitle = OpenFile.lpstrFile
    OpenFile.nMaxFileTitle = OpenFile.nMaxFile
    OpenFile.lpstrInitialDir = InitialDir
    OpenFile.lpstrTitle = Title
    OpenFile.flags = 0
    If GetOpenFileName(OpenFile) = 0 Then
      OpenFileDlg = ""
    Else
      OpenFileDlg = Trim(OpenFile.lpstrFile)
    End If
End Function

Dan hoef je die lap maar één keer in te typen, en als je een filename nodig hebt roep je em in 1 regel aan:
FileName = OpenFileDlg("Titel")
Natuurlijk kun je de window handle ook nog als parameter meegeven...

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1