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






