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] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送