Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16495989
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:48:22

下载本文示例代码
p>  这是一个注册EXE,OBJ,BIN三种类型文件当其被RichEdit打开时会自动转换为16进制显示的例子 C Builder 请参照Delphi的例子 Delphi 第一:要从TCoriversion派生出一个新类 第二:重载CorrvertReadStream函数 第三:在主窗体的OnCreate函数中登记文件类型。用RichEdit的.RegisterConversionFormat函数 unit main; interface uses Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs, Menus, StdCtrls, ComCtrls; type TMainForm = class(TForm) MainMenu1: TMainMenu; MenuFile: TMenuItem; MenuOpen: TMenuItem; MenuSaveAs: TMenuItem; N1: TMenuItem; MenuExit: TMenuItem; OpenDlg: TOpenDialog; SaveDlg: TSaveDialog; Rich: TRichEdit; StatusBar: TStatusBar; procedure FormCreate(Sender: TObject); procedure MenuOpenClick(Sender: TObject); procedure MenuSaveAsClick(Sender: TObject); procedure MenuExitClick(Sender: TObject); procedure MenuPopupPopup(Sender: TObject); procedure MenuSelectAllClick(Sender: TObject); procedure MenuCopyClick(Sender: TObject); private procedure Progress(Address:LongInt); end; var MainForm: TMainForm; implementation {$R *.DFM} type THexConversion = class(TConversion) public function ConvertReadStream(Stream:TStream; Buffer:PChar; BufSize:integer): integer; override; end; // This implements a callback procedure used by TRichEdit when loading // a file. Gets called repeatedly until stream is empty. // function THexConversion.ConvertReadStream(Stream:TStream; Buffer:PChar; BufSize:integer): intege var s:string; buf:array[1..16] of char; i,n:integer; begin Result := 0; if BufSize s := Format(;%.5x ,[Stream.Position]); n := Stream.Read(buf,16); if n = 0 then Exit; for i := 1 to n do begin AppendStr(s,IntToHex(ord(buf[i]),2) ); if i mod 4 = 0 then AppendStr(s, ); end; AppendStr(s,StringOfChar( ,62-length(s))); for i := 1 to n do begin if (buf[i] #126) then buf[i] := .; AppendStr(s,buf[i]); end; AppendStr(s,#13#10); StrPCopy(Buffer,s); Result := length(s); if Stream.Position and $FFF = 0 then MainForm.Progress(Stream.Position); end; procedure TMainForm.Progress(Address:LongInt); begin StatusBar.SimpleText := Reading... $ IntToHex(Address,5); StatusBar.Update; end; procedure TMainForm.FormCreate(Sender: TObject); begin Rich.RegisterConversionFormat(bin,THexConversion); Rich.RegisterConversionFormat(obj,THexConversion); Rich.RegisterConversionFormat(exe,THexConversion); end; procedure TMainForm.MenuOpenClick(Sender: TObject); var fname:string; begin if OpenDlg.Execute then begin try Screen.Cursor := crHourglass; fname := ExtractFileName(OpenDlg.Filename); StatusBar.SimpleText := Reading...; Rich.Lines.Clear; Application.ProcessMessages; try Rich.Lines.LoadFromFile(OpenDlg.Filename); StatusBar.SimpleText := fname; except on E:EFOpenError do begin StatusBar.SimpleText := ; MessageDlg(Format(Cant open file %s.,[fname]),mtError,[mbOk],0); end; end; finally Screen.Cursor := crDefault; end; end; end; procedure TMainForm.MenuSaveAsClick(Sender: TObject); begin SaveDlg.Filename := ChangeFileExt(OpenDlg.FileName,.txt); if SaveDlg.Execute then Rich.Lines.SaveToFile(SaveDlg.FileName); end; procedure TMainForm.MenuExitClick(Sender: TObject); begin Close; end; end. p>  这是一个注册EXE,OBJ,BIN三种类型文件当其被RichEdit打开时会自动转换为16进制显示的例子 C Builder 请参照Delphi的例子 Delphi 第一:要从TCoriversion派生出一个新类 第二:重载CorrvertReadStream函数 第三:在主窗体的OnCreate函数中登记文件类型。用RichEdit的.RegisterConversionFormat函数 unit main; interface uses Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs, Menus, StdCtrls, ComCtrls; type TMainForm = class(TForm) MainMenu1: TMainMenu; MenuFile: TMenuItem; MenuOpen: TMenuItem; MenuSaveAs: TMenuItem; N1: TMenuItem; MenuExit: TMenuItem; OpenDlg: TOpenDialog; SaveDlg: TSaveDialog; Rich: TRichEdit; StatusBar: TStatusBar; procedure FormCreate(Sender: TObject); procedure MenuOpenClick(Sender: TObject); procedure MenuSaveAsClick(Sender: TObject); procedure MenuExitClick(Sender: TObject); procedure MenuPopupPopup(Sender: TObject); procedure MenuSelectAllClick(Sender: TObject); procedure MenuCopyClick(Sender: TObject); private procedure Progress(Address:LongInt); end; var MainForm: TMainForm; implementation {$R *.DFM} type THexConversion = class(TConversion) public function ConvertReadStream(Stream:TStream; Buffer:PChar; BufSize:integer): integer; override; end; // This implements a callback procedure used by TRichEdit when loading // a file. Gets called repeatedly until stream is empty. // function THexConversion.ConvertReadStream(Stream:TStream; Buffer:PChar; BufSize:integer): intege var s:string; buf:array[1..16] of char; i,n:integer; begin Result := 0; if BufSize s := Format(;%.5x ,[Stream.Position]); n := Stream.Read(buf,16); if n = 0 then Exit; for i := 1 to n do begin AppendStr(s,IntToHex(ord(buf[i]),2) ); if i mod 4 = 0 then AppendStr(s, ); end; AppendStr(s,StringOfChar( ,62-length(s))); for i := 1 to n do begin if (buf[i] #126) then buf[i] := .; AppendStr(s,buf[i]); end; AppendStr(s,#13#10); StrPCopy(Buffer,s); Result := length(s); if Stream.Position and $FFF = 0 then MainForm.Progress(Stream.Position); end; procedure TMainForm.Progress(Address:LongInt); begin StatusBar.SimpleText := Reading... $ IntToHex(Address,5); StatusBar.Update; end; procedure TMainForm.FormCreate(Sender: TObject); begin Rich.RegisterConversionFormat(bin,THexConversion); Rich.RegisterConversionFormat(obj,THexConversion); Rich.RegisterConversionFormat(exe,THexConversion); end; procedure TMainForm.MenuOpenClick(Sender: TObject); var fname:string; begin if OpenDlg.Execute then begin try Screen.Cursor := crHourglass; fname := ExtractFileName(OpenDlg.Filename); StatusBar.SimpleText := Reading...; Rich.Lines.Clear; Application.ProcessMessages; try Rich.Lines.LoadFromFile(OpenDlg.Filename); StatusBar.SimpleText := fname; except on E:EFOpenError do begin StatusBar.SimpleText := ; MessageDlg(Format(Cant open file %s.,[fname]),mtError,[mbOk],0); end; end; finally Screen.Cursor := crDefault; end; end; end; procedure TMainForm.MenuSaveAsClick(Sender: TObject); begin SaveDlg.Filename := ChangeFileExt(OpenDlg.FileName,.txt); if SaveDlg.Execute then Rich.Lines.SaveToFile(SaveDlg.FileName); end; procedure TMainForm.MenuExitClick(Sender: TObject); begin Close; end; end. 下载本文示例代码


RichEdit的自动格式化RichEdit的自动格式化RichEdit的自动格式化RichEdit的自动格式化RichEdit的自动格式化RichEdit的自动格式化RichEdit的自动格式化RichEdit的自动格式化RichEdit的自动格式化RichEdit的自动格式化RichEdit的自动格式化RichEdit的自动格式化RichEdit的自动格式化RichEdit的自动格式化RichEdit的自动格式化
阅读(187) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~