テクニカルノート08: Common Dialog Objects

March 12, 2003

© NSB Corporation. All rights reserved.

Go to English page.
マイクロソフト社のドキュメントも参考にして下さい。

Common Dialog Objects はMicrosoftによって提供されているオブジェクトの集まりで、NS Basic/CE プログラムでご使用になれます。 これらのオブジェクトは、"ActiveX Control Objects 1.0"の一部として含まれており、MicrosoftのWebサイトからダウンロードが可能です。お使いのシステムにこのモジュールを読ませる方法につきましては、テクニカルノート01を参照して下さい。

ActiveX Control Objects に関するインフォメーションはテクニカルノート01を参照して下さい。

Common Dialog Objectsは、

これらの全ては以下のコールによって初期化されます。

addObject "dialog"

 

1. The Color Picker

以下のコマンドにより color picker が開かれます。

dialog.ShowColor

 

Palm-size PC用にはメソッドはサポートされていません。

以下のプロパティはコールする前に設定出来ます。

dialog.Color [= initial color] 'sets/returns the color

dialog.CancelError = True 'trigger error on cancel?

dialog.Flags [= value] 'sets flags defining appearance

Flags用の値を以下に示します。

定数

内容

cdCClFullOpen

&H2

Define Custom Colorsセクションを含めたダイアログボックスの全部を表示します。

cdlCCHelpButton

&H8

ダイアログボックスに Help ボタンを表示させるようにする。

cdlCCPreventFullOpen

&H4

Define Custom Colorsコマンドボタンを無効にし、ユーザによるカスタムカラーの定義を許容させないようにします。

cdlCCRGBInit

&H1

ダイアログボックス用に最初の色の値を設定します。

Or オペレータを使用し、ダイアログボックス用のフラグを複数設定することで、組合せの値を定義出来ます。例えば、

dialog.Flags = &H10& Or &H200&

 

2. The Font Picker

以下のコマンドにより font picker が開かれます。

Dialog.ShowFont

以下のプロパティは呼ぶ前に設定出来ます。

Dialog.Max [=int] 'the maximum font size

Dialog.Min [=int] 'the minimun font size

Dialog.CancelError = True 'trgger error on cancel?

Dialog.Flags [=value]

Flagsの値を以下に示します。

定数

内容

cdlCFANSIOnly

&H400

ダイアログボックスがWindows文字セットを使用するフォントの選択のみを許容するように指定。このフラグがセットされた場合、ユーザはシンボルだけを含んでいるフォントの選択が出来ない。

cdlCFApply

&H200

ダイアログボックス上のApplyボタンを有効にする。

cdlCFBoth

&H3

利用可能なプリンターとスクリーンフォントの一覧を、ダイアログボックスに表示させるようにする。hDCプロパティは、プリンタに関連したデバイスコンテキストを識別します。

cdlCFEffects

&H100

ダイアログボックスに、抹消ライン、アンダーライン、及び色効果を可能にするよう指定する。

cdlCFFixedPitchOnly

&H4000

ダイアログボックスが固定幅のフォントしか選べないように指定する。

cdlCFForceFontExist

&H10000

ユーザが存在しないフォントやスタイルを指定した場合に、エラー メッセージ ボックスを表示するように指定する。

cdlCFHelpButton

&H4

ダイアログボックスにHelpボタンを表示させるようにする。

cdlCFLimitSize

&H2000

ダイアログボックスに、Min及びMaxプロパティで指定された範囲の中だけで、フォントサイズを選べるように指定する。

以下のプロパティは ShowFont によって設定されます。

Dialog.Color

Dialog.FontBold

Dialog.FontItalic

Dialog.FontName

Dialog.FontSize

Dialog.FontStrikethru

Dialog.FontUnderline

 

3. The "Save As" Dialog

以下のコマンドを使用してSave As Dialog を開ける。

Dialog.ShowSave

注意

Dialog.Showsaveにおける2つのバグ :

Dialog.filenameで余分な先導文字'\'を返しますので、これを以下のコードによって取除かなければなりません。

fn=right(dialog.filename,len(dialog.filename)-1)

また、ダイアログが dialog.defaultext="cdb" にセットされたとしても、もし'File Name'にファイルへの拡張子を特に加えない場合は、'Options'ボタンをクリックし、Type ( dialog.filter="Data (*.cdb)|*.cdb" によって設定) から選ばなければなりません。でなければ、dialog.filename への拡張子は追加されません!

