Pascal Newsletter #29
The full source code examples of this issue are available for download.
![]() |
![]() |
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.sandbrooksoftware.com/cgi-bin/TopSite2/rankem.cgi?id=latium http://news.optimax.com/topdelphi/links.exe/click?id=70C517ECAE6E http://www.top219.org/cgi-bin/vote.cgi?delphi&83 http://top100borland.com/in.php?who=20 http://top200.jazarsoft.com/delphi/rank.php3?id=latium Please vote. It's just a few seconds that REALLY make the difference. Regards, Ernesto De Spirito eds2004 @ 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-7 and 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/ibadmin2.htm ________________________________________________________________________ 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://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://www.undu.com/Articles/011126f.html * 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.specosoft.com * 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.nevrona.com/Indy/ 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/tipssystem.html Registration includes HtmlTools: http://www.cooldev.com/htmltools.html * 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/coolpsetting.html * 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.kaposnet.hu/books/tysdelphi4/index.htm * 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://turbo.gamedev.net/delphixd6.asp 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.sdmagazine.com/jolts/joltform.htm * 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.savagesoftware.com.au/DelphiGamer/indexf.php * 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.codefield.com/merlinsforge/ ________________________________________________________________________ If you haven't received the full source code examples for this issue, you can get them from http://www.latiumsoftware.com/download/p0029.zip ________________________________________________________________________ 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? eds2004 @ latiumsoftware.com ________________________________________________________________________ Latium Software http://www.latiumsoftware.com/en/index.php Copyright (c) 2001 by Ernesto De Spirito. All rights reserved. ________________________________________________________________________ |
The full source code examples of this issue are available for download.
![]() |
Errors? Omissions? Comments? Please contact us!






