在BCB中实现TRichEdit的自动格式化

整的你响死

整的你响死

2016-02-19 16:32

图老师小编精心整理的在BCB中实现TRichEdit的自动格式化希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

  这是一个注册EXE,OBJ,BIN三种类型文件,当其被RichEdit打开时会自动转换为16进制显示的例子

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  --------------------------------------------------------------------------------

  步骤:

  第一:要从TCoriversion派生出一个新类

  第二:重载CorrvertReadStream函数

  第三:在主窗体的OnCreate函数中登记文件类型。用RichEdit的.RegisterConversionFormat函数

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  

//---------------------------------------------------------------------------
// 从TCoriversion派生出一个新类
class THexConversion : public TConversion
{
public:
  virtual int __fastcall ConvertReadStream(TStream *pStream,
      char *pSrcBuffer, int nBufSize);
};
//---------------------------------------------------------------------------
// 重载 ConvertReadStream 函数
int __fastcall THexConversion::ConvertReadStream(TStream *pStream,
    char *pSrcBuffer, int nBufSize)
{
  String strTemp;
  unsigned char szDstBuffer[16];
  int n;
  int nResult;
  if(nBufSize = 82)
    return 0;
  // 行号,类似UtrlEdit,用8位来表示
  strTemp = strTemp.sprintf("%.8xh: ", pStream-Position);
  n = pStream-Read(szDstBuffer, 16);
  if(n == 0)
    return 0;
  // 显示字符的ASCII值,四个一组,中间用空格分隔
  for(int i=0; in; i++)
  {
    AppendStr(strTemp, IntToHex(szDstBuffer[i], 2) + ' ');
    if((i+1) % 4 == 0)
      AppendStr(strTemp, ' ');
  }
  String str;
  str.StringOfChar(' ', 65 - strTemp.Length());
  AppendStr(strTemp, str + "; ");
  // 显示实际的Ascii字符,如果是非可打印字符,用'.'代替
  for(int i=0; in; i++)
  {
    if((szDstBuffer[i] 32) || (szDstBuffer[i] 126))
      szDstBuffer[i] = '.';
    AppendStr(strTemp, (char)szDstBuffer[i]);
  }
  AppendStr(strTemp, "n");
  StrCopy(pSrcBuffer, strTemp.c_str());
  nResult = strTemp.Length();
  // 显示加载进度
  Form1-Process(pStream-Position);
  Application-ProcessMessages();
  return nResult;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  // 登记文件类型
  RichEdit1-RegisterConversionFormat(NULL, "bin", __classid(THexConversion));
  RichEdit1-RegisterConversionFormat(NULL, "obj", __classid(THexConversion));
  RichEdit1-RegisterConversionFormat(NULL, "exe", __classid(THexConversion));
}
//---------------------------------------------------------------------------
// 自定义函数,须在.h文件中TForm1类中声明一下,例如:
// public:
//   void __fastcall Process(int nPos);
//
// 为防止不负责任的转载者,在些注明原作及修改者信息,请见谅。
// 原作:张晶晶
// 修改:ccrun(老妖),欢迎光临C++Builder研究: http://www.ccrun.com
//---------------------------------------------------------------------------
void __fastcall TForm1::Process(int nPos)
{
  // 显示加载进度
  StatusBar1-SimpleText = "正在处理... " + String(nPos);
  StatusBar1-Update();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  RichEdit1-Lines-LoadFromFile("C:\123\123.exe");
  StatusBar1-SimpleText = "加载完成!";
}
//---------------------------------------------------------------------------

展开更多 50%)
分享

猜你喜欢

在BCB中实现TRichEdit的自动格式化

编程语言 网络编程
在BCB中实现TRichEdit的自动格式化

MyEclipse怎么设置代码在保存时自动进行格式化

电脑网络
MyEclipse怎么设置代码在保存时自动进行格式化

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

excel图表中的条件格式化

电脑入门
excel图表中的条件格式化

自动套用格式在Word2018中怎样实现

word
自动套用格式在Word2018中怎样实现

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

“磁盘未被格式化,是否格式化”的解决方法

电脑入门
“磁盘未被格式化,是否格式化”的解决方法

如何格式化软碟?

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
如何格式化软碟?

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

双系统安装实战 不用工具修复也运行

双系统安装实战 不用工具修复也运行

复制字符串中的字符

复制字符串中的字符
下拉加载更多内容 ↓