dialog.defaultext="cdb" の設定と dialog.showopen の使用は、自動的に拡張子を追加します。さらに dialog.showopen は、余分な先導文字'\'無しで正しいパス(path)を返します。 -- Greg Kelly

 

プロパティ

以下のプロパティは呼ぶ前に設定出来ます。

Dialog.DialogTitle = "Save As File"

Dialog.InitDir = "\"

Dialog.Flags = 0

Dialog.Filter = "Text|*.txt"

Dialog.DefaultExt = "txt"

Dialog.filename = "" 'initialize

Dialog.Flags [=value]

 

Flags用の値を以下に示します。Select File ダイアログには同じフラグが使用されていますので、注意して下さい。また、現在のリリースでは全てのフラグは対応していません。

定数

内容

cdlOFNAllowMultiselect

&H200

File Nameリストボックスが多重選択を許容できるよう指定する。ユーザは実行時にSHIFTキーを押しながらUP ARROW(上矢印)とDOWN ARROW(下矢印)キーを使うことにより、複数のファイルを指定出来る。これが成されると、FileName プロパティは全ての選択されたファイル名を含んだ文字列を返す。文字列内のファイル名同士はスペース(空白文字)で区切られる。

cdlOFNCreatePrompt

&H2000

ユーザに現在存在しないファイル名を作成するように促すダイアログボックスを指定する。このフラグは自動的にcdlOFNPathMustExist及びcdlOFNFileMustExistフラグをセットする。

cdlOFNExtensionDifferent

&H400

戻されたfilenameの拡張子はDefaultExtプロパティによって指定された拡張子とは違うことを示す。DefaultExtプロパティが Null の場合、 拡張子が一致した場合、またはファイルが拡張子を持たない場合、このフラグはセットされない。このフラグはダイアログボックスを閉じる時にチェックすることが出来る。

cdlOFNFileMustExist

&H1000

ユーザがFile Nameテキストボックス内にあるファイル名のみ入力出来るように指定する。このフラグがセットされていて、ユーザが無効なファイル名を入力した場合、警告が表示される。このフラグは自動的にcdlOFNPathMustExistフラグをセットする。

cdlOFNHelpButton

&H10

ダイアログボックスにHelpボタンを表示させる。

cdlOFNHideReadOnly

&H4

Read Onlyチェックボックスを隠す。

cdlOFNLongNames

&H200000

長いファイル名を使用。

cdlOFNNoChangeDir

&H8

ダイアログボックスが開かれた時に、前回のそのままのディレクトリを現ディレクトリに設定させる。

cdlOFNNoLongNames

&H40000

長いファイル名は無し。

cdlOFNNoReadOnlyReturn

&H8000

戻されるファイルにRead Onlyの属性が設定されないことと、書き込み禁止ディレクトリ内に入らないことを指定する。

cdlOFNNoValidate

&H100

ダイアログボックスが、戻されるファイル名に無効な文字を許容することを指定する。

cdlOFNOverwritePrompt

&H2

既に選択したファイルが存在する場合、Save As ダイアログボックスにメッセージボックスを作成させる。ユーザは、ファイルを上書きするかを決めなければならない。

cdlOFNPathMustExist

&H800

ユーザが有効なパスのみ入力出来るように指定する。このフラグがセットされていて、ユーザが無効なパスを入力した場合、警告が表示される。

cdlOFNReadOnly

&H1

ダイアログボックスが作成される時、最初からRead Onlyチェックボックスがチェックされているようにする。またこのフラグは、ダイアログボックスが閉じている時のRead Onlyチェックボックスの状態を示す。

cdlOFNShareAware

&H4000

sharing violation errors(共有違反エラー)は無視されるように指定する。

選択されたフラグを定義することも出来ます。例えば、

Const ReadOnly = &H00000001&

Const Effects = &H00000100&

Dialog.Flags = &H10& Or &H200&

 

以下のプロパティは ShowOpen によって設定されます。

Dialog.FileName

 

4. "Select File" ダイアログ

以下のコマンドでSelect File ダイアログを開きます。

Dialog.ShowOpen

 

以下のプロパティは呼ぶ前に設定出来ます。

Dialog.DialogTitle = "Pick a text file to open"

Dialog.InitDir = "\"

Dialog.Filter = "Text|*.txt"

Dialog.FilterIndex = 1

Dialog.Flags = &H1000 Or &H800 'path and file must exist

Dialog.filename = "" 'initialize

Flags設定のインフォメーションは "Open File" ダイアログを参照して下さい。

 

以下のプロパティは ShowOpen によって設定されます。

Dialog.FileName

 

5. Help ダイアログ

