Boletín Pascal #41
Los ejemplos completos de código fuente de este número están disponibles para descargar.
![]() |
![]() |
Boletín Pascal #41 - 03-DIC-2002 Índice 1. Unas palabras del editor 2. Clases para información y administración de servidor NT/W2000 remoto 3. Inline Assembler en Delphi (V) - Una introducción a objetos 4. Usando Objetos para guardar la configuración del programa 5. Foros / listas de correo 6. Delphi en la Red - Componentes, librerías y aplicaciones . Shareware . Freeware - Artículos, trucos y consejos - Tutoriales - Otros enlaces ________________________________________________________________________ Tecno Soft Solutions. Reseller Autorizado de Symbol Technologies, líder mundial en captura de códigos de barras. >>> http://www.tecno-symbol.com ________________________________________________________________________ 1. Unas palabras del editor Agradezco a Mike Heydon por contribuir un artículo para esta edición, y me complace hacerle entrega de la licencia de TSDBGridFooter: * TSDBGridFooter v2.0 por Jovan Sedlan, Shareware ($74.50) Este componente es una poderosa herramienta que provee cálculos auto- máticos para su DBGrid y muestra información en un pie configurable debajo de la grilla. Ha sido diseñado para trabajar con TSDBGrid (también incluido), aunque puede usarse con cualquier descendiente de TCustomDBGrid. http://www.sedlan.com/dbgrid_footer.php Para la próxima edición, tenemos disponible el siguiente premio para el autor de uno de los artículos contribuidos al boletín (en inglés): · llPDFLib v1.1 - por llionsoft, Shareware ($70, $280 con fuentes) llPDFLib en una biblioteca en puro Object Pascal para crear documentos PDF. No usa ninguna DLL ni software externo de terceras partes para generar ficheros PDF. La librería consiste del componente TPDFDocument con propiedades y métodos como los del TPrinter de Delphi, pero diseñado para generar un fichero PDF. http://www.llion.net/ En las noticias, ha sido lanzado Interbase 7, representando una signifi- cativa actualización desde Interbase 6.5, hay una actualización no oficial para las ActionBands de Delphi 7 en el sitio de Borland, ha aparecido una versión del generador de reportes gratuito Rpv Printing System y en nuestro sitio web se encuentran los archivos de recursos en español para Delphi 6 Update Pack 1 y 2, y también la edición digital en formato PDF del conocidísimo libro La Cara Oculta de Delphi 4 de Ian Marteens. Pueden encontrar las descripciones y los enlaces correspon- dientes más abajo en la sección Delphi en la Red. Espero que disfruten esta edición. Saludos, Ernesto De Spirito eds2004 @ latiumsoftware.com __________________ Colaboraron en esta edición: Dave Murray y Charl Linssen ________________________________________________________________________ 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. Clases para información y administración de servidor NT/W2000 remoto Por Mike Heydon <mheydon@pgbison.co.za> EOH Outsourcing http://www.eoh.co.za Esta unidad define clases que acceden a máquinas remotas y obtienen información de ellas. La unidad actualmente sólo lee información. Muchas de las llamadas NetServerGetInfo tienen equivalentes llamadas NetServerSetInfo. Tendría que ser suficientemente fácil modificar estas clases y escribir la funcionalidad deseada (sólo para pocos). Se implementan las siguientes clases: TNTServerInfo = class(TObject) TNTServerEventLog = class(TObject) TNTServerServices = class(TObject) TNTServerSessions = class(TObject) TNTServerOpenFiles = class(TObject) TNTServerGroups = class(TObject) TNTServerDisks = class(TObject) Más estos procedimientos y funciones: procedure GetServerResources(const RootObject : string; StringList : TStrings; RecursiveEnum : boolean; ResourceTypes : TNTServerResSet=[resAny]) function ValidateUserLogon(const UserName : string; const Domain : string; const PassWord : string) : boolean; NOTA: Para acceso remoto al Registro, ver "TRegistry.RegistryConnect()" de Borland. Los métodos que establecen TStrings asignan la propiedad Items o Lines con campos delimitados por punto y coma (";"). Este formato es ideal para my componente TMultiColListBox para la función General.ExtractField(). Los campos Flag DWORD se pueden comprobar vía la función General.AndEqual(), por ejemplo: if AndEqual(SI.ServerType,SV_TYPE_SERVER_UNIX) then ... La mayoría de las funciones que establecen TStrings también permiten un Set (conjunto) de Field Options que controla la información devuelta en las columnas de los Items/Lines individuales de los TStringList. Algunas clases tienen constructores Create sobrecargados. Esto le permite ya sea crear una instancia ATTACHED (adjunta) o una instancia UNATTACHED (no adjunta) simple. En el caso de TNTServerEventLog puede crear una instancia que se adjunte al servidor y abra la bitácora de eventos (eventlog) SourceName inmediatamente, o sólo crear la clase y luego llamar a OpenLog() para adjuntarse a la bitácora (log). NOTA: OpenLog y métodos similares en otras clases automáticamente cerrarán cualquier bitácora previamente abierta antes de abrir la nueva. Llamar al método Free también cierra cualquier bitácora abierta, por lo que no hay necesidad para un CloseLog() o métodos similares. Debido a limitaciones de espacio, la documentación se incluye en el código fuente (adjunto). ________________________________________________________________________ ¿Cuándo fue la última vez que votó por el Boletín Pascal? Por favor apoye esta iniciativa votándonos en "The Programming Top 100!" http://www.sandbrooksoftware.com/cgi-bin/TopSite2/rankem.cgi?id=latium ________________________________________________________________________ 3. Inline Assembler en Delphi (V) - Una introducción a objetos Los objetos son registros ========================= Desde la perspectiva del ensamblador, un objeto es como un registro cuyos campos son sus propios campos más los campos de sus ancestros, más el puntero a la VMT (Virtual Methods Table = Tabla de Métodos Virtuales). Veámoslo con un ejemplo: type TClase1 = class CampoA: integer; CampoB: string; end; TClase2 = class(TClase1) CampoC: integer; end; En el ejemplo, TClase2 es como una especie de registro de cuatro campos: TClase2 = record VMT: pointer; // campo invisible, siempre primero CampoA: integer; // heredado de TClase1 CampoB: string; // heredado de TClase1 CampoC: integer; // declarado en TClase2 end; Las variables objeto son punteros ================================= Una variable objeto es simplemente un puntero a un objeto, es decir, un puntero a un registro. var a, b: TClase2; begin a := TClase2.Create; b := a; // una simple asignación de punteros a.Free; end; Un constructor asigna memoria para una instancia (objeto) de su clase, la inicializa, y devuelve un puntero a la memoria asignada. Por consiguiente, después de la llamada a TClass.Create la variable "a" apunta al registro (el objeto): +---+ +--------+ | a | ----------> | VMT | +---+ +--------+ | CampoA | +--------+ | CampoB | +--------+ | CampoC | +--------+ La asignación "b := a" no crea un nuevo objeto copia del primero, sino que en realidad hace que ambas variables apunten al mismo objeto: +---+ +--------+ +---+ | a | ----------> | VMT | <---------- | b | +---+ +--------+ +---+ | CampoA | +--------+ | CampoB | +--------+ | CampoC | +--------+ Métodos en ensamblador ====================== Los métodos reciben un primer parámetro invisible (no declarado) llamado Self, que es un puntero al objeto sobre el cual deben operar. type TPrueba = class FCodigo: integer; public procedure SetCodigo(NuevoCodigo: integer); end; procedure TPrueba.SetCodigo(NuevoCodigo: integer); begin FCodigo := NuevoCodigo; end; var a: TPrueba; begin : a.SetCodigo(2); : end; El código Object Pascal de arriba se puede traducir de alguna manera a Pascal estándar como sigue: type TPrueba = record VMT: pointer; FCodigo: integer; end; procedure SetCodigo(Self: TPrueba; NuevoCodigo: integer); begin Self.FCodigo := NuevoCodigo; end; var a: ^TPrueba; begin : SetCodigo(a, 2); : end; El ejemplo sirve para explicar que los métodos reciben el puntero Self como primer parámetro, es decir, reciben el puntero Self (recordemos que los registros se pasan por referencia como un puntero a los datos) en el registro EAX, y el primer parámetro declarado se pasa como segundo parámetro en EDX y así (el segundo parámetro declarado se pasa entonces como tercero en ECX, y el resto de los parámetros se pasan en la pila). El método SetCodigo se puede escribir en ensamblador como sigue: procedure TPrueba.SetCodigo(NuevoCodigo: integer); asm // EAX = Self = Dirección de la instancia de TPrueba // EDX = Parámetro NuevoCodigo // FCodigo := NuevoCodigo; mov TPrueba[eax].FCodigo, edx // TPrueba(EAX)^.FCodigo := EDX; end; Como puede verse, los campos de los objetos se acceden de la misma manera que los campos de un registro. NOTA: Las propiedades no son campos (son nombres para referenciar campos y métodos), y no se pueden acceder directamente desde inline assembler. Aquí va un ejemplo de un método llamando a otro método: procedure TPrueba.Increment; asm // SetCodigo(Codigo+1); mov edx, TPrueba[eax].FCodigo // ECX := TPrueba(EAX)^.FCodigo; inc edx call TPrueba.SetCodigo; end; No establecimos el valor de EAX antes de la llamada a SetCodigo pues EAX ya contiene el valor deseado (Self), así que el método llamado operará sobre el mismo objeto que el llamador. NOTAS: * Los métodos virtuales sólo pueden llamarse estáticamente, pues se necesita una referencia a la clase en la sentencia CALL. * En inline assembler no se pueden distinguir los métodos sobrecargados. Constructores en ensamblador ============================ Los constructores son métodos muy especiales. Se puede llamar a un constructor para crear una instancia de una clase (o sea para asignar la memoria para el objeto e inicializarla), o simplemente para reini- cializar un objeto ya creado: a := TPrueba.Create; // asigna memoria a.Create; // sólo reinicializa un objeto existente Para distinguir entre estas dos situaciones, a los constructores se les pasa un invisible segundo parámetro de typo Byte (es decir, en el registro DL), el que puede ser positivo o negativo respectivamente (el compilador usa 1 y -1 respectivamente). Si llamamos a un constructor desde código ensamblador con DL = $01 (para asignar memoria para el objeto), tenemos que pasar una referencia a la clase en EAX, y puesto que no hay símbolo para accederla directamente desde ensamblador, entonces tenemos que hacer algo similar a lo que hicimos con la información de tipo de los registros: var TPrueba_TypeInfo: pointer; : initialization TPrueba_TypeInfo := TPrueba; Ahora que hemos inicializado una variable global con la referencia a la clase desde nuestro código Pascal, podemos usarla en nuestro código en ensamblador: var a: TPrueba; begin // a := TPrueba.Create(2); asm mov eax, TPrueba_TypeInfo mov dl, 1 mov ecx, 2 call TPrueba.Create mov a, eax end; : end; Llamar a un constructor para reinicializar el objeto es más simple, pues no necesitamos una referencia a la clase: var a: TPrueba; begin : // a.Create(2); asm mov eax, a mov dl, -1 mov ecx, 2 call TPrueba.Create end; : end; No tenemos nada de que preocuparnos si tenemos que escribir un cons- tructor en ensamblador dado que Delphi se hace cargo de la cuestión de la asignación de memoria por nosotros al entrar al constructor, y -luego de ello- EAX apuntará al nuevo objeto, tal como sucede con cualquier otro método, pero lo que es relevante es que si el constructor tiene parámetros, el primer parámetro declarado será internamente pasado tercero, o sea en ECX (en vez de segundo, o sea en EDX, tal como ocurre con cualquier otro método), y el resto de los parámetros será pasado en la pila. constructor TPrueba.Create(NuevoCodigo: integer); asm // FCodigo := NuevoCodigo mov TPrueba[eax].FCodigo, ecx end; __________________ NOTA: Se adjunta un ejemplo de código fuente completo. ________________________________________________________________________ 4. Usando Objetos para guardar la configuración del programa Este artículo de Sebastián Mayorá se incluye en formato HTML dentro del archivo adjunto correspondiente a esta edición, en la carpeta ObjConfig. ________________________________________________________________________ 5. Foros / listas de correo Para quienes son miembros de nuestros foros (grupos en Yahoo! Grupos), me gustaría recordarles que la participación en los mismos está sujeta a ciertas reglas. Estas reglas han sido tildadas por algunos de infantiles y déspotas, por decir lo menos. Para los que tienen buena experiencia en foros y listas de correo, estas reglas prácticamente no aportan nada nuevo, pero para otros admito que pueden resultar molestas y algo chocantes. Realmente lo siento, pero si he decidido establecerlas, no ha sido porque sí. Los foros son para profesionales, y no para quienes desean publicar mensajes como se les da la gana simplemente porque es gratis, sino que esperamos un mínimo de seriedad y consideración hacia los demás. He aquí el extracto de las reglas comunes a todos los foros: * El asunto de los mensajes tiene importancia capital. Es lo primero y a veces lo único que se ve de un mensaje. Por favor: . Provee un asunto representativo en tus preguntas. Trata que sea lo más específico posible y que incluya palabras clave que puedan facilitar la búsqueda posterior de un determinado tema. . Evita el uso de palabras como "duda", "problema", "socorro", "SOS", "ayuda" (excepto que estés hablando de archivos de ayuda), "consulta" (salvo que estés hablando de una consulta SQL), etc. . Evita usar de signos de exclamación y escribir todo en mayúsculas. . No modifiques la línea de asunto al responder un mensaje. * Elimina lo más posible del mensaje original al responder, para reducir así el tamaño de los mensajes. Como mínimo, al responder elimina las líneas innecesarias de arriba y de abajo del mensaje original: - Todo o parte de los encabezados. Mínimamente las líneas de: . Destinatario (es el foro, ya lo sabemos) . Asunto (se repite en la respuesta, ya lo sabemos) . Fecha de envío (opcional) - Las frases iniciales y finales como saludos, presentaciones, agrade- cimientos, firmas ("signatures"), publicidades de los servicios de webmail y de Yahoo!, direcciones del foro, etc. - Los mensajes anteriores del hilo de conversación * No envíes mensajes irrelevantes (como mensajes de agradecimiento, o respuestas del tipo "yo lo quiero" / "yo también" cuando alguien ofrece algo en el foro, y mucho menos mensajes fuera de tema como cartas cadena -o "pirámide"-, alertas de virus, publicidades, etc.) * No envíes ofrecimientos, solicitudes o apologías de cracks, warez, seriales y otras formas de piratería informática. * No envíes mensajes del tipo "¿Dónde puedo encontrar...?" (excepto en el caso del foro de Componentes, que está para ese fin). Los foros no son un motor de búsqueda humano. * Incluye abundante información sobre el problema que planteas (como por ejemplo versión del producto y sistema operativo que usas, etc.) para no hacerle perder el tiempo a alguien preparando una respuesta que después no te sirva porque no se aplica a tu plataforma. * Todos los foristas y todos los mensajes tienen la misma prioridad, así que por favor no envíes mensajes urgentes, con prioridad o con su asunto todo en mayúsculas, y evita usar expresiones como "por favor ayúdenme", "mi empleo depende de esto", "estoy desesperado", "ya no sé que hacer", etc., así como cualquier otra forma de intentar obtener ventaja o resaltar tu mensaje sobre los demás. * No escribas todo en mayúsculas (parece que estuvieras gritando). * Los archivos adjuntos en los mensajes son descartados. Si tienes algo para compartir, contacta directamente al interesado, u ofrécelo en el foro aclarando que las peticiones deben enviarse a tu cuenta de email, y no a la dirección del foro. * Por cualquier cuestión administrativa del foro (como por ejemplo problemas con tu suscripción, reportar casos de spam, etc.) no escribas al foro sino a su/s moderador/es. Como siempre, 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 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 ________________________________________________________________________ 6. Delphi en la Red Por Dave Murray <irongut @ vodafone.net> Componentes, librerías y aplicaciones ===================================== Shareware/Commercial -------------------- * SDL Component Suite 7.0 - por Software Development Lohninger ($99) La SDL Component Suite provee un amplio rango de componentes para la ciencia y la ingeniería, por ejemplo matemáticas, estadísticas, química, diagramas, visualización de datos, transformadas de Fourier (FFT), ploteos 3D, mapas geográficos, ajuste de curvas, etc. Disponible para Delphi 3-7 y BCB 4-6. http://www.lohninger.com/sdlindex.html Freeware -------- * Archivos de recursos en español para Delphi 6 UP 1 y 2, traducidos por Felipe Eduardo Ortiz López. Una vez que se haya instalado Delphi 6 y aplicados los Update Packs 1 y 2 de Borland, sustituir los DCUs y PASs respectivos en sus lugares (normalmente $Delphi\Lib, $Delphi\Lib\Debug y $Delphi\Source\VCL) para tener las cadenas de mensajes traducidas al español. http://www.latiumsoftware.com/descarga/Delphi6EspP12.zip * Generador de reportes Rpv Printing System 2.2 Permite generar reportes de alta calidad, incluyendo imágenes, códigos de barras y links a la web, a otros reportes o a ejecutables. Compatible con cualquier lenguaje de programación, permite imprimir también desde DOS, o desde UNIX, Linux, AS/400, etc. Ideal para uso en intranets, permite generar e imprimir reportes en el cliente, utilizando PHP, ASP, etc. Fácil de usar y aprender. http://www.rpvreport.com/span/ * 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/ Artículos, trucos y consejos ============================ * 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 Tutoriales ========== * 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 Otros enlaces ============= * El Rinconcito de Delphi Sitio dedicado a Delphi y Kylix. Tutorial, Articulos, Noticias, Libros, Componentes. http://www.elrinconcito.com/delphi/ * La Cara Oculta de Delphi 4 - por Ian Marteens Esta es la versión digital en formato PDF del conocidísimo libro de Ian Marteens. El libro es muy bueno, pero claro, de Delphi 4 a Delphi 7 han habido muchas y muy grandes novedades, así que el libro puede considerarse obsoleto, pero creo que será muy útil a estudiantes que normalmente están cortos de dinero para invertir en libros, pero para el profesional que gana dinero y que tiene que estar medianamente actualizado le recomendamos que pase por las librerías y pregunte por el libro La Cara Oculta de Delphi 6 que ya está a la venta. http://www.latiumsoftware.com/descarga/lcod4.php (3,7MB) * 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/ ________________________________________________________________________ ¡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 boletin-pascal-subscribe@gruposyahoo.com 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/p0041.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!






