Pascal Newsletter #29 - 04-DEC-2001
INDEX
1. A FEW WORDS FROM THE EDITOR
2. ADDING TOOLTIPS TO A TLISTBOX
3. FORUMS
4. NEWS
5. TIPS & TRICKS
- Using alphablending on forms with Delphi 5
- How to avoid stepping into the VCL source code when pressing F7
- Calculating the difference between two dates in years
- Using a login form in our application
6. DELPHI ON THE NET
- Articles, Tips and Tricks
- Components, Libraries and Utilities
. Freeware
. Shareware/Commercial
- Tutorials
- Other Links
________________________________________________________________________
1. A FEW WORDS FROM THE EDITOR
In this issue I'm glad to welcome two new authors to the newsletter,
Robert Baker and Frederico Pissarra, who have contributed their
articles for this publication. By the way, if you solved a particular
problem and you want to share your code in the newsletter, I'd like to
invite you to write me. The newsletter can only grow in contents thanks
to your collaboration.
This newsletter has reached 5000 subscribers, but we want to double that
number in the next months. Would you give us a hand? If you feel this
newsletter is useful, send this link to your friends:
http://www.latiumsoftware.com/en/pascal/delphi-newsletter.php
Another 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
Please vote. It's just a few seconds that REALLY make the difference.
Regards,
Ernesto De Spirito
eds2008 @ latiumsoftware.com
__________________
Collaborated in this issue: Dave Murray, Ernesto Cullen and Jorge Luis
De Armas.
________________________________________________________________________
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. ADDING TOOLTIPS TO A TLISTBOX
By Robert Baker
Cimba Solutions
http://www.cimba.com
Have you ever wanted to see the full contents of a ListBox entry if the
entry is wider than the ListBox?
Normally if you are using listboxes in your programs and the items that
populate the listbox are wider than the width of the listbox, those
items will be "clipped." This could cause important information to be
visually lost.
This article provides a method to prevent this from being a major
problem, by displaying a tooltip-like hint over items that are wider
than the listbox.
The key to this problem is the THintWindow object. This is the same
object that is used on the Windows Taskbar or System Tray to pop up a
hint if the mouse "hovers" over an icon for a short amount of time. The
TTreeView VCL component provides this capability built-in, while the
TListBox component does not provide it at all. You will be responsible
for creating, displaying and destroying the THintWindow yourself.
To begin, start a new project and add a single TListBox (named
lstProducts) and a single TButton (named btnOK) component to it.
Rearrange and resize the components as needed.
You will need to manually add the following definition to the private
section of the main form's definition:
ThisHintWindow : THintWindow;
This is the object we will be using to provide the list item hints.
In the main form's OnCreate() event handler, we will need to do three
things: (a) define a method to ensure we are displaying the hint over
the correct component, (b) create the hint window, and (c) set the color
of the hint window.
a. Define a method to ensure we are display the hint over the correct
component. We do this by setting the OnShowHint() event handler to
the procedure we want to use:
Application.OnShowHint := CheckHint;
The definition of the CheckHint() procedure is below:
procedure TfrmMain.CheckHint(var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);
begin
if (HintInfo.HintControl = lstProducts) then
HintInfo.HintPos.y := HintInfo.HintPos.y - 24;
end;
We want to make sure we are showing the hint over the correct component,
the lstProducts listbox.
b. Create the hint window. Simply call the Create() constructor for the
hint window, using the main form as the owner:
ThisHintWindow := THintWindow.Create(Self);
c. Set the color of the hint window. When the hint window is displayed,
we want to make sure it is displayed in the colors defined by the
user using the Appearance display properties on the Windows desktop.
This is done by using Delphi's predefined clInfoBk constant:
ThisHintWindow.Color := clInfoBk;
We will now want to display the hint window when the mouse is over items
in the listbox that are wider than the listbox. The other, shorter items
are OK as they are. We will take care of displaying the hint window in
the OnMouseMove() event handler of the listbox, and below are the basic
steps.
First we need to get the item that is under the mouse cursor, and the
following lines accomplish this:
ThePoint.x := X;
ThePoint.y := Y;
Index := ListBox.ItemAtPos(ThePoint, true);
Index will return the zero-based index of the listbox item or –1 if it
is not over an item. If we are over an item wider than the listbox, we
will need to define the upper-left and lower-right corners of a
rectangle that will be used as the dimensions of the hint window.
if ListBox.Canvas.TextWidth(ListBox.Items[Index]) > ListBox.Width then
begin
ScreenPointUpperLeft.x := ListBox.ItemRect(Index).left - 1;
ScreenPointUpperLeft.y := ListBox.ItemRect(Index).top - 3;
ScreenPointLowerRight.x := ScreenPointUpperLeft.x +
ThisHintWindow.Canvas.TextWidth(ListBox.Items[Index]) + 7;
ScreenPointLowerRight.y := ScreenPointUpperLeft.y +
ThisHintWindow.Canvas.TextHeight(ListBox.Items[Index]) + 2;
ScreenRect.TopLeft := ListBox.ClientToScreen(ScreenPointUpperLeft);
ScreenRect.BottomRight :=
ListBox.ClientToScreen(ScreenPointLowerRight);
Once we have the dimensions of the rectangle defined, we can finally
display the hint window that is using it:
ThisHintWindow.ActivateHint(ScreenRect, ListBox.Items[Index]);
end;
As long as the mouse cursor remains hovering over the item, the hint
will be displayed. If the mouse cursor moves to another "long" item, the
window will still be displayed, but the contents of it will be replaced
by the text of the item the cursor is over. You may be asking: "How and
when does the hint window go away?"
Making the hint go away is the easy part. There are two conditions in
which we want the hint window to not be displayed: when we move the
mouse cursor to an item that is shorter than the width of the listbox,
and also when we move the mouse cursor totally out of the listbox. In
order to do this, however, we need some additional code that will tell
us if the mouse cursor is over a specific component on the form:
function TfrmMain.IsMouseOverControl(Control: TWinControl): Boolean;
var P: TPoint;
begin
// Get the screen coordinates of the current mouse position
GetCursorPos(P);
// The mouse is over the control if : (a) the control is defined AND
// created, (b) it is a WINDOWED control, and (c) the handle of the
// window the mouse is currently over is the same as the handle of
// the control we passed in
Result := Assigned(Control) and IsWindow(Control.Handle) and
(WindowFromPoint(P) = Control.Handle);
end;
We can use this function to determine whether or not the mouse cursor is
currently over the listbox. If we are not over the listbox, we want to
destroy the hint window. We do this by calling the ReleaseHandle()
procedure of the hint window:
if not IsMouseOverControl(lstProducts) and (ThisHintWindow<>nil) then
ThisHintWindow.ReleaseHandle;
We can do this because this procedure is used specifically for hint
windows that are activated calling the ActivateHint() procedure, which
we did in the OnMouseMove() event handler above.
In closing...
As you can see, displaying a hint for any listbox items that are too
wide is quite trivial by using the techniques above. The default size of
a listbox when it is dropped on a form is pretty small. If you do have
space constraints, this method can be used to prevent information in
your programs from being lost.
________________________________________________________________________
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 390 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
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
Again, you can subscribe from the web or --more easily-- by email:
http://tech.groups.yahoo.com/group/components/join
components-subscribe@yahoogroups.com
________________________________________________________________________
5. NEWS
FreeCLX updates available for download
---------------------------------------
Mark Duncan of Kylix R&D has updated FreeCLX. Kylix 1 users can get many
of the CLX bug fixes released with Kylix 2 in this public beta download.
http://community.borland.com/article/0,1410,28033,00.html
New: JfControls Grid
--------------------
JfActiveSoft has released JfControls Grid, adding four new components
(TJfDbGrid, TJfDbLookupComboBox, TJfGrid and TJfTree) to their well-
known JfControls Library Suite. WARNING: IF YOU ARE IMPRESSIONABLE BY
SKINS, COLORS, GRADIENTS, IMAGES AND SHAPES, DON'T FOLLOW THIS LINK:
http://www.jfactivesoft.com/enchargrid.htm WE ASSUME NO RESPONSIBILITY!
Kylix 2 dbExpress PostgreSQL database driver download notice
------------------------------------------------------------
As an incentive for registering the product, Kylix 2 users will have
access to donwload the dbExpress PostgreSQL/RedHat Database driver after
registration.
http://community.borland.com/article/0,1410,28013,00.html
Help & Manual 3.01 released
---------------------------
This great documentation and help authoring tool now comes with native
PDF export, strongly improved HTML output, an integrated image editor,
dozens of new features and an even more user friendly interface. One
source, multiple outputs. http://www.helpandmanual.com/hmtour.htm
PE Explorer 1.6 available
-------------------------
Heaventools Ltd. announces a new version of their troubleshooting tool
for 32-bit Windows executable files. PE Explorer comes equipped with a
Visual Resource Editor, Quick Function Syntax Lookup, Dependency
Scanner, Section Editor and Disassembler. http://www.heaventools.com
________________________________________________________________________
5. TIPS & TRICKS
Using alphablending on forms with Delphi 5
==========================================
By Frederico Pissarra
There are new properties on Delphi 6 Forms that allows to use alpha
blending options. How to do it on Delphi 5? To enable alpha blending on
Delphi 5 TForms, just use the following lines:
unit Unit1;
interface
type
TForm1 = class(TForm)
... members here ...
public
constructor Create(AOwner : TComponent); override;
end;
implementation
{-------------------------------------------------------
ALPHA_VALUE determines the level of transparency.
0 = full transparency,
255 = opaque
--------------------------------------------------------}
const ALPHA_VALUE = 128;
{-------------------------------------------------------
Missing Win32 Constants & Functions
-------------------------------------------------------}
const WS_EX_LAYERED = $00080000;
const LWA_ALPHA = 2;
function SetLayeredWindowAttributes(Handle : HWND;
crKey : TColor;
bAlpha : Byte;
dwFlags : DWORD) : Boolean;
stdcall; external 'user32.dll';
constructor TForm1.Create(AOwner: TComponent);
var vi : _OSVERSIONINFO;
oldStyle : DWORD;
begin
inherited Create(AOwner);
GetVersionEx(vi);
if vi.dwMajorVersion >= 5 then { Win2000 or superior?! }
begin
oldStyle := GetWindowLong(Self.Handle, GWL_EXSTYLE);
SetWindowLong(Self.Handle, GWL_EXSTYLE, oldStyle or
WS_EX_LAYERED);
SetLayeredWindowAttributes(Self.Handle, clBlack, ALPHA_VALUE,
LWA_ALPHA);
RedrawWindow(Self.Handle, nil, 0,
RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN);
end;
end;
end.
Notice that this will work only on Win2k or XP.
------------------
Editor's note: You can find a related article in the MSDN Library:
http://msdn.microsoft.com/library/en-us/dnwui/html/layerwin.asp
How to avoid stepping into the VCL source code when pressing F7
===============================================================
A little tip: When you press F7 you normally get into the VCL source
code. If you want to disable this feature, uncheck the "Use Debug DCUs"
checkbox in the Compiler tabsheet of your Project Options.
Calculating the difference between two dates in years
=====================================================
The easiest way of getting the difference in years between two dates is
subtracting them to get the difference in days, and then dividing the
result by 365.25 (approximately the average number of days per year),
truncating the final result to an integer:
function YearsDiff(StartDate: TDateTime; EndDate: TDateTime): word;
begin
Result := Trunc((EndDate - StartDate) / 365.25);
end;
When you don't require precision, the function is fine, but under
certain circumstances it will fail for a year on some anniversary dates.
For example, if StartDate is 15-JUL-2000 and EndDate is 15-JUL-2007, the
function would return 6 instead of 7. The reason is that between these
two dates years have an average of ~365.143 days and that little
difference makes the difference on some anniversary dates (but it will
work fine on 15-JUL-2008 for instance).
If you need precision, you can use the following function:
function YearsDiff(StartDate: TDateTime; EndDate: TDateTime): word;
var
y1, m1, d1: word;
y0, m0, d0: word;
TempDate: TDateTime;
Inverse: boolean;
begin
Inverse := EndDate < StartDate;
if Inverse then begin
TempDate := StartDate;
StartDate := EndDate;
EndDate := TempDate;
end;
DecodeDate(StartDate, y0, m0, d0);
DecodeDate(EndDate, y1, m1, d1);
Result := y1 - y0;
if m0 > m1 then
Dec(Result)
else if m0 = m1 then
if d0 > d1 then
Dec(Result)
else if d0 = d1 then
if Frac(StartDate) > Frac(EndDate) then
Dec(Result);
if Inverse then
Result := -Result;
end;
Using a login form in our application
=====================================
Before loading our main form we want to display a login dialog box, but
if we create the login form first, it'll be taken as our main form, and
if we close it or hide it, our application will finish. The trick is to
create the login form "manually" in our program file to prevent it from
becoming our main form:
program Project1;
uses
Forms, Controls,
Unit1 in 'Unit1.pas' {frmMain},
Unit2 in 'Unit2.pas' {frmLogin};
{$R *.RES}
begin
Application.Initialize;
// We create the login form "manually" (without using CreateForm)
frmLogin := TfrmLogin.Create(nil);
// We display the form to get the user's response
if frmLogin.ShowModal <> mrOK then
frmLogin.Free; // Login failed ==> Terminate program
// Login succeeded. We create the main form
Application.CreateForm(TfrmMain, frmMain);
// Only now we can release the login form
frmLogin.Free;
Application.Run;
end.
Our login form can have a couple of textboxes (for the user name and the
password) and a couple of buttons (OK and Cancel). The OnClick event
handler of the OK button might be like the following:
procedure TfrmLogin.btnOKClick(Sender: TObject);
begin
// A very simple validation just for the purpose of the example
if (edtUsername.Text = 'username') and
(edtPassword.Text = 'password') then begin
ModalResult := mrOk; // Value to be returned by ShowModal
Hide; // We can't use Close because it would end our application
// Hiding the form is enough to make ShowModal return
end else begin
MessageDlg('Invalid user name or password.', mtError, [mbOk], 0);
edtUsername.SetFocus;
end;
end;
After we checked the user name and password are valid, we have to set
the ModalResult property of the form to mrOK in order to indicate that
fact (it'll be the value returned by ShowModal) and we have to hide the
form (allowing ShowModal to return) instead of closing it, because if we
free the only form we have, our application will terminate (by the way,
this is why we free the login form after we create the main form in the
program file).
________________________________________________________________________
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
A new chapter has been added in the last two weeks:
Chapter 20 "From ADO Query to HTML" shows how to export your data to
HTML using Delphi and ADO. This is the first step in publishing your
database on the Internet - see how to create a static HTML page from
an ADO query.
http://delphi.about.com/library/weekly/aa112701a.htm
* Hungarian peanut butter - by Clay Shannon
Introduces and explains Hungarian notation, and proposes an Object
Pascal-specific variant thereof.
http://community.borland.com/article/0,1410,27983,00.html
* A passive debugging solution for CLX - by Chee Wee Chua
Debugging cross-platform applications is easy with this useful code.
http://community.borland.com/article/0,1410,27837,00.html
* Writing custom data to executable files - by Daniel Polistchuck
Think you can't tweak with your project after it's compiled? Check
out these useful techniques for adding custom data to your EXE in
Win32 and Linux.
http://community.borland.com/article/0,1410,27979,00.html
* Mining Delphi's demo programs - by Clay Shannon
Precious nuggets of elegant code are to be found in the free source
code on your Delphi CD.
http://community.borland.com/article/0,1410,27984,00.html
* Custom Component Editors - by Peter Morris
How to write property editors, from simple ones to an advanced editor
which include minimal use of the IFormDesigner interface.
http://delphi.about.com/library/bluc/text/uc092501a.htm
* Get File From the Net - by Zarko Gajic
Create a Delphi application that downloads files from the Internet.
If your program relies on Packages or DLLs then deploying new
versions of your libraries takes time & effort. The Internet provides
a fairly easy way to accomplish this task. Adding an auto-update
option to your apps could be the best way to keep them up to date.
http://delphi.about.com/library/weekly/aa013001a.htm
* Using the XML Features of SQL Server 2000: Part V - by Alex Fedorov
Completes the series by sharing several ways to insert, update, and
delete SQL data by using <sql> templates, updategrams or XML Bulkload
without relying on data-access components.
//www.delphimag.com/features/2001/12/di200112af_f/di200112af_f.asp
* Enable/Disable control & all owned controls - by Christian Cristofori
With these simple procedures you can enable and disable a control and
all controls owned or parented by it. (Make sure you read the notes!)
http://www.delphi3000.com/articles/article_2866.asp
* How to add an Icon to a Statusbar - by Colin Pringle
http://www.delphi3000.com/articles/article_2869.asp
* How to List Functions in a DLL - by Colin Pringle
http://www.delphi3000.com/articles/article_2873.asp
* How to extract icons from files using shell32.dll - by Colin Pringle
http://www.delphi3000.com/articles/article_2874.asp
* Printing a TStringGrid - by Bradley Baumann
A component that prints the selected lines of a TStringGrid.
http://www.delphi3000.com/articles/article_2878.asp
* Simplest way to download a file from the net - by Bradley Baumann
Seem not many people know about the great URLMon (included with
delphi)... The simplest way to download a file from the Internet.
http://www.delphi3000.com/articles/article_2879.asp
* Hiding the caption bar & keeping border style - by Alain Gosselin
This is a way to hide the caption bar of a form but keep the
border visible.
http://www.delphi3000.com/articles/article_2881.asp
* Interface It! - by Jimmy Tharpe
A quick guide to the ins and outs of interfaces in Delphi.
http://community.borland.com/article/0,1410,27825,00.html
* Delphi WebBroker apps and OmniHTTPd - by Dave Nottage
Describes fixes and issues associated with running WebBroker apps
with the OmniHTTPd Web server.
http://community.borland.com/article/0,1410,27752,00.html
* FreeCLX updates available for download - by John Kaster
Kylix 1 users can get many of the Kylix 2 CLX bug fixes in this
public beta download.
http://community.borland.com/article/0,1410,28033,00.html
* SOAP and DataSnap papers - by Bob Swart
Different ways for a SOAP server app to use a SOAP Data Module to
"export" datasets to a SOAP client using SoapConnection component.
http://community.borland.com/article/0,1410,27952,00.html
* Introducing the WebSnap Pack - by Jimmy Tharpe
A walk through of techniques used in the free WebSnap Pack, which
extends WebSnap by re-implementing some interfaces and takes
advantage of some presently un-documented features.
http://community.borland.com/article/0,1410,27905,00.html
* Using a Windows XP Manifest in Delphi - by Michael A. Allen
How to include an XP manifest in a Delphi project to allow your
application to use comctl32.dll version 6 and share the themed look
and feel of Windows XP.
http://delphi.about.com/library/bluc/text/uc111601a.htm
* How to write an Outlook AddIn? - by Andreas Rumsch
http://www.swissdelphicenter.ch/en/showcode.php?id=881
* How to execute actions when the program is Idle? - by Andreas Rumsch
http://www.swissdelphicenter.ch/en/showcode.php?id=887
* How to establish a connection to the internet? - by Andreas Rumsch
http://www.swissdelphicenter.ch/en/showcode.php?id=886
* How to publish to the web using Frontpage? - by Andreas Rumsch
http://www.swissdelphicenter.ch/en/showcode.php?id=888
* How to read a delimited textfile into a StringGrid? - by Loïs Bégué
http://www.swissdelphicenter.ch/en/showcode.php?id=873
* How to obtain list of charsets supported by a font? - Steve Schafer
http://www.swissdelphicenter.ch/en/showcode.php?id=892
* How to check and install MyODBC driver - by Jani Kleindienst
How can I check if MySQL ODBC driver is installed & how can I install
it from my Delphi application?
http://www.delphi3000.com/articles/article_2839.asp
* Simple guide to ADO - by Hans Pieters
A flexible and high performance connection to a range of databases.
http://www.delphi3000.com/articles/article_2845.asp
* Functions to work with icons - by Christian Cristofori
Functions to work with icons in DLL, EXE and ICO files.
http://www.delphi3000.com/articles/article_2853.asp
* Programming a Mail-Slot - by Christian Kuttler
How two applications can communicate using a Mailslot.
http://www.delphi3000.com/articles/article_2857.asp
* BDE Safe Configuration check - by Erwin Molendijk
Running the BDE in a safe mode (known config) requires some settings
in the BDE Administrator tool. This unit checks if the BDE has been
configured correctly (LocalShare=True, NetDir=\\..., etc). Also a
unique PrivDir will be created and cleaned up every time.
http://www.delphi3000.com/articles/article_2859.asp
* Using the Decision Cube without the BDE - by Mark Shapiro
The TDecisionCube component that ships with Delphi Client-Server or
Enterprise does not work well with non-BDE datasets. But we can
change that!
http://community.borland.com/article/0,1410,27848,00.html
* Using XMLMapper and XML Transforms with Kylix 2 Enterprise - by John
Kaster
This article describes the new Borland technology for transforming XML
documents into dataset representations for easy modification.
http://community.borland.com/article/0,1410,28010,00.html
* Flicker-Free Graphics in Delphi! - by Mattias Ekstrand
Using virtual screens to avoid flickering in graphics animations.
http://www.undu.com/Articles/011126a.html
Components, Libraries and Utilities
===================================
Freeware
--------
* ZLPortIO driver interface unit v.1.50 - by SpecoSoft.com
This library allows your application direct access to port I/O under
all versions of Windows. With it you can easily control any hardware
from your application. Source included, Delphi 3 - 6.
http://www.sourcecodeonline.com/details/zlportio_library.html
* TVideoCapture v.1.09 - by Egor Averchenkov
VideoCapture component to capture video and bitmaps.
Requires DirectShow, to capture single frames you need DirectX 8.
Source included, Delphi 5 only.
http://www.torry.net/vcl/mmedia/video/eavcap.zip
* JB Credit Card Validator - by JBDC Group
Credit card validation component, works with all major credit cards.
Source included, Delphi 5 and 6.
http://jbdc.far.ru
* TPJSysInfo Component and Routines v.1.1 - by Peter Johnson
A system information component and associated routines. Information
provided is: Computer info - user name and computer name, System
folders - windows, system and temp folder, OS info - name, platform,
service packs, version numbers etc. Source included, Delphi 3 and 4.
http://www.pjsoft.contactbox.co.uk/
* Innerfuse Pascal Script v.2.78 - by Carlo Kok
With Innerfuse Pascal Script you can make your applications scripting
enabled. It allows you to add your own functions to the script engine
so it can be used by the script code and you can call functions that
are declared inside the script from the outside. It has a library to
support DLLs directly or indirectly. It also supports procedural
variables and classes. Source included, Delphi 2 - 6.
http://carlo-kok.com
* GExperts
GExperts is a set of Open Source tools that increase the productivity
of Delphi and C++Builder programmers by adding features to the IDE.
Includes: Editor Experts that can find matching delimiters, insert
unit headers, etc,; IDE enhancements that add a Windows menu and show
some menu items hidden in D4 and D5; Palette enhancements that add
multi-line tabs or add tabs to the context menu; and much more.
http://www.gexperts.org
* Jedi Graphics
Freeware open source translations of DirectX header files, with
sample programs and links to other sites with DirectX info.
http://delphi-jedi.org/delphigraphics/jedi-index.htm
* Indy - Internet Direct
Freeware open source internet components, as used in Delphi 6.
http://www.indyproject.org/
Shareware/Commercial
--------------------
* Tips System version 2.04b
Let your application look more professional with the Tips System. It
can be used as ordinal tips or "message of the day" dialog but you can
also give your users power to add, remove, hide or edit tips with the
Tips Editor. Features include advanced graphics, multilanguage
support, event for each button and more. For D2-6, BCB1/3-5. Also OCX.
http://www.cooldev.com/cd_products.html#TipsSystem
Registration includes HtmlTools: http://www.cooldev.com/cd_products.html#HtmlTools
* Cool PSetting
Cool PSetting is the final word in application state management. MRU
lists, windows that "remember" their positions and sizes, and powerful
options and preferences dialogs. Supports saving application state
information in the Registry, in a file, in BLOB fields, or you can use
your own custom save and restore procedures. Data can be encrypted.
http://www.cooldev.com/cd_products.html#CoolPSetting
* AfalinaSoft XL Report 4.0
Template-based Excel reporting & data analyzing with 1 line of code:
Master-detail and multiple-sheet reports, Pivot tables, VBA macros.
TDataset ancestors + custom data. Native VCL code, IDE integration.
Delphi 4-6; Excel 97, 2K, XP. Very fast. Demo and docs. Source code.
http://www.afalinasoft.com/xl-report/index.htm
* GmPrintSuite v2.22 - by Murt Software. Shareware ($49)
GmPrintSuite is a custom report writing/print preview set of
components with full zooming, extensive printing functions, Thumbnail
functionality and much more! Check out the demo for several examples
of it's use.
http://www.murtsoft.com/download.htm
Tutorials
=========
* Delphi 5 Quick Start - by Borland
http://www.borland.com/techpubs/delphi/delphi5/
* Teach Yourself Delphi 4 in 21 Days
http://www.cesis.lv/learn/delphi/
* Matlus - The Delphi Apostle
Tutorials about emerging technologies and how they relate to Delphi.
Technologies include: TCP/IP, ISAPI, HTTP, SOAP/XML/WebServices and
N-tier Applications and Thin Clients.
http://www.matlus.com
* Classic Delphi
Examples of how many useful functions can be programmed in Delphi.
Written for D5 but with full source can be easily modified for other
versions. Several examples are done as components and some include
owner-draw code. Useful for intermediate Delphi programmers as well
as beginners.
http://www.govst.edu/users/gsmpati/delphi
* How to re-compile DelphiX and UnDelphiX in Delphi 6
http://www.gamedev.net/community/forums/topic.asp?topic_id=84818
Other Links
===========
* Jolt Awards
Software Development Magazine has just opened the nominations for the
12th Annual Jolt Software Excellence Awards. Have you used a software
technology or tool that you think other developers need to know
about? Is there a software-related book you simply couldn't put down?
Completing the nomination form takes about 3 mins.
http://www.joltawards.com/
* Delphi Gamer
This site lists games developed in Delphi and resources such as
DelphiX and Direct X tutorials to help you develop games.
http://www.delphigamer.com/
* Delphree Open Source Initiative
Delphree's goal is to encourage and provide support for Open Source
development. Delphree activities are primarily focused on Delphi,
but other Borland development platforms are supported as well.
http://delphree.clexpert.com/pages/lastchanges.htm
* Merlin's Delphi Forge
A huge Delphi FAQ.
http://www.delphifaq.net/
________________________________________________________________________
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=p29
________________________________________________________________________
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.
________________________________________________________________________
|