Pascal Newsletter #27
The full source code examples of this issue are available for download.
![]() |
![]() |
Pascal Newsletter #27 - 10-OCT-2001 INDEX 1. A FEW WORDS FROM THE EDITOR 2. BAR CODES (I) - Code 39 - What can be found in the Net about code 3 of 9 - Code 128 - The problem of even-length numbers 3. POCKETSTUDIO - The POWER of PASCAL in the PALM of your hand! - Benefits - Features - Bonus tools - System requirements - Download - More information 4. YAPI - YET ANOTHER PRINTER INTERFACE - Simplest Use - Why Yapi is Easy to Understand - Yapi's Extra Encapsulation – the concept of a "Report Line" - Complicated Reports - Some Comparisons - Conclusion 5. NEWS - Delphi 6 Update Pack - Kylix.sk 6. TIPS & TRICKS - Detecting if the screensaver is running - Refreshing a DriveComboBox - Capturing keyboard messages at application level - Knowing when a form is minimized - Opening comma-delimited data files 7. DELPHI ON THE NET ________________________________________________________________________ 1. A FEW WORDS FROM THE EDITOR In this issue I'm glad to present another article from Alirio Gavidia, and I have the great pleasure to announce the release of PocketStudio, a Delphi-like IDE for Palm OS application development. I'm also glad to introduce Yapi, a set of freeware and shareware VCL components to ease printing, and Kylix.sk, a new web site for Kylix users. I'm happy to see that our Delphi-en forum at Yahoo! Groups keeps growing and now has more than 250 members. http://groups.yahoo.com/group/delphi-en I'd like to invite you to join the group to increase the number of members and help the group reach the "critical mass" to make the forum alive. Subscription: http://groups.yahoo.com/group/delphi-en/join delphi-en-subscribe@yahoogroups.com You can configure your forum subscription to convert or not to convert messages to HTML format, or to avoid getting the messages in your email (you would be able to see them on the web). Our forum for Kylix programmers doesn't have much movement yet, but also keeps growing. To subscribe: http://espanol.groups.yahoo.com/group/kylixgroup/join kylixgroup-subscribe@gruposyahoo.com And not only the forums grow, but also this newsletter, which has recently surpassed the 4000 subscribers. Well, I've had a busy month... If I have unintentionally forgotten to mention anything, please forgive me and let me know. Greetings, Ernesto De Spirito eds2004 @ latiumsoftware.com __________________ Collaborated in this issue: Pedro Pablo Oviedo Vera, Luis Hurtado and Álvaro Lapacó. ________________________________________________________________________ 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. BAR CODES (I) By Alirio A. Gavidia Translated by Pedro Pablo Oviedo Vera This article, in two parts, tries to address the basic theory about the creation of bar codes and the creation from Delphi of these codes. There is a whole set of symbologies for bar codes. We will focus on "Code 39" and "Code 128". The reason is that most of the bar readers I have found support the first, and the second has an interesting optimization (it takes up less space). The codes that we will analyze are based on two elements that we will refer as bar and space, we also refer two continuous bars as a wide bar, and the same with spaces. However, a wide bar does not have to be the double of a normal bar. For code 39 this is true, but it is a minimum measurement, not maximum. Combined under certain rules, we generate the pattern that matters us. Code 39 ======= It is not first (before are "Codabar" and "Interleaved 2 of 5"), but it is first in something: alphanumeric support. Each "character" of Code 39 has four spaces and five bars combined in such a way that there are three wide (3 of 9) and five thin, so each character measures the same. There are 44 different symbols and a start/stop character normally referred as "*". There is no predefined limit in the overall length of the code and each character begins and finishes with a bar. Problems: The start/stop character (asterisk) is equal to an inverted "P". This can generate troubles for the readers. Originally the code was not defined with a verification character and for this reason nowadays many readers still read the code without a verification character. However, I recently tripped over one of those applications that require the "Checksum". It was a cash register machine. In order to calculate the number in question, all character values of the data are added up and the result is divided by 43. The rest or module is the value that must be placed before the stop character. There is an ASCII mode that allows to represent 128 characters of code ASCII, but this turns several characters in a combination of two, thus almost duplicating the width of the whole code. This is not only the bad thing. It happens that if you code in ASCII the reader must be set that way, or else the pairs will be read like separate elements. For example, the word "Code+" in ASCII mode "C+O+D+E$K" I will not make use of the ASCII mode option. What can be found in the Net about code 3 of 9 ============================================== In one occasion I had in my hands a type-39 character font for Windows. It included only digits, start/stop chars and not much more. For most applications that don't require alphanumeric codes, it was more than enough. It surprised me to investigate the amazingly high prices for bar codes libraries and utilities. I even found a company which sells the font. If you look in Altavista for 'Z:3of9 BarCode' you shall find the font by Bob Zormeir (bobz@serv.net), which supports digits, capital letters and the symbols: - . * $ / % +. It's of free distribution, although as it is usual, it establishes conditions for distribution that are contained in an attached file. This attached file contains some really interesting tips that I invite you to read thoroughly. We include the font in this delivery, but we won't make use of it in any example since in the end you just have to include the font and use it in labels. The examples will take another approach through a set of functions that we will show here. Code 128 ======== It was introduced in 1981 and is considered of high density, in fact, much better than "Code 39". It is alphanumeric. Each character has 11 elements combined to present three bars and three spaces. It always begins with a bar and it finishes with a space. It is interesting that there are 106 character combinations that can be generated with this code, but each character can have three different meanings. Best of all, there are characters that combine two digits, but we will see this in detail later. There is a start character, a stop character and a control character. In fact there are three start characters that we will refer as "Start Code A", "Start Code B" and "Start Code C". The patterns will have different meanings according to the start character used. For example, the combination of codes that represent CR ("carriage return"), the letter "m" and the pair "77" are equal. This also has an interesting consequence: there are two ways to write "77", as a single code or as a a sequence of two "7". It is possible to change the codification type inside a sequence. A "Shift Code" is defined for this. We could have a font for this code, but the use of checksums and different start patterns make it something impractical. Typographic limitations do not allow to generate a trustworthy representation of a bar code, so I will resort to the imagination of the reader. I will use an "x" to represent a bar and a "-" for the spaces. Thus, "7" in code 39 would be: x-x--x-xx-xx Thus, "7" in code 128 would be: xxx-xx-xxx- Thus, "77" in code 128 would be: xxx-xx-xxx-xxx-xx-xxx (Code A or B) or xxxx-xxx-x- (Code C) The problem of even-length numbers ================================== Code 128 is thrifty when it codifies numbers in two by two. This is because the characters defined under "Code C" represent pairs of numbers from "00" to "99". The problem is that with an uneven length there is no sequence in "Code C" that represents a single digit. The are two solutions: either accepting a zero to the left as devoid of value or shifting from "Code C" to some of the other models (B or A) and then representing the digit that matters to us. In many cases, applications take the codes from inventory products as alphanumeric, and not always we can choose an even length. In order to represent "123" we can: 1.- Use "Code C" and the pairs "01" and "23". The complete code would be <Code C>-<01>-<23>-<Check>-<End>. 2.- Use "Code C" and soon shift to "Code B". The resulting code would be <Code C>-<01>-<Shift to code B>-<2>-<Check>-<End>. 3.- Use "Code B" (or "Code A"). The resulting code would be <Code B>-<1>-<2>-<3>-<Check>-<End>. It is remarkable that the first solution is shortest. Unfortunately it isn't applicable in situations where "0123" is not equivalent to "123". Next delivery: It will be about the creation of bar codes type 39 and 128 making use of Delphi for this purpose. ________________________________________________________________________ 3. POCKETSTUDIO The POWER of PASCAL in the PALM of your hand! ============================================= I can't recall the number of times I've been asked if there is a Delphi for handheld devices... If you are among those who wanted to capitalize your experience in Delphi to develop applications for Palm OS, now you can! Pocket Technologies, Inc. has released PocketStudio Professional Edition v1.0, a complete development solution for embedded and hand held devices. PocketStudio Professional Edition is an innovative new development tool that results from the powerful combination of a state- of-the-art, 32-bit compiler and an easy-to-use integrated development environment that allows you to quickly build sophisticated applications for the Palm OS. PocketStudio provides the combined the power equal to C/C++ with the ease-of-use of Delphi to make development for the PalmOS simpler and more powerful than most developers ever thought possible. The IDE runs in Windows 9x/NT 4.0/2000 and you can produce optimized native runtime-free applications for the currently supported platforms (see System requirements below) that you can try your in the Palm OS Emulator (POSE) that is included with the product. Benefits ======== * Easy to learn. Ramp-up and development time is cut significantly * Creating complex and powerful applications is simple and intuitive * Bring products to market quicker than competitive development tools * Allows desktop developers to easily migrate to PalmOS development Features ======== * General - Creates optimized, native PalmOS applications (very small & fast) - No runtime needed - Inline Assembler - Full online help and PalmOS API references - Support for multi-segmented applications - Project Wizards - create a Palm database application in minutes - Samples, samples, and more samples - WebUpdate - keep up to date with the integrated WebUpdate (automatically notifies, downloads and installs the latest version of PocketStudio) - Conduit Wizard - a generic conduit wizard allows you to create simple conduit to sync your Palm data to the desktop - Support for HandEra, Kyocera, Handspring, Symbol, Sony, and most PalmOS devices available today * Integrated Development Environment - Created just for handheld development - Project Manager for easy access to all aspects of your project - Integrated PalmForm and PalmCode editors - Visual drag & drop PalmForm designer - Clear visual navigation to every aspect of your project - Project Templates - A pre-designed project that serves as a starting point for your application design - PSL Technology - (PocketStudio SnapIn Libraries) add the features you want with the open IDE API. The entire IDE was built this way! - Integrated debugging using POSE Emulator - PXL (PocketStudio Extended Library) collection of compiled source code components that plug directly into PocketStudio IDE for easy integration, code reuse, and third-party deployment * PalmCode Editor - Syntax highlighting - specify how the different elements of your code appear in the PalmCode editor. - Code completion - displays methods and properties for a component or resource - Code parameters - view required arguments automatically - Code templates - insert commonly used code into your source - PalmCode Explorer - easy navigation of every aspect of your code through a graphical hierarchy tree structure * Supported Languages - Pascal-based language . Access to the entire Palm OS API . Easy transition from desktop to handheld development . Create and use shared libraries * Resource Designer - PalmForm Designer - drag & drop visual design - Component Inspector - edit the component's properties and events easily - Resource Explorer - clear visual navigation and editing of all project resources, both visual and non-visual - Integrated PalmCode Editor - instant access to events and code for all components - Component Palette - the component palette's Help Hints feature displays a small pop-up window containing the name or brief description of the button when your cursor is over the button for longer than one second. - Create menus, dropdowns, or other resources in one convenient area. * Debugger - The integrated debugger can help you track down both runtime errors and logic errors. - By running to specific program locations and viewing the state of your program at those places, you can monitor how your program behaves and find the areas where it is not behaving as you intended. - Fully integrated direct-to-POSE debugger enables you to execute and test your application from the PocketStudio IDE - Breakpoints, variable watching, and step through features - View variables through the Watch Window Bonus tools =========== * Generic Conduit Allows easy desktop synchronization. Complete Delphi source code included (TurboSync required). * TurboSync SDK Trial version of a conduit development kit for Delphi. * Extensive Examples Large list of examples included in the package. Great starting point for any Palm OS development. * Palm OS Emulator from Palm, Inc. (POSE) System requirements =================== * Host Operating Systems - Windows 9x/NT 4.0/2000 * Minimum Requirements - Windows 9x/NT/2000 - 32 MB RAM - 30 MB available hard disk space - CD-ROM for installation * Target Operating Systems - All versions of the Palm OS supported by Palm OS SDK 3.5 - Creates optimized native Palm OS applications - no runtimes needed * Target Processor Support - Motorola 68328 Dragonball - Motorola 68EX328 - Motorola 68V2328 (Handspring Visor Prism & Platinum) Download ======== There's a free trial edition available for download: http://pocket-technologies.com/trial.asp More information ================ For more information, please go to Pocket Technologies's web site: http://www.pocket-technologies.com --------------------- Portions of this article were taken from the Pocket Technologies's web site and are Copyright (c) 2001 Pocket Technologies, Inc. - All Rights Reserved. They have been reproduced and modified here with the author's permission. ________________________________________________________________________ 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 ________________________________________________________________________ 4. YAPI - YET ANOTHER PRINTER INTERFACE By Owen Mooney Yapi is the simplest way to print from Delphi. Yapi is both very simple and sophisticated. It can be used with equal ease for both non-database and database applications. Simplest Use ============ Before writing about Yapi's details, let's consider the most basic usability test. How quick is it to make the simplest possible printing application? I timed it. To print 'hello world' (via a print preview) took just 45 seconds. The process is as follows: Start Delphi, from File menu choose "New Application" - Choose Yapi component tab - Drop two components on the form - Choose the system component tab - Drop a normal button on the form - Double click the button to get to its event code - Add two lines of code (see below) - Use F9 to run the program. - Click the button to see the print preview screen, then print. Total time did not include Delphi start up time. The two lines of code are in the button event as follows: procedure TForm1.Button1Click(Sender: TObject); begin yapitext1.writeln('hello world'); yapipaper1.preview; end; What do we get in this 45 seconds? Firstly we get the text placed correctly in the page margins with typical default font (Times new Roman, 12 Point). Secondly we get a print preview screen. This has a "print now" button, a printer dialogue button that will control number of copies, which pages to print etc. We also get zooming control, next page, previous page, and so on. As well as the normal print preview, Yapi's print preview also gives a totally unique method of controlling widows and orphans of the final report. Why Yapi is Easy to Understand ============================== Software systems make extensive use of metaphors. A window on a computer screen is a metaphor of a physical window on to a document below it. A button is a metaphor of something to be pressed with a real finger. Word processors are metaphors for typewriters, with "sheets" of white paper to type on, and a tab control bar that almost looks like the tabs on a mechanical typewriter. Yapi makes excellent use of metaphors. The principle Yapi component is a metaphor for a sheet of paper. The paper size, print margins, tabs etc. are all set up in a WYSIWYG manner in the object inspector window. The next metaphor is the text. There can be any number of these components, each controlling different fonts, colors, word wrapping, and positioning within the report. The third metaphor is the tab. These are dropped on the paper and moved into position just as easily as in any word processor. While all the formatting options are set up as objects and their properties, none of the contents is. This is where Yapi takes a radical separation from report generators and other printing interfaces. Report generators use a bunch of components to put information in reports. Yapi just uses: write( ... ); writeln( ... ); writeattab( ..., tabNumber); All of the complexity of report placement is encapsulated into variations of these three method calls. To us, older programmers, this is very natural. We have been using write and writeln for years. To users of report generators this may look like a step backwards, but it's very easy. Programmers are no longer constrained by what the report generator offers. They can put anything in the report, in any mixture of fonts, including different fonts on the same line. Even bitmaps and graphs can be put into the same line as text. They can combine database information, with web data, with email contents, with FTP data, with stringgrid contents etc. All this information can be easily integrated into the same report. This is all done with a few "writelns". All good printer tools should provide a good print preview. This requires the encapsulation of the display scaling and other actions associated with both the printer canvas and the print preview canvas. Yapi does this, but it also does another important additional encapsulation as follows... Yapi's Extra Encapsulation – the concept of a "Report Line" =========================================================== Yapi doesn't work with "bands". It works with lines. It encapsulates the concept of "Text on a line" (or pictures, or graphs). It handles all of the positioning and pagination for these lines in almost exactly the same way as word processors do. It extends the "line" concept for "text in this page" and "text in all pages" to replace the band functionality. Like word processors, the management of different fonts, and even bitmaps on the same line is correctly handled. All of this gives Yapi a very simple and natural "feel", with good flow of content from page to page. In addition, Yapi has unique features where the final program operator can view the print preview, and adjust the page to page flow to control widows and orphans. Complicated Reports =================== A good test for reporting is displaying the table "biolife" in DB Demos. This table not only contains string fields and numeric fields, but also a memo field, and a bitmap. For a good report generator, this can be set up using several components. Yapi, however, has no data-aware components. Nevertheless, this complex report uses only 32 lines of code. Source for this report is provided as an example. Some Comparisons ================ Delphi is provided with QReports. The number of alternative reporting and printing interfaces available indicates its limitations. Our team was building a Credit Union banking system. We evaluated QReports and rejected it. Yapi provided all of the banking reports. Report Printer Pro was also evaluated for the same job and rejected also as too complex and messy to use with some of the complicated reports we were creating. Conclusion ========== Yapi provides a very simple printing interface. It only needs seven components do almost any kind of report. The reference manual is a small 16 pages. Learning time is only 5 minutes. Despite this, a very wide range of printing activities can be undertaken, and very attractive and comprehensive reports can be produced. The Free Standard Version of Yapi (FREEWARE) can be downloaded from Yapi's web site: http://www.geocities.com/yapisoftware (this is a change from the earlier web site) A professional version is also available for evaluation and purchase, and is currently being upgraded to include "ExpertImage" technology for improved bitmap printing. ------------------ The author can be contacted at <yapi@scottech.net>. ________________________________________________________________________ 5. NEWS Delphi 6 Update Pack ==================== Last month Borland released the first update for Delphi 6, but later recalled it after some bug reports. Three weeks later Borland made the fixed update patch available for download: http://www.borland.com/delphi/webreg/registeredusers.html * Download the fixed Delphi 6 Updates - by John Kaster http://community.borland.com/article/0,1410,27800,00.html Kylix.sk ======== By Michal Laclavik Kylix.sk site was created to share code and experience between Kylix developers, a great and only visual development tool for Linux. Please contribute to help us make this site useful. The site currently contains only simple features, and the Kylix.sk team will start adding new features as soon as the Kylix community starts to use the site. The site currently has the following sections: - ARTICLES. Experience that you would like to share with other developers. - CODE. For sharing code or components with others. - NEWS. Links to other sites with little information. - JOBS. Companies or individuals are able to post jobs offers. - LINKS. List of all interesting links about Kylix or related sites. - MY PROFILE. Currently used for editing users' profiles. Register. If you want to add articles, code or jobs you have to register first. How this site will look depends mainly on us, Kylix Developers! If you have any comments or questions, feel free to email us to <info@kylix.sk>. ________________________________________________________________________ 6. TIPS & TRICKS Detecting if the screen saver is running ======================================== Since Windows 98 and Windows NT 5.0, the API SystemParametersInfo can be used to determine whether the screen saver is running. In previous versions of Windows NT we can determine if the screen saver is running by determining whether a desktop named "screen-saver" exists. This desktop is where the screen saver runs and exists while the screen saver is running. If we can open the desktop or if we can't because we are being denied access, then the desktop exists and thus the screensaver is running: function ScreenSaverRunning: boolean; const SPI_GETSCREENSAVERRUNNING = 114; var VI: TOSVersionInfo; Running: integer; hDesktop: HDESK; begin Result := False; FillChar(VI, SizeOf(VI), 0); VI.dwOSVersionInfoSize := SizeOf(VI); if GetVersionEx(VI) then exit; if (VI.dwPlatformid = 1) and (VI.dwMinorVersion > 0) or (VI.dwPlatformid = 2) and (VI.dwMajorVersion >= 5) or (VI.dwPlatformid > 2) then begin // Windows 98 or greater, or Windows NT 5 or greater SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, @Running, 0); Result := Running <> 0; end else if (VI.dwPlatformid = 2) and (VI.dwMajorVersion < 5) then begin // Windows NT 3 or Windows NT 4 // We try to open the desktop "screen-saver" hDesktop := OpenDesktop('screen-saver', 0, False, MAXIMUM_ALLOWED); if hDesktop = 0 then // Couldn't open the desktop. Let's see the cause... if GetLastError() = ERROR_ACCESS_DENIED then // If access was denied, this means the screensaver has the // desktop and therefore it is running. Result := True else // If it's for any other reason, the screensaver isn't running Result := False else begin // We could open the desktop ==> screensaver running CloseDesktop(hDesktop); // We should close the desktop Result := True; end; end; end; Refreshing a DriveComboBox ========================== The TDriveComboBox component doesn't have a Refresh method to rebuild the drives list, but we can force the list to be rebuilt by assigning the value of the TextCase property: with DriveComboBox1 do TextCase := TextCase; This would be equivalent to "DriveComboBox1.Refresh;", had it existed. Capturing keyboard messages at application level ================================================ We capture the keyboard messages with the OnMessage event of the Application object. You can find similar articles, but the source code presented here (attached) is more complete and takes into account certain special cases. I can't discuss the source code in full detail, but here go some general explanations... For the ENTER key (VK_RETURN) we want to move to the next control in the case of edit boxes and other controls, so we ask if the active control descends from TCustomEdit, which includes TEdit, TDBEdit, TMaskEdit, TDBMaskEdit, TMemo, TDBMemo and other components provided by third parties. Since we want to exclude TMemo, TDBMemo and, in general, all descendants of TCustomMemo, we make a special proviso in this case (leaving the message unchanged with no action), leaving us with the single-line edit controls, to which we add listboxes, comboboxes, etc. For these elements we replace the ENTER key (VK_RETURN) by a TAB key (VK_TAB), both for the WM_KEYDOWN and WM_KEYUP messages. However in the case of a combobox (any TCustomCombobox descendant), when the list is dropped down we wish to maintain the traditional behavior of the ENTER key (i.e. closing the list). It would be nice to have a keyboard shortcut for the default button of a form (the button with its Default property set to True), for example CTRL+ENTER. This feature is included in the code. The way it is accomplished is a little bit complex to explain... Perhaps it would have been easier to iterate thru the components on a form to find a focuseable button with Default = True, and then call its Click method, but we used a code similar to the one used in VCL forms, which takes into account the fact that the ENTER key might be wanted to get trapped by many controls, not only a button. We also want the DOWN arrow key (VK_DOWN) to be mapped as a TAB key (VK_TAB). For this case we used a simpler code. Of course, we also want the UP arrow key (VK_UP) to be mapped to a SHIFT+TAB key combination. Well, it isn't possible to map to a key with a modifier. We can discard the key and simulate the events of pressing SHIFT and then TAB, or we can change the state of the SHIFT key in the keyboard state array (like we did with the CTRL key in the CTRL+ENTER combination), but we took a different approach (simply focusing the previous control of the active control in the tab order). Finally, for Spanish applications, it is usually desirable to replace the decimal point of the numeric keypad with a coma (decimal separator in Spanish). Knowing when a form is minimized ================================ Forms don't have an OnMinimize event, but we can catch the WM_SYSCOMMAND message to learn if the form is being minimized: type TForm1 = class(TForm) private { Private declarations } procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND; public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} { TForm1 } procedure TForm1.WMSysCommand(var Message: TWMSysCommand); begin if Message.CmdType = SC_MINIMIZE then // Form is about to be minimized ; inherited; // Let the form process the message if Message.CmdType = SC_MINIMIZE then // Form has been minimized ; end; If we don't want the form to be minimized, we have to exit the procedure before calling inherited. Opening comma-delimited data files ================================== The BDE has an ASCII driver that allows us to open text files that hold data in comma-delimited format. Each line in the text file is a record, and the values of fields are separated by commas (or any other character). For example, let's consider the following data: +-----+-----------+---+------+------+ | 123 | Product A | 1 | 2.10 | 2.90 | +-----+-----------+---+------+------+ | 456 | Product B | 1 | 1.70 | 2.50 | +-----+-----------+---+------+------+ This data would be stored in a text file (for instance Table1.txt) as: 123,Product A,1,2.10,2.90 456,Product B,1,1.70,2.50 To be able to open such a file as a table, we have to create another text file describing the structure of the table. It should have the same name, but it should have the SCH extension (for instance Table1.sch). It is very much like an INI file, for example: [Table1] FILETYPE=VARYING CHARSET=ascii DELIMITER= SEPARATOR=, Field1=Code,Long Integer,11,00,00 Field2=Name,Char,17,00,11 Field3=Value1,Float,20,02,28 Field4=Value2,Float,20,02,48 Field5=Value3,Float,20,02,68 Now, to open the data file don't forget to set the TableType property of the TTable component to ttASCII. ________________________________________________________________________ 7. DELPHI ON THE NET Articles, tips and tricks ========================= * Delphi Database Programming Course - By Zarko Gajic Free online database programming course for beginner Delphi developers focused on ADO techniques. Three new chapters have been added in the last month (Chapter 15 "Lookup!", Chapter 16 "Compacting an Access database with ADO and Delphi" and Chapter 17 "Database reports with Delphi and ADO"). http://delphi.about.com/library/weekly/aa010101a.htm * Component writing, part 3 - By Peter Morris This article is the final part of a three part article on components. This final part will cover property / component editors, how to write dedicated editors for your component / property, and how to write "hidden" components. http://www.howtodothings.com/showarticle.asp?article=327 * Web Site inside a Delphi EXE - By Zarko Gajic How to store Web-style content inside a Delphi application http://delphi.about.com/library/weekly/aa061901a.htm * "The Big Brother" Delphi code toolkit - By Zarko Gajic Going undercover: hiding from the task list, disabling task-switch, removing from the TaskBar, disabling shut down, ... http://delphi.about.com/library/weekly/aa022701a.htm * Twain and Delphi - By Zarko Gajic Acquire images from scanners, cameras and image capture devices using Delphi. See how to import (and wrap in a component) an image scan control within Delphi. http://delphi.about.com/library/weekly/aa030299.htm * Developing Cross Platform Portable Applications (for beginners) By Ismo Horppu http://www.cc.jyu.fi/~ishorppu/english/projects/cpd_english.htm * Data-Aware Tree Views - by Roland Rundzjo Graphically Presenting Hierarchical Information http://www.ocdelphi.org/bfeature.htm * Creating a custom database login form - by Tom Wolken http://www.elementkjournals.com/ddj/9809/ddj9891.htm * Multiple Selections in a String Grid - By Christian Ebenegger and Thierry Revillard http://www.undu.com/Articles/011005c.html * Help for component creators - by Pintér Gábor. Create a help file for your new component that is exactly like Delphi's internal help pages. With source code, examples, and installation instructions. http://community.borland.com/article/0,1410,26679,00.html * How to adjust TDBGrid column widths automatically - by Philippe Randour This handy procedure automatically adjusts the size of static DBGrid columns to fit the DBGrid client width when the user resizes the form containing the grid. Say goodbye to the horizontal scrollbar! http://community.borland.com/article/0,1410,27548,00.html * Using COM+ object pooling with Delphi 6 - by Vincent Parrett Delphi 6 introduces support for COM+ object pooling, which can provide significant performance improvements under some circumstances. We take a look at Delphi 6's object pooling support. http://community.borland.com/article/0,1410,27568,00.html * Changes to TThread in Delphi 6 and Kylix - by Craig Stuntz Delphi's TThread class and its various support methods have been significantly revised in Delphi 6. This article will discuss what these changes mean to developers of multithreaded applications. http://community.borland.com/article/0,1410,27655,00.html * Installing InterBase to start automatically and run as a service under Linux - by Richard Combs http://community.borland.com/article/0,1410,27761,00.html * Resource Meter for Windows 95/98/ME - by Wen Kiat Chua How to the System, User, GDI resources for Windows 95/98/ME http://www.delphi3000.com/articles/article_2732.asp * Add-in for MS Office Applications - by Daniel Wischnewski How to write an addin (plugin) for MS Office applications. http://www.delphi3000.com/articles/article_2719.asp * C++-like templates in Delphi Object Pascal - by Rossen Assenov How to make C++-like templates in Object Pascal. http://www.delphi3000.com/articles/article_2695.asp * Rolling up a form - by Si Carter A new effect for forms http://www.delphi3000.com/articles/article_2696.asp * Making your own anti-virus - by Rafael Ribas Aguiló Prevent Love-Letter and other VBS viruses by yourself. http://www.delphi3000.com/articles/article_2685.asp VCL Components ============== * Moveable/Sizable TPanel with standard or color SizeGrip - by Kevin Gallagher http://www.delphi3000.com/articles/article_2745.asp * Fill In Combo Box - by Daniel Wischnewski Simple, enhanced combo box, that fills in the text area with possible options from the items list http://www.delphi3000.com/articles/article_2743.asp Tutorials ========= * Pascal for Delphi Programmers- by Bryan Valencia http://www.209software.com/books/p4dp/p4dp.html * Web programming in Delphi http://www.209software.com/books/wpid/ * Foundations in Database Development with Delphi and C++Builder - by Cary Jensen Introduction to the basic techniques for building BDE database applications using Delphi or C++Builder http://community.borland.com/article/0,1410,20564,00.html Links ===== * KYLIX.SK http://kylix.sk ________________________________________________________________________ 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.sandbrooksoftware.com/cgi-bin/TopSite2/rankem.cgi?id=latium http://news.optimax.com/delphi/links/links.exe/click?id=70C517ECAE6E http://www.programmingpages.com/?r=latiumsoftwarecomenpascal 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 http://213.65.224.200/cgi-bin/toplist.cgi/hits?Id=80 It's just a few seconds for you that REALLY mean a lot to us. ________________________________________________________________________ If you haven't received the full source code examples for this issue, you can get them from http://www.latiumsoftware.com/download/p0027.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!






