Pascal Newsletter #41 - 30-NOV-2002
Contents
1. A few words from the editor
2. Remote NT/W2000 Server Admin and Info Classes
3. Inline Assembler in Delphi (V) - An Introduction to Objects
4. Forums / mailing lists
5. Delphi on the Net
- Components, libraries and utilities
. Freeware
- Articles, tips and tricks
- Tutorials
- Other links
________________________________________________________________________
1. A few words from the editor
I'd like to thank Mike Heydon for contributing an article for this
issue, and I'm glad to award him the license of TSDBGridFooter:
* TSDBGridFooter v2.0 by Jovan Sedlan, Shareware ($74.50)
This component is a powerful tool that provides automatic calculations
for your DBGrid and displays that information in a customizable footer
under the grid. It is designed to work with TSDBGrid (also included)
although you can use it with any TCustomDBGrid descendant.
http://www.softpile.com/Development/Libraries/Review_24756_index.html
For the next issue, we have available the following prize for one of our
contributors:
* llPDFLib v1.1 - by llionsoft, Shareware ($70, $280 with source)
llPDFLib is pure Object Pascal library for creating PDF documents.
Does not use any DLL and external third-party software to generate PDF
files. Library consists of TPDFDocument component with properties and
methods like Delphi's TPrinter but designed to generate a PDF file.
http://www.llion.net/
In the news, Interbase 7 has been released, representing a significant
upgrade from Interbase 6.5, and there's an unofficial update for Delphi
7's ActionBands at the Borland web site. Check the Other Links section
for a short description and the URLs.
I hope you enjoy this issue.
Regards,
Ernesto De Spirito
eds2008 @ latiumsoftware.com
__________________
Collaborated in this issue: Dave Murray and Charl Linssen
________________________________________________________________________
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. Remote NT/W2000 Server Admin and Info Classes
By Mike Heydon <mheydon@pgbison.co.za>
EOH Outsourcing http://www.eoh.co.za
This unit defines classes that access remote machines and obtains
information from them. The unit currentlty only reads information. Many
of the calls eg. NetServerGetInfo have equivalent NetServerSetInfo
calls. It will be easy enough to modify these classes if write
functionality is desired (bravehearts ONLY).
The following classes are implemeted:
TNTServerInfo = class(TObject)
TNTServerEventLog = class(TObject)
TNTServerServices = class(TObject)
TNTServerSessions = class(TObject)
TNTServerOpenFiles = class(TObject)
TNTServerGroups = class(TObject)
TNTServerDisks = class(TObject)
Plus Procedures and Functions:
procedure GetServerResources(const RootObject : string;
StringList : TStrings;
RecursiveEnum : boolean;
ResourceTypes : TNTServerResSet=[resAny])
function ValidateUserLogon(const UserName : string;
const Domain : string;
const PassWord : string) : boolean;
NOTE: for Remote Registry Access see Borland's
"TRegistry.RegistryConnect()"
Methods that set TStrings set the Items or Lines property to semi-colon
";" delimited fields. This format is ideal for my component
TMultiColListBox or for the function General.ExtractField(). Flag DWORD
fields can be tested via the function General.AndEqual(), eg.
if AndEqual(SI.ServerType,SV_TYPE_SERVER_UNIX) then ...
Most of the functions that set TStrings also allow a SET of Field
Options which control the information returned in the columns of the
individual Items/Lines of the TStringList.
Certain classes have OVERLOADED Create constructors. This allows you to
either create an ATTACHED instance or a simple UNATTACHED instance. In
the case of TNTServerEventLog you can create an instance that attaches
to the server an opens the SourceName eventlog immediately, or just
create the class and then call OpenLog() to attach to the log.
NOTE: OpenLog and similar methods in other classes will automatically
close any previously opened log before opening the new log.
Calling the Free method also closes any open log, thus there is
no need for a CloseLog() or similar methods.
Due to space limitations, the documentation is included in the source
code (atttached).
________________________________________________________________________
Support us! Vote for the Pascal Newsletter in The Programming Top 100!
http://top100borland.com/in.php?who=20
________________________________________________________________________
3. Inline Assembler in Delphi (V) - An Introduction to Objects
Objects are records
===================
From the assembler point of view, an object is like a record, whose
fields are its own fields plus the fields of its ancestors, plus the
pointer to the VMT (Virtual Methods Table). Let's see this with an
example:
type
TClass1 = class
FieldA: integer;
FieldB: string;
end;
TClass2 = class(TClass1)
FieldC: integer;
end;
In the example, TClass2 is somehow like a record with four fields:
TClass2 = record
VMT: pointer; // invisible field, always first
FieldA: integer; // inherited from TClass1
FieldB: string; // inherited from TClass1
FieldC: integer; // declared in TClass2
end;
Object variables are pointers
=============================
An object variable is just a pointer to an object, i.e. a pointer to a
record.
var
a, b: TClass2;
begin
a := TClass2.Create;
b := a; // just a pointer assignment
a.Free;
end;
A constructor allocates memory for an instance (object) of its class,
initializes it, and returns a pointer to the allocated memory. Thus,
after the call to TClass.Create the variable "a" points to the record
(the object):
+---+ +--------+
| a | ----------> | VMT |
+---+ +--------+
| FieldA |
+--------+
| FieldB |
+--------+
| FieldC |
+--------+
The assignment "b := a" doesn't create a new object, copy of the first,
but actually makes both variables point to the same object:
+---+ +--------+ +---+
| a | ----------> | VMT | <---------- | b |
+---+ +--------+ +---+
| FieldA |
+--------+
| FieldB |
+--------+
| FieldC |
+--------+
Assembler methods
=================
Methods receive an invisible first parameter called Self, which is a
pointer to the object upon which the method should operate.
type
TTest = class
FCode: integer;
public
procedure SetCode(NewCode: integer);
end;
procedure TTest.SetCode(NewCode: integer);
begin
FCode := NewCode;
end;
var
a: TTest;
begin
:
a.SetCode(2);
:
end;
The above Object Pascal code is somehow translated to standard Pascal as
follows:
type
TTest = record
VMT: pointer;
FCode: integer;
end;
procedure SetCode(Self: TTest; NewCode: integer);
begin
Self.FCode := NewCode;
end;
var
a: ^TTest;
begin
:
SetCode(a, 2);
:
end;
The example serves to explain that methods receive the Self pointer as
their first parameter, i.e. they receive the Self pointer in the EAX
register, and the first declared parameter is passed as a second
parameter in EDX, and so on (the second declared parameter is passed as
third in ECX, and the rest of the parameters are passed on the stack).
The method SetCode can be written in assembler like this:
procedure TTest.SetCode(NewCode: integer);
asm
// EAX = Self = Address of TTest instance
// EDX = NewCode parameter
// FCode := NewCode;
mov TTest[eax].FCode, edx // TTest(EAX)^.FCode := EDX;
end;
As you can see, object fields are accessed in the same way as record
fields.
NOTE: Properties are not fields, and they cannot be accessed directly
from inline assembler.
Here's an example of a method calling another method:
procedure TTest.Increment;
asm
// SetCode(Code+1);
mov edx, TTest[eax].FCode // ECX := TTest(EAX)^.FCode;
inc edx
call TTest.SetCode;
end;
We didn't set the value of EAX before making the call since EAX already
contains the desired value (Self), so the called method will operate on
the same object.
NOTES:
* Virtual methods can only be called statically, since a reference to
the class is needed in the call statemet.
* Overloaded methods cannot be distinguished in inline assembler.
Assembler constructors
======================
Constructors are very special methods. Constructors can be called to
create an instance of a class (i.e. to allocate the memory for the
object and initialize it), or simply to reinitialize an already
created object:
a := TTest.Create; // allocates memory
a.Create; // only reinitializes an existing object
To distinguish between these two situations, constructors are passed
an invisible second parameter of byte type (i.e. in the DL register)
which can be positive or negative respectively (the compiler uses 1
and -1 respectively).
If we have to call a constructor from assembler code with DL = $01
(to allocate memory for the object), we have to pass a reference to
the class in EAX. Since there is no symbol to access it directly from
assembler, we have to do something similar to what we did with the
type information for records:
var
TTest_TypeInfo: pointer;
:
initialization
TTest_TypeInfo := TTest;
Now that we have initialized a global variable with the reference to the
class from our Pascal code, we can use it in our assembler code:
var
a: TTest;
begin
// a := TTest.Create(2);
asm
mov eax, TTest_TypeInfo
mov dl, 1
mov ecx, 2
call TTest.Create
mov a, eax
end;
:
end;
Calling a constructor to reinitialize the object is simpler, since we
don't need a reference to the class:
var
a: TTest;
begin
:
// a.Create(2);
asm
mov eax, a
mov dl, -1
mov ecx, 2
call TTest.Create
end;
:
end;
We have nothing to worry about if we have to write an assembler
constructor since Delphi handles the allocation thing for us upon
entry to the constructor, and -after that- EAX will point to the object,
as it happens with any other method, but what is relevant is that if
the constructor has parameters, the first declared parameter will be
internally passed third, i.e. in ECX (instead as second, i.e. in EDX,
as it happens with other methods), and the rest of the parameters will
be passed on the stack.
constructor TTest.Create(NewCode: integer);
asm
// FCode := NewCode
mov TTest[eax].FCode, ecx
end;
__________________
NOTE: A full source code example is attached to the newsletter.
________________________________________________________________________
4. Forums / mailing lists
To join any of our forums, the best way is to subscribe from the web,
since that way you'll be able to access the features available at the
web site (like changing your subscription options, viewing the past
messages, accessing the files section, etc.). A Yahoo! ID is required
for that, 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 can also subscribe by email (you'll only have email access).
* Delphi: If you know a lot about 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 experts are
also welcome :-)
http://groups.yahoo.com/group/delphi-en/
Subscription:
http://groups.yahoo.com/group/delphi-en/join
delphi-en-subscribe@yahoogroups.com
* Kylix: Kylix programming.
http://groups.yahoo.com/group/KylixGroup/
Subscription:
http://groups.yahoo.com/group/KylixGroup/join
KylixGroup-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://tech.groups.yahoo.com/group/components/
Subscription:
http://tech.groups.yahoo.com/group/components/join
components-subscribe@yahoogroups.com
* Software Developers: This is a forum for discussions about software
development and to share experience in the work, professional or
commercial environments. It is not a programming forum, matters
treated here are supposed to be more general or language independent.
http://tech.groups.yahoo.com/group/software-developers/
Subscription:
http://tech.groups.yahoo.com/group/software-developers/join
software-developers-subscribe@yahoogroups.com
________________________________________________________________________
5. Delphi on the Net
By Dave Murray <irongut @ vodafone.net>
Components, libraries and utilities
===================================
Shareware/Commercial
--------------------
* SDL Component Suite 7.0 - by Software Development Lohninger ($99)
The SDL Component Suite provides a wide range of components for
science and engineering, e.g. math, statistics, chemistry, charts,
data visualisation, Fourier transform (FFT), 3D plots, geographic
maps, curve fitting, etc. Available for Delphi 3-7 and BCB 4-6.
http://www.lohninger.com/sdlindex.html
Freeware
--------
* Max's components page
Freeware and commercial components for Delphi and C++ Builder
http://www.maxcomponents.net/
* PHP4Delphi v2.2 - by Serhiy Perevoznyk, FREEWARE with source
PHP4Delphi allows you to execute the PHP scripts within the Delphi
program directly without a WebServer.
http://users.chello.be/ws36637/
* CEditIPAddr by Netta El-al, FREEWARE with source
IP Address Edit component.
http://www.torry.net/vcl/edits/diffedits/neipaddredit.zip
* IE Information Component v4.9 - by Ch Bergmann, FREEWARE with source
IE Availability, Version & Information Component features include:
Availability of IE, Version and Build Number, Encryption-Strength,
IE WindowTitle, IE ShellFolder and SpecialFolder Paths, and more.
http://yazno.tripod.com/ieinstver/
* TssVolumeController v1.0 - by Shen Min, FREEWARE with source
TssVolumeController is a component to control the mixer volume.
http://www.sunisoft.com/volumectrl/
* MiTeC System Information Component v7.73 - by Michal Mutl, FREEWARE
Component providing detailed system information including:
CPU architecture, type, count, level, revision, vendor, id, speed
OS version, build, platform, CSD version, user name, serial number
Graphic adapter chip name, dac, memory, color depth, modes, resolution
Sound card name, WaveIn, WaveOut, MIDIIn, MIDIOut, AUX, Mixer name
Memory info, allocation granularity, min.and max.application address
BDE, ODBC, DAO, ADO, ASPI, DirectX information
and a lot more!
http://www.mitec.d2.cz/
* Delphi Fast Zlib v1.1.2 - by Roberto Della Pasqua, FREEWARE w source
A Delphi zlib 1.1.4 implementation for fastest performance, including
targeted P6 code generation, 64bit alignment, source changes and
optimizations following Borland C++ full standards adherence, and a
Delphi added low level copy memory function to speedup typical strings
management. Embed the newest zlib 1.1.4 objects into your programs
without using external dlls, take a look into the example to see how
to work with streams and strings.
http://www.dellapasqua.com/delphizlib/
Articles, tips and tricks
=========================
* A Book, a Book, a Kingdom for a Book! - by Zarko Gajic
Find what are the best Delphi books on the market and read expert
reviews. Also, see what are the top picks in the .NET arena!
http://delphi.about.com/cs/magazines/
* Tips on Designing Data-Driven XML - by Edward Tittel
One of the powerful aspects of XML is the ability to define and
structure content or data. Learn a few tips for designing XML
documents based on the structure of the data.
http://builder.com.com/article.jhtml?id=u00320021007edt01.htm
* How to get Kylix to notice function key shortcuts - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=205
* How to identify drives assigned by the Subst command - Flurin Honegger
Recognizing virtual drives and combining 32 Bit and 16 Bit code to fit
from Win95 up to WinXp!
http://www.delphi3000.com/articles/article_3447.asp
* Find text in MS Word files without Word app loading - Dmitry Lifatov
Easy way to find a text in MS Word.
http://www.delphi3000.com/articles/article_3450.asp
* Building a Terminal Server Client-Application - by Max Kleiner
Working with MSTerminal Services Advanced Client ActiveX.
http://www.delphi3000.com/articles/article_3451.asp
* Copy NTFS file security from a source to a destination - Wayne Sherman
By default when coping a folder or file to a destination on an NTFS
partition the destination file takes the security and access control
settings of the destinations parent folder. This function provides an
easy way to copy the original settings to the destination file or copy
security settings from another file/folder.
http://www.delphi3000.com/articles/article_3452.asp
* OnChange Event for TDBLookupComboBox - by Alex Schlecht
How to make a new DBLookupComboBox-Component with OnChange-Event.
http://www.delphi3000.com/articles/article_3454.asp
* Function to Determine Oracle Version Number - by Mike Heydon
GetOraVersion()
http://www.delphi3000.com/articles/article_3455.asp
* Create an ActiveX friendly TSplitter - by Simon Moscrop
Prevent the 'Component has no parent window' error message appearing
when you use a TSplitter in a Delphi ActiveX control.
http://www.delphi3000.com/articles/article_3456.asp
* Function to determine MS SQL Server Version Number - by Mike Heydon
GetSqlVersion().
http://www.delphi3000.com/articles/article_3457.asp
* Check Valid IP Address - by Jerry Pylarinos
A simple way to check whether an IP address is valid.
http://www.delphi3000.com/articles/article_3458.asp
* Instant Messaging in Delphi: The MSN One - by César Nicolás Peña Núñez
An implementation of the MSN Messenger protocol, it isnt complete and
in order to build it you will need the WSocket package. Most of what
is presented here is a part of the specification.
http://www.delphi3000.com/articles/article_3459.asp
* How to get JPEG Image Size, including big images - by Mauricio Herrera
http://www.delphi3000.com/articles/article_3460.asp
* Sip from the Firehose: Short Computer Books I've Enjoyed - by David I
There are so many great computer books and so little time to read them
all. What I really love are the short books, the focused books with
low page counts...
http://community.borland.com/article/0,1410,29253,00.html
* How to use AutoInc fields with DataSnap - by Dan Miser
Implementing auto-incrementing fields for any DataSnap server.
http://community.borland.com/article/0,1410,20847,00.html
* If you are The Lone Gun, Take Aim at Time Bandits - by Jeffrey Kay
The author is the only developer in his small startup, but he also has
other duties as a member of the management team. Check out his tips on
how to stay on time and on track when you wear many hats.
http://builder.com.com/article.jhtml?id=u00420021023JBK01.htm
* How to adapt DateTime values for different SQL-Server formats?
http://www.swissdelphicenter.ch/en/showcode.php?id=1423
* How to load the CD-ROM icon?
http://www.swissdelphicenter.ch/en/showcode.php?id=1417
* How to patch a process?
http://www.swissdelphicenter.ch/en/showcode.php?id=1364
* How to center a TControl?
http://www.swissdelphicenter.ch/en/showcode.php?id=1415
* How to maker the mouse wheel works correct in TDBGrid?
http://www.swissdelphicenter.ch/en/showcode.php?id=1454
* How to use regular expressions in Delphi?
http://www.swissdelphicenter.ch/en/showcode.php?id=1478
* How to list all directories, files and drives in a listbox?
http://www.swissdelphicenter.ch/en/showcode.php?id=1495
* How to display the 'Organize Favorite' dialog box?
http://www.swissdelphicenter.ch/en/showcode.php?id=1494
* How to preform a Shell Sort - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=195
* How to convert an Icon to Bitmap - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=196
* How to set the transparent color of an image - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=197
* How to check if a font is a TrueType font - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=198
* How to read DOS environment variables - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=199
* How to programatically start the screen saver - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=203
* How to change the system date - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=204
* Quick untyped fileaccess - by DenShade Hyp
How can we read quickly from an untyped file consisting out of bytes
without making the code complicated?
http://www.delphi3000.com/articles/article_3415.asp
* ADO Recordset <-> XML - by Dmitry Lifatov
Provides two functions: function RecordsetToXML and function
RecordsetFromXML.
http://www.delphi3000.com/articles/article_3416.asp
* Modulo for huge numbers - by Andreas Schmidt
http://www.delphi3000.com/articles/article_3417.asp
* How To Make Your Own Self Extractor - by William Anthony
How to create a Self Extracting Executable.
http://www.delphi3000.com/articles/article_3419.asp
* Create You Own Custom Dataset (Part 1) - by William Anthony
How to create a custom DataSet.
http://www.delphi3000.com/articles/article_3420.asp
* Create You Own Custom Dataset (Part 2) - by William Anthony
How to create direct access dataset.
http://www.delphi3000.com/articles/article_3421.asp
* Get the published properties of an persistent object - Boris Wittfoth
How to get the published properties of an persistent object / Using
the pPropInfo-Pointer and the RTTI of Delphi.
http://www.delphi3000.com/articles/article_3423.asp
* Moving Controls over the form - by Boris Benjamin Wittfoth
Dragging / moving TWincontrol-Component over a TForm.
http://www.delphi3000.com/articles/article_3424.asp
* How to draw in a StringGrid Cell? - by Boris Benjamin Wittfoth
The standard Delphi-StringGrid can only hold one color for all cells.
How to create an multiple colored Stringgrid ?
http://www.delphi3000.com/articles/article_3425.asp
* TString Super Sort Class (descending,ignore case, etc) - Mike Heydon
http://www.delphi3000.com/articles/article_3427.asp
* Randomizing with the linear congruence method - by DenShade Hyp
The standard randomize function does not return a set of uniformly
randomized numbers.How can i truly randomize values?
http://www.delphi3000.com/articles/article_3429.asp
* Random string generator - by Uros Gaber
Ever wanted to generate a random string with specific random char on a
specific position in the string?
http://www.delphi3000.com/articles/article_3430.asp
* Date String (any format) to TDateTime - by Mike Heydon
http://www.delphi3000.com/articles/article_3431.asp
* Moving objects with snapgrid functionality - by Tommy Andersen
Here's an object that enables you to move your objects on a form
easily during runtime...
http://www.delphi3000.com/articles/article_3432.asp
* Display The Add to favorite Dialog Box - by Khaled Al Ahmad
How To Display the IE Add to favorite Dialog Box.
http://www.delphi3000.com/articles/article_3433.asp
* Screencapture with animated gif support - Christiaan Ten Klooster
How to create a screenshot of the entire screen, a selection or a
specific window to a bitmap, jpeg compressed or (animated) GIF file?
http://www.delphi3000.com/articles/article_3434.asp
* Standard RichEdit and URL highlighting/navigation - by Mike Shkolnik
How can I highlight URLs in RichEdit and how can I detect a mouse
click in text where URL is?
http://www.delphi3000.com/articles/article_3435.asp
* LogonUser() Win API call vs SSPI call - by Mike Heydon
Using the LogonUser API or the Security Support Provider Interface
(SSPI) to verify user credentials.
http://www.delphi3000.com/articles/article_3436.asp
* Redefining TCP/IP Client... - by S S B Magesh Puvananthiran
How do we create a TCP/IP Server/Client in Delphi?
http://www.delphi3000.com/articles/article_3437.asp
* Using queued components in Delphi - by Helmut Dollinger
Example showing queued components in Delphi. Queued Components are
feature of COM+ based on Microsoft Message Queuing Services (MSMQ).
They provide an easy way to invoke and execute components
asynchronously. Processing can occur without regard to the
availability or accessibility of either the sender or the receiver.
http://www.delphi3000.com/articles/article_3439.asp
* How do I unlock a Active Server Library DLL? - by Helmut Dollinger
How to make this a little bit easier during development...
http://www.delphi3000.com/articles/article_3440.asp
* Reading and writing RIFF base files (WAVE, AVI etc) - by Liran Shahar
Ever wanted to read and write user sound into a valid WAVE file? Ever
wanted to read all the available chunks with additional file data from
a WAVE fie?
http://www.delphi3000.com/articles/article_3441.asp
* Delphi 5 TToolbar does not resize correctly when XP common controls
6.0 are enabled - by Flurin Honegger
Altering Delphi 5 comctrls.pas to fit your needs!
http://www.delphi3000.com/articles/article_3445.asp
Tutorials
=========
* CLR, startup your engines! - by Alain "Lino" Tadros
The Common Language Runtime is the solid rock on which the .NET
Framework was built. From it's many features, we start with one that
defines the way CLR starts .NET applications.
http://community.borland.com/article/0,1410,29291,00.html
* Filtering ClientDataSets - by Cary Jensen
When applied to a dataset, a filter limits the records that are
accessible. This article explores the ins and outs of filtering
ClientDataSets.
http://community.borland.com/article/0,1410,29271,00.html
* ClientDataSet Aggregates and GroupState - by Cary Jensen
How to use aggregates to calculate simple statistics as well as how to
use group state to improve your user interfaces.
http://community.borland.com/article/0,1410,29272,00.html
* Locate and format XML data with XPath functions - Tony Patton
XPath allows you to locate + extract information from an XML hierarchy
and offers functions which provide an easy way to work with numeric
and textual data.
http://builder.com.com/article.jhtml?id=u00320021108ton01.htm&page=1
* Welcome to Caught in the .NET - By Alain "Lino" Tadros
Welcome to "Caught in the .NET" series of articles, my goal is to
introduce myself and set the stage and expectation for the next few
months of reading these series of articles.
http://community.borland.com/article/0,1410,29254,00.html
* Take a Guided Tour of XML Support in .NET - by Lamont Adams
If you're trying to learn your way around .NET's XML neighborhood, let
us take you on a tour. Here's a look at the Framework's various reader
and writer classes.
http://builder.com.com/article.jhtml?id=u00220021101adm01.htm
* Working With XML Entities - by Roy C. Hoobler
XML entities are often overlooked in the XML dialect, but they provide
a powerful vehicle for XML developers. Learn how to effectively use
them in your DTDs as placeholders or to retrieve external data.
http://builder.com.com/article.jhtml?id=u00320021105RCH01.htm
* Use XPath to Locate Information in XML Documents - by Tony Patton
XML offers a wonderful vehicle for packaging and exchanging data but
getting data from an XML document can be troublesome. Find out how
XPath provides a simple, consistent vocabulary for getting the data.
http://builder.com.com/article.jhtml?id=u00320020827ton02.htm
* Principles to Help Create Robust,Reusable OO Design Apps - Rahul Tyagi
Object-oriented software design provides a cleaner design and enhances
the ability to add new features in the future. Learn the basic
elements of good and bad design and two principles you can follow to
build solid object-oriented design code.
http://builder.com.com/article.jhtml?id=u00320021107tyr01.htm
* MVC Design Pattern: Better Organization + Code Reuse - by Brian Kotek
Consider the MVC design pattern for your development projects. Using
its three components, you can open up new levels of robustness, code
reuse and organization.
http://articles.techrepublic.com.com/5100-10878_11-1049862.html
Other links
===========
* Unofficial update of ActionBands feature of Delphi 7.0
This patch will affect both end user applications that use ActionBands
as well as the Delphi IDE itself since the menus in the IDE are
ActionBand menus.
http://cc.codegear.com/Item.aspx?id=19151
* Borland Releases Hot New Upgrade to InterBase
Borland has announced the release a significant upgrade to InterBase.
InterBase 7 has features intended to improve application performance
and developer productivity. Support for SMP and hyperthreading can
speed up applications, support more users and more complex application
architecture. New transaction monitoring capabilities can improve
developer productivity and ease deployment issues. According to field
testers, InterBase 7 is a "must have" upgrade.
http://www.borland.com/interbase/pdf/ib7_whatsnew.pdf
* BorCon France
Paris, November 21-22 2002.
http://info.borland.fr/conference/2002/
________________________________________________________________________
YOU CAN HELP US
We need your help to keep this newsletter going and growing. You can
help by referring the newsletter to your colleagues:
http://www.latiumsoftware.com/en/pascal/delphi-newsletter.php
Or you can help by voting for us in some or all of these rankings to
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 mean a lot to us.
Don't forget we also need articles for this newsletter and there is a
prize for one of the authors in each issue. All articles will be
considered but we are particularly interested in articles about Kylix
because there is so little available online to help Kylix developers.
Send articles to <eds2008 @ latiumsoftware.com>.
We are also looking for shareware authors who would like to offer their
components or applications as prizes for articles in the newsletter. In
return you will be promoted in this newsletter and the Latium Software
web site. For more information contact Dave <irongut @ vodafone.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=p41
________________________________________________________________________
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.
________________________________________________________________________
Group home page: http://groups.yahoo.com/group/pascal-newsletter/
Subscribe/join: pascal-newsletter-subscribe@yahoogroups.com
Unsubscribe/leave: pascal-newsletter-unsubscribe@yahoogroups.com
Report spam/abuse: abuse@yahoogroups.com
Problems with your subscription? eds2008 @ latiumsoftware.com
________________________________________________________________________
Latium Software http://www.latiumsoftware.com/en/index.php
Copyright (c) 2002 by Ernesto De Spirito. All rights reserved.
________________________________________________________________________
|