Pascal Newsletter #28 - 20-NOV-2001
INDEX
1. A FEW WORDS FROM THE EDITOR
2. BAR CODES (and II)
- Introduction
. DrawToCanvas
. Properties
- How "TCodeBar" is used
- "TBits"
- Drawing bars
- The test program
- In the future
3. FORUMS
- Delphi
- Kylix
- Free Pascal
- Components
4. NEWS
- Kylix 2
. Features
. Downloads
5. TIPS & TRICKS
- Determining if a logical drive exists
- Hiding the cursor for all applications
- Checking if a Windows feature exists.
Hide your app in the Task List
- Performing a lengthy operation when Windows shuts down
6. DELPHI ON THE NET
- Articles, Tips and Tricks
- Components, Libraries and Applications
. Freeware
. Shareware/Commercial
- Tutorials
________________________________________________________________________
1. A FEW WORDS FROM THE EDITOR
In this issue I'm glad to present the second part of the article "Bar
Codes" by Alirio Gavidia. In the "Delphi on the Net" section, now in
charge of Dave Murray, we have added a place for shareware/commercial
components, libraries and applications (apart from freeware, of course).
In the last issue I gave you the wrong address for the Kylix forum,
which pointed to the Spanish one. Oops! Sorry for the mistake. If you
subscribed to that group, please accept my sincerest apologies and send
me an email so I can move your account to the English group.
This newsletter has recently reached 4850 subscribers, but the truth is
that we feel this number is very small. We need your help to keep this
newsletter going and growing. The easiest way you can help us is by
voting for us in any or some of these rankings to help give more
visibility to our web site and thus increase the number of subscriptions
to this newsletter:
http://www.programmingpages.com/?r=latiumsoftwarecomenpascal
http://top100borland.com/in.php?who=20
It's just a few seconds for you that REALLY means a lot to us. You can
also help us by forwarding this newsletter to colleagues, or inviting
them to subscribe:
http://www.latiumsoftware.com/en/pascal/delphi-newsletter.php
We dream of reaching 10,000 subscribers and we hope you can help us make
that dream come true.
By the way, the Pascal Newsletter was added to the list of Cumuli Ezine
Finder, where you can:
* Rate the newsletter: http://www.cumuli.com/ezines/ra22134.rate
* Recommend it to friends: http://www.cumuli.com/ezines/pascal.ezine
Regards,
Ernesto De Spirito
eds2008 @ latiumsoftware.com
________________________________________________________________________
JfControls Library. Multi-language. Multi-appearance. Skins. Privileges.
More than 40 integrated and customizable components. Impressive GUI.
Centralized resources administration. Multiple programming problems
solved. For Delphi 3-2006 & C++ Builder 3-6. http://www.jfactivesoft.com
________________________________________________________________________
2. BAR CODES (and II)
By Alirio A. Gavidia
Introduction
============
The first part of this article was about bar codes type 39 and 128, of
common commercial use. This second delivery includes and shows a set of
routines developed in Delphi that implement part of the functionality
of these codes.
A project is annexed, where the class "TcodeBar" is defined. This class
inherits part of its functionality from "TGraphicControl", where
"TCustomLabel" derives from. In the end, this control works imitating
certain functionality of a "TLabel" control. Its fundamental definition
is:
TCodeBar = class(TGraphicControl)
:
:
public
procedure Paint; override;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure DrawToCanvas(aCanvas: TCanvas; ax, ay, EscX, EscY:
Integer);
property Price : string read FPrice write SetPrice;
property Description : string read FDescrip write SetDescrip;
property DisplayTextCode: boolean read FDisplayTextCode write
SetDisplayTextCode;
property CodeType : TCodeType read FCodeType write SetCodeType;
property Caption : TCaption read FCaption write SetCaption;
property CurrencyString : string read FCurrencyString write
SetCurrencyString;
end;
DrawToCanvas
------------
procedure DrawToCanvas(aCanvas: TCanvas; ax, ay, EscX, EscY: Integer);
This method is meant for printing the bar code scaled in any "canvas"
(normally the printer's).
Properties
----------
Since the main use of bar codes is to label products, here we defined
properties to add text that can be read by humans.
property Price: string; For printing the price of the product.
property Descrip: string; For printing the description.
property DisplayTextCode: Boolean; Sometimes it is required nothing
else than just the bar code.
property CodeType; Two options, ct128 or ct39, which
determine the type of code to use.
property Caption: TCaption; It's the text that will be turned to bar
code. For this version it can only be numbers.
property CurrencyString: string; The currency denomination. It is
initially taken from the variable of the same name.
How "TCodeBar" is used
======================
Like a label, it can be created, assigned a "Parent" and assigned the
size properties that might be required. Additionally, the properties
"CodeType", "Price" and "Description" can be set.
Example:
CodBar := TCodeBar.Create(Self);
if RadioGroup1.ItemIndex=0 then
CodBar.CodeType := ct128
else
CodBar.CodeType := ct39;
CodBar.Caption := Edit1.Text;
CodBar.Left := Edit1.Left;
CodBar.Top := Label2.Top;
CodBar.Width := 250;
CodBar.Height := 50;
CodBar.Description := EdDescrip.Text;
CodBar.Price := Edprice.Text;
CodBar.Parent := Self;
In order to print, "DrawToCanvas" provides a solution where it is
given the destination "canvas", position and scale factors:
CodBar.DrawToCanvas(Prn.Canvas, SELeft.Value, SETope.Value + step,
SEX.Value div 2, SEY.Value)
The scale is porcentage.
"TBits"
=======
It's a class for manipulating true/false values, mainly when they are
more than 32 bits. It provides two properties: "Size" and "Bits". The
second one allows access to each bit like part of an array.
I used the class "TBits" to store the codification of format 128. You'll
see that it is something "uncomfortable" to write 1166 values one by one
by this method. Nevertheless, now I can say that I used this class once
in my life.
This class wasn't used with code 39.
In the next version, with alphanumeric support, the use of "TBits" will
be substituted for other means.
Drawing bars
============
The routines "DrawCode128" and "DrawCode39" are fundamentally equal.
The width and height of each element of the code is determined (bar or
space) and the bars are drawn in the corresponding place (it is possible
to draw the white spaces, but it seems unnecessary).
In particular, with code 128 a parity character and a stop character are
required. For the parity there exists a routine called "Getcheck128"
that returns the number of the resulting character.
The test program
================
This test program was developed for a company which distributes a large
number of products. The code, description and price are displayed as
part of the label. The quantity is the number of times each label is to
be printed.
The margins can be stored between sessions as "Set 1" and "Set 2" thru
a menu accessible with the right button of the mouse.
"English maincod.dfm" and "Spanish maincod.dfm" are versions of
"maincod.dfm" in each language. Copy the one you find more suitable on
"maincod.dfm".
I hope you find it useful.
In the future
=============
Several changes and improvements are being considered for these
routines:
- Alphanumeric support both for code 39 and code 128.
- Resolution of the problem of odd length codes in code 128.
- "Autosize" property.
- Dropping the initialization using TBits in favour of a resource file.
- Keeping the size of each character constant (not the total width as it
is done in this version).
--------------------------
The source code that accompanies this article can be downloaded from:
http://www.latiumsoftware.com/en/file.php?id=p28
________________________________________________________________________
IBAdmin 3.2 - Complete Interbase SQL tool - A powerful DBA/Development
tool for managing Interbase servers and databases. IBAdmin provides many
capabilities to help with your DB design and management. You can use the
Database Designer to visually design the database structure, the Grant
Manager to manage users, or the SQL Debugger which can be used to debug
stored procedures and triggers. Comfortable SQL code editing with Code-
Insight and Code Completion. >>>>>>>>> http://www.sqlly.com/
________________________________________________________________________
3. FORUMS
Delphi
======
If you know much of Delphi but you are still far from being a guru this
forum is for you. This is the only forum for intermediate-level Delphi
programmers on the Web (Delphi hackers are also welcome :-)). The forum
now has more than 350 members, while it maintains its low traffic:
http://groups.yahoo.com/group/delphi-en
If you want to join the group, the best way is to subscribe from the
web since you can access the special features available at the web site
(a Yahoo! ID is required and you can get yours free by registering as a
Yahoo! user), but if you don't want to register or if you don't have
full Internet access you also can subscribe by email:
http://groups.yahoo.com/group/delphi-en/join
delphi-en-subscribe@yahoogroups.com
Kylix
=====
The forum for Kylix programmers doesn't have much movement yet, but
keeps steadily growing and now has more than 105 members.
http://groups.yahoo.com/group/kylixgroup
If you want to join the group, you can subscribe from the web or --more
easily-- by email:
http://groups.yahoo.com/group/kylixgroup/join
kylixgroup-subscribe@yahoogroups.com
Free Pascal
===========
The forum for Free Pascal (freepascal.org) programmers also keeps
growing and now has more than 110 members.
http://groups.yahoo.com/group/freepascal-en
If you want to join the group, you can subscribe from the web or --more
easily-- by email:
http://groups.yahoo.com/group/freepascal-en/join
freepascal-en-subscribe@yahoogroups.com
Components
==========
This is a forum for searching/recommending software components (VCL and
CLX components, ActiveX objects, DLL libraries, shared objects, etc.),
as well as utilities, tutorials, information, etc.:
http://groups.yahoo.com/group/components
If you want to join the group, you can subscribe from the web or --more
easily-- by email:
http://tech.groups.yahoo.com/group/components/join
components-subscribe@yahoogroups.com
------------------
NOTE: Except temporarily for the Kylix forum (because Kylix is rather
new), the forums about programming aren't meant for beginners, but for
intermediate/advanced programmers, although if you are a beginner, you
can participate as a "listener" and occasionally you can make questions
to have key concepts clarified.
________________________________________________________________________
5. NEWS
Kylix 2
=======
Borland released Kylix 2, the first Web Services solution for Linux.
Kylix 2 brings more compatibility with Delphi 6, incorporating features
such as BizSnap, WebSnap, DataSnap and CORBA support.
* Press release - Oct 23
http://www.borland.com/about/press/2001/kylix2.html
* Borland updates Kylix - By Matthew Broersma
http://news.zdnet.co.uk/software/0,1000000121,2097947,00.htm
* Luxury of Independence. Borland stands above the general web-services
fray - By John Pallatto
internetworld.com/magazine.php?inc=110101/11.01.01nothingbutnet.html
* Borland Revamps Kylix - By Alan Zeichick
http://www.sdtimes.com/news/041/story3.htm
* Press release - Nov 6
http://www.borland.com/about/press/2001/k2_ships.html
Features
--------
* New features in Kylix 2
http://www.borland.com/kylix/k2/newfeatures.html
* Datasheet (PDF)
http://www.borland.com/kylix/k2/k2_datasheet.pdf
* Feature Matrix (PDF)
http://www.borland.com/kylix/k2/k2_featurematrix.pdf
* Features & Benefits (PDF)
http://www.borland.com/kylix/k2/k2_feaben.pdf
Downloads
---------
* Kylix 2 Enterprise Trial Edition
http://www.borland.com/kylix/trial2/k2_entdown_steps.html
* Kylix 2 Open Edition
http://www.borland.com/kylix/trial2/k2_opendown_steps.html
________________________________________________________________________
5. TIPS & TRICKS
Determining if a logical drive exists
=====================================
You can use the API GetLogicalDrives to get the logical drives present
in the system. This function returns a 32-bit value where the bits
represent the logical units. For example:
+---------------------------------- bit 31 (most significant bit)
| +--- bit 0 (least significant bit)
| |
00000000000000000000000000101101
| ||||||||
| |||||||+--- 1 ==> Drive A: present
| ||||||+---- 0 ==> Drive B: absent
| |||||+----- 1 ==> Drive C: present
| ||||+------ 1 ==> Drive D: present
| |||+------- 0 ==> Drive E: absent
| ||+-------- 1 ==> Drive F: present
| |+--------- 0 ==> Drive G: absent
| +---------- 0 ==> Drive H: absent
| : : :
+---------------------------- 0 ==> Drive Z: absent
To get the bit mask corresponding to a drive letter in order to test the
result of GetLogicalDrives, we can use the following expression:
1 Shl (Ord(DriveLetter) - Ord('A'))
For example, if DriveLetter was 'D', the result of this expression would
be:
1 shl (Ord('D') - Ord('A')) = 1 shl (68 - 65) = 1 shl 3 = 8
In binary:
00000000000000000000000000001000
A bitwise And between the mask and the result of GetLogicalDrives will
be zero if bit 3 isn't set (i.e. if drive D: isn't a valid logical
drive).
All right then, let's get to the function:
uses Windows;
function IsLogicalDrive(Drive: string): boolean;
var
sDrive: string;
cDrive: char;
begin
sDrive := ExtractFileDrive(Drive);
if sDrive = '' then
Result := False
else begin
cDrive := UpCase(sDrive[1]);
if cDrive in ['A'..'Z'] then
result := (GetLogicalDrives And
(1 Shl (Ord(cDrive) - Ord('A')))) <> 0
else
Result := False;
end;
end;
Sample call:
if not IsLogicalDrive(Edit1.Text) then
ShowMessage(Format('"%s" is not a valid drive.',
[ExtractFileDrive(Edit1.Text)]));
Hiding the cursor for all applications
======================================
The API ShowCursor can be used to hide/show the mouse cursor, but this
only affects our application. If we want to hide the cursor for all
applications, one way of doing it is confining the cursor to a position
outside the limits of the screen with the API ClipCursor:
uses Windows;
procedure rShowCursor(bShow: BOOL);
var
r: trect;
begin
if not bShow then begin // Hide
r.Top := 0;
r.Left := GetSystemMetrics(SM_CXSCREEN)
+ GetSystemMetrics(SM_CXCURSOR);
r.Right := r.Left;
r.Bottom := 0;
ClipCursor(@r);
SetCursorPos(0,0);
end else begin // Restore
ClipCursor(nil);
SetCursorPos(GetSystemMetrics(SM_CXSCREEN) div 2,
GetSystemMetrics(SM_CYSCREEN) div 2);
end;
end;
Checking if a Windows feature exists - Hide your app in the Task List
=====================================================================
Some Windows API functions may or may not be present in your Windows
version, but detecting the Windows version is not the best way to know
if a function is present since it may yield a false negative if the user
updated a DLL and the update includes the new function...
To check if an API function exists, we have to load the DLL library
where it is supposed to reside (calling the API LoadLibrary) and then we
have to get the address of the function (calling the API GetProcAddress)
which is finally used to call it. If GetProcAddress returns Nil, then
the function isn't present, and if it returns a value other than Nil,
then the function is present, but we have to take into account that it
isn't necessarily implemented (it may be just a placeholder, and if we
call it, we will get the error code ERROR_CALL_NOT_IMPLEMENTED).
In the following example we implement a function called
RegisterAsService which tries to call the API RegisterServiceProcess to
register/unregister our application as a service. The function returns
True if successful.
function RegisterAsService(Active: boolean): boolean;
const
RSP_SIMPLE_SERVICE = 1;
RSP_UNREGISTER_SERVICE = 0;
type
TRegisterServiceProcessFunction =
function (dwProcessID, dwType: Integer): Integer; stdcall;
var
module: HMODULE;
RegServProc: TRegisterServiceProcessFunction;
begin
Result := False;
module := LoadLibrary('KERNEL32.DLL');
if module <> 0 then
try
RegServProc := GetProcAddress(module, 'RegisterServiceProcess');
if Assigned(RegServProc) then
if Active then
Result := RegServProc(0, RSP_SIMPLE_SERVICE) = 1
else
Result := RegServProc(0, RSP_UNREGISTER_SERVICE) = 1;
finally
FreeLibrary(module);
end;
end;
Notice that registering our application as a service has the side-effect
of hiding our application in the Task List (in Windows Task Manager).
Sample calls:
RegisterAsService(true); // Hides the app from the Task Manager
// by registering it as a service
RegisterAsService(false); // Unregisters the app as a service and
// it will be visible in the Task Manager
NOTE: RegisterServiceProcess is a Windows 9x/Me API. It isn't present in
Windows NT/2000, and I don't think there is a way to hide an application
from the Task Manager in these Windows versions.
Performing a lengthy operation when Windows shuts down
======================================================
When Windows shuts down, it allows applications a limited amount of
time to respond to the shutdown request (WM_QUERYENDSESSION message).
If an application doesn't respond to the request in that time, Windows
normally displays a dialog box allowing the user to forcibly shut down
the application, retry the shutdown, or cancel it.
If we want our application to perform a process when Windows shuts
down, for example a backup, which might take some seconds longer than
Windows is willing to wait, and we don't want Windows to display that
dialog box, then what we have to do is cancel the shutdown, perform our
process and finally, when we are done, tell Windows to shutdown.
Since we have to respond to Windows before executing our process, the
trick we use is setting a timer -initially disabled- to allow the
process to execute some milliseconds later. We use a variable
ProcessStatus to know if we have to run the process (0), if it is
currently running (1) or if it has finished (2), to know if we can
allow the system to shut down or not, and if we have to run the process
or not.
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
procedure WMQueryEndSession (var Msg: TWMQueryEndSession);
message WM_QueryEndSession;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var
EndSessionFlags: integer;
ProcessStatus: integer;
procedure TForm1.WMQueryEndSession(var Msg: TWMQueryEndSession);
begin
case ProcessStatus of
0: // First time
begin
ProcessStatus := 1; // To avoid entering here again
EndSessionFlags := Msg.Source; // Save the flags for later use
Msg.Result := 0; // Tell Windows not to end the session
Timer1.Enabled := True; // Enable the timer so we can perform
// the process some milliseconds later.
end;
1: // We are processing...
Msg.Result := 0; // Tell Windows we are not ready yet
2: // We are done with the process...
begin
ProcessStatus := 0; // Ready for next session (if applies)
Msg.Result := 1; // We are done. OK to close Windows
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False; // Turn off the timer so the event doesn't
// trigger again
// Here we perform our lengthy process
ShowMessage('Windows won''t close until you close this dialog.');
ProcessStatus := 2; // Flag to know we finished the process
ExitWindowsEx(EndSessionFlags, 0); // Now we tell Windows to close
end;
NOTE: In Windows NT/2000 you need to have privileges to shut down the
system.
________________________________________________________________________
6. DELPHI ON THE NET
By Dave Murray
Articles, Tips and Tricks
=========================
* Delphi Database Programming Course - by Zarko Gajic
Free online database programming course for beginner Delphi developers
focused on ADO techniques.
http://delphi.about.com/library/weekly/aa010101a.htm
Two new chapters have been added in the last month:
Chapter 18 "Data Modules" shows how to use the TDataModule class -
central location for collecting and encapsulating data access objects,
their properties, events and code.
http://delphi.about.com/library/weekly/aa101601a.htm
Chapter 19 "Handling database errors" introduces error handling
techniques in Delphi ADO development. Find out about global exception
handling and dataset specific error events.
http://delphi.about.com/library/weekly/aa103001a.htm
* What's New In Delphi 6? - by Brian Long
A reviews the latest Delphi version
http://www.thedelphimagazine.com/samples/1263/1263.htm
* .NET complex types in a Delphi web service client - by John Kaster
An article discussing prototype support for .NET web services that
use Document Literal encoding in Delphi.
http://community.borland.com/article/0,1410,27986,00.html
* How to get the screensaver time-out value? - by Rainer Kümmerle
http://www.swissdelphicenter.ch/en/showcode.php?id=854
* How to mount a share? (Kylix) - by Lukas Zurschmiede
http://www.swissdelphicenter.ch/en/showcode.php?id=860
* How to create a cute gradient label - by Alain Gosselin
http://www.delphi3000.com/articles/article_2794.asp
* Give your menus a new look - by Vassilis Perantzakis
This component gives your menus a customizable new look, a lot like
the XP menus - only better!
http://www.delphi3000.com/articles/article_2796.asp
* Call AnimateWindow the safe way - by Adam Lanzafame
AnimateWindow can enhance your GUI by adding special animations to
your forms. However, the API is only valid from Win98 / 2000. This
code shows you how to use it only when it is supported, without
crashing and burning when it is not supported.
http://www.delphi3000.com/articles/article_2799.asp
* Converting from Windows > UNIX ASCII Text Files - by Lloyd Kinsella
How do you convert between Windows and UNIX ASCII files?
http://www.delphi3000.com/articles/article_2815.asp
* Transparent Desktop Icon Text - by Lloyd Kinsella
Annoyed at the icons on your Desktop with those damned colored text
backgrounds, wouldn't it be nice if your wallpaper showed through?
http://www.delphi3000.com/articles/article_2814.asp
* TASPObject - ASP programming with Delphi - by Curtis W. Socha
Introducing the TASPObject. See how to create a real application
that incorporates the TASPObject - by creating an ASP page counter
to see how many times your ASP has been called.
http://delphi.about.com/library/bluc/text/uc110601a.htm
* Help for component creators - by Pintér Gábor
Create a help file for your component exactly like Delphi's help.
With source code, examples, and installation instructions.
http://community.borland.com/article/0,1410,26679,00.html
* Using COM+ object pooling with Delphi 6 - by Vincent Parrett
Delphi 6 introduces support for COM+ object pooling, which provides
significant performance improvements under some circumstances.
http://community.borland.com/article/0,1410,27568,00.html
* Templates in Object Pascal - by Rossen Assenov
Here's a quick guide to implementing C++ like templates in Delphi.
http://community.borland.com/article/0,1410,27603,00.html
* Paging Dr. WebSnap! - by Nick Hodges
Using the TPagedAdapter component for fun and profit!
http://community.borland.com/article/0,1410,27824,00.html
* Implementing Professional Drag&Drop In VCL/CLX Apps - by Brian Long
Simple intra-application drag and drop support is easy to add to a
VCL/CLX application. However, customizing the operation, for example
mouse sensitivity, info sent along with the operation, mouse cursor,
the associated drag image, etc... All these things take more work.
http://www.blong.com/Conferences/BorCon2001/DragAndDrop/4114.htm
* VCL Sourcery - by Brian Long
Very few Delphi Developers know the VCL source code like the back of
their hand. Take a leisurely stroll through the VCL source code,
removing its mystique and seeing what insights we can gain.
www.blong.com/Conferences/BorConUK2001/VCLSourcery/VCLSourcery.htm
* An Introduction to Kylix Open Edition - by Ray Lischner
Explore Kylix Open Edition by covering topics such as selecting the
Linux distribution, installation, FreeCLX issues, dbExpress,
licensing, and more.
www.delphimag.com/features/2001/11/di200111rl_f/di200111rl_f.asp
* Media Player Autorepeat Function - by Cesario Lababidi
How to write an Autorepeat Function for Mediaplayer?
http://www.delphi3000.com/articles/article_2792.asp
* Debugging With More Than Watches And Breakpoints - by Brian Long
or How To Use The CPU Window. A BorCon UK 2001 and DCon 2001 paper.
http://www.blong.com/Conferences/DCon2001/Debugging/Debugging.htm
* Delphi and C++Builder Tips and Techniques - by Brian Long
A BorCon 2001 paper of IDE/RTL/VCL/ObjectPascal Tips. It focuses
mainly on how to be more productive within the Delphi, C++Builder
and Kylix IDEs.
http://www.blong.com/Conferences/BorCon2001/Tips/2106.htm
* Access rights in WebSnap - by Nick Hodges
How to limit access to specific pages based on a user access rights.
http://community.borland.com/article/0%2C1410%2C27777%2C00.html
* A database-enabled Web user list - by Jimmy Tharpe
For most of us, user validation data needs to be stored in a
database. Fortunately, writing a component to encapsulate this
functionality is easy. (Delphi 6)
http://community.borland.com/article/0%2C1410%2C27710%2C00.html
* How can I get the printers installed? - by Josep Lainez
Do you want to get your printer list without using the printer
object? Let's see what's in the Windows registry.
http://www.delphi3000.com/articles/article_2779.asp
* Draw on DeskTop - by Master Tavi
How to draw on DeskTop?
http://www.delphi3000.com/articles/article_2773.asp
* Windows Messages? - by Master Tavi
How can I use Windows Message and what are they? This article
explains the basics of windows messages and includes a list of the
most commonly used Windows messages.
http://www.delphi3000.com/articles/article_2772.asp
* How to search a file for specified text? - by P. Below
http://www.swissdelphicenter.ch/en/showcode.php?id=847
* How to write data directly to the printer port? - by Ramon Schenkel
http://www.swissdelphicenter.ch/en/showcode.php?id=830
* How to convert TDateTime to Unix Timestamp? - by Thomas Greiner
http://www.swissdelphicenter.ch/en/showcode.php?id=844
* InfoWorld interview with Borland CEO Dale Fuller who talks about
competing with Microsoft for the hearts and minds of developers.
http://www.infoworld.com/articles/hn/xml/01/10/19/011019hnfuller.xml
* Optimizing Delphi Code - by Zarko Gajic
How to make sure that the Murphy's law: "Any program will expand to
fill available memory" does not apply to your Delphi applications.
http://delphi.about.com/library/weekly/aa102301a.htm
* Delphi 6 XML Document Programming - by Dr.Bob
This is the first in a series of articles about Delphi 6 XML support
starting off with XML Document Programming in Delphi 6.
http://www.drbob42.com/examines/index.htm
* Floating Menus, Etc. - by Bruno Sonnino
How to put a menu in a toolbar so it can be detached and moved
around.Plus: Setting Tab Stops in Memo and RichEdit Components.
www.delphimag.com/features/2001/11/di200111bs_f/di200111bs_f.asp
* User-modifiable DBGrids - by Ron Nibbelink
How to provide users with highly versatile DBGrid components which
can have their appearance changed at run time.
www.delphimag.com/features/2001/11/di200111rn_f/di200111rn_f.asp
* How to read / write a string to / from the serial port
http://www.swissdelphicenter.ch/torry/showcode.php?id=841
* How to use the AnimateWindow function - by Simon Grossenbacher
http://www.swissdelphicenter.ch/torry/showcode.php?id=838
* How to create an appointment in MS Outlook - by Mike Shkolnik
http://www.delphipages.com/tips/thread.cfm?ID=111
* How to count words in a memo - by Ricardo Arturo Cabral Mejia
http://www.delphipages.com/tips/thread.cfm?ID=109
* How to check if the BDE is installed - by Macroline Software
http://www.delphipages.com/tips/thread.cfm?ID=106
* Delphi 6 Code Completion missing feature - by Brian Long
How to enable an excellent new Code Completion feature in Delphi 6
http://community.borland.com/article/0,1410,27913,00.html
* Is my CPU branded? / Extended CPUID
How to use the extended CPUID instruction to retrieve the name of
the processor from newer AMD (K5 Model 1/2/3, K6 Model 6/7/8,
K6 III Model 9, Athlon & Duron) and Intel (P4) processors.
http://www.delphi3000.com/articles/article_2718.asp
* Exception Logger
A simple way to record exceptions in a log file as well as
displaying a custom error message.
http://www.delphi3000.com/articles/article_2716.asp
* How to add a gague to a status bar
How to add a gague or any other component to a status bar.
http://www.delphi3000.com/articles/article_2728.asp
* How to get all table names in a database
How to get all table names in a database with or without an alias.
http://www.delphi3000.com/article.asp?ID=2754
* How to get BIOS date and version under Win 9X/Me/NT/2k
How to get BIOS date and version under Win 9X/Me/NT/2k and how to
read multi-string values from the registry.
http://www.delphi3000.com/articles/article_2763.asp
* Accessing Web Services from a URL
How to access web services from a Delphi application.
http://www.delphi3000.com/articles/article_2757.asp
Components, Libraries and Applications
======================================
Freeware
--------
* Orcka's Component Suite contains over 25 freeware components to aid
in RAD. Most components come with demo applications and all of the
source code is available. Components include: TOrckaAddinManager,
TOrckaSpellChecker, TOrckaMap, TOrckaScreenSaver, TOrckaLabelEdit,
TOrckaRuler, TOrckaVersionInfo, TOrckaButtonEdit, TOrckaTrayIcon,
TOrckaFontButton, TOrckaLibraryLoader, TOrckaWebLabel.
http://cc.codegear.com/Item.aspx?id=16687
* Synapse Serial Port Synchronous Library v.3.0 - by Lukas Gebauer
Support for communicating on serial ports in blocking mode, high
speed communication, same communication mechanism used in Synapse
TCP/IP library, software and hardware handshake and more.
http://www.ararat.cz/synapse
* KDialControl
An additional visual component for Kylix, encapsulates Dial Qt
widget.
http://www.sourcecodeonline.com/details/kdialcontrol.html
Shareware/Commercial
--------------------
* CoolControls v. 3.03b, 23-Jul-2001, 5Mb - For Delphi 2-6 and BCB 1-5
Award winning package of 60+ highly advanced components and classes.
Covers system, GUI and database programming, and original components.
Forms of any shape, SKINS and TRANSPARENCY for ALL controls and forms,
buttons of various shapes, flat borders, animation, original controls,
powerful list and comboboxes, 3D view for most controls with text,
multiline string grids with custom colors and fonts for cells,
scrolling text, system level components.
http://www.cooldev.com/cd_products.html#CoolControls
* CoolMenus v. 3.08, 14-Sep-2001, 1.8Mb - For Delphi 2-6 and BCB 1-5
Award winning package that provides you with the way to create the
most advanced Windows menus. CoolMenus, especially Multimedia edition
has some unique features you will not find in any other menu related
packages on the market. Native Delphi code, fast speed and helpful
design windows are the reasons of CoolMenus popularity.
http://www.cooldev.com/cd_products.html#CoolMenusPro
* AppControls v 2.3.6, 01-Nov-2001 - For Delphi 2-6 and BCB 3-5
Advanced Application Controls is a set of 50+ top quality multipurpose
components for Delphi and BCB. The package contains everything you
need to add neat and, more important, truly professional appearance
for your software, making development of great interfaces really
rapid. All for those you usually spent days or weeks of hard coding,
now you will be able to make for a few minutes of mouse clicking. :-)
http://www.appcontrols.com/appcontrols.html
* ConfigTreeView v. 1.6, 16-Oct-2001, 342Kb - For Delphi 3-6
ConfigTreeView is used to adjust the advanced options of an
application, similar to the one seen in the Options dialog of MSIE.
ConfigTreeView is designed for this particular purpose, adding only
a very small overhead to your executables. It provides methods for
loading and storing the settings. Ver 1.6 supports Windows XP themes!
http://www.choosepill.com/components/cpcctree.htm
Tutorials
=========
* Delphi-Dolphin
Will guide you through basic topics, such as form + menu design, to
more advanced areas including databases, COM and customizing Delphi
components. Aims to provide help and advice for budding Delphi
novices & experts alike, through tutorials & articles. Includes new
tutorials from Project Jedi's Jedi-Dolphin initiative.
http://www.delphi-dolphin.com/
* Delphi COM Essentials - by Binh Ly
Including: building a COM Client application, building a COM Server
application , building COM components.
http://www.techvanguards.com/stepbystep/comdelphi/
________________________________________________________________________
If you haven't received the full source code examples for this issue,
you can get them from http://www.latiumsoftware.com/en/file.php?id=p28
________________________________________________________________________
This newsletter is provided "AS IS" without warranty of any kind. Its
use implies the acceptance of our licensing terms and disclaimer of
warranty you can read at http://www.latiumsoftware.com/en/legal.php
where you will also find a note about legal trademarks. Articles are
copyright of their respective authors and they are reproduced here with
their permission. You can redistribute this newsletter as long as you do
it in full (including copyright notices), without changes, and gratis.
________________________________________________________________________
Main page: http://www.latiumsoftware.com/en/pascal/delphi-newsletter.php
Group home page: http://groups.yahoo.com/group/pascal-newsletter/
Subscribe/join: pascal-newsletter-subscribe@yahoogroups.com
Unsubscribe/leave: pascal-newsletter-unsubscribe@yahoogroups.com
Problems with your subscription? eds2008 @ latiumsoftware.com
________________________________________________________________________
Latium Software http://www.latiumsoftware.com/en/index.php
Copyright (c) 2001 by Ernesto De Spirito. All rights reserved.
________________________________________________________________________
|