|
|
|
RichEdit的自动格式化 |
热 ★★★★ |
|
RichEdit的自动格式化 |
|
作者:闵涛 文章来源:闵涛的学习笔记 点击数:656 更新时间:2009/4/23 18:24:26 |
|
这是一个注册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.
没有相关教程
|
|
教程录入:mintao 责任编辑:mintao |
|
|
上一篇教程: RichEdit中实现查找功能 下一篇教程: 改变RichEdit的游标位置 |
|
|
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网] |
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
|
|
|
|
|
|
|
同类栏目 |
|
|
赞助链接 |
|
|
500 - 内部服务器错误。
|
|
|
|
|
|