|
' ------------------------------------------------------
' コントロールサイズ調整用
' ------------------------------------------------------
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Declare Function GetClientRect Lib "user32" _
(ByVal hwnd As Long, _
lpRect As RECT) As Long
' ------------------------------------------------------
' イメージ番号
' ------------------------------------------------------
Global Const Image_Closed = 1
Global Const Image_Opend = 2
Global Const Image_Leaf = 5
Global Const Image_Up = 6
' ------------------------------------------------------
' ドラッグドロップ
' ------------------------------------------------------
Global nWidthTreeView As Integer
Global nDrag As Integer
Global ListSelect()
Public Const DRAG_BAR = 1
Public Const DRAG_FTPFILE = 2
Public Const DRAG_LOCALFILE = 3
' ******************************************************
' ドラッグドロップ
' ******************************************************
Public Sub DragDropAction( _
frm As Form, _
x As Single, _
Source As Control, _
Target As Object _
)
' *******************************
' 境界変更用
' *******************************
Dim rc As RECT
' *******************************
' ダウンロード・アップロード用
' *******************************
Dim strPath As String
Dim strRet As String
Dim nodフォルダ As Node
Select Case nDrag
' ********************************************
' 境界変更
' ********************************************
Case DRAG_BAR
' サイズ変更バーを左へ移動した場合
If Target.Name = "trvサーバ" Then
nWidthTreeView = x
' サイズ変更バーを右へ移動した場合
Else
nWidthTreeView = frm.trvサーバ.Width + x
End If
' ***********************************
' ツリーのサイズ調整
' ***********************************
GetClientRect frm.hwnd, rc
With frm.trvサーバ
.Width = nWidthTreeView
.Height = frm.ScaleY(rc.Bottom, vbPixels, vbTwips)
End With
' ***********************************
' ツリー以外のサイズ調整
' ***********************************
Call ArrangeSize(frm)
' ********************************************
' ダウンロード
' ********************************************
Case DRAG_FTPFILE
Set nodフォルダ = frm.trvサーバ.SelectedItem
If Target.Name = "lstローカル" Then
strPath = frm.filローカル.Path & "\" & nodフォルダ.Text
If vbOK = MsgBox("ダウンロードを開始します。よろしいですか?", vbOKCancel) Then
strRet = Module1.lbFTPDownload("/" & nodフォルダ.FullPath, strPath)
If strRet <> "" Then
MsgBox (strRet)
Else
MsgBox ("ダウンロードが終了しました")
LoadListView frm
End If
End If
End If
' ********************************************
' アップロード
' ********************************************
Case DRAG_LOCALFILE
If Target.Name = "trvサーバ" Then
strPath = frm.filローカル.Path & "\" & frm.lstローカル.SelectedItem.Text
If vbOK = MsgBox("アップロードを開始します。よろしいですか?", vbOKCancel) Then
strRet = Module1.lbFTPUpload( _
"/" & _
frm.trvサーバ.SelectedItem.FullPath & _
"/" & _
frm.lstローカル.SelectedItem.Text _
, strPath)
If strRet <> "" Then
MsgBox (strRet)
Else
MsgBox ("アップロードが終了しました")
Call ResetTreeNode
End If
End If
End If
End Select
End Sub
' ******************************************************
' ローカルファイルリスト作成
' ******************************************************
Public Sub LoadListView(frm As Form)
Dim i As Long
Dim oFILE As FileListBox
Dim oDIR As DirListBox
Dim oLIST As ListView
Dim oITEM As ListItem
Dim strDir As String
Dim nPos As Long
Set oFILE = frm.filローカル
Set oLIST = frm.lstローカル
Set oDIR = frm.dirローカル
' *************************************************
' ファイルとディレクトリのリストを最新にする
' *************************************************
oFILE.Path = CurDir()
oFILE.Refresh
oDIR.Path = CurDir()
oDIR.Refresh
' *************************************************
' カレントディレクトリを表示
' *************************************************
frm.lbl現在ディレクトリ.Caption = oFILE.Path
' *************************************************
' リストビューをクリア
' *************************************************
oLIST.ListItems.Clear
' *************************************************
' 親ディレクトリへ移動用の項目を追加
' *************************************************
Set oITEM = oLIST.ListItems.Add(, , "親ディレクトリ", , Image_Up)
' *************************************************
' ディレクトリリストを追加
' *************************************************
For i = 0 To oDIR.ListCount - 1
nPos = InStrRev(oDIR.List(i), "\")
strDir = Right(oDIR.List(i), Len(oDIR.List(i)) - nPos)
Set oITEM = oLIST.ListItems.Add(, , strDir, , Image_Closed)
Next i
' *************************************************
' ファイルリストを追加
' *************************************************
For i = 0 To oFILE.ListCount - 1
Set oITEM = oLIST.ListItems.Add(, , oFILE.List(i), , Image_Leaf)
oITEM.SubItems(1) = FileLen(oFILE.List(i))
oITEM.SubItems(2) = FileDateTime(oFILE.List(i))
Next i
' *************************************************
' 選択リスト用配列の初期化
' *************************************************
ReDim ListSelect(frm.lstローカル.ListItems.Count)
End Sub
' ******************************************************
' フォームをデスクトップの中央に移動
' ******************************************************
Public Function lbCenterWindow(TargetForm As Form)
With TargetForm
.Move (Screen.Width - .Width) / 2, (Screen.Height - .Height) / 2
End With
End Function
' ******************************************************
' 子ノードを追加
' ******************************************************
Public Function AddChildNode(TargetTree As TreeView, TargetIndex As Variant)
Dim i As Integer
For i = 1 To Form1.grd一覧.Rows - 1
If Form1.grd一覧.TextMatrix(i, 5) = "10" Then
If Left(Form1.grd一覧.TextMatrix(i, 1), 1) <> "." Then
TargetTree.Nodes.Add _
TargetIndex, _
tvwChild, _
, _
Form1.grd一覧.TextMatrix(i, 1), _
Image_Closed
End If
End If
If Form1.grd一覧.TextMatrix(i, 5) = "80" Then
If Left(Form1.grd一覧.TextMatrix(i, 1), 1) <> "." Then
TargetTree.Nodes.Add _
TargetIndex, _
tvwChild, _
, _
Form1.grd一覧.TextMatrix(i, 1), _
Image_Leaf
End If
End If
Next i
End Function
' ******************************************************
' ノードを開く
' ******************************************************
Public Function OpenNode(TargetNode As Node)
' ターゲットのノードを開く
TargetNode.Expanded = True
' ノードを開いた時のイメージを設定
TargetNode.ExpandedImage = Image_Opend
End Function
' ******************************************************
' ツリービュー以外のサイズ調整
' ******************************************************
Public Function ArrangeSize(frm As Form)
Dim rc As RECT
' *************************************************
' ウインドウ内のサイズ取得
' *************************************************
GetClientRect frm.hwnd, rc
' *************************************************
' 境界
' *************************************************
With frm.drgBar
.Left = frm.trvサーバ.Width
.Top = 0
.Height = frm.ScaleY(rc.Bottom, vbPixels, vbTwips)
End With
' *************************************************
' ドライブ変更用
' *************************************************
With frm.drvローカル
.Left = frm.trvサーバ.Width + frm.drgBar.Width
.Top = 0
.Width = frm.ScaleX(rc.Right, vbPixels, vbTwips) _
- .Left
End With
' *************************************************
' カレントディレクトリ表示
' *************************************************
With frm.lbl現在ディレクトリ
.Left = frm.trvサーバ.Width + frm.drgBar.Width
.Top = frm.drvローカル.Height
.Width = frm.ScaleX(rc.Right, vbPixels, vbTwips) _
- .Left
End With
' *************************************************
' ローカルディレクトリビュー
' *************************************************
With frm.lstローカル
.Left = frm.trvサーバ.Width + frm.drgBar.Width
.Top = frm.drvローカル.Height _
+ frm.lbl現在ディレクトリ.Height
.Width = frm.ScaleX(rc.Right, vbPixels, vbTwips) _
- .Left
.Height = frm.ScaleY(rc.Bottom, vbPixels, vbTwips) _
- .Top
End With
End Function
' ******************************************************
' ツリーのノードデータを再取得
' ******************************************************
Public Function ResetTreeNode()
Dim nodフォルダ As Node
Dim TargetText As String
Dim TargetIndex As Integer
Dim i As Integer
Set nodフォルダ = Form2.trvサーバ.SelectedItem
' 選択しているノードのテキスト
TargetText = nodフォルダ.Text
' 選択しているノードのインデックス
TargetIndex = nodフォルダ.Index
' 選択しているノード以下のサーバ側のファイル一覧を作成
Call Module1.lbFTPEnum( _
nodフォルダ.FullPath, _
"*.*", _
Form1.grd一覧 _
)
' 選択しているノードを削除
Call Form2.trvサーバ.Nodes.Remove(TargetIndex)
' 削除したノードを再度追加
Set nodフォルダ = Form2.trvサーバ.Nodes.Add _
(Form2.trvサーバ.SelectedItem.Index, _
tvwPrevious, _
, _
TargetText, _
Image_Closed)
' 追加したノードを選択状態にする
nodフォルダ.Selected = True
' 追加したノードのインデックス
TargetIndex = Form2.trvサーバ.SelectedItem.Index
' 子ノードを追加
Call AddChildNode(Form2.trvサーバ, TargetIndex)
' ターゲットのノードを開く
Call OpenNode(Form2.trvサーバ.SelectedItem)
End Function
| |