以下のコマンドでHelpダイアログを開きます。

Dialog.ShowHelp

 

以下のプロパティは呼ぶ前に設定出来ます。

Dialog.HelpCommand [ = value]

Dialog.HelpContext [ = string]

Dialog.HelpFile [ = filename]

Values for HelpCommand値を以下に示します。

定数

内容

cdlHelpCommand

&H102&

Helpマクロを実行する。

cdlHelpContents

&H3&

.hpjファイルの [OPTION] セクションのContentsオプションによって定義されるHelp context topicを表示する。

cdlHelpContext

&H1&

特定のcontext用にHelpを表示する。この設定を使用する場合、HelpContextプロパティを使用して、 contextを指定しなければならない。

cdlHelpContextPopup

&H8&

.hpjファイルの[Map]セクションで定義される context numberによって確認される、特定のHelpトピックをポップアップ ウインドウ内に表示する。

cdlHelpForceFile

&H9&

WinHelpが正しいHelpファイルを表示することを確実にする。正しいHelpファイルが表示されている場合、何も起こらない。間違ったHelpファイルが表示されている場合、WinHelp は正しいファイルを開く。

cdlHelpHelpOnHelp

&H4&

Helpアプリケーションそのものを使用する為の Help を表示する。

cdlHelpIndex

&H3&

指定Helpファイルのインデックスを表示する。アプリケーションは、一つのインデックスのHelpファイル用にのみ、この値を使用するべきである。

cdlHelpKey

&H101&

特定のキーワード用に Help を表示する。この設定を使用する時は、HelpKey プロパティを使って一つのキーワードを指定しなければなりません。

cdlHelpPartialKey

&H105&

dwData パラメータで渡されるキーワードに、キーワードリストのトピックが一つだけぴったり一致した場合、そのトピックを表示する。複数の一致が存在する場合、Go Toリストボックスに、見つかったトピックをリストした検索ダイアログボックスが表示される。何も一致しない場合、検索ダイアログボックスが表示される。キーワードを渡さずに検索ダイアログボックスを表示させるには、空文字列へのポインター(long)を使用する。

cdlHelpQuit

&H2&

Helpアプリケーションに、指定のHelpファイルは使用されなくなったことを通知する。

cdlHelpSetContents

&H5&

ユーザが F1 キーを押した時、どのトピックを表示するかを決める。

cdlHelpSetIndex

&H5&

HelpContext プロパティで指定されるcontextを、HelpFileプロパティで指定するHelpファイルの現在のインデックスとして設定する。このインデックスは、ユーザが他のHelpファイルにアクセスするまで、最新として残る。この値は、複数のインデックスを持つ Helpファイルの為のみに使用。

あなたのアプリケーション用にWindows Helpファイルを作成し、アプリケーションのHelpFileプロパティを設定した場合、ユーザが Help ボタンを押した時にHelpが呼ばれます。アクティブコントロールかアクティブフォーム用に、HelpContextID プロパティにcontext番号がある場合、Help は現在のHelp contextに一致するトピックを表示します。それ以外は、内容画面を表示します。ファイルはデフォルトとして、\windowsディレクトリに置かれます。

ユーザが、Object BrowserからActiveX コンポーネントの為にHelpをリクエストする時に、どの Helpファイルを表示するかを決める為に、HelpFileプロパティを使用出来ます。

単純なヘルプファイルは通常のhtmlファイルです。Microsoft は、さらに複雑なHelpファイルの作成はMicrodoft Windows Help Compilerが必要であると述べています。Visual Basic, Professional Editionと共に入手可能です。

 

サンプルコード

Option Explicit

addObject "dialog"

'Color Constants
Private Const cdlCCIFullOpen = &H2
Private Const cdlCCPreventFullOpen = &H4
Private Const cdlCCRGBInit = &H1
    
'Help Constants
Private Const cdlHelpContext = &H1
    
'Font Constants
Private Const cdlCFScreenFonts = &H1
Private Const cdlCFEffects = &H100
Private Const cdlCFLimitSize = &H2000
Private Const cdlCFForceFontExist = &H10000
dim selection
selection=0

while selection<>9
  selection=inputbox("Choose Common Dialog Operation:" & chr(13) & "1. Color" & chr(13) & "2. Font" & chr(13) & "3. Save As " & chr(13) & "4. Select File" & chr(13) & "5. Show Help" & chr(13) &  "9. End Program", "COMM Demo")
  select case selection
  case 1
    cmdColor_click
  case 2
    cmdFont_click
  case 3
    cmdSaveAs_click
  case 4
    cmdSelectFile_click
  case 5
    cmdShowHelp_click
  case else
    selection=9
  end select
