You are not logged in.

Dear visitor, welcome to Jabaco - Community. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

klctal

Trainee

  • "klctal" is male
  • "klctal" started this thread

Posts: 70

Date of registration: Jul 13th 2009

Location: Shanghai

Hobbies: Developing software

  • Send private message

1

Sunday, September 20th 2009, 12:35pm

filter

The commondialog.filter doesnt work. Its always set to "All Files(*.*)|*.*".
How do i set it like this?
:D

A1880

Intermediate

  • "A1880" is male

Posts: 500

Date of registration: Jan 1st 2009

Location: Hanover, Germany

Occupation: Software Engineer

Hobbies: Hilbert Curves

  • Send private message

2

Sunday, September 20th 2009, 6:39pm

Hi,
the filter functionality in CommonDialog has not been implemented yet in the current Jabaco framework.
The filter property is CommonDialog ignored for the time being.

See http://code.google.com/p/jabacoframework/source/browse/trunk/Framework/src/VB/CommonDialog.jsrc.

Provided, the filter works, it should be used as follows:

Jabaco Source

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Public Sub Command1_Click()
   Dim fileName As String
   
   With CommonDialog1
      .Filter = ""

      ' Load filters.
      AddFilter CommonDialog1, "Text Files", "*.txt"
      AddFilter CommonDialog1, "Graphic Files", _
                               "*.bmp;*.gif;*.jpg"
      AddFilter CommonDialog1, "All Files", "*.*"

      .ShowOpen True
      fileName = .FileName 
   End With
   
   MsgBox fileName
End Sub

' Add a filter to the dialog in an easy way.
' from www.vb-helper.com/howto_add_commondialog_filters.html
Private Sub AddFilter(ByVal dlg As CommonDialog, _
                      ByVal filter_title As String, ByVal filter_value As String)
   Dim txt As String

   txt = dlg.Filter
   If Len(txt) > 0 Then txt = txt & "|"
   txt = txt & filter_title & " (" & filter_value & ")|" & _
         filter_value
   dlg.Filter = txt
End Sub


Greetings!

A1880

OlimilO

Intermediate

  • "OlimilO" is male

Posts: 277

Date of registration: Jan 18th 2009

Location: Germany

Occupation: software engineer

  • Send private message

3

Monday, September 21st 2009, 8:27am

Hi,

Yes it's true the Filter-property was not implemented until now.

All Jabaco controls are based on the Swing-framework. The exception proves the rule, the CommonDialog-control is based on java#awt#FileDialog. This is because the security-manager (that plays a role when making an applet) does not like Filedialogs anyway. So Manuel decided to prefer the control that looks more like the original CommonDialog-control because the java#awt#Filedialog is based on the windows-intrinsic comdlg32.dll-control.



The problem behind FileNameFilter more again is platform independency:

in other operating-systems like MAC-OS file-extensions does not play the role like in windows.

in fact files on the Apple have a certain filestamp included that help to identify the type of the file.



More over the problem is also language dependent. In Java you need to implement a class for every type of FilenameFilter but In Java you have innerclasses.



If you like to use the javax#swing#JFileChooser control I have a solution:



Class: CCommonDialog

Jabaco Source

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
Private myInitDir As String
Private myFilter  As String
Private myIsCanceled As Boolean
Private myFile As File
Private myFiles() As File
Public Property Get InitDir() As String
   InitDir = myInitDir
End Property
Public Property Let InitDir(value As String)
   myInitDir = value
End Property
Public Property Get Filter() As String
   Filter = myFilter
End Property
Public Property Let Filter(value As String)
   myFilter = value
End Property
Public Property Get FileName() As String
   FileName = myFile.getAbsolutePath
End Property
Public Property Let FileName(value As String)
   myFile = New File(value)
End Property
Public Property Get FileFile() As File
   FileFile = myFile
End Property
Public Function getFiles() As File()
   getFiles = myFiles
End Function
Public Property Get IsCanceled() As Boolean
   IsCanceled = myIsCanceled 
End Property
Public Sub ShowOpen()
   
   Dim ofd As javax#swing#JFileChooser
   
   If Len(myInitDir) > 0 Then
      ofd = New javax#swing#JFileChooser(myInitDir)
   Else
      ofd = New javax#swing#JFileChooser
   End If
   
   If myFile <> Nothing Then
      ofd.setSelectedFile(myFile)
   End If
   
   If Len(myFilter) > 0 Then
      Call AddFilters(ofd)
   End If
   
   ofd.showOpenDialog(Nothing)
   
   myFile = ofd.getSelectedFile
   
   If myFile = Nothing Then
      myIsCanceled = True
   Else
      myFiles = ofd.getSelectedFiles      
   End If
End Sub
Private Sub AddFilters(fd As javax#swing#JFileChooser)
   Dim s() As String
   Dim i As Integer
   Dim description As String
   Dim ext As String
   s() = Split(myFilter, "|")
   For i = 0 To Ubound(s) Step 2
      If (i + 1) <= Ubound(s) Then 
         description = s(i)
         ext = s(i + 1)
         If Len(ext) > 0 Then
            AddFilter(fd, description, ext)
         End If
      End If
   Next
End Sub

Private Sub AddFilter(fd As javax#swing#JFileChooser, description As String, ext As String)
   
   Dim extensions() As String
   Dim jext As java#lang#String = ext
   If jext.contains("*.") Then
      jext = Replace(ext, "*.", "")
   End If
   
   If jext.contains(";") Then
      extensions = Split(jext, ";")
   Else
      ReDim extensions(0)
      extensions(0) = jext
   End If
   fd.addChoosableFileFilter(New javax#swing#filechooser#FileNameExtensionFilter(description, extensions()))
End Sub




greetings



OlimilO

klctal

Trainee

  • "klctal" is male
  • "klctal" started this thread

Posts: 70

Date of registration: Jul 13th 2009

Location: Shanghai

Hobbies: Developing software

  • Send private message

4

Monday, September 21st 2009, 10:41am

Quoted


So Manuel decided to prefer the control that looks more like the original CommonDialog-control because the java#awt#Filedialog is based on the windows-intrinsic comdlg32.dll-control.

The to dialogs look the same... ...
:D

OlimilO

Intermediate

  • "OlimilO" is male

Posts: 277

Date of registration: Jan 18th 2009

Location: Germany

Occupation: software engineer

  • Send private message

5

Monday, September 21st 2009, 11:58am

Quoted

The two dialogs look the same
yes, the javax#swing#JFileChooser looks very similar to the original CommonDialog-control
But let's have a second look:
* the swing-dialog has not the same context-menu (right-mouse click) than the awt-dialog has
* the swing-dialog is selfdrawn, this is the reason why it looks the same as the WinXP-control under Win-Vista

in fact true is also, that also the awt-FileDialog does not completely look like the CommonDialog-Control under Win-Vista. But this is true for Open-/SaveFileDialog in every program that comes out of comdlg32.dll and uses a callback-function.
(additional info: a callback-function e.g. must be used to position the dialog in the middle of the screen)
OlimilO

Similar threads

Rate this thread
WoltLab Burning Board