Lesson 12 「ドロップに対応したプログラム」(04/08/15 Sun)
← 戻る | Visual Basicメニュー | 次へ → | ☆ Top ☆ |
あーだいぶ今日は涼しいッスねぇこりゃガシガシキーボード打てますよぉ!
いや打たんけども。
えーとホラよくシンプルなソフトなんかで、ソフト起動してドロップしたらナニナニとかあるでしょ?あれやってみたいんすよ!圧縮解凍ソフトとか画像表示ソフトだとよくありますよねぇ。
とりあえずいつもの準備しましょう。標準EXEつくります。
さてここでまず、VBの標準EXEでできたフォームは、デフォルトではドロップに対応してないッス。まずこれを対応するようにしないと、いくらドロップしても無駄ぁ。
で、それはフォームのプロパティ:OLEDropModeってのがそうです。たぶん「0 - なし」になってます。これを「1 - 手動」にしちゃいましょう。コードで書くなら、
Private Sub Form_Load()
Form1.OLEDropMode = 1
End Sub
ですな。プロパティの値かえるだけやし。簡単。まぁこれは準備っす。次は、ドロップされたものが1個か複数かを判別します。1個じゃないとしんどいし。
Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Data.Files.Count = 1 Then 'ドロップが1このとき
'1こです
ElseIf Data.Files.Count > 1 Then 'ドロップが複数のとき
'複数です
Else
End If
End Sub
まぁこんなんです。これでフォームにドロップされたファイルorフォルダが1この時のみ処理を行うなら、3行目に処理内容を書けばいいわけです。ああそういえば「OLE」ってのは、Object Linking and Embeddingの略で、アプリケーション間でデータを転送したり共有したりする仕組みことです。つまり↑の1行目は、「フォームにOLEがドロップされた時〜」となるわけです。んで、カッコにかこまれてるのは、引数です。言いましたよね?つまりこのサブプロシージャが呼び出されたら、6個もの引数がいっしょくたに来るってコトです。別に全部使わなくてもいいです。
んじゃあ次は、ドロップされたものがファイルかフォルダかを判別します。この違いは大きいですヨ。ファイルならそのまま開けますが、フォルダだとなーんもできませんし。
Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Data.Files.Count = 1 Then 'ドロップが1このとき
'1こです
If GetAttr(Data.Files(1)) = 16 Then 'フォルダのとき
'フォルダです
Else 'フォルダじゃないとき
'フォルダじゃないです
End If
ElseIf Data.Files.Count > 1 Then 'ドロップが複数のとき
'複数です
Else
End If
End Sub
えーっと、引数のDataを使います。Data.Files(1)ってゆーのが、ドロップされた1個目のデータのフルパス(ファイルが存在しているディレクトリ C:\Data\sample など)です。そしてGetAttr()関数ってのは、カッコの中にフルパス入れると、そのデータが何かを数字で返します。数字は、0:通常ファイル、1:読み取り専用ファイル、2:隠しファイル、4:システムファイル、16:フォルダ、32:アーカイブ・・・となります。今回判別に16(フォルダ)を使いました。ここを0とかにすればファイルのときの処理がかけます。
ちょっと今回は難しいデス。だいぶ高級感がただよってきましたヨ。こっそりIf文の中にIf文いれたりしてるしね・・・てかもうネタないの・・・うぅ
次なにしよー
(。・ε・。)ムー
← 戻る | Visual Basicメニュー | 次へ → | ☆ Top ☆ |
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||