タイトル : Re^8: ファイルパスの機種依存文字を取得する方法について 投稿日 : 2014/12/09(Tue) 14:33 投稿者 : マサタロウ
> 描画処理を UserControl 化しておくと、通常の Label の代用として使えるかと。 Visual Basic Learning Edition Version 5.0ではActiveX コントロールを作成できません。 PictureBoxとサンプルコードで表示します。 > Label の代用とする、TextOutW API のサンプルを書いてみました。 サンプルを参考にして、機種依存文字を表示させることができました。 DrawText内の"s = Text & vbNullChar"はC言語風文字列で宜しいですか(下記ページ参考にしました)? http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_p07.htm "s = Text & vbNullChar"で実行すると、機種依存文字の後に 半角中点が表示されます。"s = Text"で表示できました。 TextOutWは宣言で全てLong型となっているため、数値で判断して 描画を行う事がわかります。 DrawTextを呼び出すときに引数を設定すると、引数の値は数値になりますか? 変数の格納されている場所(アドレス)内の値(文字列)は、対応する数値になりますか (StrPtr(s)のs、イミディエイトウィンドウでは数値でした、数値は格納場所の意味?)? 関数(DrawText)を使用してTextOutWを実行するのは、数値を取得するためですか? DrawText(Call DrawText)後のPictureBoxのRefreshは、 実行しなくても表示できました。 PictureBoxのプロパティは、デザイン時に設定します。 Printerについては使用しないため確認してません。 サンプルのUnicode対応コモンダイアログについて、 そのまま使用するとうまくいかないので、以下のコードに変更して、 表示、初期ディレクトリの設定、選択可能ファイルの種類設定、 コモンダイアログボックスのタイトル設定、ファイル選択、 は正しくできました。 ReplaceはVB5.0にはありませんでした。 Private Sub Command8_Click() Dim s As String s = DlgShowOpen("C:\Program Files\", "実行ファイル(*.exe,*.lnk)|*.exe", "ファイル") '▼以下でもできました。 'Dim FP As String 'FP = "実行ファイル(*.exe,*.lnk)" & vbNullChar & "*.exe" 's = DlgShowOpen("C:\Program Files\", FP, "ファイル") End Sub Public Function DlgShowOpen(ByVal initialDirectory As String, ByVal filterPattern As String, Optional ByVal dialogTitle As String = vbNullString) As String Const OFN_FILEMUSTEXIST As Long = &H1000 Const OFN_HIDEREADONLY As Long = &H4 Const OFN_EX_NOPLACESBAR As Long = &H1 Dim ofnFlags As Long ofnFlags = OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY Dim strFile As String strFile = String(512, 0) Dim strFileFilter As String Mid(filterPattern, 20, 1) = vbNullChar '変数"FP"を使用しない場合。 strFileFilter = filterPattern Dim udtOFN As OPENFILENAME With udtOFN .lStructSize = Len(udtOFN) .hwndOwner = Form1.hWnd .hInstance = App.hInstance .lpstrFilter = StrPtr(filterPattern) .nFilterIndex = 1 .lpstrFile = strFile .nMaxFile = Len(strFile) .lpstrInitialDir = StrPtr(initialDirectory) .lpstrTitle = StrPtr(dialogTitle) .Flags = ofnFlags .FlagsEx = 0& .nFileOffset = 0 .nFileExtension = 0 .nMaxCustFilter = 0& .lpstrFileTitle = 0& .nMaxFileTitle = 0& .lpstrCustomFilter = 0& .nMaxCustFilter = 0& .lpstrDefExt = 0& .lCustData = 0& .lpfnHook = 0& .lpTemplateName = 0& .pvReserved = 0& .dwReserved = 0& End With Ret = GetOpenFileNameW(udtOFN) TextOutW関数で、.lpstrFileのプロパティが数値で表示されるため、 型をString型に変更して上記のコードで実行すると、パス名を表示できました。 引数TextにStrConvでUnicodeから変換して格納しました。 しかし、正しく表示できるパスと化けるパスがある様です (半角カタカナが化ける)。 また、TextOutW関数で表示すると、パス以外の文字が表示されます (半角中点)。バッファのサイズ分表示され、パス以外の余分な文字も 表示されるのでしょうか? バッファのサイズを再設定するとうまく表示できません (Ret = GetOpenFileNameW(udtOFN)の後でstrFile = String(256, 0)など)。 For〜Next、Mid、Leftでパスのみ取得できるか試しています。 Shell関数でStrConvでUnicodeから変換した.lpstrFileプロパティの .exeや.lnkファイルを実行する事は出来ました。 バージョンについて、 VB2005はフリーのVisual Basic 2005 Express Edition をダウンロードして 所持しているという意味でした。外観やプログラム方法が似ているため、 VB2005で慣れてからでないと最新版をインストールしないと思います。 VB5.0を希望しているのは、作成している自作プログラムがVB5.0の勉強のために 作成したもので、言語を換えたくない気持ちがあるためです。 |