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