Boletín Pascal #35
Los ejemplos completos de código fuente de este número están disponibles para descargar.
![]() |
![]() |
Boletín Pascal #35 - 22-MAY-2002 INDICE 1. UNAS PALABRAS DEL EDITOR 2. APLICACIONES SIN VCL (y II) 3. APAGANDO LA PC EN UNA FECHA/HORA DETERMINADA BAJO WINDOWS NT/2000 4. FOROS 5. 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 Antes que nada, pido disculpas a todos los suscriptores por la gran demora en la publicación de esta edición. Por fin la transferencia de la lista de suscriptores a la plataforma de Yahoo! Grupos se ha completado y podemos entonces publicar este número. El próximo número será publicado dentro de muy poco. Me gustaría agradecer a los autores de los artículos colaborados para esta edición, y en esta ocasión me complace hacer entrega a Roberto Martínez O. la licencia de SMImport, un juego de componentes para convertir desde los formatos de datos populares, provisto por Scalabium: http://www.scalabium.com/smi/index.htm En la próxima edición, uno de nuestros colaboradores recibirá una licencia de Greatis Print Suite, un juego de componentes de vista previa e impresión, provisto por Greatis Software: http://www.greatis.com/printsuite.htm También estamos haciendo un concurso para los primeros dos artículos sobre Kylix que publiquemos. Los premios serán sendas licencias de AnyShape Transpack para Kylix provistas por MindBlast Software: http://www.mindblastsoftware.com El sitio de Latium Software tiene ahora un nuevo diseño gracias a la colaboración de Renato Gaiarsa <renato@knowhow-online.com.br>. Los invito a visitar el sitio y a reportar problemas o enlaces rotos: http://www.latiumsoftware.com/es/index.php El sitio ha sido recientemente listado en http://www.programacion.net y quisiera aprovechar para invitarlos a votar por nosotros siguiendo este enlace: http://www.programacion.net/votar-enlace.php?id=474 De la mano de Demian Lessa, la edición en portugués del Boletín Pascal ya es una realidad. Último número: http://www.latiumsoftware.com/br/pascal/0034.php Subscripción: http://groups.yahoo.com/group/boletim-pascal/join boletim-pascal-subscribe@yahoogrupos.com.br A quienes quieran dar sus primeros pasos con las DLLs, les recomiendo el tutorial de Pablo Castagnino "Introducción a las DLLs", que encontrarán listado en la sección de Tutoriales de este boletín. 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. APLICACIONES SIN VCL (y II) Por José Manuel Rodríguez (JMR) CopyRight: JMR, Madrid 1998/1999 Antecedentes ============ En el capítulo anterior abordamos la reducción del tamaño de los ejecu- tables mediante el uso de una unidad, que además ampliar al gama de los cuadros de diálogo que nos proporciona la VCL si así lo deseabamos, podíamos usar de manera totalmente independiente a la VCL, permitién- donos crear así ejecutables mucho más reducidos. Sin embargo la gama de las aplicaciones que se podían hacer usando solamente APIDlgs sin empleo de la VCL estaba muy limitada, algunas aplicaciones muy estereotipadas con unos cuadros de diálogo muy concretos y principalmente DLLs o aplicaciones que corrían ocultas durante el mayor tiempo de su vida y que de tarde en tarde mostraban información o recababan algún tipo de datos al usuario. En esta entrega vamos a ir mucho más lejos y vamos a ampliar espectacu- larmente el número de aplicaciones que se puedan hacer sin recurrir a la comodidad de la VCL. La idea es hacer un objeto que encapsule totalmente una aplicación. La aplicación así encapsulada será una mini-aplicación, por supuesto, pero totalmente funcional, con su menú, sus tips, posibilidad de reaccionar a los mensajes de Windows o a mensajes definidos por nosotros mismos, etc. Si cada vez que tengamos que mostrar un mensaje o pedir información hacemos uso a su vez de APIDlgs, tenemos que con la conjunción de APIApp y APIDlgs podemos cubrir gran número de programas sin tener que hacer uso de la VCL, y logrando ejecutables un 10% más pequeños que sus equivalentes con VCL o más, aunque esto naturalmente es muy difícil de estimar. Descripción =========== La unidad ApiApp contiene principalmente el objeto (no confundir con componente) TTinyApp que proporciona total funcionalidad para la gene- ración instantánea, aunque no visual, de aplicaciones completas. Dichas aplicaciones se muestran como un icono en la bandeja de la barra de tareas, tienen su propio menú emergente con las acciones asociadas que hayamos definido y además pueden procesar mensajes de Windows o bien mensajes definidos por el usuario. En cualquier momento podremos añadir nuevas opciones al menú, o redefinirlo totalmente, cambiar el icono que se visualiza en la bandeja, etc. Vamos a ver dos posibles usos: a) Imaginemos que tenemos una aplicación nuestra convencional que queremos monitorizar. Dicha aplicación puede ser un ejecutable normal, una DLL, un ISAPI, lo que sea... y que en incluso pueden estar ejecután- dose múltiples instancias de la misma en un momento dado, y estamos interesados en conocer cuando dicha aplicación recibe una orden del usuario (p.e.: un cliente HTTP ha solicitado ciertas filas de una tabla al servidor Web donde se ejecuta nuestra ISAPI, la aplicación ya ha abierto 100 veces un fichero, etc.). Pues bien, sólo tenemos que defi- nirnos nuestros mensajes propios para cuando se produzcan estos hechos mandarlos acompañados por ejemplo del 'Handle' de nuestra ventana principal en WParam. A continuación nos creamos nuestra aplicación descendiente de TTinyApp y le indicamos que reaccione a estos mensajes (mostrando un mensaje en una ventana y creando un fichero log si es necesario, etc.). Una vez hayamos lanzado nuestra 'TinyApp' seremos informados en todo momento de quien y cuando recibe que mensaje.... b) Ya que tenemos a disposición nuestro propio menú, en realidad, cualquier aplicación que no requiera un gran despliegue de interfaz gráfica puede acomodarse a este tipo de aplicaciones: programas para modificar la configuración de Windows o de otros programas, programas de diagnóstico, de cálculos matemáticos, etc. Obviamente gran parte de las aplicaciones mayores quedan fuera del alcance de APIApp pero hay muchas situaciones en que su uso puede considerarse, especialmente en aplicaciones complementarias. Funcionamiento ============== APIApp está basada enteramente en el Objeto TTinyApp, por lo que tiene todas las ventajas de la OOP, aunque sin la sobrecarga de uso de memoria y recursos que conllevan los componentes. Desde luego, se pierden las ventajas del diseño visual, pero su uso sigue siendo inmesamente fácil. De hecho, ni siquiera hay que conocer nada de OOP para sacarle todo su rendimiento. MÉTODOS PÚBLICOS Los métodos públicos son: constructor Create(cAppName, cIconName: String; MainProc: TMainProc); virtual; procedure AddUserMsg(MsgID: Integer; MsgAction: TMsgProc); procedure AddMenuOption(OptionStr: String; OptionID: Integer; OptionAction: TOptionProc); procedure SetNewIcon(const cIconName: String); procedure ResetMenu; procedure Execute; procedure Free; Create ------ constructor Create(cAppName, cIconName: String; MainProc: TMainProc); virtual; Simplemente crea un objeto TTinyApp, sin más. Los parámetros son: - cAppName: Nombre interno de la aplicación y será lo que se muestre en el tip cuando el puntero del ratón pase por encima del icono. Si se pasa una cadena vacía, simplemente no se mostrará tip alguno, pero es válido. - cIconName: Nombre del icono que queremos que se muestre en la bandeja. El nombre debe ir en mayúsculas y coincidir con el nombre de algún icono que haya sido incluido como recurso en nuestra aplicación (con la directiva {$R}, por ejemplo). Si se pasa una cadena vacía o un nombre de icono inexistente en los recursos del ejecutable, se empleará el icono por defecto. - MainProc: Es el nombre de un procedimiento de tipo TMainProc. TMainProc = procedure(var Msg: TMessage); Este procedimiento es llamado automáticamente por TTinyApp, cuando se hace 'click' con el botón izquierdo sobre el icono de la bandeja (acción por defecto según la terminología Windows) y nunca hay que llamarla directamente, y recibirá un parámetro de tipo mensaje de Windows como parámetro. Este parámetro de Create puede ser nil, en cuyo caso no se ejecuta ninguna acción cuando se hace 'click' con el botón izquierdo del ratón sobre el icono. AddMenuOption ------------- procedure AddMenuOption(OptionStr: String; OptionID: Integer; OptionAction: TOptionProc); Cuando se crea un objeto TTinyApp, se le asigna un menú emergente que sólo contiene la opción "Salir", que termina la aplicación. Este método permite añadir opciones al menú emergente de la aplicación. Los parámetros son: - OptionStr: Es un 'String' que contiene el texto que figurará en el menú. - OptionID: Es un identificador numérico de la opción del menú. Ha de ser único, pero puede ser cualquier número a partir de ID_USERFREE. - OptionAction: Es un procedimiento del mismo tipo que el TMainProc de arriba. Dicho procedimiento es el que se ejecutará cuando el usuario seleccione dicha opción del menú. AddUserMsg ---------- procedure AddUserMsg(MsgID: Integer; MsgAction: TMsgProc); Al crearse un objeto TTinyApp, se crea una ventana oculta a la que se le asigna un procedimiento de ventana que maneja los mensajes específicos que reciba la ventana oculta y el resto se los pasa a Windows. Obviamente, al tratarse de una ventana oculta, hay mensajes tales como WM_PAINT o WM_NCHITTEST que no recibirá nunca, pero si otros mensajes de Windows, como WM_ACTIVATE o WM_CLOSE, y por supuesto, sobre todo mensajes definidos por nosotros. Mediante este procedimiento podemos especificar procedimientos de respuesta para cada mensaje en el que estemos interesados. Los parámetros son: - MsgID: Identificador numérico del mensaje, puede ser un mensaje de Windows (p.e.: WM_CLOSE) o un mensaje definido por el usuario. En este último caso el rango libre para usar está a partir de WM_USERFREE. - MsgAction: El nombre de un procedimiento del tipo TMsgProc. Dicho tipo es totalmente análogo al tipo TMessageEvent de la VCL (el usado por Application.OnMessage, sin ir más lejos), sólo que aquí se trata de un procedimiento y no como en el caso de la VCL que es un método (o sea, una función de un objeto). Los parámetros que recibirá son exactamente los mismos que en el caso de OnMessageEvent: Msg es una estructura de tipo TMessage y Handled es una variable por referencia que podemos poner a True para evitar que el mensaje siga siendo procesado por Windows. SetNewIcon ---------- procedure SetNewIcon(const cIconName: String); Permite cambiar el icono que se muestra en la bandeja de la barra de tareas, incluso durante la ejecución de la aplicación. Se mostrara activado o desactivado conforme el estado real de la aplicación. Parámetro: - cIconName: Nombre del icono que queremos que se muestre en la bandeja. El nombre debe ir en mayúsculas y coincidir con el nombre de algún icono que haya sido incluido como recurso en nuestra aplicación (con la directiva {$R}, por ejemplo). Si se pasa una cadena vacía o un nombre de icono inexistente en los recursos del ejecutable, se empleará el icono por defecto. ResetMenu --------- procedure ResetMenu; Permite eliminar todas las opciones del menú emergente y sus acciones asociadas, excepto la opción 'Salir', necesaria para poder terminar la aplicación. Execute ------- procedure Execute; Pone en marcha la aplicación, cuando se invoca este método, se visualiza el icono en la bandeja de tareas y la aplicación entra en su bucle de mensajes, permaneciendo en él hasta que recibe un WM_QUIT, como siempre. Una vez se ha terminado el bucle de mensajes, la aplicación termina pero el objeto no es destruido, por lo que aunque no sea frecuente, se puede llamar a Execute varias veces siempre que no se haya llamado al método Free (o Destroy). Free ---- procedure Free; Destruye el objeto y libera toda la memoria. Es necesario llamarlo cuando se ha terminado de usar TTinyApp. PROPIEDADES PÚBLICAS Las propiedades públicas son: property Enabled: Boolean read FEnabled write SetEnabled; property Wnd: THandle read FMainWnd; - Enabled: Lectura y escritura. Permite conocer el estado de TTinyApp o bien activarla y desactivarla a voluntad. Cuando TTinyApp está desactivada no recibe mensajes por parte del usuario, por lo que no despliega el menú ni ejecuta la acción por defecto, aunque la ventana invisible sigue recibiendo mensajes. Es útil desactivarla por ejemplo cuando se está ejecutando una opción del menú para que no pueda volver a ser llamada mientras se está ejecutando. - Wnd: Sólo lectura. Es el 'Handle' de la ventana principal (oculta) de una TTinyApp. Guía rápida =========== El uso APIApp es muy fácil, cómodo e intuitivo. Normalmente basta con crearse un objeto de tipo TTinyApp, añadirle las opciones de menú que deseemos y llamar a su método Execute, llamándo a Free cuando hayamos terminado, esquemáticamente: var MiApp: TTinyApp; begin MiApp := TTinyApp.Create('Mi programa', '', nil); try MiApp.AddMenuOption('&Acerca de ...', ID_USERFREE + 1, ShowAbout); MiApp.AddMenuOption('Con&figurar', ID_USERFREE + 2, AppConfig); ...... MiApp.Execute; finally MiApp.Free; end; end. Vea el ejemplo TestTiny que acompaña a esta unidad para ver una aplica- ción completa (e inútil desde un punto de vista práctico). Comentarios =========== a) Por su propia idiosincrasia, esta unidad sólo funcionará en entornos de 32 its. Sólo ha sido probada en Delphi 3.0, pero no veo ningún motivo para que no funcione en Delphi 2.0 o Delphi 4.0. b) Como en la primera parte, todo el código incluido es original del que esto escribe, José Manuel Rodríguez, pero de nuevo tengo que agradecer las sugerencias y comentarios de José Luis Freire, Miguel Angel Oliver (maoliver@balearcom.es) y Nicolás Aragón (doperider@arrakis.es), sobre todo de este último, de quien ha partido la idea que yo me he limitado a implementar. Aparte de los autores que he citado en el anterior capítulo, tengo que agradecerles también mucho a los abundantes autores de las utilidades tipo TrayIcon que circulan por Internet, aunque no cito expresamente a ninguno por miedo de olvidar a otros. c) Esta unidad puede ser utilizada de forma totalmente gratuíta en programas compilados sin ningún tipo de restricción, aunque de ser usada se agradecería una mención tanto al autor en los créditos del programa que haga uso de ella. En caso de ser distribuida en forma de fuentes, ha de ser distribuida la totalidad del paquete, con todos los ficheros íntegros, incluyendo las notificaciones de copyright, y estará prohibido el cobro de cualquier cantidad, excluyendo el soporte, por dicha distribución. Esta unidad se suministra tal cual, sin garantías de ningún tipo, y su uso no implica que el autor sea responsable de ninguna consecuencia nefasta que éste pudiera conllevar. El autor tampoco se compromete a mantenerla, dar soporte técnico, etc., aunque está en su ánimo hacerlo de manera voluntaria. (¡Total! por este precio). Cualquier sugerencia, corrección o crítica (constructiva, claro) será bien recibida en: José Manuel Rodríguez (jmr@clubdelphi.com) __________________ Nota: Los ejemplos requieren la unidad APIDlgs presentada en la primera parte de este artículo que fuera publicada en la edición pasada, la que puede descargarse de http://www.latiumsoftware.com/descarga/p0034.zip ________________________________________________________________________ 3. APAGANDO LA PC EN UNA FECHA/HORA DETERMINADA BAJO WINDOWS NT/2000 Por Roberto Martínez O. <rmartinez@ieqsa.com.mx> El programa Timer que se adjunta permite definir una fecha/hora para que se apague una PC con sistema operativo Windows 2000 o NT. Este programa se nos hace útil cuando deseamos dejar corriendo algún proceso en la PC y no tenemos tiempo o no deseamos esperar a que éste acabe para apagar la máquina: sólo programamos la fecha/hora y nos vamos, y el programa se encargará de apagar la PC. El programa es del tipo "SystemTray", copiado del ejemplo de Ernesto De Spirito que puede encontrarse en la sección de trucos Delphi del sitio de Latium Software, al que le agregé un componente Timer y la rutina para forzar a que se apague la máquina. ________________________________________________________________________ 4. FOROS Recordamos a los suscriptores las direcciones de nuestros foros. Para unirse a algún foro, lo más recomendable es hacerlo desde la web para así tener acceso a todas las áreas del foro y la configuración de las opciones de suscripción, pero también es posible suscribirse por email. Para suscribirse desde la web es necesario poseer un ID de Usuario de Yahoo! (si no tienes el tuyo, puedes conseguirlo gratis registrándote como usuario de Yahoo!). * Delphi-abierto. Programación en Delphi (todos los niveles). 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 Suscripción: http://espanol.groups.yahoo.com/group/delphi-abierto/join delphi-abierto-subscribe@gruposyahoo.com * Delphi-intermedio. Programación en Delphi (nivel intermedio). Si ya sabes mucho de Delphi, pero todavía te falta un largo trecho para ser un gurú (o no tanto), este foro es para ti. http://espanol.groups.yahoo.com/group/delphi-intermedio Suscripción: http://espanol.groups.yahoo.com/group/delphi-intermedio/join delphi-intermedio-subscribe@gruposyahoo.com * Delphi-avanzado. Programación en Delphi. Sólo para gurús. http://espanol.groups.yahoo.com/group/delphi-avanzado Suscripción: http://espanol.groups.yahoo.com/group/delphi-avanzado/join delphi-avanzado-subscribe@yahoogroups.com * GrupoKylix. Programación en Kylix. http://espanol.groups.yahoo.com/group/GrupoKylix Suscripción: http://espanol.groups.yahoo.com/group/GrupoKylix/join GrupoKylix-subscribe@yahoogroups.com * FreePascal-es. Programación en Free Pascal (freepascal.org). http://espanol.groups.yahoo.com/group/freepascal-es Suscripción: http://espanol.groups.yahoo.com/group/freepascal-es/join freepascal-es-subscribe@yahoogroups.com * Desarrolladores-Software. Un lugar para tratar todos aquellos temas relacionados con el desarrollo de software y su comercialización, y para compartir experiencias en el ámbito laboral, profesional o comercial con otros. http://es.groups.yahoo.com/group/desarrolladores-software Suscripción: http://es.groups.yahoo.com/group/desarrolladores-software/join desarrolladores-software-subscribe@yahoogroups.com * Componentes. Un foro para buscar/recomendar componentes de software (componentes VCL y CLX, objetos ActiveX, librerías DLL, etc.), así como utilidades, tutoriales, información, etc. http://espanol.groups.yahoo.com/group/componentes Suscripción: http://espanol.groups.yahoo.com/group/componentes/join componentes-subscribe@yahoogroups.com ________________________________________________________________________ 5. DELPHI EN LA RED Por Dave Murray Componentes, librerías y aplicaciones ===================================== Shareware/Comercial ------------------- * AnyShape Transpack v2.0 - by MindBlast Software (DELPHI + KYLIX) Tired of boring, rectangular windows? Welcome to the exciting world of transparent, weirdly shaped windows! Simply drop a few components on a form, change a few properties - and voila! Features: WYSIWYG editing, design-time preview, automatic dragging, REAL stay-on-top forms, combine regions and load/save regions from file. Shareware, $30.00. http://www.mindblastsoftware.com/?page=transpack&ref=PascalNL Freeware -------- * TyEncoder v0.1.1 - by Steve Blinch, FREEWARE + source (DELPHI + KYLIX) A component to encode yEnc format file attachments for newsgroup messages. Includes example Delphi + Kylix projects and documentation. http://www.yenc32.com/developers/ * TyDecoder v0.1.1 - by Steve Blinch, FREEWARE + source (DELPHI + KYLIX) A component to decode yEnc format file attachments from newsgroup messages. Includes example Delphi + Kylix projects and documentation. http://www.yenc32.com/developers/ * Vortex IRC v2.0 - by JoepezT, FREEWARE with source (DELPHI + KYLIX) OpenSource IRC component with an internal IdentD server. http://www.berzerk.net * DirMonitor v1.1 - by Juan Carlos Molinos Mesa, FREEWARE with source Windows API based component for monitoring changes in specified local or remote folder. Monitored Events: Create, Modify, Change, Delete, Rename, Security changes. http://www.torry.net/vcl/filedrv/notification/jcmmdirmonitor.zip * TscExcelExport v2.8 - by Stefan Cruysberghs, FREEWARE with source Export all records of dataset to MS Excel 97, 2000 or XP. http://www.stefancr.yucom.be * Advanced Patch Engine v6.0 - by William Anthony, FREEWARE Using the new HybridGRAF XA Technology Controls. New features include: XP ready Controls, new locking system, smaller size Program + Modules. http://www.torry.net/toolscw.htm * TPowerPoint v1.2 - by Heiko Groschupp, FREEWARE with source Component to control Microsoft Powerpoint via OLE automation. http://hgroshupp.guertler.de * SerialNG v1.0.7 - by Ekkehard Domning, FREEWARE with source Enables an Application to communicate through the serial ports using only WinAPI and Delphi functions. Features: one Thread for send and receive, uses "Overlapped" for all R/W access, control of Timeout, control of Linestates, simple implementation. http://www.domis.de/serialng.htm * HTTPD Component v0.9 - by Swifty, FREEWARE HTTP/1.1 compliant Server component. http://dlux.sch.bme.hu/~swifty * TSysInfoCtrls v1.0 - by Simone Cicco Di, FREEWARE Component/unit to provide some System information: UserName, CompanyName, Computer Name, Date, CPU Vendor + Identifier, Resolution, Windows Version, DirectX Version, Serial Ports, Adapter Type, Printer, Win Product Key, Config Path, Program Directory + System Root, etc. http://www.devresource.net * FindComp v1.2 - by Dimka Maslov, FREEWARE with source A unit that lists computers and workgroups in a LAN, can obtain their IP addresses and enumerate shared network resources. http://endimus.com * DIMime v1.6 - by Ralf Junker, FREEWARE with source A fast MIME (Base64) Encoder and Decoder. Both MimeEncode + MimeDecode have a straightforward, flexible interface making them easy to use with buffers, strings and all other types you can imagine. http://www.zeitungsjunge.de/delphi * GDIPLUS v1.0 - by Henri Gourvest, FREEWARE with source GDI+ is a new graphics subsystem for Windows and provides a new set of graphics APIs for rendering 2D graphics, images and text. GDI+ is the only API for drawing in the .NET Framework, but in Delphi it is a complement to the GDI providing more advanced rendering capabilities. http://www.progdigy.com * RichView XML v1.0 - by Jiè Banzet, FREEWARE w. source A TRichView addition for saving XML, has its own DTD for effective saving of all content (bullets, hotspots, controls, tables, etc). http://www.torry.net/vcl/edits/rich/richviewxmlexe.zip * ShellPlus Components - by ShellPlus Development Group, FREEWARE With Shell+ you can easy develop your own Shell Extensions. http://www.swissdelphicenter.ch/en/download.php?id=220&kat=komponenten * TFileMonitor - by Winston Kotzan, FREEWARE Monitors a directory for changes, signalling an event. http://www.swissdelphicenter.ch/en/download.php?id=173&kat=komponenten * Glyph Collection - by Thomas Greiner, FREEWARE 5,700 Bitmap glyphs (32x32) extracted from all kinds of applications. http://www.swissdelphicenter.ch/en/download.php?id=8&kat=icons Artículos, trucos y consejos ============================ * Delphi.NET previewed at SD West - by Anders Ohlsson Borland also received the coolest award ever - Jolt Hall of Fame! http://community.borland.com/article/0,1410,28649,00.html * Where in the World is Sven Svensson? - by Anders Ohlsson Web service consumption and XML transforms made easy. http://community.borland.com/article/0,1410,28646,00.html * Delphi 6 Web App Debugger: A solution that works - by Bob Swart Delphi is a great tool for writing Web server applications but debugging those applications is difficult, to say the least. No solution was available that satisfied every developer until Delphi 6 introduced Web App Debugger. Let's take a look at how you can access this executable and use it to debug your Web server applications. http://builder.com.com/article.jhtml?id=u00220020501swa01.htm&fromtm=e057 * Easy + powerfull AutoComplete Search in TListBox - Mohammad B Mamouri http://www.delphi3000.com/articles/article_3200.asp * How to create a Multilingual Program - by Manfred Suesens Display all charsets of the world. http://www.delphi3000.com/articles/article_3203.asp * ISAPI Filter Header Files - by Daniel Wischnewski A complete Translation of the HttpFilt.h. http://www.delphi3000.com/articles/article_3205.asp * Exporting Grid to Word without OLE or Components - Eugene Kuchugurov How to save objects to Word compatible format (RTF). http://www.delphi3000.com/articles/article_3208.asp * Simple high performance 3-tier apps with Indy and ADO - by aka aka Now it's easy to create simple high performance middleware apps with Indy and ADO (thanks to OLE-DB resource poooling). http://www.delphi3000.com/articles/article_3209.asp * String Grid to HTML file - Mike Heydon StrGridToHTML() function. http://www.delphi3000.com/articles/article_3212.asp * From resources to TWebBrowser - by Christian Cristofori Ever wanted to do your own exe containing HTML pages? This article lets you easily manage HTML files included in your EXE as resources loaded into a TWebBrowser. http://www.delphi3000.com/articles/article_3213.asp * How to validate a float number? - by Thomas Stutz http://www.swissdelphicenter.ch/torry/showcode.php?id=1128 * How to get the ODBC datasource names? - by Grinder http://www.swissdelphicenter.ch/torry/showcode.php?id=1131 * How to extract the filename of an URL? - by Rainer Kümmerle http://www.swissdelphicenter.ch/torry/showcode.php?id=1134 * Make your own WinAmp with Delphi - by Zarko Gajic How to build an mp3 player with Delphi and get the ID3 tag info. http://delphi.about.com/library/weekly/aa112800a.htm * Making TabControls work on XP with Delphi 4 - by John W. Long Matteo Riso posted an solution for creating transparent Tabsheets in article http://www.delphi3000.com/articles/article_2843.asp, but it does not work for Delphi 4. This article is the solution. http://www.delphi3000.com/articles/article_3168.asp * Simple context-sensitive help - by Herman van der Hoek http://www.delphi3000.com/articles/article_3169.asp * How to receive session switch notifications (XP)? Thomas Stutz How to receive the WM_WTSSESSION_CHANGE message. http://www.delphi3000.com/articles/article_3171.asp * Download a file from a FTP Server - by Thomas Stutz The functions from wininet.dll are used. http://www.delphi3000.com/articles/article_3172.asp * Personal settings and the windows registry - by Teun Spaans What settings to store in the registry and how to do so? http://www.delphi3000.com/articles/article_3173.asp * A Nice Flat Coloured button used as a TButton replacement - by S Moss http://www.delphi3000.com/articles/article_3174.asp * Line in RichEdit - by Maarten de Haan How to get a margin line in a RichEdit just like in the Delphi editor? http://www.delphi3000.com/articles/article_3175.asp * Reconnecting to network shares - by Vassilis Perantzakis Ever lost a networked share and didn't know how to connect to it? This component can search the network for a specific share containing a file or a directory and automatically reconnect to it. http://www.delphi3000.com/articles/article_3176.asp * Getting debug information runtime - by Igor Kurilov Converting an exception address into a source line number and function public name using the Map-file. http://www.delphi3000.com/articles/article_3178.asp * Top Picks - Help Authoring Tools - by Zarko Gajic Documentation and the help system is essential when users are working with your applications. These tools help you create manuals in PDF, HTML, HTML Help, Windows Help and RTF formats. http://delphi.about.com/library/toppicks/aatphelp.htm * Build Your Own Compiler: Part I - by Fernando Vicaria Demystifies compilers by the straightforward approach of showing how to build one with Delphi and keeps jargon and formalism to a minimum. http://www.delphimag.com/features/2002/04/di200204fv_f/ di200204fv_f.asp * Storing Sounds and Graphics for Quick Retrieval - by Paul Qualls How to add pictures and sounds to a DLL from writing the run-control script and compiling the resource file to creating the DLL and hooking it up to an application. http://www.delphimag.com/features/2002/05/di200205pq_f/ di200205pq_f.asp * Interview with Marco Cantu - by SwissDelphiCenter http://www.swissdelphicenter.ch/en/marcocantu.php * How to add data manually to a tree view, from a Texteditor? http://www.swissdelphicenter.ch/en/showcode.php?id=857 * How to Draw the Mandelbrot Fractal? http://www.swissdelphicenter.ch/en/showcode.php?id=1107 * How to sort a TListView using the CustomSort method? http://www.swissdelphicenter.ch/en/showcode.php?id=1103 * How to enumerate all TForms of a Project? http://www.swissdelphicenter.ch/en/showcode.php?id=1104 * How to print only the selected Text of TRichedit? http://www.swissdelphicenter.ch/en/showcode.php?id=1105 * How to trap Windows Messages in a Component? http://www.swissdelphicenter.ch/en/showcode.php?id=1101 * How to change a TButton's Color? http://www.swissdelphicenter.ch/en/showcode.php?id=1100 * How to list all properties, events of a component? http://www.swissdelphicenter.ch/en/showcode.php?id=1084 * How to load HTML code directly into a TWebbrowser? http://www.swissdelphicenter.ch/en/showcode.php?id=1096 * How to show the windows recycle bin? http://www.swissdelphicenter.ch/en/showcode.php?id=1098 * Display DBNavigator's Buttons' caption - by Robert Zxg Defines a new class as a descendant of TDBNavigator and assigns captions to navigation buttons. http://www.delphi3000.com/articles/article_3145.asp * File Splitter - by Prashant Gulati Split and join large files. http://www.delphi3000.com/articles/article_3146.asp * URL Parsing class - by Arni Halldorsson http://www.delphi3000.com/articles/article_3147.asp * Remote port scanner - by Eber Irigoyen http://www.delphi3000.com/articles/article_3148.asp * COM/OLE Object Name Utility Procedure - by Mike Heydon Enables you to browse a list of Registered GUID classes from HKEY_LOCAL_MACHINE\Software\Classes\CLSID. The object name is the name as used by Delphi function "CreateOleObject('Outlook.Application')". http://www.delphi3000.com/articles/article_3149.asp * Building a Fractal Generator - by Max Kleiner A Fractal Library for Science, Chaos and Financials. http://www.delphi3000.com/articles/article_3150.asp * Streaming Variant Arrays (to memory, tcpip, file) - by Matt Harrison http://www.delphi3000.com/articles/article_3151.asp * Create Outlook Exchange Profiles automatically - by Jason Goff http://www.delphi3000.com/articles/article_3152.asp * Get notified: CD in/out - by Eber Irigoyen Need to know when the user inserts/extracts a CD? http://www.delphi3000.com/articles/article_3153.asp * Call ISAPI DLL from application - Kattous Ktates How to call ISAPI DLL from application using GET method. http://www.delphi3000.com/articles/article_3155.asp * Using Microsoft Index Server from Delphi - by Massimo Brini How to search MS Index Server and show the results like a dataset and some considerations on the use & misuse of this technology. http://www.delphi3000.com/articles/article_3157.asp * Draw a tiled image on MDI parent form - by Mohammad Baqer Mamouri http://www.delphi3000.com/articles/article_3158.asp * mySQL doesn't sort Arabic character correctly, unless.. - by W Alsayer http://www.delphi3000.com/articles/article_3160.asp * How to draw an underline on a Listview Caption - by Alex Van Der Vliet http://www.delphi3000.com/articles/article_3163.asp * ProgressBar Different Color - by Alain Gosselin How to change the foreground color of a ProgressBar? http://www.delphi3000.com/articles/article_3165.asp * Using Remote Execute Function (Unix REXEC) from Delphi - Mike Heydon http://www.delphi3000.com/articles/article_3166.asp * Web Service Workshop with Remote Data Storing - by Max Kleiner Borland VCLScanner explained step by step. How do you automatically transfer scanned client-data with a web service from a client to a database server or a file and store it? http://www.delphi3000.com/articles/article_3167.asp * Top Picks: Mobile/Handheld Tools - by Zarko Gajic Looking for a tool to help you code for handheld devices with Delphi? Look no further, this page presents Delphi components and Delphi-like handheld computing focused development tools. http://delphi.about.com/library/toppicks/aatpmobile.htm * Minimize DLL Hell and Get the Windows XP Look - by Bruno Sonnino Introduces side-by assemblies, Microsoft's response to DLL Hell. With them you can use multiple versions of a DLL without wreaking havoc and achieve the Windows XP look. http://www.delphimag.com/features/2002/05/di200205bs_f/ di200205bs_f.asp * Protect your software - by Mike Shkolnik, Scalabium Tips and recommendations, also available in PDF format. http://www.scalabium.com/articles/protection.htm * ID generation strategies - by Mike Shkolnik, Scalabium Describes different methods of generating a unique identifier or key to identify a database record. http://www.scalabium.com/articles/id_generation.htm * Discussion about Application Interface - by Mike Shkolnik, Scalabium Shows common mistakes in interface building and a few standard schemas which are useful for end-users. http://www.scalabium.com/articles/app_interface.htm * Add MS Index Server Search capabilities to your App - by Kirill Plugin Administering MS Index Server and executing full-text search queries. http://www.delphi3000.com/articles/article_3179.asp * Creditcard number validation - by Ronald Buster http://www.delphi3000.com/articles/article_3180.asp * Transfering data from one database to another - by Gabhan O http://www.delphi3000.com/articles/article_3182.asp * Distributable COM Objects on Remote Machines - by Mike Heydon http://www.delphi3000.com/articles/article_3184.asp * Creating Catalogs on Microsoft Index Server - by Luiz Marques http://www.delphi3000.com/articles/article_3189.asp * Exception Framework to log complete traverse info - by S R Nandakumar http://www.delphi3000.com/articles/article_3191.asp * Component templates - by Eber Irigoyen http://www.delphi3000.com/articles/article_3195.asp * Converting Text for different Code Pages - by Daniel Wischnewski Using the MS Multi Language Library from the MSIE 4.0+. http://www.delphi3000.com/articles/article_3198.asp Tutoriales ========== * Introducción a las DLLs - por Pablo Castagnino ¿Qué son? ¿Por qué usarlas? ¿Cómo crearlas? ¿Cómo cargarlas? ¿Cómo crear y usar una DLL de recursos? http://webs.sinectis.com.ar/alvadel/docs/dlls.htm * Matlus - The Delphi Apostle This site contains extensive tutorials on Web Services, ISAPI, ASP and TCP/IP. Run on a home broadband connection and uses Delphi ISAPI DLLs to generate dynamic content from Interbase and Access. http://www.matlus.com/scripts/website.dll * A journey through the Delphi IDE - by Zarko Gajic A Beginner's Guide to Delphi Programming: Chapter 2. http://delphi.about.com/library/weekly/aa020202a.htm * Remedial XML for programmers: Basic syntax - by Lamont Adams Maybe you've been stranded on a desert island hiding in a cave or avoiding all "Web stuff." Whatever reason, you're lacking XML savvy and want to remedy the situation. This first instalment in a 3-part series introduces XML and its basic syntax. http://builder.com.com/ article.jhtml?id=u00220020327adm01.htm&page=1&vf=tt * Remedial XML: Enforcing document formats with DTDs - by Lamont Adams Still playing catch-up when it comes to XML? No sweat, this XML tutorial continues with an introduction to DTDs. http://builder.com.com/ article_guest.jhtml?id=u00220020401adm01.htm&fromtm=e046 * Remedial XML: Using XML Schema - by Lamont Adams One way of enforcing structural requirements for an XML document is by using a document type description (DTD). This article touches on the shortcomings of DTDs and discusses the basics of a newer, more powerful standard: XML Schemas. http://builder.com.com/ article_guest.jhtml?id=u00320020418adm01.htm&fromtm=e601 * Resolve conflicts with XML namespaces - by Brian Schaffner Using XML to define your business data can be difficult when you have overlapping departments & redundant data definitions. XML namespaces can help resolve conflicts between element names. http://builder.com.com/article.jhtml?id=u00820020218sch01.htm&vf=tt * Introduction to XSLT - by Jason Monberg & Mike Wynholds Extensible Stylesheet Language (XSL) consists of 3 languages for converting XML documents into other formats. XSL Formatting Objects (XML FO) describes visual formatting, while XPath accesses specific parts of an XML document. But XSL Transformations (XSLT) is the language for actually converting from one XML format into another. http://builder.com.com/article.jhtml?id=u00120010910gcn01.htm&vf=ra * Advanced SQL with Joins - by TechRepublic SQL joins are a powerful tool for any database developer. There are various types of joins but using the correct approach requires knowledge. This article will help you put joins to work. http://clickthru.online.com/Click?q=48-ggFbIdBVysa6yBwXlfgj1FbSnFeR * Essential Delphi - by Marco Cantu Free Ebook! http://www.marcocantu.com/edelphi/default.htm * Kylix 2 BizSnap - by Bob Swart http://www.drbob42.com/kylix/ Otros enlaces ============= * Delphi Prefix Registry Ensure that your component names do not clash with someone elses by choosing and registering a unique prefix with DPR. We've featured this site before but I thought it important enough to list again. http://www.delphiprefixregistry.net/ * INDUG A forum for Delphi developers in India. It's a big group with over 380 members and during April had traffic of over 140 messages. Membership is open to developers of all levels and the group is unmoderated. All messages are posted in English. http://groups.yahoo.com/group/indug ________________________________________________________________________ ¡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/p0035.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!






