speed button 은 bmp 만 읽을 수 있네요.. 그래서 애써 구한 *.ico 는 필요가 없어 질 수 도 있죠
그래서 그러지 말라고 프로그램 한번 만들어 봤습니다. 참고 하세요
Button1Click 은 직접 변환해서 불러들인것이고..
Button2Click 은 아예 Directory 전체를 변환하는 것입니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TIcon *Icon;
Graphics::TBitmap *Bitmap;
AnsiString CurrentDir, NewDir, FileName;
CurrentDir = GetCurrentDir();
NewDir = CurrentDir + "\\BMP";
Icon = new TIcon;
Bitmap = new Graphics::TBitmap;
Icon->LoadFromFile("button.ico");
Bitmap->Width = (Icon->Width);
Bitmap->Height = (Icon->Height);
Bitmap->Canvas -> Draw(0,0,Icon);
Bitmap->SaveToFile("button.bmp");
SpeedButton1->Glyph = Bitmap;
delete Icon;
delete Bitmap;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TIcon *Icon; // Icon 을 다룰 객체 선언
Graphics::TBitmap *Bitmap; // BitMap 을 다룰 객체 선언
Icon = new TIcon; // Icon 객체 동적생성
Bitmap = new Graphics::TBitmap; // BitMap 객체 동적생성
TSearchRec sr; // Director 정보가 저장될 구조체
AnsiString CurrentDir, NewDir, FileName,ExtName;
int iAttribute = faAnyFile; // File -> Directory 도 포함
int ExtFrom,ExtTo; // 확장자 위치
ExtFrom = 0;
ExtTo = 0;
CurrentDir = GetCurrentDir(); // 현재 directory 을 얻는다.
NewDir = CurrentDir + "\\BMP";
bool ret = CreateDir(NewDir); // 현재 directory 밑으로 BMP directory 을 만든다.
CurrentDir += "/*.*"; // 현재 directory 에서화일들을 선택한다.
if(FindFirst(CurrentDir,iAttribute,sr) == 0 ) { // 제일 처음화일로 옮기고
do {
if(sr.Attr != faDirectory) { // directory 가 아니면
ExtFrom = sr.Name.LastDelimiter(".");
ExtTo = sr.Name.Length(); // 확장자를 구하고
ExtName = sr.Name.SubString(ExtFrom+1,(ExtTo-ExtFrom));
FileName = sr.Name.SubString(1,ExtFrom-1);
if(ExtName.LowerCase() == "ico") { // 확장자 가 ico 이면
iIcoCount ++;
Icon->LoadFromFile(sr.Name); // 불러서
Memo1->Lines->Add("Load : " + sr.Name);
StatusBar1->Panels->Items[0]->Text = "Load : " + sr.Name;
Bitmap->Width = (Icon->Width); // Bitmap 으로 그리고
Bitmap->Height = (Icon->Height);
Bitmap->Canvas -> Draw(0,0,Icon);
Bitmap->SaveToFile(NewDir + "\\" + FileName + ".bmp"); // 새로운 directory 에다가 저장
Memo1->Lines->Add("Convert Complete : " + FileName + ".bmp");
StatusBar1->Panels->Items[0]->Text = "Convert Complete : " + FileName + ".bmp";
}
}
}while(FindNext(sr) == 0 ); // directory 의 제일 마지막 화일 까지.
Memo1->Lines->Add("");
if(iIcoCount == 0 ) {
Application->MessageBox("현재 Directory 에는 *.ico 파일이 없습니다.",
"ico 없음", MB_OK | MB_ICONERROR);
}
else {
Memo1->Lines->Add(IntToStr(iIcoCount) + " 개의 파일을 변환했습니다.");
}
iIcoCount = 0; // 변환한 갯수를 초기화 한다.
}
FindClose(sr); // Directory resource 제거
// Icon 과 Bitmap 메모리에서 제거
delete Icon;
delete Bitmap;
}
//---------------------------------------------------------------------------
|