• 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进行深入沟通。

  • 相关阅读:
    (转)CentOS 和 Ubuntu 下的网络配置
    love 的Python 表示
    python mysqlLdb ImportError: DLL load failed: 找不到指定的模块
    elasticsearch7.11.1安装及使用小记
    python多进程代码示例
    在c++项目中使用高性能的rapidjson作为json处理库
    使用kenlm进行文本纠错
    供應商主檔建立流程
    SAP系統自帶范例
    内部订单作业流程
  • 原文地址:https://www.cnblogs.com/drgraph/p/2338783.html
Copyright © 2020-2023  润新知