捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
一个 Debug 窗口类 v0.9beta
关键字:DbgWnd Debug.Print 窗口类
来 自:原创
平 台:Win9x,Win2k/XP/NT,Win2003 下载所需:0 火柴
深浅度:初级 完成时间:2006/7/11
发布者:qsmile 发布时间:2006/7/11
编辑器:DELPHI7 语  种:繁体中文
分 类:不常用 下载浏览:0/9099
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
无图片
我最早是用 VB 的,后来才用的 Delphi .相比而言我很喜欢用 Delphi .

但 VB 下有个功能.我却恋恋不忘.那就是它内置的 debug 类.如果程序想输出什么调试信息,直接用 debug.print 就可以了. Delphi 没这个功能.不过有更强大的 CodeSite 之类的.问题也不是很大.

但现在我要用 Delphi 做纯 API 的开发.所以我就写了这样一个类.

unit DbgWnd;

//////////
//  Class Name: Debug Windows
//  Author    : RedFox (singlecat@163.com)
//  Date      : 2006-07-11
//  Version   : 0.9beta
//  使用方法:
//          把这个单元引入工程. 要输出调试信息就用 debug.write 就可以了
//  需引进的地方:
//          类的 ReadAnyKey(); 我想做成 '按任意链继续...'没做完,希望谁能帮我完成          
//////////

interface

uses
  Windows;

type
  TDbgWnd = class
  private
    m_hConsole:THandle;
  public
    constructor Create;
    destructor Destroy;override;
    procedure write(str:string);
    procedure read(var str:string);
    procedure ReadAnyKey();
  end;

var
  debug :TDbgWnd;

implementation

{ TDbgWnd }

constructor TDbgWnd.Create;
begin
 AllocConsole;
 m_hConsole := CreateConsoleScreenBuffer(GENERIC_READ or GENERIC_WRITE,
         FILE_SHARE_READ or FILE_SHARE_WRITE, nil, CONSOLE_TEXTMODE_BUFFER, 0);
 SetConsoleActiveScreenBuffer(m_hConsole);
 SetConsoleMode(m_hConsole,ENABLE_LINE_INPUT or ENABLE_ECHO_INPUT);
 SetConsoleTitle('debug window') ;
end;

destructor TDbgWnd.Destroy;
begin
  FreeConsole;
  inherited;
end;

procedure TDbgWnd.read(var str: string);
var
  n:DWORD;
  buf:array[0..256] of char;
begin
  n := 0;
  ReadConsole(m_hConsole,@buf[0],256,n,nil);
  SetString(str,PChar(@buf[0]),Integer(n));
end;

procedure TDbgWnd.ReadAnyKey;
var
  s:string;
begin
  self.write('Press Any Key to continue....');
  Self.read(s);
end;

procedure TDbgWnd.Write(str: string);
var
  n:DWORD;
begin
  WriteConsole(m_hConsole,
          PChar(str+#13#10),
          Length(str)+2,
          n,
          nil);
end;


initialization
  debug := TDbgWnd.Create;

finalization
  debug.Free;

end.
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
没有相关文章
相关评论
共有评论4条 当前显示最后4条评论
jmwl77 2006/7/12 23:01:13
有启发~
riverqh 2006/7/14 11:46:41
写代码都是假设执行是没有问题的,这个不大好吧?嗯,就是说一些调用API还是需要加个IF...THEN...判断下。

至于ReadAnyKey,事实上主线程是你的GUI,Console只是作为一个输出窗口而已,消息的循环也不应该进入Console等待,所以这个需求可以加个MessageBox提示窗口阻塞主线程——不过建议不要这样,因为Debug的输出窗口类似Log,不要在里面有任何阻塞是最好的,这样才不影响主程序的运行。还要一点,你试试点Console的关闭按钮。。。呵呵
qsmile 2006/7/17 15:32:49
又有新的更新了
kinneng 2006/7/23 14:45:48
没需要CodeSite,Delphi也可以输出调试信息,这样写 OutputDebugString(''),在IDE的菜单View-Debug Windows-Event Log这个窗口就可以看到信息,在菜单Tools-Debugger Options弹出的设置窗口的Event Log选卡里面,有关于它的选项,如果要显示数据,要这样OutputDebugString(PChar(IntToStr(123)));如果脱离IDE程序独立运行,可以用其它编程软件的,例如DebugView之类的软件来看信息。这不是很好吗?
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 1999-2012 V3.01 沪ICP备05001939号 更新RSS列表