Q
QSmile
Unregistered / Unconfirmed
GUEST, unregistred user!
我最早是用 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
nWORD;
buf:array[0..256] of char;
begin
n := 0;
ReadConsole(m_hConsole,@buf[0],256,n,nil);
SetString(str,PChar(@buf[0]),Integer);
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
nWORD;
begin
WriteConsole(m_hConsole,
PChar(str+#13#10),
Length(str)+2,
n,
nil);
end;
initialization
debug := TDbgWnd.Create;
finalization
debug.Free;
end.
// 使用方法:
// 把这个单元引入工程. 要输出调试信息就用 debug.write 就可以了
// 需引进的地方:
// 类的 ReadAnyKey(); 我想做成 '按任意链继续...'没做完,希望谁能帮我完成
但 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
nWORD;
buf:array[0..256] of char;
begin
n := 0;
ReadConsole(m_hConsole,@buf[0],256,n,nil);
SetString(str,PChar(@buf[0]),Integer);
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
nWORD;
begin
WriteConsole(m_hConsole,
PChar(str+#13#10),
Length(str)+2,
n,
nil);
end;
initialization
debug := TDbgWnd.Create;
finalization
debug.Free;
end.
// 使用方法:
// 把这个单元引入工程. 要输出调试信息就用 debug.write 就可以了
// 需引进的地方:
// 类的 ReadAnyKey(); 我想做成 '按任意链继续...'没做完,希望谁能帮我完成