パス名の操作(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