wEnd

Private Sub cmdColor_Click()
  dim txtcolorRGB
  txtColorRGB=output.backcolor  
  'On Error Resume Next
        
  'Generate error if cancel is pressed
  dialog.CancelError = True

  'Check if the text in the text box is a number,
  'if so, use it as our initial color

  If IsNumeric(txtColorRGB) then
    dialog.Color = txtColorRGB.Text
    dialog.Flags = cdlCCRGBInit
  End If
  'Ensure Full Open
  dialog.Flags = dialog.Flags + cdlCCIFullOpen
  'Show the dialog
  dialog.ShowColor
       
  'Determine action to take after dialog is dismissed
  If Err.Number = 0 Then 
  txtColorRGB = dialog.Color 'everything OK
  output.BackColor = dialog.Color
ElseIf Err.Number = 32755 Then
  'The user canceled the dialog, so do nothing
Else
  MsgBox "Error in Common Dialog ShowColor" & vbCrLf & vbCrLf & _
    Err.Number & ": " & Err.Description, vbCritical, "Common Dialog ShowColor"
End If

End Sub

Private Sub cmdFont_Click()
  'Set minimum and maximum font sizes
  dialog.Max = 30
  dialog.Min = 8
        
  'Generate error if cancel is pressed
  dialog.CancelError = True
        
  'Setup flags for what we want to show
  dialog.Flags = cdlCFForceFontExist Or cdlCFLimitSize Or cdlCFEffects Or cdlCFScreenFonts
        
  On Error Resume Next
  'Show the font dialog
  dialog.ShowFont
        
  'Determine action to take after dialog is dismissed
  If Err.Number = 0 Then
    on error goto 0
    output.ForeColor = dialog.Color
    output.FontBold = dialog.FontBold
    output.FontItalic = dialog.FontItalic
    output.FontName = dialog.FontName
    output.FontSize = dialog.FontSize
    output.FontStrikethru = dialog.FontStrikethru
    output.FontUnderline = dialog.FontUnderline
  ElseIf Err.Number = 32755 Then
    'The user canceled the dialog, so do nothing
  Else
    MsgBox "Error in Common Dialog ShowFont" & vbCrLf & vbCrLf & _
      Err.Number & ": " & Err.Description, vbCritical, "Common Dialog ShowFont"
  End If
  output.drawtext "This is the new font"
End Sub

Private Sub cmdSaveAs_Click()
  dialog.DialogTitle = "Save As File"
  dialog.InitDir = "\"
  dialog.Flags = 0
  dialog.Filter = "Text|*.txt"
  dialog.DefaultExt = "txt"
  dialog.filename = ""   'initialize
        
  'Generate error if cancel is pressed
  dialog.CancelError = True
  On Error Resume Next
        
  'Show the Save As Dialog
  dialog.ShowSave
        
  'Determine action to take after dialog is dismissed
  If Err.Number = 0 Then
    txtFileName = dialog.filename
  ElseIf Err.Number = 32755 Then
    'The user canceled the dialog, so do nothing
  Else
    MsgBox "Error in Common Dialog ShowSave" & vbCrLf & vbCrLf & _
      Err.Number & ": " & Err.Description, vbCritical, "Common Dialog ShowSave"
  End If
End Sub

Private Sub cmdSelectFile_Click()
  dialog.DialogTitle = "Pick a text file to open"
  dialog.InitDir = "\"
  dialog.Filter = "Text|*.txt"
  dialog.FilterIndex = 1
  dialog.Flags = &H1000 Or &H800  'path and file must exist
  dialog.filename = ""   'initialize
        
  'Generate error if cancel is pressed
  dialog.CancelError = True
  On Error Resume Next
        
  dialog.ShowOpen
      
  'Determine action to take after dialog is dismissed
  If Err.Number = 0 Then
    txtFileName = dialog.filename
  ElseIf Err.Number = 32755 Then
    'The user canceled the dialog, so do nothing
  Else
    MsgBox "Error in Common Dialog ShowOpen" & vbCrLf & vbCrLf & _
      Err.Number & ": " & Err.Description, vbCritical, "Common Dialog ShowOpen"
  End If  
End Sub

Private Sub cmdShowHelp_Click()
  dialog.HelpFile = "nsbasic.htc"
  'dialog.HelpCommand = cdlHelpContext
  'dialog.HelpContext = "adjusting_memory_and_power_settings"
  dialog.ShowHelp    
End Sub