提倡:将你认为有用的代码放进来,大家共同分享!!!

jone7319 2008-09-18 10:28:51
加精
昨天应一位朋友的请求,写了一个在指定目录下搜索文件,返回其路径的函数,先放这里,大家都来参与吧

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage( BrowDir("c:\\","services.isc"));
}
//---------------------------------------------------------------------------
String __fastcall TForm1::BrowDir(String path,String file)
{
TSearchRec sr;
static String dpath; //关键是这里,必须定义为静态,否则下一次递归将丢掉所得到的值
if (FindFirst(path+"*.*", faAnyFile, sr) == 0) //列举所有的目录
{
do
{
if((sr.Attr & faDirectory) && sr.Name!="." && sr.Name!="..") //判断是否是目录,并排除目录“.”和“..”
BrowDir(path+sr.Name+"\\",file); //调用函数本身,进入子目录
else
if( sr.Name.UpperCase()==file.UpperCase())//找到所需文件
return dpath=path;
} while (FindNext(sr) == 0);
FindClose(sr);
}
return dpath;
}

//---------------------------------------------------------------------------
...全文
5789 199 打赏 收藏 转发到动态 举报
写回复
用AI写文章
199 条回复
切换为时间正序
请发表友善的回复…
发表回复
老白猫 2012-01-16
  • 打赏
  • 举报
回复
好好看看这贴
dami1023 2012-01-05
  • 打赏
  • 举报
回复
mark一下,十分有用。
古典概型 2011-11-15
  • 打赏
  • 举报
回复
这贴不错
sparklxd 2011-09-15
  • 打赏
  • 举报
回复
顶一个再接分
zhaomeng198784 2011-07-08
  • 打赏
  • 举报
回复
很好,
hw540_540 2011-06-22
  • 打赏
  • 举报
回复
路过学习~
火光闪耀 2011-04-22
  • 打赏
  • 举报
回复
大家的反应很不错啊
zou1881 2010-12-14
  • 打赏
  • 举报
回复
一定要记住这个帖子
梦回童年001 2010-12-10
  • 打赏
  • 举报
回复
给大家一段协议分析代码。

