BeDC

Written By: Magnus Landahl                                           
Copyright © Magnus Landahl - Stockholm 2000 
This application is FreeWare!

Version 1.0


New features in Ver 1.0
Cut/Copy/Delete has been added. 
Full implementation of drag and drop.
You´re now able to dump BMessages and send format strings like printf.
A 'windows always on top' property has been added.
And a lot of other improvments...

Installation:
Drop the BeDC.h file in the link or copy the file to /boot/deveop/headers/

How to use:
All you have to do is to create an BeDC object and use that one to send messages. It´s that simple.
An quick example:

	BeDC dc;
	dc.SendMessage("It just works!!!");

First some defines:
Colors:
	White	 			= DC_WHITE	
	Black 			= DC_BLACK			
	Blue 				= DC_BLUE			
	Red 				= DC_RED					
	Yellow 			= DC_YELLOW				
	Green 			= DC_GREEN	

Message types:
	Normal message 		= DC_MESSAGE	
	Success message	= DC_SUCCESS	
	Error message 		= DC_ERROR

The constructor:

BeDC(const char *name, int8 color);
'name' is the display name, it could be what ever you want. Default is: "Application"
'color' is the color of the head. If you don´t specify a color BeDC will use the defaut head color.

Member functions:

SendMessage(char *text, int8 type);
Sends a normal message.

SendSeparator();
Adds a separator.

SendInt(Int32 / Int64 integer, const char *description, int8 type);
Sends an int32 or int64. If you don´t specify a description BeDC will print "Integer"

SendPoint(BPoint point, const char *description, int8 type);
Sends a BPoint. If you don´t specify a description BeDC will print "Point"

SendRect(BRect rect, const char *description, int8 type);
Sends a BRect. If you don´t specify a description BeDC will print "Rectangle"	

SendFormat(const char *text, ...);
SendFormatT(const char *text, int8 type, ...);
Sends a format string like printf. SendFormatT is used when you want to specify the message type.

DumpBMessage(BMessage *Message, const char *desc = "", int8 type = DC_MESSAGE);
Dumps a BMessage...


Contact:
E-Mail : magnus.landahl@swipnet.se


BeDC History:

Ver 0.9b
	BeDC now saves the current state on exit, including window contents.
	You´re now able to customize the colors BeDC use including background color.
	Save to file has been added.
	Some minor bugs has been fixed.

Ver 0.8.1b
	A couple of small bugs fixed.

Ver 0.8b
	First public release.


