这是一个注册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 <= 82 then exit;
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] < #32) or (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.
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器