void CMessageProcess::ReadData( unsigned char *p_buff, int p_len )
{
///0xE7, 0xA8, 0xB6, 0xCE, 0x4F, 0x4B, 0x0D, 0x0A:
// 1, 两字节的协议头 + 两字节的协议长度 + 1字节协议标识 + 4字节帧序号+ 内容 + 校验码 + 两字节协议结尾.
for( int i=0; i<p_len; i++ )
{
readbuff[m_pos] = p_buff[i];
m_pos++;
if( readbuff[0] == 0xEF && p_buff[1] == 0x23) //如果开始是0xfE 则是一条消息的开始标志
{
if( m_pos >= 5 )
{
//取出长度。
m_cmdLen = 0;
m_cmdLen = readbuff[2] *256 + readbuff[3] ;
if(m_pos>=m_cmdLen )
{
if( analyze() )
{
m_pos = 0;
}
else
{
m_pos = 0;
ReadData( readbuff + 1, p_len - 1 );
}
}
}
}
else
{
m_pos = 0;
}
}
}
/***************************************************************************
分析readbuff中的指令
**************************************************************************/
bool CMessageProcess::analyze()
{
m_NowBusy = true;
unsigned char module;
//开始标志和结束标志是否正确
if( readbuff[0] == 0xEF && readbuff[1] == 0x23 && readbuff[m_cmdLen-1]== 0x4C )
{
module = readbuff[4];
if( makeMessage( module ) ) //生成消息
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
/***************************************************************************
函数名称: bool makeMessage( unsigned char p_module )
功能: 根据p_module 和p_control 取出参数 生成消息
**************************************************************************/
bool CMessageProcess::makeMessage( unsigned char p_module )
{
switch( p_module )
{
case 0x01:
{
//做相应的处理
return true;
} break;
case 0x02:
{

return true;
} break;

break;
}

}
wgh0306 2010-12-07
  • 打赏
  • 举报
回复
谢谢大家了。
wgh0306 2010-12-04
  • 打赏
  • 举报
回复
寻CB高手,要做一个C/S模式的工作站,联网汽车检测线,请高手指点!
|????| 2010-12-01
  • 打赏
  • 举报
回复
做个记号以后好找,现在论坛的查找功能似乎太弱.
chqhebo 2010-11-23
  • 打赏
  • 举报
回复
学习,才接触BCB
walfud 2010-10-25
  • 打赏
  • 举报
回复
传说中的101...
jone7319 2010-08-20
  • 打赏
  • 举报
回复
此贴留有2年了,先结了,大家有好的代码可另开贴!
jone7319 2010-08-03
  • 打赏
  • 举报
回复
Base64解码函数,这是我在飞信验证码中用到的,功能是将将Base64编码的验证码图片解码,得到JPG图片


String Fetion::Base64Decode(String Source)
{
String table="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

byte x1,x2,x3,x4,xt;
int SrcLen,Times,i;
AnsiString Result;

Result="";
SrcLen=Source.Length();
Times=SrcLen/4;
for(i=0;i <Times;i++)
{
x1=table.Pos(Source[1+i*4])-1;
x2=table.Pos(Source[2+i*4])-1;
x3=table.Pos(Source[3+i*4])-1;
x4=table.Pos(Source[4+i*4])-1;
x1 <<=2;
xt=x2>>4;
x1=x1|xt;
Result+=char(x1);
x2<<=4;
if(x3==64) break;//x3 不是 "= "号
xt=x3>>2;
x2=x2|xt;
x3<<=6;
Result+=char(x2);
if(x4==64) break;
x3=x3|x4;
Result+=char(x3);
}
return Result;
}
zou1881 2010-07-19
  • 打赏
  • 举报
回复
顶啊顶,要做个记号,用着时过来查查。谢谢高手无私奉献。
ytfhwfnh 2010-07-14
  • 打赏
  • 举报
回复
不知道大家有没有用过BusinessSkin,每添加一个bs组件都要设置SkinData属性,是不是很麻烦。我把bs的SkinData控件拖在一个数据模块上,然后数据模块实现这样一段代码:

void __fastcall TmySkinModule::enumAndApplySkin(TForm * pForm)
{
for (int i = 0; i < pForm->ComponentCount; i++)
{
PPropInfo ppi = GetPropInfo(PTypeInfo(pForm->Components[i]->ClassInfo()),
"SkinData");

if (ppi)
SetObjectProp(pForm->Components[i], "SkinData", this->bsSkinData);
}
}

每个窗体只要在FormCreate中调用mySkinModule->enumAndApplySkin(this);就可以统一皮肤了。
明朝2013 2010-07-14
  • 打赏
  • 举报
回复
帮顶~~~~~~~
sue3140 2010-07-14
  • 打赏
  • 举报
回复
来恢复个刚刚遇到的问题,用了妖哥的dbgrid转word程序,在windows2000的系统上,空格显示为小方框。

void __fastcall DBGrid2Word(TDBGrid *dbg, String strDocFile)
{
if(!dbg->DataSource->DataSet->Active) // 数据集没有打开就返回
return;
Variant vWordApp, vTable, vCell;
try
{
vWordApp = Variant::CreateObject("Word.Application");
}
catch(...)
{
MessageBox(0, "启动 Word 出错, 可能是没有安装 Word.",
"DBGrid2Word", MB_OK | MB_ICONERROR);
vWordApp = Unassigned;
return;
}
// 新建一个文档
vWordApp.OlePropertyGet("Documents").OleFunction("Add");
Variant vSelect = vWordApp.OlePropertyGet("Selection");
// 设置一下字体,大小
vSelect.OlePropertyGet("Font").OlePropertySet("Size", dbg->Font->Size);
vSelect.OlePropertyGet("Font").OlePropertySet("Name", dbg->Font->Name.c_str());
// 要插入表格的行数
int nRowCount(dbg->DataSource->DataSet->RecordCount + 1);
nRowCount = nRowCount < 2? 2: nRowCount;
// 要插入表格的列数
int nColCount(dbg->Columns->Count);
nColCount = nColCount < 1? 1: nColCount;
// 在Word文档中插入与DBGrid行数列数基本相同的一个表格
vWordApp.OlePropertyGet("ActiveDocument").OlePropertyGet("Tables")
.OleProcedure("Add",
vSelect.OlePropertyGet("Range"),
nRowCount, // 行数
nColCount, // 列数
1, // DefaultTableBehavior:=wdWord9TableBehavior
0); // AutoFitBehavior:=wdAutoFitFixed
// 操作这个表格
vTable = vWordApp.OlePropertyGet("ActiveDocument").
OleFunction("Range").OlePropertyGet("Tables").OleFunction("Item", 1);
// 设置单元格的宽度
for(int i=0; i<nColCount; i++)
{
int nColWidth = dbg->Columns->Items[i]->Width;
vTable.OlePropertyGet("Columns").OleFunction("Item", i + 1)
.OlePropertySet("PreferredWidthType", 3); // wdPreferredWidthPoints
vTable.OlePropertyGet("Columns").OleFunction("Item", i + 1)
.OlePropertySet("PreferredWidth", nColWidth);
}

// 先将列名写入Word表格
for(int j=0; j<dbg->Columns->Count; j++)
{
vCell = vTable.OleFunction("Cell", 1, j + 1);
vCell.OlePropertySet("Range", dbg->Columns->Items[j]->FieldName.c_str());
// 列名单元格背景颜色 // wdColorGray125
vCell.OlePropertyGet("Shading")
.OlePropertySet("BackgroundPatternColor", 14737632);
}
// 将DBGrid中的数据写入Word表格
dbg->DataSource->DataSet->First();
for(int i=0; i<nRowCount; i++)
{
for(int j=0; j<dbg->Columns->Count; j++)
{

vCell = vTable.OleFunction("Cell", i + 1, j + 1);
vCell.OlePropertySet("Range", WideString(
dbg->DataSource->DataSet->FieldByName(
dbg->Columns->Items[j]->FieldName)->AsString.Trim()));
}
dbg->DataSource->DataSet->Next();
}
// 隐藏Word界面
vWordApp.OlePropertySet("Visible", false);
// 保存Word文档并退出
vWordApp.OlePropertyGet("ActiveDocument")
.OleProcedure("SaveAs", strDocFile.c_str());
vWordApp.OlePropertyGet("ActiveDocument").OleProcedure("Close");
Application->ProcessMessages();
vWordApp.OleProcedure("Quit");
Application->ProcessMessages();
vWordApp = Unassigned;
// 工作结束
}
加载更多回复(179)

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