Pascal Newsletter #44 - 27-FEB-2003
Contents
1. A few words from the editor
2. Disk operations - How to check if a diskette is in the drive unit or
if it is protected, and more...
3. Using MS Word as report generator
4. IDE harddisk serial number - Using S.M.A.R.T. IOCTL API
5. In the news
- Borland releases Optimizeit Profiler for .NET
- SideWinder: Borland is developing a C# IDE for .NET
- BorCon Lite 2003
- Other news and articles
6. Forums / mailing lists
7. 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 Rafael Ribas Aguiló, Igor Siticov and Alex Konshin for
contributing articles for this issue, and I'm glad to give the prizes
for this issue to the latter two:
* Igor Siticov (Using MS Word as report generator)
· 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/
* Alex Konshin (IDE harddisk serial number - Using S.M.A.R.T. IOCTL API)
· Greatis Form Designer v3.4 - by Greatis Software, Shareware ($49.95)
It's a runtime form designer that allows you to move and resize any
control on your form. You don't need to prepare your form to use
Form Designer. Just drop TFormDesigner component onto any form, set
Active property to True and enjoy! For Delphi 4-7 and BCB 3-6.
http://www.greatis.com/formdes.htm
For the next issue, we have available the following prizes for two of
our contributors:
* LMD DesignPack - by LMD Innovative - Shareware (EUR 59)
Five components for adding design features to your applications (an
Object Inspector clone, a form designer and diagram based controls),
with full source code and extensive demo projects demonstrating
advanced features - even a report designer is basically included!
http://www.lmdinnovative.com/products/vcl/lmddesignpack/
* 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 visualization, 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
For a very limited time, Greatis Software is offering Greatis Object
Inspector Pro with a significant discount, exclusive for subscribers to
this newsletter and vistitors of our web site. Check the ad below the
editor's note.
What happened to the Inline Assembler in Delphi series? Is it over?
Definitely not. In future issues we'll be seeing some sample uses of
inline assembler, starting in the next issue with 128-bit arithmetic.
Meanwhile, I hope you enjoy this issue.
Regards,
Ernesto De Spirito
eds2008 @ latiumsoftware.com
__________________
Collaborated in this issue: Dave Murray
________________________________________________________________________
Object Inspector Pro SPECIAL: $29.95 (save $20 from the regular price!).
Greatis Object Inspector Pro is a suite of components that includes a
component for accessing all published properties and events of any
component, a common inspector that can be used for inspecting everything
in your application, and a component inspector that mimics the IDE
Object Inspector. http://www.latiumsoftware.com/en/objinspspecial.php
________________________________________________________________________
2. Disk operations - How to check if a diskette is in the drive unit or
if it is protected, and more...
By Rafael Ribas Aguiló <rribas @ facilities.com.br>
http://www.facilities.com.br/
If you want to be sure a diskette is in the drive, without showing those
strange message errors, you should use these functions:
function ComposeFileName(Dir, Name: string): string;
function HasDiskSpace({$IFDEF WIN32}Drive: string{$ELSE}Drive:
char{$ENDIF}; MinRequired: longint): boolean;
function GetDirectorySize(const Path: string): longint;
function GetFileSizeByName(const Filename: string): longint;
function IsDiskRemovable(Drive: char): boolean;
function IsDiskInDrive(Drive: char): boolean;
function IsDiskWriteProtected(Drive: char): boolean;
function AskForDisk(Drive: char; Msg: string;
CheckWriteProtected: boolean): boolean;
procedure GetAvailableDrives(DriveType: TDriveType; Items: TStrings);
These functions are implemented in the lDrives unit (attached).
________________________________________________________________________
Support us! Vote for the Pascal Newsletter in The Programming Top 100!
http://top100borland.com/in.php?who=20
________________________________________________________________________
3. Using MS Word as report generator
By Igor Siticov
SiComponents: http://www.sicomponents.com
Why not use MS Word as a report generator in your projects? We can
easily build a report and then allow the user to modify it in any way
he/she wants using this well-known editor.
The example below shows how to build the report based on the contents of
a StringGrid.
procedure TsiGridReporter.ShowReport;
var
Range: Variant;
i, j: integer;
begin
if FGrid = nil then
raise Exception.Create('No grid selected!');
try
FWordApp := CreateOleObject('Word.Application');
except
raise Exception.Create('Cannot start MS Word!');
end;
FWordApp.Visible := True;
FWordApp.Documents.Add;
if FShowDate then begin
Range := FWordApp.Documents.Item(1);
Range := Range.Sections.Item(1);
Range := Range.Headers.Item(1).Range;
Range.Text := 'Date: ' + DateToStr(Date) + ' Time: ' +
TimeToStr(Time);
end;
Range := FWordApp.Documents.Item(1);
Range := Range.Sections.Item(1);
Range := Range.Footers.Item(1);
Range.Range.Text := 'Page:';
Range.Range.ParagraphFormat.Alignment := ord(waAlignParagraphRight);
Range.PageNumbers.Add;
FWordApp.Documents.Item(1).Paragraphs.Add;
Range := FWordApp.Documents.Item(1).Range(
FWordApp.Documents.Item(1).Paragraphs.Item(
FWordApp.Documents.Item(1).Paragraphs.Count - 1).Range.End,
FWordApp.Documents.Item(1).Paragraphs.Item(
FWordApp.Documents.Item(1).Paragraphs.Count - 1).Range.End);
Range.Text := FTitle;
Range.Bold := fsBold in FTitleFont.Style;
Range.Italic := fsItalic in FTitleFont.Style;
Range.Underline := fsUnderline in FTitleFont.Style;
Range.Font.StrikeThrough := fsStrikeOut in FTitleFont.Style;
Range.Font.Name := FTitleFont.Name;
Range.Font.Size := FTitleFont.Size;
Range.Font.ColorIndex := ord(FTitleColor);
Range.ParagraphFormat.Alignment := ord(FTitleAlignment);
FWordApp.Documents.Item(1).Paragraphs.Add;
FWordApp.Documents.Item(1).Paragraphs.Add;
Range := FWordApp.Documents.Item(1).Range(
FWordApp.Documents.Item(1).Paragraphs.Item(
FWordApp.Documents.Item(1).Paragraphs.Count - 1).Range.End,
FWordApp.Documents.Item(1).Paragraphs.Item(
FWordApp.Documents.Item(1).Paragraphs.Count - 1).Range.End);
FWordApp.Documents.Item(1).Tables.Add(Range, FGrid.RowCount,
FGrid.ColCount);
Range := FWordApp.Documents.Item(1).Tables.Item(
FWordApp.Documents.Item(1).Tables.Count);
for i := 1 to FGrid.RowCount do
for j := 1 to FGrid.ColCount do begin
Range.Cell(i, j).Range.InsertAfter(FGrid.Cells[j-1, i-1]);
if (i <= FGrid.FixedRows) or (j <= FGrid.FixedCols) then begin
Range.Cell(i, j).Range.Bold := True;
Range.Cell(i, j).Range.Shading.BackgroundPatternColorIndex :=
ord(wcGray25);
end
else begin
Range.Cell(i, j).Range.Bold := fsBold in FCellFont.Style;
Range.Cell(i, j).Range.Italic := fsItalic in FCellFont.Style;
Range.Cell(i, j).Range.Underline := fsUnderline in
FCellFont.Style;
Range.Cell(i, j).Range.Font.StrikeThrough := fsStrikeOut in
FCellFont.Style;
Range.Cell(i, j).Range.Font.Name := FCellFont.Name;
Range.Cell(i, j).Range.Font.Size := FCellFont.Size;
// Range.Cell(i, j).Range.Font.ColorIndex := ord(FCellColor);
Range.Cell(i, j).Range.Shading.BackgroundPatternColorIndex :=
FCellColor;
end;
end;
end;
This example is just one method of the component attached to this
article. This component also has the PrintReport and PrintPreview
methods.
See the attached source code for details. This component could give you
just the first step for creating your own full featured report generator
based on using MS Word.
PS: The component and the source code are FREEWARE, so you can use them
as you want.
__________________
Igor Siticov is the author of TsiLang Components Suite (a full set of
professional components for building elegant, useful and user friendly
multilingual applications in two minutes) and Resource Builder (a full
featured RC script visual editor that can be a cool replacement for the
standard Borland Image Editor and Borland Resource WorkShop for creating
and editing resource files), by SiComponents: www.sicomponents.com
________________________________________________________________________
Vote for the Pascal Newsletter in The Programming Pages!
http://www.programmingpages.com/?r=latiumsoftwarecomenpascal
________________________________________________________________________
4. IDE harddisk serial number - Using S.M.A.R.T. IOCTL API
By Alex Konshin
http://home.earthlink.net/~akonshin/
Most FAQs recommend the use of GetVolumeInformation for getting the
"hard disk serial number", but what this function actually gets is the
volume serial number, not the manufacturer's hard disk serial number.
The volume serial no. is assigned and changed during the formatting
of the partition. Some companies use cloning tools for installing
software on all new computers, copying from one hard disk to all the
others. Of course, the volume serial numbers for these disks are
identical.
You can get the real serial number of IDE hard disk, model name,
firmware revision, and other IDE hard disk information using the
S.M.A.R.T. IOCTL API.
// Copyright (c) 2000 Alex Konshin
program IdeSN;
// PURPOSE: Simple console application that extracts
// the first IDE disk serial number.
{$APPTYPE CONSOLE}
uses
Windows,
SysUtils; // only for Win32Platform and SysErrorMessage
// -------------------------------------------------------------
function GetIdeDiskSerialNumber : String;
type
TSrbIoControl = packed record
HeaderLength : ULONG;
Signature : Array[0..7] of Char;
Timeout : ULONG;
ControlCode : ULONG;
ReturnCode : ULONG;
Length : ULONG;
end;
SRB_IO_CONTROL = TSrbIoControl;
PSrbIoControl = ^TSrbIoControl;
TIDERegs = packed record
bFeaturesReg : Byte; // Used for specifying SMART "commands".
bSectorCountReg : Byte; // IDE sector count register
bSectorNumberReg : Byte; // IDE sector number register
bCylLowReg : Byte; // IDE low order cylinder value
bCylHighReg : Byte; // IDE high order cylinder value
bDriveHeadReg : Byte; // IDE drive/head register
bCommandReg : Byte; // Actual IDE command.
bReserved : Byte; // reserved. Must be zero.
end;
IDEREGS = TIDERegs;
PIDERegs = ^TIDERegs;
TSendCmdInParams = packed record
cBufferSize : DWORD;
irDriveRegs : TIDERegs;
bDriveNumber : Byte;
bReserved : Array[0..2] of Byte;
dwReserved : Array[0..3] of DWORD;
bBuffer : Array[0..0] of Byte;
end;
SENDCMDINPARAMS = TSendCmdInParams;
PSendCmdInParams = ^TSendCmdInParams;
TIdSector = packed record
wGenConfig : Word;
wNumCyls : Word;
wReserved : Word;
wNumHeads : Word;
wBytesPerTrack : Word;
wBytesPerSector : Word;
wSectorsPerTrack : Word;
wVendorUnique : Array[0..2] of Word;
sSerialNumber : Array[0..19] of Char;
wBufferType : Word;
wBufferSize : Word;
wECCSize : Word;
sFirmwareRev : Array[0..7] of Char;
sModelNumber : Array[0..39] of Char;
wMoreVendorUnique : Word;
wDoubleWordIO : Word;
wCapabilities : Word;
wReserved1 : Word;
wPIOTiming : Word;
wDMATiming : Word;
wBS : Word;
wNumCurrentCyls : Word;
wNumCurrentHeads : Word;
wNumCurrentSectorsPerTrack : Word;
ulCurrentSectorCapacity : ULONG;
wMultSectorStuff : Word;
ulTotalAddressableSectors : ULONG;
wSingleWordDMA : Word;
wMultiWordDMA : Word;
bReserved : Array[0..127] of Byte;
end;
PIdSector = ^TIdSector;
const
IDE_ID_FUNCTION = $EC;
IDENTIFY_BUFFER_SIZE = 512;
DFP_RECEIVE_DRIVE_DATA = $0007c088;
IOCTL_SCSI_MINIPORT = $0004d008;
IOCTL_SCSI_MINIPORT_IDENTIFY = $001b0501;
DataSize = sizeof(TSendCmdInParams)-1+IDENTIFY_BUFFER_SIZE;
BufferSize = SizeOf(SRB_IO_CONTROL)+DataSize;
W9xBufferSize = IDENTIFY_BUFFER_SIZE+16;
var
hDevice : THandle;
cbBytesReturned : DWORD;
pInData : PSendCmdInParams;
pOutData : Pointer; // PSendCmdOutParams
Buffer : Array[0..BufferSize-1] of Byte;
srbControl : TSrbIoControl absolute Buffer;
procedure ChangeByteOrder( var Data; Size : Integer );
var ptr : PChar;
i : Integer;
c : Char;
begin
ptr := @Data;
for i := 0 to (Size shr 1)-1 do
begin
c := ptr^;
ptr^ := (ptr+1)^;
(ptr+1)^ := c;
Inc(ptr,2);
end;
end;
begin
Result := '';
FillChar(Buffer,BufferSize,#0);
if Win32Platform=VER_PLATFORM_WIN32_NT then
begin // Windows NT, Windows 2000, Windows XP
// Get SCSI port handle
hDevice := CreateFile('\\.\Scsi0:',
// Note: '\\.\C:' required administrative privileges.
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_EXISTING, 0, 0);
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
srbControl.HeaderLength := SizeOf(SRB_IO_CONTROL);
System.Move('SCSIDISK',srbControl.Signature,8);
srbControl.Timeout := 2;
srbControl.Length := DataSize;
srbControl.ControlCode := IOCTL_SCSI_MINIPORT_IDENTIFY;
pInData := PSendCmdInParams(PChar(@Buffer)
+SizeOf(SRB_IO_CONTROL));
pOutData := pInData;
with pInData^ do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
bDriveNumber := 0;
with irDriveRegs do
begin
bFeaturesReg := 0;
bSectorCountReg := 1;
bSectorNumberReg := 1;
bCylLowReg := 0;
bCylHighReg := 0;
bDriveHeadReg := $A0;
bCommandReg := IDE_ID_FUNCTION;
end;
end;
if not DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT,
@Buffer, BufferSize, @Buffer, BufferSize,
cbBytesReturned, nil ) then Exit;
finally
CloseHandle(hDevice);
end;
end
else
begin // Windows 95 OSR2, Windows 98, Windows ME
hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil,
CREATE_NEW, 0, 0 );
if hDevice=INVALID_HANDLE_VALUE then Exit;
try
pInData := PSendCmdInParams(@Buffer);
pOutData := @pInData^.bBuffer;
with pInData^ do
begin
cBufferSize := IDENTIFY_BUFFER_SIZE;
bDriveNumber := 0;
with irDriveRegs do
begin
bFeaturesReg := 0;
bSectorCountReg := 1;
bSectorNumberReg := 1;
bCylLowReg := 0;
bCylHighReg := 0;
bDriveHeadReg := $A0;
bCommandReg := IDE_ID_FUNCTION;
end;
end;
if not DeviceIoControl( hDevice, DFP_RECEIVE_DRIVE_DATA,
pInData, SizeOf(TSendCmdInParams)-1, pOutData,
W9xBufferSize, cbBytesReturned, nil ) then Exit;
finally
CloseHandle(hDevice);
end;
end;
with PIdSector(PChar(pOutData)+16)^ do
begin
ChangeByteOrder(sSerialNumber,SizeOf(sSerialNumber));
SetString(Result,sSerialNumber,SizeOf(sSerialNumber));
end;
end;
// =============================================================
var s : String;
rc : DWORD;
begin
s := GetIdeDiskSerialNumber;
if s='' then
begin
rc := GetLastError;
if rc=0 then WriteLn('IDE drive does not support SMART feature')
else WriteLn(SysErrorMessage(rc));
end
else WriteLn('Disk serial number: ''', s,'''');
ReadLn;
end.
Notes:
- The code is meant only for IDE drives supporting S.M.A.R.T. (Self
Monitoring, Analysis and Reporting Technology). For SCSI-2 drives
see: http://www.delphi3000.com/articles/article_1174.asp
- IDE hardware should support S.M.A.R.T. and it has to be enabled.
- Windows 95 does not support this feature until Windows 95 OSR2.
The code works with Windows 95 OSR2/98/98SE/Me/NT4/2000/XP.
- Windows 9x: SMARTVSD.VXD must be installed: just copy it from the
System folder (typically C:\WINDOWS\SYSTEM) to the System\IoSubsys
folder (typically C:\WINDOWS\SYSTEM\IOSUBSYS) and reboot.
- Windows NT/2000/XP: The code doesn't require administrative
priveleges and works under the 'everyone' account.
- For more information about the SMART IOCTL API see the sample
SmartApp at the MSDN Knowledge Base:
http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B208048
- If you need to get information about a slave disk or a disk that
attached to your secondary IDE controller then see example IdeInfo2
on my homepage: http://home.earhlink.net/~akonshin/
- For more information about S.M.A.R.T. and the other standards
related to ATA storage devices see Technical Committee T13 homepage:
http://www.t13.org/
You can find information related to the topic of this article on
pages 87-105 of the document http://www.seagate.com/support/disc/manuals/ata/d1153r17.pdf
______________
Alex Konshin is a Sr. Software Engineer and a former Delphi programmer
who now programs in Delphi as a hobby, but yet has been mentioned as a
contributor in Delphi 7. You can find some useful freeware components
with source code at his web site: http://home.earthlink.net/~akonshin/
________________________________________________________________________
Support us! Vote for the Pascal Newsletter in The Programming Top 100!
http://top100borland.com/in.php?who=20
________________________________________________________________________
5. In the news
Borland releases Optimizeit Profiler for .NET
=============================================
Optimizeit Profiler is a new performance assurance solution for the .NET
Framework. Optimizeit Profiler supports all .NET managed code and makes
performance tuning easier by providing real-time performance profiling
that quickly identifies and prioritizes performance issues, highlighting
the relevant line of source code for immediate resolution, enabling
programmers to deliver high-performance Microsoft .NET Framework based
applications faster.
For more information:
- Optimizeit Profiler
http://www.borland.com/opt_profiler/index.html
- Borland Launches Performance Assurance Solution for Microsoft .NET
Framework
http://www.planetanalog.com/pressreleases/bizwire/57199
- Microsoft Partners Rally Around Visual Studio .NET
http://www.internetnews.com/dev-news/print.php/1582361
SideWinder: Borland is developing a C# IDE for .NET
===================================================
Borland is working on the development of an IDE for C#, which is
currently known as SideWinder, but so far this is just the public
codename of this product, and it doesn't necessarily mean that it
will be the product's name when it gets released (although it is
pretty likely).
Here are some news and articles about SideWinder:
- 28-JAN-2003: Borland Becomes First to License the Microsoft .NET
Framework Software Development Kit
http://www.certificationsuccess.com/index.cfm?pageid=401
- 31-JAN-2003: Borland prepares new IDE for .Net
http://www.vnunet.com/News/1138406
- 04-FEB-2003: Borland moves ahead with .NET tools; inks pact with
Microsoft
http://www.adtmag.com/article.asp?id=7224
- 04-FEB-2003: Borland to offer IDE for Microsoft's .Net
http://www.infoworld.com/article/03/02/04/HNsidewinder_1.html
- 04-FEB-2003: Borland targets .Net developers
http://news.com.com/2100-1001-983321.html
http://news.zdnet.co.uk/software/0,1000000121,2129909,00.htm
http://www.businessweek.com/technology/cnet/stories/983321.htm
- 07-FEB-2003: First SideWinder screenshots
http://www.drbob42.com/SideWinder/home.htm
- 14-FEB-2003: Interview with Jason Vokes (Borland EMEA) about .NET
development at Borland, including SideWinder and Delphi for .NET
http://www.drbob42.com/SideWinder/interview.htm
SideWinder will be the first product of project Galileo, a much larger
Borland project announced at BorCon 2002:
* Borland to wield tools against Microsoft - By Wylie Wong
http://news.cnet.com/2100-1001-954958.html
Galileo's objective is to bring a 100% .NET multiple language IDE
targeted at multiple platforms (a sort of cross-platform Visual Studio
.NET, if you want to see it that way, but it will be more than that,
since for example it would integrate modeling and design).
BorCon Lite 2003
================
If you love Delphi, you should join David I, John Kaster, Ray Konopka,
Michael Li, Cary Jensen, and other Delphi developers in Houston this
March at BorCon Lite 2003.
http://community.borland.com/article/0,1410,29781,00.html
Other news and articles
=======================
* Flurry Of New Tools Target Microsoft Visual Studio .Net Developers -
by Gregg Keizer
http://www.techweb.com/wire/story/TWB20030211S0004
* Microsoft rebuilds .Net tools - by Martin LaMonica
Borland tools will be integrated into Visual Studio.Net.
http://news.com.com/2100-1001-984129.html
* .NET: Great Hope or Great Hype - by Alan C. Moore, Ph.D
www.delphizine.com/opinion/2003/03/di200303fn_o/di200303fn_o.asp
* Short interview with David Intersimone (Borland's VP of Developer
Relations) about Kylix.
http://www.programmersparadise.com/promo/QA_062402_2.pasp
* Borland Defies the Skeptics - by Elise Ackerman
Days after President and CEO Dale Fuller joined Borland Software in
April 1999, an industry pundit singled out the Scotts Valley company
as one of five tech firms unlikely to make it to the new millennium.
Fuller has been gleefully quoting the prediction ever since...
http://www.belleville.com/mld/belleville/business/4865330.htm
* Sip From The Firehose: A message from Borland to developers - David I
We've begun an advertising campaign targeted at executives in charge
of development. The topic? Borland's new application lifecycle studio
of products.
http://community.borland.com/article/0,1410,29597,00.html
* Blog with Delphi and Borland news
http://svd.blogspot.com/
________________________________________________________________________
Support us! Vote for the Pascal Newsletter in The Programming Top 100!
http://top100borland.com/in.php?who=20
________________________________________________________________________
6. 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
________________________________________________________________________
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
________________________________________________________________________
7. Delphi on the Net
By Dave Murray <irongut @ vodafone.net>
Components, libraries and utilities
===================================
Shareware/Commercial
--------------------
* LMD DesignPack - by LMD Innovative - Shareware (EUR 59)
Five components for adding design features to your applications (an
Object Inspector clone, a form designer and diagram based controls),
with full source code and extensive demo projects demonstrating
advanced features - even a report designer is basically included!
http://www.lmdinnovative.com/products/vcl/lmddesignpack/
* NTTools 7 For Delphi - by i-tivity (US$39.95)
Stop battling the Windows NT Security API! Get your copy of NTTools 7
for Delphi 4/5/6/7 now and save countless hours with this collection
of 40 VCL components written specifically to deal with the Windows NT
Security functions. Full source code is included.
http://www.i-tivity.biz/nttools.htm
Freeware
--------
* ODBCTools For Delphi - by i-tivity (with source)
ODBCTools is a complete replacement package for the BDE and consists
of the following components: ODBC_Database, ODBC_Table, ODBC_Exec,
ODBC_Conformance, ODBC_TableList, ODBC_FieldList, ODBC_Info,
ODBC_PrimaryKeys, ODBC_Procedures, ODBC_DSNList and ODBC_Admin.
http://www.i-tivity.biz/odbctools.htm
* TurboPower SysTools v4.03 - by TurboPower (with source)
A library of utility routines & algorithms for Delphi, C++Builder and
environments that support COM. Among other things, it supports 1-D and
2-D bar codes, sorting, money routines, logging classes, high-
precision math and a run-time math expression analyzer.
https://sourceforge.net/projects/tpsystools/
* Interbase 6.0 Open Edition
Can't find the link to download the free version of Interbase at
Borland's web site? Well, here it is:
http://info.borland.com/devsupport/interbase/opensource/
Articles, tips and tricks
=========================
* New Delphi feature: Multiple inheritance for interfaces in Delphi for
.NET - by John Kaster
Update 3 of the Delphi for .NET preview includes compiler enhancements
for multiple inheritance for interfaces.
http://community.borland.com/article/0,1410,29779,00.html
* Delphi for .NET preview Update 3 available for download - John Kaster
An update containing improvements to the compiler, RTL and VCL of the
Delphi for .NET preview is now available for download.
http://community.borland.com/article/0,1410,29780,00.html
* Implementing Callbacks to a Datasnap Server Interface - Xavier Pacheco
Add the ability for a Datasnap Server to call your client application
through a callback.
http://community.borland.com/article/0,1410,29539,00.html
* Metadata.NET - by Noel Rice
This article shows the capability of requesting information from .NET
providers at runtime and deals with Databases, Table, Fields,
constraints, Index and data Types.
http://community.borland.com/article/0,1410,29708,00.html
* Exchanging Raw Data over the Network 2 - by Zarko Gajic
An introduction to sending data over the network using Delphi + Indy.
Focuses on sending / receiving record data and raw (binary) data
using TCP/IP connections.
http://delphi.about.com/library/weekly/aa020403a.htm
* How to display fonts in a list box - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=216
* How to delete a file the next time the PC is rebooted - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=217
* How to convert a long filename to a short filename - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=218
* How to create a Access-Database (mdb) without Access - by Alex Schlecht
Using MS-Jet-Engine to create a *.mdb File.
http://www.delphi3000.com/articles/article_3536.asp
* Advanced Indy 1: Server Side Techniques - by Romeo Lefter
http://www.delphi3000.com/articles/article_3538.asp
* Creating "Hidden" Registry Values - by Daniel Wischnewski
Using the undocumented MS Native API.
http://www.delphi3000.com/articles/article_3539.asp
* Delphi and Automation with Word - by Herbert Poltnik
Automation allows one application to control another application.
The application being controlled is called an automation server (in
our case Word). The application controlling the server is called an
automation controller.
http://www.delphi3000.com/articles/article_3541.asp
* Event Chain Mechanism - by Alex Wijoyo
How can we attach more than one event handler to a component event?
http://www.delphi3000.com/articles/article_3543.asp
* BPL Analyze - by quark quark
What in BPL? How many Units in BPL?
http://www.delphi3000.com/articles/article_3548.asp
* How to load big bitmaps with few memory requirement? - by Alex Sanchez
http://www.swissdelphicenter.ch/en/showcode.php?id=1526
* How to disable CTRL+ALT+DELETE under XP? - by Andreas Kirchmeyer
http://www.swissdelphicenter.ch/en/showcode.php?id=1528
* How to set the background color of a MDI Form? - by Alex Pierson
http://www.swissdelphicenter.ch/en/showcode.php?id=1554
* How to resize an image (undistorsioned result image)? - Josep Ma Feliu
http://www.swissdelphicenter.ch/en/showcode.php?id=1463
* How to show a preview for a TRichEdit/ TRxRichEdit? - by Robert Dunn
http://www.swissdelphicenter.ch/en/showcode.php?id=1467
* How to use the Microsoft Speech API? - by Marco Parreira
http://www.swissdelphicenter.ch/en/showcode.php?id=1572
* How to print a TStringgrid? - by Reinhard Schatzl
http://www.swissdelphicenter.ch/en/showcode.php?id=1577
* How to enumerate the logged in users on a Remote or Local NT
Workstation? - by Manfred Ruzicka
http://www.swissdelphicenter.ch/en/showcode.php?id=1578
* How to install an INF file with Delphi? - by patrick
http://www.swissdelphicenter.ch/en/showcode.php?id=1585
* Creating an Internet Explorer-style User Interface, Part 1
By Fabio Lucarelli
http://www.pinnaclepublishing.com/dd/DDmag.nsf/0/ 95505F4719043C1185256CC300743624
Tutorials
=========
* The Dynamics of Agile Software Processes, Part I - by Randy Miller
Part one describes the characteristics of good agile software
development process design.
http://bdn.borland.com/article/0,1410,29726,00.html
* Adding Auto-Persistence Capabilities To Options Dialogs - by D. Jewell
How to avoid the pain of re-coding the saving and restoring of your
user-configurable settings for each and every new application, with a
little bit of lateral thinking.
http://www.thedelphimagazine.com/samples/1560/1560.htm
* Using Customisable Keyboard Shortcuts - by Stephen Posey
Demonstrates how keyboard shortcuts can be very easy using Actions.
http://www.thedelphimagazine.com/samples/1521/1521.htm
* Extracting XML Data From SQL Server 2000 - by Jani Järvinen
Describes how to use the XML features built into SQL Server 2000 from
your Delphi applications, through ADO, HTTP and SOAP.
http://www.thedelphimagazine.com/samples/1507/1507.htm
* Enhance Reuse by Embracing Service-Oriented Architecture - T Landgrave
Thinking of your apps strictly in terms of components can limit your
reuse options. Find out how to increase your options by defining
applications as services.
http://builder.com.com/article.jhtml?id=u00320030129lan01.htm
* Adventures in Kylix - by James R. Knowles
A blog style tutorial for Kylix.
http://www.ifm-services.com/people/jamesk/kylix/
________________________________________________________________________
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=p44
________________________________________________________________________
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) 2003 by Ernesto De Spirito. All rights reserved.
________________________________________________________________________
|