DrGraph图形博士

导航

C++ Builder XE2随意学习 (1)

编程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 = newGraphics::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("剪贴板中没有图片信息,请重试!");

运行后,选项设置界面:

图片

复制图片,点击粘贴后

图片

图片

图片文档自动命名保存在指定目录下

图片

已达到预期效果,不担心不负责任的转载了。准备开始写本系列文章。

水印小工具程序可在 https://skydrive.live.com/?cid=91fcba6f6e95429c&id=91FCBA6F6E95429C%21133 下载,这个是免费的,解压后即可运行,功能自行研究。呵呵。

有兴趣的朋友可加入群208894875进行深入沟通。

posted on 2012-02-05 10:20  drgraph  阅读(828)  评论(0编辑  收藏  举报