編程N長時間了,Coding已成習慣,也是興趣所在,一天不摸下鍵盤,仿佛總是少了點什麼似的。
但歲月是把殺豬刀,不單是催老了容顏,連學習新鮮知識的勁頭也愈見低落,始終停留在Windows桌面應用程序編程,對管理系統相關知識嘗試過,老是有點不溫不火的狀態。口口聲聲說是Borland的忠實粉絲,其實是為自己不願或不能學習新東東找的一個借口。
時光荏冉,2012新年過了,龍年春節也過了,瑪雅末日日漸逼近,再也找不到借口拖延時間。於是,老調新彈,“新年新氣象”,准備學習,又開始計劃。
計劃什麼呢,還是從自己感興趣的入手吧。上網溜溜,居然發現C++ Builder版本已然發布到XE2!再看下介紹,N多新特性,N多新技術,哈,值得學習一下。尤其是FireMonkey,如此的炫。還支持GPU,很久以前就有想學GPU的沖動,這次一並解決了吧。
所以,這系列日志只是為我自己,寫在博客裡,謹為留念。
由於是從頭開始學習C++ Builder XE2,其中觀點僅為個人理解,嚴重的不權威,各位有選擇地濾過。要是有人跟著走到溝裡去了,概不負責哈。
決心是下了,寫這一系列博文確實也需要一定時間。我也是一個很有中國特色的程序員,用別人的軟件能不花錢就盡量不花錢,但自己編的程序,會花盡心思讓用戶掏銀子,綁定硬盤、CPU、網卡等,讓用戶注冊使用。在這裡,這點小毛病又犯了,在網上寫文章,被轉載一大堆,感覺爽倒是爽,不過最後跟自己都沒有什麼關系。呃,必須扭轉這個局面,借鑒一下圖片水印,也就是說,在本系列BLOG文章中,裡面的圖片將印上我自己的水印。
怎麼做呢,要麼下載個軟件,要麼自己編個小程序。那當然是編個小程序的了,僅為寫BLOG所用。從自己的需求來說,在WORD版本文檔中,全是正常圖片,但發到BLOG中時,會將這些圖片復制出來,另存為圖片文件。
OK,這個程序的使用方式就是,在程序中直接粘貼,就把剪貼板中圖片信息直接加上水印,並自動保存到指定目錄下。
開始編這個程序吧…
Coding...
沒想到,居然斷斷續續花了兩個小時才編好。又犯了程序員的通病,想做一個盡量好用的小工具,包括換膚、配置等,基本功能實現了,但還比較丑陋。
嗯,貌似C++ Builder XE2中,換膚是一件很容易的事,期待了解。
核心代碼(沒來得及寫注釋,應該能看明白):
if(Clipboard()->HasFormat(CF_BITMAP))
{
Graphics::TBitmap * pBitmap = new Graphics::TBitmap;
pBitmap->Assign(Clipboard());
Image_Canvas->Width = pBitmap->Width;
Image_Canvas->Height = pBitmap->Height;
Image_Canvas->Picture->Assign(pBitmap);
delete pBitmap;
TCanvas * canvas = Image_Canvas->Canvas;
canvas->Brush->Style = bsClear;
canvas->Font->Assign(Label_Font->Font);
int angle = 45, horz = 100, vert = 100;
try
{
angle = Edit_Angle->Text.ToInt();
horz = Edit_Horz->Text.ToInt();
vert = Edit_Vert->Text.ToInt();
}catch(...) {}
UpdateFont(canvas, Label_Font->Font, 1, 1, 1, angle);
for(int x = 0; x < Image_Canvas->Width * 2; x += horz)
for(int y = 0; y < Image_Canvas->Height * 2; y += vert)
canvas->TextOut(x, y, Edit_Text->Text);
AnsiString bmpFileName = Edit_Path->Text;
if(!IsEndWith(bmpFileName, "\\"))
bmpFileName += "\\";
CreateDirectory(bmpFileName);
for(int i = 1; ; ++i)
{
AnsiString tempFileName = Format("%scbw%d%s",
ARRAYOFCONST((bmpFileName.c_str(), i, ComboBox_PicType->Text.c_str())));
if(!FileExists(tempFileName))
{
bmpFileName = tempFileName;
break;
}
}
bmpFileName = ChangeFileExt(bmpFileName, ".BMP");
Image_Canvas->Picture->SaveToFile(bmpFileName);
GlobalImageObject->OnCommand(Format("<request FileName='%s' Type='Set' />",
ARRAYOFCONST((bmpFileName.c_str()))));
GlobalImageObject->OnCommand(Format("<request Type='Set' ImageFormat='%s' />",
ARRAYOFCONST((ComboBox_PicType->Text.c_str()))));
if(!SameText(ComboBox_PicType->Text, ".bmp"))
DeleteFile(bmpFileName);
}
else
ShowMessage("剪貼板中沒有www.2cto.com圖片信息,請重試!");
if(Clipboard()->HasFormat(CF_BITMAP)) { Graphics::TBitmap * pBitmap = new Graphics::TBitmap; pBitmap->Assign(Clipboard()); Image_Canvas->Width = pBitmap->Width; Image_Canvas->Height = pBitmap->Height; Image_Canvas->Picture->Assign(pBitmap); delete pBitmap; TCanvas * canvas = Image_Canvas->Canvas; canvas->Brush->Style = bsClear; canvas->Font->Assign(Label_Font->Font); int angle = 45, horz = 100, vert = 100; try { angle = Edit_Angle->Text.ToInt(); horz = Edit_Horz->Text.ToInt(); vert = Edit_Vert->Text.ToInt(); }catch(...) {} UpdateFont(canvas, Label_Font->Font, 1, 1, 1, angle); for(int x = 0; x < Image_Canvas->Width * 2; x += horz) for(int y = 0; y < Image_Canvas->Height * 2; y += vert) canvas->TextOut(x, y, Edit_Text->Text); AnsiString bmpFileName = Edit_Path->Text; if(!IsEndWith(bmpFileName, "\\")) bmpFileName += "\\"; CreateDirectory(bmpFileName); for(int i = 1; ; ++i) { AnsiString tempFileName = Format("%scbw%d%s", ARRAYOFCONST((bmpFileName.c_str(), i, ComboBox_PicType->Text.c_str()))); if(!FileExists(tempFileName)) { bmpFileName = tempFileName; break; } } bmpFileName = ChangeFileExt(bmpFileName, ".BMP"); Image_Canvas->Picture->SaveToFile(bmpFileName); GlobalImageObject->OnCommand(Format("<request FileName='%s' Type='Set' />", ARRAYOFCONST((bmpFileName.c_str())))); GlobalImageObject->OnCommand(Format("<request Type='Set' ImageFormat='%s' />", ARRAYOFCONST((ComboBox_PicType->Text.c_str())))); if(!SameText(ComboBox_PicType->Text, ".bmp")) DeleteFile(bmpFileName); } else ShowMessage("剪貼板中沒有圖片信息,請重試!");
運行後,選項設置界面:
復制圖片,點擊粘貼後
圖片文檔自動命名保存在指定目錄下
已達到預期效果,不擔心不負責任的轉載了(www.2cto.com是個很負責的站)。准備開始寫本系列文章有興趣的朋友可加入群208894875進行深入溝通
摘自 ArWen的專欄