Boletín Pascal #33
Los ejemplos completos de código fuente de este número están disponibles para descargar.
![]() |
![]() |
Boletín Pascal #33 - 04-MAR-2002 INDICE 1. UNAS PALABRAS DEL EDITOR 2. EN LAS NOTICIAS - Delphi 6 Update Pack 2 disponible - PocketStudio 1.1 - Cambios de nombre - Borland soportará .NET - ¡Vota por Borland! - Delphi Informant Magazine Readers Choice Awards 2002 - RAD Windows Database Development Survey - Software antiguo: Turbo Pascal v5.5 - Borland actualiza los Contratos de Licencia para el Usuario Final - Servicio Web VCL Scanner - Concurso de programación: aplicaciones multi-hilos - Servidor FTP público 3. HOW TO PROTECT YOUR SOFTWARE AGAINST PIRACY 4. SAVE POSITIONS OF TCOOLBAR BANDS 5. GOING UNDERCOVER IN DELPHI 6. MOSTRANDO EL DIÁLOGO "BUSCAR CARPETA" DE WINDOWS 7. FOROS 8. 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 A pesar de la colaboración de editores y traductores, que agradezco muchísimo, la presión del factor tiempo hace que hoy por hoy sea casi imposible llegar con emisiones simultáneas del boletín en inglés y en español con la periodicidad a la que uno aspira. Se abren entonces dos caminos alternativos: uno es separar completamente ambas ediciones y permitir que la edición en español se maneje de manera independiente, con sus propios tiempos para traducir los artículos y ser publicada, y el otro sería aceptar contenidos sin traducir. En esta edición he optado por la segunda alternativa, pues caso contrario creo que esta publicación se hubiera demorado varios días más y no quería llegar a eso. Me gustaría escuchar sus opiniones al respecto. Como sea, en la próxima edición estaremos regalando -entre quienes colaboran artículos al boletín- una licencia de Greatis Print Suite, un conjunto de componentes de vista previa e impresión, provisto por gentileza de Greatis Software: http://www.greatis.com/printsuite.htm Nos gustaría regalar licencias de variados productos en todas las ediciones del boletín, y no sólo entre los que colaboran material sino también entre todos los suscriptores, pero eso no es posible si el boletín no alcanza una cantidad de suscriptores que lo haga interesante a los desarrolladores como medio de publicidad para sus productos, y eso no ocurrirá si no votan por el boletín en los rankings, así que me gustaría invitarlos a que voten siguiendo los enlaces que figuran cerca del final del boletín. Desde ya muchas gracias. 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. EN LAS NOTICIAS Delphi 6 Update Pack 2 disponible ================================= El segundo Update Pack está disponible para todas las ediciones de Delphi 6 (incluyendo la Open Edition) en www.borland.com/devsupport/delphi/downloads/ds_registeredusers.html Si usas Delphi 6, se recomienda que bajes e instales este parche (no es necesario haber instalado previamente el Update Pack 1). Este Update Pack corrige algunos problemas con Delphi 6 y contiene pequeñas mejoras, pero los usuarios de la Professional Edition encon- trarán que este Update Pack les permitirá construir aplicaciones cliente que consuman Servicios Web de conformidad con W3C usando SOAP, XML, WSDL y más! Si deseas más información acerca de este Update Pack: http://community.borland.com/article/0,1410,28405,00.html PocketStudio 1.1 ================ Pocket Technologies, Inc. anuncia una versión de PocketStudio, su IDE tipo Delphi para desarrollo Palm OS, que ahora viene en tres ediciones: - PocketStudio Professional Version 1.1 (Download Only).... $ 199.99 - PocketStudio Professional Version 1.1 (Training Included) $ 249.99 - PocketStudio Standard version 1.1 (Download Only)........ $ 59.99 Para más información, visita http://www.pocket-technologies.com Cambios de nombre ================= Developer 21 es ahora vpsource.com, y Kylix Developer Network ahora es CodeBake.com: * vpsource.com Portal for webmasters and programmers (Delphi, C++, VB, Pascal), also vp webdesign and programming services, e-store. Many more! http://www.vpsource.com * CodeBake.com A website designed for developers to exchange and share resources and information about Kylix, Delphi and Linux. CodeBake.com's mission is to provide quality information to the developer community by sharing information and resources so that everyone can benefit. http://www.codebake.com Borland soportará .NET ====================== El 12 de Febrero pasado, Borland anunció que Delphi y C++Builder sopor- tarán la Plataforma Microsoft .NET durante la segunda mitad del 2002. Estas herramientas RAD soportarán el Lenguaje Intermedio de Microsoft (MSIL - Microsoft Intermediate Language), permitiendo a los desarrolla- dores preservar su inversión en habilidades RAD y código fuente. * Borland .NET strategy http://www.borland.com/net/ * Borland Unveils Product Strategy for Microsoft .NET Platform Announces Delphi and C++Builder Support for Microsoft .NET Platform http://www.borland.com/about/press/2002/net_platform.html ¡Vota por Borland! ================== El Web Services Journal (http://www.sys-con.com/webservices/) está tomando votos para el First Annual WSJ Readers' Choice Awards. Puedes votar por tus productos de Servicios Web favoritos en 17 categorías: http://www.sys-con.com/webservices/readerschoice Si deseas saber qué productos Borland están nominados, e incluso votar por todos ellos juntos, vé a http://www.borland.com/vote_borland.html Delphi Informant Magazine Readers Choice Awards 2002 ==================================================== La revista Delphi Informant Magazine (http://www.delphizine.com/) también está tomando votos para sus 2002 Readers' Choice Awards. Puedes votar por tus componentes y utilidades favoritas en 21 categorías: http://www.delphizine.com/ballot2002/Default.asp RAD Windows Database Development Survey ======================================= Borland está llevando a cabo una encuesta entre los usuarios acerca del soporte para el desarrollo de bases de datos de sus herramientas RAD para Windows. Tus respuestas le ayudarán a Borland a guiar sus esfuerzos futuros en el soporte para desarrollo de bases de datos en Delphi y C++ Builder. Es sólo un simple cuestionario: http://infopoll.net/Live/surveys/s15713.htm Software antiguo: Turbo Pascal v5.5 =================================== Sí, así es. El viejo y querido Turbo Pascal 5.5 ahora está disponible para descargar gratis del sitio de Borland: http://community.borland.com/article/images/20803/tp55.zip Por más información sobre Turbo Pascal 5.5 y esta descarga: http://community.borland.com/article/0,1410,20803,00.html Borland actualiza los Contrato de Licencia para el Usuario Final ================================================================ El 15 de Enero pasado, Borland admitió que los Contratos de Licencia para el Usuario Final (EULAs - End User License Agreements) de los nuevos productos Borland (Delphi 6, C++Builder 6, Kylix 2 y JBuilder 6) eran específicos de los grandes clientes empresariales que compran licencias en volumen, olvidándose de los individuos y compañías que compran licencias individualmente. El último 13 de Febrero Borland publicó los nuevos EULAs que reemplazan a los anteriores: http://community.borland.com/article/0,1410,28401,00.html Servicio Web VCL Scanner ======================== Esta es una versión Servicios Web de VCL Scanner, la aplicación que genera un informe de uso de clases VCL basado en los ejecutables, DLLs y paquetes que se encuentren en su disco duro. El código fuente de esta nueva versión, tanto del cliente como del servidor, está disponible para descarga, y por usar el programa y enviar el informe a Borland obtienes una chance de ganar una licencia de un producto Borland! http://community.borland.com/article/0,1410,28438,00.html Concurso de programación: aplicaciones multi-hilos ================================================== Las reglas son fáciles: tienes hasta el 29 de Marzo para enviar una aplicación multi-hilos (con código fuente completo) que provea una retroalimentación visual del progreso de los hilos. Puedes desarrollarla usando cualquier herramienta de desarrollo Borland. Puedes participar con tantas aplicaciones como quieras. Los envíos deben realizarse en la CodeCentral de Borland: //codecentral.borland.com/codecentral/ccweb.exe/contest?contest_id=1 Para más información acerca de este concurso: http://community.borland.com/article/0,1410,28448,00.html Servidor FTP público ==================== Cristóbal Megido Almaraz <cristobal @ ineteca.com> pone su servidor FTP a disposición de los usuarios de Delphi tanto para subir como para descargar tutoriales, componentes, etc. Esperamos que con el tiempo la comunidad vaya subiendo material al servidor, y de momento ya están allí los archivos con los boletines del 2000 y 2001: programacion/publicaciones/latium software/2000.rar programacion/publicaciones/latium software/2001.rar Los datos para conectarse al servidor son: Servidor/Host: 195.55.98.183 Puerto.......: 21 Usuario......: latiumsoftware Contraseña...: delphi Sólo habrá 25 conexiones concurrentes en pro de una buena conexión, y salvo por inconvenientes técnicos o tareas de mantenimiento, el servidor funcionará 24/7. ________________________________________________________________________ Greatis Print Suite Pro v1.7 - Un conjunto de componentes VCL que ofrece características avanzadas de vista previa e impresión para sus aplica- ciones en Delphi y C++ Builder. Olvídese de BeginDoc, EndDoc, NewPage y otros procedimientos de bajo nivel. Sólo dibuje su trabajo de impresión y Print Suite hará el resto. >>>>> http://www.greatis.com/printsuite.htm ________________________________________________________________________ 3. HOW TO PROTECT YOUR SOFTWARE AGAINST PIRACY By Fernando Martins <fmp.martins@megamail.pt> Before I start, let me tell you that whatever protection system you use it's just a matter of time until someone breaks it. So what you must have in mind is: "what is the best protection system for this special case?" You also must have in mind that the best you got is still breakable. Once I needed to develop an application where preventing piracy was a must. I did some investigation and found out what were the possible systems to prevent this. I also did some investigation on how to break those same protection systems. Let me say that I got a bit disappointed. I thought that mass protection systems would be better than they are... Here's a summary of what I found among the most common: - Anti-Copy: prevents the disk copy, CD in this case. - Disk check: when application starts up checks for the original disk, CD in this case. - Hardware check-up: you plug-in some hardware on your RS-232 port and check for it in your application from time to time. - Key activation: the software requires a key to be activated. Here's what I found out about breaking these systems: - Anti-Copy: can be broken with a "clone copy" (bit-by-bit) of the disc... - Disk check: can be broken with a "clone copy" also... - Hardware check-up: read too much complains about it interfering with the system, and it also generates too much calls into your help-line, plus read somewhere that this can be fooled through software also... - Key activation: once the user registers, he can spread the key among friends and everybody can activate the application. If someone takes some time, he can break the code and create a patch to ignore activation or create a key generator. Looking at this, you must agree that it didn't look too good... After thinking a while on each of these systems I concluded that: - Anti-Copy: to easy to break. - Disk check: to easy to break. - Hardware check-up: causes to much troubles and can make customers to become unsatisfied. - Key activation: would be great if key proliferation could be stopped. So I stick on the key activation idea and gave it a second thought, exploiting the pros and cons of this system. I simulated the regular use of this system to better understand it: 1. Get the product 2. Install the product 3. Request key 4. User requests the key 5. User gets the key 6. User activates the product Here's another way to do it: 1. Get the product from friend 2. Install the product 3. Request key 4. User asks friend for friend's key 5. User uses the friend's key I concluded that it was definitely the best - having in mind what I needed to protect this specific product - if I could prevent the key from spreading. Preventing key spreading became my next goal. I knew I needed something that could give me guarantees that the application being activated was a legal copy and not a pirate one. How could I guarantee this? How do you prove that what you own is legal? How do you prove that you bought something? The answer was easy: invoice. Every product sold comes with an invoice, which has different data, like the invoice number, date and entity sold to. My next step was using the invoice data when activating the product. But invoice data "per se" was not enough, I mean, if someone gives a copy of the product can also give the invoice data to activate the product. I simulated the piracy process again, using the invoice data: 1. Get the product from friend 2. Install the product 3. Request the invoice data 4. User requests the invoice data from friend 5. Request the key 6. User requests the key from friend Now, this has the same hole that usual key activation has... I knew that I needed to force the key request for all installed products. That became my next goal. How could I force the user to request a new key? After some more neuron work, I came up with the answer: time. On my simulations, both users, the legal an non-legal, did the same steps to activate the product, but they didn't do it at the same time... Time is continuous and non-repeating, so time was the answer. What did I do with time then? Basically, I generated a key using it. To activate the product you must have a key, which is generated using the invoice data and the time you have installed the product in the system. Here's how I made it work: 1. After product installed, an encryption of the current time - year, month, day, hour, minute, second, millisecond - is saved somewhere in the system. This is easy to do and there's a lot of ways to hide something is the system. 2. Invoice data request. 3. Generate a "request-key" using the time from 1. and the invoice data from 2. 3. Inform the user that it must request the activation key for the "request-key". 4. Key for product activation request. I had found the solution. To request the activation key, the user must specify what is the "request-key", which is guaranteed to be unique, since time is involved and the algorithm I used makes sure of that. ;) Here's a simulation of the legal case: 1. Buy product and receive invoice 2. Install the product 3. Request invoice data 4. Inform user what the "request-key" is 5. User requests the activation key referring the "request-key" and the invoice data 6. User receives the key 7. User activates the product It's quite simple, really, the only "visible" change from the original key activation system is the "request-key" that the user must specify when requesting the key. But this is just half the solution, the other half is you controlling the number of installations. But that is quite easy. Every time a key is requested, you know who is requesting it, since the invoice data is specified, so if you got a customer that has 154 key requests in one month, there's something wrong... :) I've also exploit the possible holes on the system: 1. A couple of non-legal installations may be done, the customer - or "customer friend" - may say that the system crashed and must reinstall... That will just work for a couple of non-legal installations, since you may ask why that is the 98th key request done this week or the 3rd this day... 2. Disk clone can be done. There are tools on the market that clone hard-disks. But what the heck, you cannot prevent that. 3. Someone takes some time and patches the security or creates a key generator. Like said in the beginning, there's no way to prevent this... This system does not work just as a piracy stopper, it also prevents it. When the invoice data is requested, it's more unlike to someone to give it away, since you can track the customer that gave the invoice data to a friend, that gave it to a friend, that gave it to a friend... The original customer knows he can get troubles with the law by giving that information. If you get some "customer" requesting its 10th activation key because "We got a new computer that is faster and want the application running on it.", you can say "Why have you bought 9 computers in the last 4 weeks?..." If you get some "customer" requesting its 50th activation key because "the system crashed and need to reinstall everything", you can say "Maybe there's something wrong, I'll send someone there to take a look at it. Please have your invoice in hand..." If you get some "customer" requesting its 154th activation key, you can say that unless proven to be the legal owner of the product you will not give the activation key... The "customer" may say he is - he even can be -, but unless he has the invoice, he cannot prove it... And if you want to be a bit "nasty", you code a special key that will show the "Do you know that non-legal software may give you 3 years in jail?" and uninstalls the application from the system... The "customer" will get the point. ;) __________________ Nota del editor: Antes que realice cualquier comentario sobre este artículo, por favor léalo dos veces. El autor nunca dice que su solución sea original, que la suya sea la última o la mejor solución, que esta solución sea aplicable o conveniente en todos los casos, o que su solución no sea vulnerable... ________________________________________________________________________ 4. SAVE POSITIONS OF TCOOLBAR BANDS By Patrick de Kleijn http://www.patrick.nl/ This was fun to do. Yesterday's Delphi3000.com Newsletter #76 dropped a line on a reader's request for functions to restore the positions of TCoolBand objects at run-time. Lacking a property to check how many band are in place (something like CoolBar.Bands.Count) I thought of another way to test if all bands are stored. I have included the properties that tend to change mostly (Index and Width) but it's easy to add other properties to the Set and Get clauses which I marked in the comments. Parse all available coolbands and write their properties to file: Store(CoolBar1, 'c:\coolbar1.ini'); Parse all available coolbands and check for their properties by matching IDs: Restore(CoolBar1, 'c:\coolbar1.ini'); procedure Store(aCoolBar: TCoolBar; aFilename: string); var I, ID: Integer; aFile: TStringList; begin I := 0; ID := 0; aFile := TStringList.Create; { Parse all available coolbands } while I=I do // Make this an endless loop begin try ID := aCoolBar.Bands.Items[I].ID; except { Raise an EAbort exception to break out of the endless loop when properties of all coolbands are written to file. We know all coolbands are parsed when EListError is raised if we try to collect properties of a coolband that does not exist } on EListError do begin { All done? Save! } aFile.SaveToFile(aFilename); aFile.Free; Abort; // Crack the loop with EAbort end; end; { Write it's properties to file - Set } aFile.Add(IntToStr(ID) + 'Index=' + IntToStr(aCoolBar.Bands.Items[I].Index)); aFile.Add(IntToStr(ID) + 'Width=' + IntToStr(aCoolBar.Bands.Items[I].Width)); I := I+1; end; end; procedure Restore(aCoolBar: TCoolBar; aFilename: string); var I, ID, J: Integer; aFile: TStringList; begin I := 0; ID := 0; aFile := TStringList.Create; aFile.LoadFromFile(aFileName); { Parse all available coolbands } while I=I do begin try ID := aCoolBar.Bands.Items[I].ID; except on EListError do Abort; end; { Restore properties from file - Get } aCoolBar.Bands.Items[I].Index := StrToInt(aFile.Values[IntToStr(ID)+'Index']); aCoolBar.Bands.Items[I].Width := StrToInt(aFile.Values[IntToStr(ID)+'Width']); I := I+1; end; // Result := True; end; Enjoy! Regards, Patrick de Kleijn The Netherlands ________________________________________________________________________ 5. GOING UNDERCOVER IN DELPHI By Charl Linssen <charl @ atomasoft.com> By default, your application has a corresponding button in the taskbar. You can switch to it using the [Alt] + [Tab] combination, and it shows in the 'Close Program' window (when you press [Alt] + [Ctrl] + [Del]). Suppose you don't want your application to show there, suppose you want to hide it completely from the user. In this tutorial I'll give you some code snippets to show you how that is done. >> Disable task switching You can block [Alt] + [Tab] task switching, as well as other key combinations like [Ctrl] + [Esc] using the SystemParametersInfo API. This tricks Windows into thinking the screensaver is running. procedure SystemKeys(Disable: Boolean); var OldVal : LongInt; begin SystemParametersInfo (SPI_SCREENSAVERRUNNING, Word(Disable), @OldVal, 0); end; After a call to SystemKeys(True) the program runs, but you are unable to Alt-Tab to it nor switch to it in the task list. You can't invoke the Start button, either. >> Hiding the application's taskBar button A major part in going undercover, is hiding your application's button from the taskbar. That can be solved easily, by inserting the following code into the OnCreate event: procedure TForm1.FormCreate(Sender: TObject); begin ShowWindow(Application.Handle, SW_HIDE); SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW ); ShowWindow(Application.Handle, SW_SHOW); end; >> Hide from the 'Close Program' box Now that you've hid you app from task switching and the taskbar, it can still be terminated, using the 'Close Program' box. That can be solved _really_ easily. To do so, you have to remove your programs title, which normally also shows in the taskbar button. That is done like this: procedure TForm1.FormCreate(Sender: TObject); begin Application.Title := ''; end; When you combine these things and add a 'Form1.Hide', there's no way that app is going to shut down (except when the computer is rebooted, of course). ________________________________________________________________________ 6. MOSTRANDO EL DIALOGO "BUSCAR CARPETA" DE WINDOWS Por Ernesto De Spirito <eds2004 @ latiumsoftware.com> Si quieres mostrar el diálogo estándar "Buscar carpeta", tienes que llamar la API SHBrowseForFolder. He visto componentes que encapsulan la llamada a esta API, pero realmente no me gusta meter más y más componentes al IDE de Delphi cuando las tareas se podrían implementar fácilmente como funciones en una unidad, así que he aquí una función BrowseForFolder que encapsula las complejidades de la llamada a SHBrowseForFolder: Sintaxis: function BrowseForFolder(Title: string; RootCSIDL: integer = 0; InitialFolder: string = ''): string; Parámetros: Title: El texto de la etiqueta en la parte superior de la ventana de diálogo "Buscar carpeta" RootCSIDL (opcional): El CSIDL de la carpeta especial que define el subárbol a explorar. De manera predeterminada, es el el escritorio (CSIDL_DESKTOP = 0), pero se puede limitar el árbol que el usuario puede explorar usando constantes como CSIDL_DRIVES, CSIDL_NETWORK, CSIDL_PERSONAL, CSIDL_PROGRAMS y en general puede usar cualquier otro valor aceptado por la API SHGetSpecialFolderLocation (ver la unidad ShlObj). InitialFolder (opcional): La carpeta inicialmente seleccionada en el treeview. De modo predeterminado es la carpeta raíz (especificada por el parámetro RootCSIDL, o el escritorio si se omite). Valor de retorno: La función devuelve el camino completo de la carpeta seleccionada por el usuario. El valor de retorno será la cadena vacía ('') si el usuario canceló el diálogo. Compatibilidad: La función es compatibile con la versión Shell 4.0 de Shell32.dll, así que no requiere IE 4.0 o superior. Llamadas de ejemplo: Carpeta := BrowseForFolder('Elija la carpeta destino:'); Carpeta := BrowseForFolder('Elija la carpeta destino:', CSIDL_DRIVES); ShowMessage('Carpera seleccionada: "' + BrowseForFolder( 'Elija la carpeta destino:', 0, 'C:\Delphi') + '"'); El código fuente de la función se incluye en el ejemplo adjunto a este boletín. ________________________________________________________________________ 7. 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 Grupo Kylix =========== El foro para usuarios de Borland Kylix ya alcanzó los 220 miembros: http://espanol.groups.yahoo.com/group/GrupoKylix Suscripción: http://espanol.groups.yahoo.com/group/GrupoKylix/join GrupoKylix-subscribe@gruposyahoo.com Free Pascal =========== Nuestro foro para programadores en Free Pascal (freepascal.org) ya superó los 150 miembros y sigue creciendo: http://espanol.groups.yahoo.com/group/freepascal-es Suscripción: http://espanol.groups.yahoo.com/group/freepascal-es/join freepascal-es-subscribe@gruposyahoo.com Desarrolladores de 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 ________________________________________________________________________ 8. DELPHI EN LA RED Por Dave Murray Componentes, librerías y aplicaciones ===================================== Shareware/Comercial ------------------- * Self-Extracting Archive Utility (SEAU) SEAU binds and compresses a group of files into a single, professional and self-contained installation program. It supports uninstallation, multiple languages, shared files, interface customization, license agreements, readme files, file associations, batch operations, multiple disk spanning, DLL installation, automated installations, patches, expiration dates, and much more. http://www.gammadyne.com/seau.htm Freeware -------- * Encryption and security software - By Uri Fridman Uri Fridman invites us to try his freeware applications and give him some feedback (bug, comments, suggestions, ideas). http://www.geocities.com/urifrid/soft.html * TDirectoryDialog v1.7 - by Aivar, FREEWARE with source (KYLIX) Displays a modal dialog box for selecting directory. Call Execute to show dialog, selected directory is stored in DirName property. http://www.torry.net/kylix/clx/dialogs/directorydialog.zip * PBFolder Dialog v4.0, FREEWARE with source Browse for folder dialog that can create new folders. The New button caption and a Label caption (above the path) are automatic localized every time the application runs. Also includes a localized error-message if a new folder could not be created. http://www.ciemmesoft.com/componenti/categorieing.asp?ID=11&PAG=1 * TicButton v.1.0.0.1 - by Halfpenny Software, FREEWARE Button images are Up, Down and Disabled and you can change the button state at run time. Transparent colour is set to pixel 1,1 colour. http://www.icarus.surf3.net/ * TicButtonA v.1.0.0.1 - by Halfpenny Software, FREEWARE As TicButton above but with a 'Roll' image, displayed when the cursor is over the button. http://www.icarus.surf3.net/ * TicSbutton v1.0.0.1 - by Halfpenny Software, FREEWARE On mouse down the image changes and a wav sound is played, when cursor enters the image it rolls over. Images are Up, Down, Disabled and Roll and you can change the button state at run time. http://www.icarus.surf3.net/ * TicSButtonA v1.0.0.1 - by Halfpenny Software, FREEWARE As TicSButton above but with Transparent colour set to the pixel 1,1 colour for each image. http://www.icarus.surf3.net/ * TicBGimage v1.0.0.2 - by Halfpenny Software, FREEWARE Sets an image that can be Stretch or Tiled as a backdrop for the form or placed in a Panel. The Image can be set to transparent. http://www.icarus.surf3.net/ * Best Random Generator v1.0 - by Anton Zhuchkov, FREEWARE with source Passes all of the tests for random number generators with a period of 2^144. Completely portable - gives bit identical results on all machines with 24-bit+ mantissas in the floating point representation. The algorithm is a combination of a Fibonacci sequence and an "arithmetic sequence" (using subtraction). http://www.torry.net/vcl/science/other/rmar.zip * NC OCI8 v1.0.0 - by Dmitry Arefiev, FREEWARE with source Component library for direct access to Oracle8i. Includes 7 core components and 3 advanced. http://www.da-soft.com/ * PsvDialogs v2.0 - by Sergiy Perevoznik, FREEWARE with source Library of Windows Dialog components based on undocumented Windows functions. 17 dialogs include: Add Hardware, Browse Folder, Change Icon, Control Panel, Format, New Shortcut, Organise Favourites, Run. http://www.torry.net/vcl/dialogs/stddialogs/psvdialogs.zip * KWizard v1.6 - by Wei Yu, FREEWARE with source Fully customisable, easy to use wizard construction kit. http://members.rogers.com/wyu66/index.htm Artículos, trucos y consejos ============================ * Adding Custom HTML to your TAdapterPageProducers Provides a component framework and sample components for adding custom HTML as child components to TAdapterPageProducers. http://community.borland.com/article/0,1410,28205,00.html * Microsoft ComCtrls and Delphi / C++Builder v6 - by Eddie Churchill Eddie Churchill describes the pitched battle to maintain compatibility with the XP version of ComCtrls and discusses Themes. http://community.borland.com/article/0,1410,28423,00.html * System Tray Delphi application - quick and easy - by Zarko Gajic Placing Delphi applications in the System Tray in easy steps. The perfect place form programs that are left running for long periods of time with no user interaction. http://delphi.about.com/library/weekly/aa121801a.htm * Delphi dot NET - by Zarko Gajic As Borland unveils product strategy for Microsoft's NET platform, a Delphi developer should find out what .NET is and what the future of Delphi will be! http://delphi.about.com/library/weekly/aa021902a.htm * Indy Step by Step Part 1 - by Romeo Lefter Part 1: Overview of TCP/IP and Indy. http://www.delphi3000.com/articles/article_3049.asp * Indy Step by Step Part 2.1 - by Romeo Lefter Part 2.1 Overviw of TIdTcpServer Component. http://www.delphi3000.com/articles/article_3050.asp * Making 'Safe' ActiveX items for use in HTML Pages - by Scott Price Actions required to make ActiveX/COM Objects safe for use in Internet Explorer without "Control may be unsafe for use" dialogs. http://www.delphi3000.com/articles/article_3053.asp * Delphi trick for implementing VB's Control Arrays - by Malek Badi A trick for implementing "arrays of components" similarly to VB's "Control Arrays" allowing access to controls on a form via an index. http://www.delphi3000.com/articles/article_3056.asp * Enhanced Tray Icon and Task Bar Component - by Stewart Moss How can I hide the program icon on the TaskBar under Win2000 / WinNT? http://www.delphi3000.com/articles/article_3057.asp * Extra Color codes for Delphi - by Stewart Moss Nice list of color codes. http://www.delphi3000.com/articles/article_3058.asp * Why use Assembler? - by Max Kleiner Why use Assembler code and a general understanding of what is meant by instantiation, null pointer and register memory allocation. http://www.delphi3000.com/articles/article_3059.asp * Impersonating a User on WinNT - by Stewart Moss How to simulate Unix SU command under WinNT and run an application as a different user. http://www.delphi3000.com/articles/article_3061.asp * Some useful Windows NT API functions - by Stewart Moss http://www.delphi3000.com/articles/article_3062.asp * Easy Shareware limitation - Liquid Snake How to determine the number of times an application has been run using the registry. http://www.delphi3000.com/articles/article_3063.asp * Static property of a class in Delphi - Ya Xiang How to implement a static property like the C++ static member. http://www.delphi3000.com/articles/article_3064.asp * Indy Step by Step Part 2.2 - by Romeo Lefter Part 2.2. The TIdTCPServer in detail. http://www.delphi3000.com/articles/article_3065.asp * Get images (GIF/JPG) dimensions - by Khai Vuong Quang Get width and height of GIF/JPG images stored as arrays of bytes. Optimized to use within server apps. http://www.delphi3000.com/articles/article_3066.asp * Read the text of TEdit from another application - by Maarten de Haan How to read the text in a TEdit from another application, even if you only see ****. Eg. the TEdit containing internet address from MS-IE. http://www.delphi3000.com/articles/article_3067.asp * Overriding Registration exports from COM In-Process Automation Server or ActiveX OCX Control - by Scott Price How to perform additional work during the Registration routines of a COM In-Process Automation Server or OCX Control. Eg. to create additional registry keys relating to your configuration settings. http://www.delphi3000.com/articles/article_3068.asp * Implementing 'Drag Scrolling' in a Grid - by Duncan Parsons When dragging an object over a grid, if the cell you require is not visible it would be useful to have the grid automatically scroll to bring the cell into view (a kind of drag-hot-tracking). Excel can do it, let's make a humble TStringGrid do it. Builds on information given in the article ID 3039. http://www.delphi3000.com/article.asp?id=3069 * Indy Step by Step Part 3 - by Romeo Lefter Part 3: Building the client. http://www.delphi3000.com/articles/article_3070.asp * NULL Values in a DBGrid - by Andreas Schmidt How to display and modify NULL-Values in a DBGrid. http://www.delphi3000.com/articles/article_3071.asp * TOP ADO programming TIPS - by Zarko Gajic The last chapter of this ADO tutorial is a collection of frequently asked questions, answers, tips and tricks about ADO programming. http://delphi.about.com/library/weekly/aa021202a.htm * TOP 10 Delphi - by Zarko Gajic Most popular Delphi Programming articles on delphi.about - Feb 2002. http://delphi.about.com/library/weekly/bltop10.htm * The fastest path to Delphi localization - by Zarko Gajic How to change the captions on [Yes], [No], [Cancel] and similar buttons that appear on dialog and message boxes in Delphi applications. Plus how to personalize error, warning and other messages in those dialogs. http://delphi.about.com/library/weekly/aa020502a.htm * Technique for handling mouse actions - by William Egge A paint program requires that the mouse do different things depending on what mode you are in. Want a clean way to handle all those mouse actions without cluttering your form code? http://www.delphi3000.com/articles/article_3045.asp * Smart threads with a central management - by Erwin Molendijk Want to fire up some threads in your application, let them do some time consuming stuff and then report the results to the user? This causes some synchronisation trouble. Shutting down while threads are still running, updating the user interface... This unit gives a good basis to avoid all kinds of multi-threading trouble using a TSmartThread class and SmartThreadManager object http://www.delphi3000.com/articles/article_3046.asp * TSmartThread: Using blocking Indy sockets in a thread - E Molendijk An example on how to use the SmartThreadLib (article 3046). Provides a class called TTCPSmartThread that contains some basic routines to perform TCP communication using blocking sockets. http://www.delphi3000.com/articles/article_3047.asp * Support for Windows Visual Styles API in your controls - by A Abdulin http://www.delphi3000.com/articles/article_3048.asp * How to use Strings in a Case Statement? - by Loïs Bégué http://www.swissdelphicenter.ch/torry/showcode.php?id=1028 * How to calculate the factorial of a given number? - by Loïs Bégué http://www.swissdelphicenter.ch/torry/showcode.php?id=1026 * How to copy Files to the Windows clipboard? - by Thomas Stutz http://www.swissdelphicenter.ch/torry/showcode.php?id=1038 * How determine the minimum margins for a printer? - by Thomas Stutz http://www.swissdelphicenter.ch/torry/showcode.php?id=1039 * How to get all the Permutations of a String? - by Fatih Ölçer A permutation is an arrangement of n objects arranged in groups of size r without repetition, where order is important. Example: Find all two-letter permutations of the letters "ABC" Answer: AB AC BA BC CA CB http://www.swissdelphicenter.ch/torry/showcode.php?id=1032 * Additional dbExpress driver options - by John Kaster List of third-party dbExpress drivers culled from newsgroups. http://community.borland.com/article/0,1410,28371,00.html * HTML Stylesheets - by Rick Spence Why and how to use stylesheets in the HTML that Delphi CGI apps return as well as avoiding some of the tedium of stylesheets. //www.delphimag.com/features/2002/03/di200203rs_f/di200203rs_f.asp * How to detect if Alt, Shift, Control are pressed? - by Thomas Stutz http://www.swissdelphicenter.ch/torry/showcode.php?id=1002 * How to set TListBox Items right aligned? - by Rainer Kümmerle http://www.swissdelphicenter.ch/torry/showcode.php?id=1023 * How to rename a directory? - by Thomas Stutz http://www.swissdelphicenter.ch/torry/showcode.php?id=1024 * How to create a Font Combo Box with OwnerDraw - by Florin Stroiescu Display the names of system installed fonts in a combo box drawn with in the actual font. http://www.delphi3000.com/articles/article_3033.asp * MDI application without annoying ScrollBars - by Rafael Cotta How to create a MDI app without scrollbars (like MS-Word) when a child form is moved outside main form area. http://www.delphi3000.com/articles/article_3035.asp * How to export a dataset to Excel - by Steven van Els How to make the VBA parameters visible for the end-user when exporting a dataset to Excel. http://www.delphi3000.com/articles/article_3037.asp * Published Objects in Components - by Duncan Parsons How to make properties which have object subproperties drop-down in the Object Inspector in Delphi 6. http://www.delphi3000.com/articles/article_3039.asp * Unsigned 64 bit Integer support - by Erwin Molendijk This article presents a new unsigned 64 bit integer type: UInt64. Also two routines to convert between UInt64 and strings. http://www.delphi3000.com/articles/article_3040.asp Tutoriales ========== * Get to know the Delphi 6 container classes - by Bob Swart A container stores a number of items in a useful way. A collection stores of a list of items but a container adds special meaning to the way the items are stored. Eg. a component list, ordered list, stack, and queue - very handy if you know where to find them and use them. http://www.techrepublic.com/ article.jhtml?id=r00820020204swa01.htm&page=1&vf=tt Otros enlaces ============= * Delphi Search Engine and Directory Delphi search engine for websites and newsgroup. Delphi link collection. http://www.neuber.com/delphi * vpsource.com Portal for webmasters and programmers (Delphi, C++, VB, Pascal), also vp webdesign and programming services, e-store. Many more! http://www.vpsource.com * CodeBake.com A website designed for developers to exchange and share resources and information about Kylix, Delphi and Linux. CodeBake.com's mission is to provide quality information to the developer community by sharing information and resources so that everyone can benefit. http://www.codebake.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/p0033.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!






