▼ Mr.XRAYさん
> 一応やってみました.
>
> (1)Button1クリックでフォルダ内のファイルをアイコン表示
> アイコン表示しかできないようです.
> (2)SpeedButtonクリックで選択ファイルのファイル名をMemo1に表示
> (3)ファイル上のマウス右クリックで,選択ファイルをMemo1に表示
Mr_XRAYさん、皆さんありがとうございました。
亀レスですみません。
本当に、難しいとはココに限ります。DelphiQ&Aではとてもココまで
追求は出来なかったでしょう。
感謝します。
アイコンをコンテキストメニューの代わりに右クリックで
ファイルバスを取得して、自分の指定したビューワーに表示したいですから
番号でいえば(3)になると思います。
ぼ〜っとしていたわけではありませんで、自分の知識レベルでは
途中経過では、ついて行けないので、傍観させて頂いていました。
それと、私の既存のプログラムにファイルコピー、削除、移動
コンポーネントにSHFILEOPSTRUCTを使っていましたが、
CPU負荷が大きいのとリソースを食うので、
使いやすい?ようにしたShfOperationコンポーネントに切り替えていましたが、
このコンポーネントのバグ(仕様かも)
を発見しまして、大変だと、その再現テストと修正、検証を夢中でやっていました。
長文になりますが、かいつまんで書きますと、
コピー先に同じファイル名で更新日が新しいファイルがあった場合
コピー元ファイルが同じ名前で更新日が古い場合、
ファイル名に日付文字列を付けて名前変更してコピーするとき
ShfOperationは、名前を変更できないでコピー〜を勝手に付けてコピーするが、
SHFILEOPSTRUCTは、正常に名前を変えてくれてコピーできる。
例とコード(略)
FromFile D:\マイ ドキュメント\Temp\aaa.txt (2005/10/01/ 12:35)
ToFile(コピー先)D:\pppppp\aaa.txt(更新日 2008/02/14/ 20:15)
ファイル名を変更する。
//SearchRec.Timeは検出した aaa.txtの 更新日2005/10/01 12:35.
yyyymmdd:= FormatDateTime('yyyymmddhhnnss', FileDateToDateTime(SearchRec.Time));
ToFile2:=D:\pppppp\aaa.txt; ←最初予定したコピー先ファイル名,これを変更する
LastDelim := LastDelimiter('.', ToFile2);
Insert( '['+yyyymmddhhnnss+']', ToFile2, LastDelim);
ToFile:=ToFile2;
ShowMessage(ToFile);→(D:\pppppp\aaa[200510011235].txt)
ForceDirectories(ExtractFilePath( ToFile));
ShfOperation1.OperationF:=foCOPY;
ShfOperation1.Options.RENAMEONCOLLISION:=true;
ShfOperation1.Options.NOCONFIRMMKDIR:=true;
ShfOperation1.FromFFList.Clear;
ShfOperation1.FromFFList.Add(FromFile);
ShfOperation1.ToFolder:= ExtractFilePath( ToFile);
ShfOperation1.ToFiles.Add(ToFile);
ShfOperation1.Execute;
コピー 〜aaa.txtになる。
|