パス名の操作(T)          <TOP>


Pathの表示領域の横幅が CtlWidth のとき、この表示領域に収まるように縮めた形式のパスに変換します。

PathCompactPath 短縮形式のパスを取得

 

例では、フォームサイズとテキストボックスのサイズを一定の比率で合わせ、フォームサイズを拡大縮小させた場合のパス名の表示を確認しています。

TextBoxとTimerを貼り付けます。                初期状態(短縮部分は...で表されています)

 

徐々にフォーム幅を拡大

path名が全て入った状態

 

'================================================================
'= 短縮形式のパスを取得
'=    (PathCompactPath.bas)
'================================================================
#include "Windows.bi"

' 短縮形式のパスを取得
Declare Function Api_PathCompactPath& Lib "shlwapi" Alias "PathCompactPathA" (ByVal hDC&, ByVal lpszPath$, ByVal dx&)

' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得
Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&)

' デバイスコンテキストを解放
Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&)

Var Shared MainForm As Object
Var Shared Text1 As Object
Var Shared Timer1 As Object

MainForm.Attach GethWnd
Text1.Attach GetDlgItem("Text1")
Timer1.Attach GetDlgItem("Timer1")

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()

    Timer1.SetInterval 100
    Timer1.Enable -1
End Sub

'================================================================
'=
'================================================================
Declare Sub Timer1_Timer edecl ()
Sub Timer1_Timer()
    Var hDC As Long
    Var CtlWidth As Long 
    Var FileName As String 

    FileName = "C:\MyFolder\FBasic\MyReallyWayTooLongFolderName\ButWhoCares\IhaveTheAPI.doc" 

    '/ Textの幅 = MainForm幅 - (左右マージン + Frame幅)
    Text1.SetWindowSize GetWidth - (20 * 2 + 8), 24
    CtlWidth = Text1.GetWidth
    hDC = Api_GetDC(Text1.GethWnd) 

    Ret = Api_PathCompactPath(hDC, FileName, CtlWidth )

    Text1.SetWindowText FileName

    Ret = Api_ReleaseDC(hDC, Text1.GethWnd) 
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End