//---------------------------------------------------------------------------
#define NO_WIN32_LEAN_AND_MEAN // 从 Windows 头中排除极少使用的资料
#include <shlobj.h>
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "idglobal.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CGAUGES"
#pragma resource "*.dfm"
TForm1 *Form1;
TStringList *pList = new TStringList();
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String this_file_name;
String original_path; //记录所选文件的原始路径名
pList->Clear();
Memo1->Clear();
Memo2->Clear();
CGauge1->Progress=0;
OpenDialog1->Options.Clear();
OpenDialog1->Options << ofAllowMultiSelect << ofFileMustExist;
OpenDialog1->FilterIndex = 2; // start the dialog showing all files
Memo1->Clear();
if (OpenDialog1->Execute())
{
for (int I = 0; I < OpenDialog1->Files->Count; I ++)
{
this_file_name=OpenDialog1->Files->Strings[I];
pList->Add(this_file_name);
}
}
//下面对读入的文件名称进行处理
//首选判断用户是否选择了文件
if (pList->Count==0) goto out; //如果用户没有选择文件,则跳出下步处理程序
CGauge1->MaxValue=pList->Count;
BitBtn1->Enabled=true;
BitBtn2->Enabled=true;
original_path=ExtractFilePath(pList->Strings[0]);
Edit1->Text=original_path;
pList->Sorted = true;
for(int I=0; I<pList->Count; I++)
{
Memo1->Lines->Add(pList->Strings[I]);
}
Memo1->Lines->Add("---------------------------------------------------------------------
------------------------------");
Memo1->Lines->Add(IntToStr(pList->Count)+"个文件成功导入!") ;
out:
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Memo1->Clear();
Memo2->Clear();
Memo1->Lines->Add("选择待处理的文件...");
Memo2->Lines->Add("处理后结果...");
Edit1->Text="默认为原目录...";
CGauge1->Progress=0;
BitBtn1->Enabled=false;
BitBtn2->Enabled=false;
Label1->Caption="0";
Label3->Caption="0";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
//首先读取pList中的文件列表
String this_file;
String this_ex;
String original_path=ExtractFilePath(pList->Strings[0]);
String output_path=String(Edit1->Text);
CGauge1->Progress=0;
Label3->Caption=pList->Count; //一共选中了多少个文件
if(RadioButton1->Checked==true) //如果把文件名改为小写
{
for(int I=0; I<pList->Count; I++)
{
this_file=output_path+LowerCase(ExtractFileName(pList->Strings[I]));
//判断是否是原目录,如果输出目录为原目录,则执行改名操作
if(strcmp(original_path.c_str(),output_path.c_str())==0)
RenameFile(pList->Strings[I],this_file);
else
CopyFileTo(pList->Strings[I],this_file);
CGauge1->Progress=I+1;
Label1->Caption=I+1;
Memo2->Lines->Add(this_file);
} //end for (int I=0; I<pList->Count; I++)
Memo2->Lines->Add("-------------------------------------------------------------------
--------------------------------");
Memo2->Lines->Add(IntToStr(CGauge1->Progress)+"个文件名转换成功! ");
} //end if(RadioButton1->Checked==true)
if(RadioButton2->Checked==true) //如果把文件名改为大写
{
for(int I=0; I<pList->Count; I++)
{
this_file=output_path+UpperCase(ExtractFileName(pList->Strings[I]));
//判断是否是原目录,如果输出目录为原目录,则执行改名操作
if(strcmp(original_path.c_str(),output_path.c_str())==0)
RenameFile(pList->Strings[I],this_file);
else
CopyFileTo(pList->Strings[I],this_file);
CopyFileTo(pList->Strings[I],this_file);
CGauge1->Progress=I+1;
Label1->Caption=I+1;
Memo2->Lines->Add(this_file);
}
Memo2->Lines->Add("-----------------------------");
Memo2->Lines->Add(IntToStr(CGauge1->Progress)+"个文件名转换成功! ");
}
if(RadioButton3->Checked==true) //如果处理为虚拟专家软件需要的格式
{
int jpg_cnt=0;
for(int I=0; I<pList->Count; I++)
{
this_ex=LowerCase(ExtractFileExt(pList->Strings[I]));
if(this_ex.Pos("jp")>0) //如果扩展名中含有jp,即以.jpg,.jpeg,.jpe为扩展名
{
this_file=output_path+IntToStr(jpg_cnt+1)+".jpg";
CopyFileTo(pList->Strings[I],this_file);
CGauge1->Progress=jpg_cnt+1;
Label1->Caption=jpg_cnt+1;
Memo2->Lines->Add(this_file);
jpg_cnt++;
} //end if(this_ex.Pos("jp")>0)
} //end for(int I=0; I<pList->Count; I++)
Memo2->Lines->Add("-----------------------------");
Memo2->Lines->Add(IntToStr(CGauge1->Progress)+"个文件名转换成功! "+IntToStr(pList-
>Count-jpg_cnt)+"个非JPEG文件未转换." );
jpg_cnt=0;
} //end if(RadioButton3->Checked==true)
if(RadioButton4->Checked==true) //如果处理为虚拟专家软件需要的格式
{
for(int I=0; I<pList->Count; I++)
{
this_ex=LowerCase(ExtractFileExt(pList->Strings[I]));
this_file=output_path+IntToStr(I+1)+this_ex;
CopyFileTo(pList->Strings[I],this_file);
CGauge1->Progress=I+1;
Label1->Caption=I+1;
Memo2->Lines->Add(this_file);
} //end for(int I=0; I<pList->Count; I++)
Memo2->Lines->Add("-----------------------------");
Memo2->Lines->Add(IntToStr(CGauge1->Progress)+"个文件名转换成功! ");
} //end if(RadioButton4->Checked==true)
BitBtn1->Enabled=false;
BitBtn2->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
delete pList;
}
//---------------------------------------------------------------------------
bool __fastcall TForm1::MyBrowserDir(HANDLE hWin, LPSTR lpCaption, LPSTR lpDir, LPSTR
lpDispName)
{
BROWSEINFO bi;
LPITEMIDLIST pidl;
LPMALLOC pShellMalloc;
bool bRet = false;
// SHBrowseForFolder returns a PIDL. The memory for the PIDL is
// allocated by the shell. Eventually, we will need to free this
// memory, so we need to get a pointer to the shell malloc COM
// object that will free the PIDL later on.
if(SHGetMalloc(&pShellMalloc) == NO_ERROR)
{
// if we were able to get the shell malloc object,
// then proceed by initializing the BROWSEINFO stuct
memset(&bi, 0x00, sizeof(bi));
bi.hwndOwner = hWin; // Owner window
bi.pidlRoot = 0; // root folder
bi.pszDisplayName = lpDispName; // return display name
bi.lpszTitle = lpCaption; // label caption
bi.ulFlags = BIF_RETURNONLYFSDIRS; // config flags
bi.lpfn = 0; // callback function
// execute the browsing dialog
pidl = SHBrowseForFolder(&bi);
// pidl will be null if they cancel the browse dialog.
// pidl will be not null when they select a folder
if(pidl)
{
// try to convert the pidl to a display string
// return is true if success
if(SHGetPathFromIDList(pidl, lpDir))
bRet = true;
// use the shell malloc com object to free the pidl.
// then call Relasee to signal that we don't need
// the shell malloc object anymore
pShellMalloc->Free(pidl);
}
pShellMalloc->Release();
}
return bRet;
}
//------------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
char lpDir[MAX_PATH];
char lpDispName[MAX_PATH];
bool bRet = MyBrowserDir(Handle, "请选择一个文件夹:", lpDir, lpDispName);
if(bRet)
//ShowMessage(String("选择的文件夹是: ") + String(lpDir) + String("/r/n")+ String("显
示名称是: ") + String(lpDispName));
Edit1->Text=String(lpDir)+"//";
else
ShowMessage("没有选择文件夹!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
ShowMessage("/t 聊城大学教育传播技术学院/n/t http://ect.lcu.edu.cn/n /n本程序专
为三维全景制作-环视专家软件制作/n /n环视专家图片要求:/n 1.图片必须是JPEG格式,并以小写
jpg做为扩展名/n 2.图片必须按1.jpg,2.jpg,3.jpg...格式命名");
}
//------------------------------------------------------------