プログラミング初めて3日ぐらいの初心者ですが宜しくお願いします。
エディットボックスにファイルをD&Dし、そのファイルサイズを取得して
エディットボックスにバイト数で表示させたいのですが、どのように書けば宜しいでしょうか?
検索して似た感じの物を色々書き方を変えたりしたのですが出来ませんでした
初歩的な質問だと思いますが宜しくお願いします。。
エディットボックスへD&Dでファイルサイズを取得して表示
Re: エディットボックスへD&Dでファイルサイズを取得して表示
> 初歩的な質問だと思いますが宜しくお願いします。。
どこをどう判断して初歩的だと判断したんでしょう?初歩的だと思ったのならご自分で実装できるのでは???
※些細な疑問なので無視して下さって構いません
> エディットボックスにファイルをD&Dし、そのファイルサイズを取得して
> エディットボックスにバイト数で表示させたいのですが、どのように書けば宜しいでしょうか?
分からないことや疑問があるなら続けてどうぞ。答えられるか分かりませんけど...。
どこをどう判断して初歩的だと判断したんでしょう?初歩的だと思ったのならご自分で実装できるのでは???
※些細な疑問なので無視して下さって構いません
> エディットボックスにファイルをD&Dし、そのファイルサイズを取得して
> エディットボックスにバイト数で表示させたいのですが、どのように書けば宜しいでしょうか?
- 1. エディットボックスがドラッグ&ドロップを受け付けるようにする
- 1. RADツールを使うかDragAcceptFiles()関数を使う
- 1. エディットボックスをサブクラス化する
- 1. WM_DROPFILESを受信したときの処理を定義する
- 1. ドロップされたファイルのサイズを取得する
2. エディットボックスにファイルのサイズを出力する
- 1. ドロップされたファイルのサイズを取得する
- 1. WM_DROPFILESを受信したときの処理を定義する
コードに直すとこんな感じ。 [ここをクリックすると内容が表示されます]
限定的な機能なので改良の余地があります。コード: 全て選択
Dim hEdit As HWND
Dim OldEditProc As WNDPROC
Function NewEditProc(ByVal hWnd As HWND,ByVal dwMsg As DWord,ByVal wParam As WPARAM,ByVal lParam As LPARAM) As LRESULT
Select Case dwMsg
Case WM_DROPFILES
Dim lpszName[MAX_PATH] As Byte
Dim hFile As HANDLE
DragQueryFile(wParam As HDROP,0,lpszName,MAX_PATH)
hFile=CreateFile(
lpszName,0,
FILE_SHARE_DELETE Or FILE_SHARE_READ Or FILE_SHARE_WRITE,
ByVal NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)
If (hFile<>NULL) And (hFile<>INVALID_HANDLE_VALUE) Then
SetWindowText(hEdit,Str$(GetFileSize(hFile,NULL)))
CloseHandle(hFile)
Else
SetWindowText(hEdit,"ファイルオープンに失敗しました。")
End If
DragFinish(wParam As HDROP)
End Select
Return CallWindowProc(OldEditProc,hWnd,dwMsg,wParam,lParam)
End Function
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
hEdit=GetDlgItem(hMainWnd,EditBox1)
OldEditProc=SetWindowLong(hEdit,GWL_WNDPROC,AddressOf(NewEditProc)) As WNDPROC
End Sub
Sub MainWnd_Destroy()
SetWindowLong(hEdit,GWL_WNDPROC,OldEditProc As LONG_PTR)
End Sub
分からないことや疑問があるなら続けてどうぞ。答えられるか分かりませんけど...。
エディットボックスへD&Dでファイルサイズを取得して表示
回答頂き有難うございます。
想像していたより複雑で長いコードになるんですね、何も解らず勝手に初歩的なのかなと誤解してました。
とりあいず頂いたコードをそのままコンパイルしてみたのですが、下記のエラーが出ました。
MainWnd.sbp(25) - "WNDPROC" 無効な識別子です
MainWnd.sbp(55) - "OldEditProc" 無効な識別子です
MainWnd.sbp(55) - [警告] "SetWindowLong"の第3パラメータが、VoidPtrからLongに強制変換されています。
MainWnd.sbp(55) - "WNDPROC" 無効な識別子です
どのように直せば良いのか、まだ自分では解らないので、宜しかったら教えて下さい。
想像していたより複雑で長いコードになるんですね、何も解らず勝手に初歩的なのかなと誤解してました。
とりあいず頂いたコードをそのままコンパイルしてみたのですが、下記のエラーが出ました。
MainWnd.sbp(25) - "WNDPROC" 無効な識別子です
MainWnd.sbp(55) - "OldEditProc" 無効な識別子です
MainWnd.sbp(55) - [警告] "SetWindowLong"の第3パラメータが、VoidPtrからLongに強制変換されています。
MainWnd.sbp(55) - "WNDPROC" 無効な識別子です
どのように直せば良いのか、まだ自分では解らないので、宜しかったら教えて下さい。
Re: エディットボックスへD&Dでファイルサイズを取得して表示
> とりあいず頂いたコードをそのままコンパイルしてみたのですが、下記のエラーが出ました。
>
> MainWnd.sbp(25) - "WNDPROC" 無効な識別子です
> MainWnd.sbp(55) - "OldEditProc" 無効な識別子です
> MainWnd.sbp(55) - [警告] "SetWindowLong"の第3パラメータが、VoidPtrからLongに強制変換されています。
> MainWnd.sbp(55) - "WNDPROC" 無効な識別子です
>
> どのように直せば良いのか、まだ自分では解らないので、宜しかったら教えて下さい。
Dim OldEditProc As WNDPROCというのをDim OldEditProc As LONG_PTRやDim OldEditProc As Longに変えてみてください。
ActiveBasicのバージョンの違いでちょっと変数の型が宣言されてなかったりして通らないんですよね。
>
> MainWnd.sbp(25) - "WNDPROC" 無効な識別子です
> MainWnd.sbp(55) - "OldEditProc" 無効な識別子です
> MainWnd.sbp(55) - [警告] "SetWindowLong"の第3パラメータが、VoidPtrからLongに強制変換されています。
> MainWnd.sbp(55) - "WNDPROC" 無効な識別子です
>
> どのように直せば良いのか、まだ自分では解らないので、宜しかったら教えて下さい。
Dim OldEditProc As WNDPROCというのをDim OldEditProc As LONG_PTRやDim OldEditProc As Longに変えてみてください。
ActiveBasicのバージョンの違いでちょっと変数の型が宣言されてなかったりして通らないんですよね。