程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ Builder XE2隨意學習 (1)

C++ Builder XE2隨意學習 (1)

編輯:C++入門知識

編程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的專欄

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved