Boletín Pascal #31
Los ejemplos completos de código fuente de este número están disponibles para descargar.
![]() |
![]() |
Boletín Pascal #31 - 10-ENE-2002 INDICE 1. UNAS PALABRAS DEL EDITOR 2. RESOLVIENDO ECUACIONES LINEALES CON DELPHI USANDO EL METODO DE GAUSS 3. HACIENDO UNA APLICACION CLIENTE TCP/IP (CON CODIGO DE EJEMPLO)... 4. DISEÑANDO APLICACIONES DELPHI CON SKINS 5. FOROS 6. DELPHI EN LA RED - Componentes, librerías y aplicaciones . Shareware/Comercial . Freeware - Artículos, trucos y consejos - Tutoriales - Otros enlaces ________________________________________________________________________ 1. UNAS PALABRAS DEL EDITOR Pido disculpas por la demora en la publicación de esta edición, pero he tenido algunos problemas personales estas semanas, afortunadamente resueltos a esta altura. Bien, esta edición será breve porque estoy casi de vacaciones y la estoy preparando casi a las apuradas. Me gustaría agradecer a todos aquellos que están ayudando a conseguir más suscriptores. Espero que en el futuro se traduzca en más contribu- ciones al boletín par hacerlo más interesante. A propósito, si has solucionado algún problema particular de programación, me gustaría invitarte a compartir tu código en este boletín como Victory Fernandes, S.S.B. Magesh Puvananthiran y Charl Linssen están haciendo en esta edición. Mi agradecimiento hacia ellos. En la próxima edición tendremos material de Alirio Gavidia. También me gustaría agradecer a Dave Murray por hacerse cargo de la sección "Delphi en la red", trayéndoles enlaces a nuevo contenido Delphi en la Internet. Hay muchas cosas interesantes para esta edición. Me gustaría recomendarles el tutorial "How To Ask Questions The Smart Way". Saludos, Ernesto De Spirito eds2004 @ latiumsoftware.com ________________________________________________________________________ JfControls Lib. Multilenguaje. Multiapariencia. Skins. Privilegios. Más de 40 componentes integrados y personalizables. Múltiples problemas de programación resueltos. Administración centralizada de recursos. Para Delphi 3-7 y C++ Builder 3-6. http://www.jfactivesoft.com/spindex.htm ________________________________________________________________________ 2. RESOLVIENDO ECUACIONES LINEALES CON DELPHI USANDO EL METODO DE GAUSS Victory Fernandes <victory @ e-net.com.br> nos envía su aplicación MatriX Versión 1.2 para resolver sistemas de ecuaciones lineales usando el método de Gauss para reducción de matrices. El código fuente es demasiado grande para ser adjuntado a este boletín, pero puede descar- garse de esta ubicación: http://www.latiumsoftware.com/download/GaussSRC.zip (~174Kb) El ejecutable compilado también está disponible para descarga: http://www.latiumsoftware.com/download/Gauss.zip (~421Kb) Ambas descargas incluyen un archivo ReadMe (en inglés y portugués) explicando el proyecto. ________________________________________________________________________ 3. HACIENDO UNA APLICACION CLIENTE TCP/IP (CON CODIGO DE EJEMPLO)... Por S.S.B. Magesh Puvananthiran <sesba @ hotmail.com> Algún código de muestra... ========================== Este artículo pretende mostrarles cómo podemos usar el componente TClientSocket en Delphi como un cliente TCP/IP contra cualquier servidor TCP/IP. El servidor puede estar escrito en Delphi usando el componente TServerSocket o cualquier pieza de código que actúe como servidor TCP/IP. En mi caso, estoy interactuando con un código Java que actúa como servidor TCP/IP. En mi proyecto simplemente le envío un puñado de bytes a ese servidor Java y este servidor lee los bytes y realiza algunas tareas, enviando un puñado diferente de bytes como respuesta al cliente Delphi. En este artículo, permítanme darles algún código de ejemplo que usé en aquel proyecto debido a que algunas personas me pidieron que les enviara el código fuente para esta comunicación por sockets enviándome emails separados. Aprecio su interés. ¡Aquí les va! ¡Disfrútenlo! Mi proyecto usa casi nueve formularios y todos ellos necesitan inte- ractuar con el servidor Java al menos una vez, así que agregué un DataModule y puse allí un componente TClientSocket. El siguiente es el código para eso: unit DataMod; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, OleServer; type TdmDataModule = class(TDataModule) csClientSocket: TClientSocket; procedure csClientSocketError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure csClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); procedure DataModuleDestroy(Sender: TObject); private { Private declarations } public FWaiting : boolean; { Public declarations } end; var dmDataModule: TdmDataModule; implementation {$R *.DFM} procedure TdmDataModule.csClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); //Reading data back from server thro socket var Buffer : array [0..4095] of char; BytesReceived : integer; MemoryStream : TMemoryStream; begin while FWaiting do begin MemoryStream := TMemoryStream.Create; try // This time delay depends on the network traffic and also you // can put the time delay between reads. I've just put some 200 // milliseconds for my application before it starts from the // server. Sleep(200); while True do begin BytesReceived := Socket.ReceiveBuf(Buffer,SizeOf(Buffer)); if (BytesReceived <= 0) then Break else begin MemoryStream.Write(Buffer,BytesReceived); end; end; FWaiting := False; MemoryStream.Position := 0; // XMLResponse is a global StringList I'm using in my // application to convert the bytes received into string // You can use other ways to get the contents of a MemoryStream XMLResponse.LoadFromStream(MemoryStream); finally MemoryStream.Free; end; end; end; procedure TdmDataModule.csClientSocketError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); // Whenever you get a specific type of error while running the client // you will be given a messagedlg showing that the error has occured; // at that time you have to check whether the server is running // correctly or not and if needed make the server run properly and // then say OK. // Then csClientSocket.Open will try to reconnect to the server. So at // this time if some transaction is in the middle you have to send the // same stuff again after reconnecting. begin case ErrorEvent of eeGeneral : begin if MessageDlg('Error Connecting to Java server!' + #13 + 'Check the server status and try again!!', mtInformation, [mbOk], 0) = mrOk then csClientSocket.Open end; eeConnect : begin if MessageDlg('Error Connecting to Java server?' + #13 + 'Check the server status and try again!!', mtInformation, [mbOk], 0) = mrOk then csClientSocket.Open end; eeSend : begin if MessageDlg('Error Connecting to Java server?' + #13 + 'Check the server status and try again!!', mtInformation, [mbOk], 0) = mrOk then csClientSocket.Open end; eeReceive : begin if MessageDlg('Error Connecting to Java server?' + #13 + 'Check the server status and try again!!', mtInformation, [mbOk], 0) = mrOk then csClientSocket.Open end; eeAccept : begin if MessageDlg('Error Connecting to Java server?' + #13 + 'Check the server status and try again!!', mtInformation, [mbOk], 0) = mrOk then csClientSocket.Open end; end; end; procedure TdmDataModule.DataModuleDestroy(Sender: TObject); begin //Closing the socket connection csClientSocket.Close; end; end. Una vez que ha terminado con el DataModule, puede incluir este DataModule en las unidades en donde necesite interactuar con el servidor, consiguientemente evitando escribir código para leer datos devueltos por el servidor en varios lugares del proyecto. Pueden establecer la dirección del Host y el número de puerto (Port) del servidor para comunicarse en tiempo de ejecución usando parámetros en línea de órdenes (asumo que la gente Delphi conoce acerca de los parámetros en línea de órdenes o en línea de comandos). Entonces, en el evento FormCreate del formulario principal del proyecto, escriban el siguiente código para conectarse al servidor, es decir, establezcan la dirección IP y el número de puerto del servidor en el componente TClientSocket y establezcan Active en True. //Connecting to the Java server on a particular port try with dmDataModule.csClientSocket do begin if Active then Active := False; // Getting the Address or Host Name of the server through the // runtime parameters Host := ParamStr(1); // Getting the Port Number of the server at which the server // listens through the runtime parameters Port := StrToInt(ParamStr(2)); // Making the connection active Active := True; end; except on ESocketError do begin MessageDlg('Unable to Connect to Java Server ' + #13 + 'Please Try Again!', mtInformation, [mbOk], 0); exit; end; end; Una vez que estén conectados al servidor, pueden usar los métodos SendText y SendStream del TClientSocket para enviar datos al servidor. Por ejemplo: procedure Send; begin // Checking whether the socket connection is ready or not // If not , the error handling part of the TClientSocket will be // activated if csClientSocket.Active then begin // Sending the text through the socket connection csClientSocket.Socket.SendText('The string to send'); // Setting a flag to wait until the server sends the response back dmDataModule.FWaiting := True; while dmDataModule.FWaiting then Application.ProcessMessages; end; end; ________________________________________________________________________ 4. DISEÑANDO APLICACIONES DELPHI CON SKINS Por Charl Linssen <charl @ atomasoft.com> Hola amigos. Escribí este tutorial para gente que esté intentando escribir una aplicación Delphi con skins. ¿Por qué hacer eso? Bueno, tomen WinAmp por ejemplo, un reproductor MP3 que la mayoría de nosotros conocemos. El programa esta 100% "skinned", y aunque esté probablemente escrito en C/C++ pueden ver directamente que no hay TButtons en el formulario principal. Obviamente, esto se hace porque se ve muy bien. Pero desafortunadamente, también incrementa el tamaño de archivo (y el tiempo de descarga). Consiguientemente, uno debería hacer una aplicación con skins solamente cuando realmente le agrega algo al programa. Por cada botón, etiqueta y cualquier otra cosa, tienen que tener una imagen. También otra imagen para el OnClick, y quizás todavía otra más para el OnMouseMove. De nuevo, cuando no sea necesario, no hagan su aplicación con skins. Pero si piensan 'bla, bla, vayamos al código' no los molestaré más con mis consejos. Si desean hacer su aplicación con skins, también se pueden sacar de encima las ventanas estándar de forma rectangular. Eso se puede hacer bastante fácil especificando puntos (X,Y) y llamando al procedimiento SetWindowRgn: const RgnPoints : array[1..12] of TPoint = ((X:9;Y:6), (X:177;Y:6), (X:184;Y:13), (X:9;Y:49),(X:4;Y:43), (X:4;Y:11)); { Just a sample: this will probably look like hell :) } var Rgn : HRGN; begin Rgn := CreatePolygonRgn(RgnPoints, High(RgnPoints), ALTERNATE); SetWindowRgn(Handle, Rgn, True); end; Ahora, este código no debería ser muy difícil de entender. Por cada RgnPoint se dibuja una línea desde RgnPoints[I-1] a RgnPoints[I]. Desde la última coordenada -en este caso (4,11)- se dibuja una línea hasta la primera (9,6). Esto puede ser un poco difícil de entender, pero simplemente cópienlo y péguenlo en la parte final del evento FormCreate (el arreglo RgnPoints debería estar donde se declara Form1). Volviendo al verdadero "skinning" ================================= Cuando hago una aplicación con skins, simplemente coloco un TImage en el formulario con la imagen de fondo, y luego coloco todos los componentes sobre él. Puede que también quieran considerar un TImage, sobre él un TPanel, y sobre el panel sus componentes. Esto puede ser útil para algunas cosas. Por supuesto, al hacer esto, no se puede cambiar el tamaño del formulario, pero eso se puede arreglar fácilmente por ejemplo tomando imágenes separadas para la parte superior izquierda, superior derecha, inferior izquierda e inferior derecha, y luego usando el evento OnPaint para dibujar todo lo necesario entre las imágenes. Bueno, esto es todo por ahora amigos. Espero que encuentre tiempo para escribir tutoriales más útiles. Si tienen alguna pregunta acerca de éste, siéntanse libres de enviarme un email a <charl @ atomasoft.com>. También asegúrense de visitar mi sitio en http://www.FutureAI.com (trata sobre Inteligencia Artificial). Cya! // Charl ________________________________________________________________________ 5. FOROS Delphi ====== Foro abierto ------------ Si estás en la etapa de aprendizaje o si no te agradan los foros discriminados por niveles, este foro es para ti. http://espanol.groups.yahoo.com/group/delphi-abierto Para suscribirte, también puedes hacerlo desde la web o por email: http://espanol.groups.yahoo.com/group/delphi-abierto/join delphi-abierto-subscribe@gruposyahoo.com Nivel Intermedio ---------------- Si sabes mucho de Delphi, pero aún te falta largo trecho para ser un gurú, tal vez prefieras participar en el foro para programadores en Delphi de nivel intermedio: http://espanol.groups.yahoo.com/group/delphi-intermedio Para suscribirte, también puedes hacerlo desde la web o por email: http://espanol.groups.yahoo.com/group/delphi-intermedio/join delphi-intermedio-subscribe@gruposyahoo.com Nivel Avanzado -------------- Si te crees un gurú, y quieres estar en un foro sólo para gurús, lo más probable es que en realidad no necesites estar en un foro, pero bueno, por si acaso, este es nuestro foro para programadores en Delphi de nivel avanzado: http://espanol.groups.yahoo.com/group/delphi-avanzado Para suscribirte, también puedes hacerlo desde la web o por email: http://espanol.groups.yahoo.com/group/delphi-avanzado/join delphi-avanzado-subscribe@yahoogroups.com Componentes =========== Este es un foro para la búsqueda/recomendación de componentes de software (componentes VCL y CLX, objetos ActiveX, librerías DLL, objetos compartidos, etc.), así como utilidades, tutoriales, información, etc.: http://espanol.groups.yahoo.com/group/componentes De nuevo, puedes suscribirte desde la web o -más fácil- por email: http://espanol.groups.yahoo.com/group/componentes/join componentes-subscribe@yahoogroups.com ------------------ Puedes configurar tu suscripción a los foros para convertir o no los mensajes a formato HTML, o para no recibir los mensajes en tu email (podrás ver los mensajes en la web). ________________________________________________________________________ 6. DELPHI EN LA RED Por Dave Murray Componentes, librerías y aplicaciones ===================================== Shareware/Comercial ------------------- * CoolDBUtilities v. 1.04a - For Delphi 2-6 and BCB 3-5 Ever released major updates of your programs or databases they use? Tired to send megabytes over the Internet? Tired to update fields or indixes manually? Just try CoolDBUtilities package for these purposes and all these time consuming tasks will be more like fun than work. Update, check, rebuild, pack and sort your databases, and more... http://www.cooldev.com/cooldbutils.html * HierarchyTree v. 1.03 by Cooldev.com You can use HierarchyTree package to visually build the hierarchies. Easy way to show relations between various items. No coding required. Variety of ways to display hierarchy members. Features include run-time drag-n-drop support, scrolling, ability to print, save and load the controls. For Delphi 3-6 and BCB 3-5. http://www.cooldev.com/htree.html * EasyCompression Library v.1.11 by AidAim Software. SW $55, SWS $95. Easy in use stream replacements with transparent compression and encryption. One stream is used for both compression and decompression, better ratio than WinZip and WinRar, no DLL, small footprint 45K-100K, full sources, strong encryption-Rijndael, comprehensive help and demos. http://www.aidaim.com/products/products.php#ECL * Discover for Delphi - by Cyamon Software. Shareware ($30) Discover is an analysis tool that shows interactively, in real-time and directly in the source code which code blocks have executed at least once and which have never been executed. No source code modifications are required and Discover can export coverage data. http://www.cyamon.com/discover1.html Freeware -------- * CoolDBDialogs v. 1.01 by Sonket Dev and CoolDev.com The package contains five dialogs to work with your databases. It's small but neat and easy to use piece of code with some nice advanced features like design time preview etc. For Delphi 3-5 and BCB 3-4. Requires CoolControls (http://www.cooldev.com/coolcontrols.html). http://www.cooldev.com/cooldbdialogs.html * DUnit 5.0 A testing framework inspired by JUnit Java framework designed for Extreme Programming. The library also includes a port of the Java Collections library using Delphi interfaces. http://dunit.sourceforge.net/ * Delphi Fundamentals 2.0 Collection of Delphi code units. Includes maths, strings, datetime, streams and now internet libraries. http://fundementals.sourceforge.net/ Artículos, trucos y consejos ============================ * 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 22 "Transactions in Delphi ADO database development" explains how to to insert, delete or update a lot of records collectively so that either all of them get executed or if there is an error then none is executed at all. This chapter will show you how to post or undo a series of changes made to the source data in a single call. http://delphi.about.com/library/weekly/aa010202a.htm * How Borland embedded Mozilla in Kylix 2 - by Darren Kosinski Explains how the Mozilla browser was used to provide the HTML preview feature within the Kylix 2 IDE. Borland investigated a few different ways of embedding Mozilla and ultimately settled on a simple solution that can be used to embed almost any application within another. http://community.borland.com/article/0,1410,28199,00.html * Access and control a NT service - by Bertrand Goetzmann The unit in this article shows how we can start or stop an NT service or getting the location of its binary implementation from Delphi. http://www.delphi3000.com/articles/article_2960.asp * Populate column of DBGrid PickList for easy data entry - by S Issac A function to populate the DBGrid PickList to have auto selection of added field value when the grid is used to display a table. http://www.delphi3000.com/articles/article_2961.asp * Panel showing Enabled/Disabled in Children - by Daniel Wischnewski Component code that simply extends the Delphi Panel to properly show the Enabled State (True/False) within its children. http://www.delphi3000.com/articles/article_2962.asp * How to get field values of a dataset as comma text? - by Sunish Issac Getting the unique field values (strings) as comma text can be a big advantage in populating any TStrings descendant. These functions implement this with respect to a table and also on TBDEDataset. http://www.delphi3000.com/articles/article_2963.asp * How to print a file through the printer port? - by Sven Kissner http://www.swissdelphicenter.ch/torry/showcode.php?id=940 * How to Prevent Windows Shut Down? - by Thomas Stutz http://www.swissdelphicenter.ch/torry/showcode.php?id=939 * How to hide minimized MDI child windows? - by Thomas Stutz http://www.swissdelphicenter.ch/torry/showcode.php?id=938 * How to change each button's hint on the TDBNavigator? - by S János http://www.swissdelphicenter.ch/torry/showcode.php?id=918 * How to Save/Load a TStringGrid to/from a file? - by Thomas Stutz http://www.swissdelphicenter.ch/torry/showcode.php?id=941 * Always operate numeric keypad as if NumLock is engaged? - by P Below http://www.swissdelphicenter.ch/torry/showcode.php?id=953 * How to get a TFont's property from a font handle? - by P Below http://www.swissdelphicenter.ch/torry/showcode.php?id=952 * How to search for text in a TListview? - by Thomas Stutz http://www.swissdelphicenter.ch/torry/showcode.php?id=947 * How to change resource strings at run-time? - by P Below http://www.swissdelphicenter.ch/torry/showcode.php?id=946 * How to copy the clipboard to a stream and restore it again? - P Below http://www.swissdelphicenter.ch/torry/showcode.php?id=945 * How to read a binary file + display byte values as ASCII? - P Below http://www.swissdelphicenter.ch/torry/showcode.php?id=944 * How to fastly retrieve the high-order word from 32bit var? - Martin http://www.swissdelphicenter.ch/torry/showcode.php?id=942 * How to read data from another MDIChild form? - by Carlos Borrero http://www.swissdelphicenter.ch/torry/showcode.php?id=849 * System Tray Delphi Part 2 - by Zarko Gajic Once you have placed a program's icon in the Tray, it's time to show a popup menu near the icon and have the icon reflect the state of your application - even animate if you want to! http://delphi.about.com/library/weekly/aa122501a.htm * How to create/read from a structured storage file - by Colin Pringle How to create a structured storage file Part 2 shows how to read a structured storage file using COM. http://www.delphi3000.com/articles/article_2939.asp * Right-aligned Edit Field - by Daniel Wischnewski Editbox component which alows you to right-align the text. http://www.delphi3000.com/articles/article_2940.asp * How to use (Win)DOS routines in win32 console apps - P Koutsogiannis Have you ever tried to use the gotoxy or keypress function in your Win32 applications? http://www.delphi3000.com/articles/article_2941.asp * Taking a screen shot - by Daniel Wischnewski Sometimes you want to take a screen shot, however Windows becomes very slow with big data amounts. The solution is to make many small screen shots and paste the result together. It's not light speed, however often faster than taking the whole screen at once. http://www.delphi3000.com/articles/article_2942.asp * Custom statusbar shows hints without any coding - by Kevin Gallagher A statusbar component that show tooltips/hints automatically in all versions of Delphi. (Delphi 6 already has this.) http://www.delphi3000.com/articles/article_2946.asp * How to use extended Windows dialogs - by Mike Shkolnik How to use Windows's dialogs from shell32.dll. (Find Files, Find Computer, Select Icon, Shutdown, etc) http://www.delphi3000.com/articles/article_2947.asp * "Barcode" checksum by modulus 10 - by Mike Shkolnik How can I calculate a checksum by modulus 10 used in barcodes? http://www.delphi3000.com/articles/article_2948.asp * Adding Explorer Bar - by Khalid A. Creating custom Explorer Bars (Band object) within IE 5+. http://www.delphi3000.com/articles/article_2950.asp * Adding Explorer MenuItem - by Khalid A. Creating custom Explorer MenuItem band object in IE 5+. http://www.delphi3000.com/articles/article_2951.asp * Adding Explorer ToolBar Btn - by Khalid A. Adding a custom toolbar button to IE 5+. http://www.delphi3000.com/articles/article_2954.asp * How to really make a resource file - by Martin Ellis Creating a sort of uncompressed Zip file to store all the files required for a game or other program that requires additional files. http://www.delphi3000.com/articles/article_2955.asp * Change user password for specified server/domain? - S Grossenbacher http://www.swissdelphicenter.ch/torry/showcode.php?id=925 * How to show controls with rounded corners? - by P. Below http://www.swissdelphicenter.ch/torry/showcode.php?id=921 * How to Toggle Caps Lock & Num Lock? - by Thai Huynh http://www.swissdelphicenter.ch/torry/showcode.php?id=926 * How to get the text of a StatusBar? - by Thomas Stutz Getts the text in a status bar in any window, even other apps. http://www.swissdelphicenter.ch/torry/showcode.php?id=935 * How to list all app's ctrls & menus in a TTreeView? - by Martin http://www.swissdelphicenter.ch/torry/showcode.php?id=922 * Check if control is partially covered by another window - by B Sateli http://www.swissdelphicenter.ch/torry/showcode.php?id=931 Tutoriales ========== * How To Ask Questions The Smart Way - by Eric S. Raymond The answers you get to technical questions depends as much on the way you ask the questions as on the difficulty of the answer. This guide teaches you how to ask questions in a way that is likely to get you a satisfactory answer. http://www.tuxedo.org/~esr/faqs/smart-questions.html * Delphi For Fun Delphi tutorials with full source based around solving interesting puzzles or problems. Includes simple animated physics programs, Towers of Hanoi, a Maze generator, etc. http://www.delphiforfun.org/Programs/ * Primer on Multithreading - by Martin Harvey Online guide, explains most of the basics and a few more advanced techniques. Also available as an HTML Help file. http://www.pergolesi.demon.co.uk/prog/threads/ToC.html * Implementing Professional Drag & Drop Support in VCL/CLX applications A BorCon 2001 and BorCon UK 2001 paper by Brian Long. Explores simple VCL/CLX drag & drop, before progressing into more troublesome tasks, such as adding custom drag images to the drag cursor (as done by Windows Explorer when dragging files and folders. http://www.blong.com/Conferences/BorCon2001/DragAndDrop/4114.htm * Deep Sea Fishing In Delphi - by Brian Long VCL Secrets And Practical Use Of The Win32 API, a DCon 2000 tutorial. Uncovers gems from the VCL/RTL that are less well known, but potentially very useful. http://www.blong.com/Conferences/DCon2000/DeepSeaFishing/Fishing.htm * Web Development in Delphi - by Madrigal Technologies An overview of using WebBroker to produce web-based applications. http://www.madrigal.com.au/papers/webdev/delphi/delphi.htm * Scripting your Delphi Applications - by Madrigal Technologies This tutorial covers the MS ActiveScript control, the interfaces it exposes and ways to exploit its features in Delphi applications. http://www.madrigal.com.au/papers/scripting/scripting.htm * Writing Solid Delphi Code - by Madrigal Technologies (aka Fundamentals of Bug Prevention in Delphi) This tutorial covers a selection of proven techniques that you can use to avoid introducing bugs into your software. They range from automated unit testing to smaller tips and tricks. Included is the source code for an automated unit testing framework used in the article. http://www.madrigal.com.au/papers/solidcode/page1.htm Otros enlaces ============= * BDE Support page Provides a single repository for BDE support information, tools, and links to other BDE-related content on the web. http://www.bdesupport.com/index.html * The Helpware Group Support for MS HTML Help 1.x and MS Help 2.0, FrontPage and Delphi. Also includes the Delphi HTML Help Kit (Freeware) - Add 3 lines of code to your main form and you have successfully converted your entire application from WinHelp to HTML Help. http://helpware.net/index.html * Componenti C Builder / Delphi Library of freeware components for C Builder and Delphi. http://www.ciemmesoft.com/componenti/defaulting.asp * Microtower A site of resources for game development, focusing on topics related to Delphi, DelphiX, DirectX and and alternative APIs. Includes a message board to share you knowledge with other developers, links to related sites and DMX a shareware VCL wrapper for DirectX. http://www.microtower.com/ ________________________________________________________________________ ¡TÚ PUEDES AYUDARNOS! Por favor danos una mano y ayúdanos a llegar a los 10.000 suscriptores en los próximos meses. Una forma en que puedes ayudarnos es enviando este enlace a tus amigos: http://www.latiumsoftware.com/es/pascal/index.php Otra forma es votándonos en alguno de estos rankings para darle más visibilidad a nuestro sitio web y aumentar así el número de suscrip- ciones al boletín: http://www.sandbrooksoftware.com/cgi-bin/TopSite2/rankem.cgi?id=latium http://news.optimax.com/topdelphi/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 http://www.programacion.net/votar-enlace.php?id=474 http://www.lawebdelprogramador.com/buscar/enlace.php?id=615 Por favor vota. Son sólo unos segundos para ti que REALMENTE pueden hacer la diferencia. Necesitamos tu ayuda para poder continuar. ________________________________________________________________________ Si no has recibido el archivo con el código fuente completo de los ejemplos que se presentan en este boletín, puedes descargarlo de la siguiente dirección: http://www.latiumsoftware.com/descarga/p0031.zip ________________________________________________________________________ Página principal: http://www.latiumsoftware.com/es/pascal/index.php Página del grupo: http://espanol.groups.yahoo.com/group/boletin-pascal/ Para suscribirse / apuntarse: boletin-pascal-subscribe@gruposyahoo.com Para cancelar / removerse: boletin-pascal-unsubscribe@gruposyahoo.com Para reportar problemas con la suscripción: eds2004 @ latiumsoftware.com ________________________________________________________________________ Este boletín se provee "TAL Y COMO ESTA", sin garantía de ninguna clase. Su uso implica la aceptación de nuestros términos de licencia y de la ausencia de garantía que puedes leer en nuestro sitio web. Allí también encontrarás una nota sobre marcas registradas. Te animamos a que redis- tribuyas este boletín, siempre y cuando lo hagas en forma completa (incluyendo la información de copyright), sin modificaciones y de manera gratuita. Los artículos son copyright de sus respectivos autores y se reproducen aquí con el permiso de los mismos. ________________________________________________________________________ Latium Software http://www.latiumsoftware.com/es/index.php Copyright (c) 2002 por Ernesto De Spirito. Todos los derechos reservados ________________________________________________________________________ |
Los ejemplos completos de código fuente de este número están disponibles para descargar.
![]() |
¿Errores? ¿Omisiones? ¿Comentarios? Por favor contáctanos!






