Boletín Pascal #44
Los ejemplos completos de código fuente de este número están disponibles para descargar.
![]() |
![]() |
Boletín Pascal #44 - 27-FEB-2003 Índice 1. Unas palabras del editor 2. Operaciones de disco - Como detectar si hay un disektte en la unidad de discos o si está protegido, y más... 3. Usando MS Word como generador de reportes 4. Número de serie del disco duro IDE - Usando la API S.M.A.R.T. IOCTL 5. En las noticias - Borland lanza Optimizeit Profiler para .NET - SideWinder: Borland está desarrollando un IDE para C# para .NET - Otras noticias y artículos 6. Foros / listas de correo 7. Delphi en la Red - Componentes, librerías y aplicaciones . Shareware . Freeware - Artículos, trucos y consejos - Tutoriales ________________________________________________________________________ 1. Unas palabras del editor Me gustaría agradecer a Rafael Ribas Aguiló, Igor Siticov y Alex Konshin por contribuir artículos para esta edición, y me complace entregarles los premios para esta edición a los dos últimos: * Igor Siticov (Usando MS Word como generador de reportes) · 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/ * Alex Konshin (Número de serie del disco duro IDE) · Greatis Form Designer v3.4 - por Greatis Software, Shareware ($49.95) Es un diseñador de formularios en tiempo de ejecución que le permite mover y cambiar el tamaño de cualquier control de su formulario. No necesita preparar su formulario para usar Form Designer. Simplemente suelte el componente TFormDesigner en cualquier formulario, establezca la propiedad Active en True y ¡disfrute! Para Delphi 4-7 y BCB 3-6. http://www.greatis.com/formdes.htm Para la próxima edición, tenemos disponibles los siguientes premios para dos de los autores que colaboren artículos en inglés: * LMD DesignPack - por LMD Innovative - Shareware (EUR 59) Cinco componentes para agregar características de diseño a sus aplicaciones (un clon del Inspector de Objetos, un diseñador de formularios y controles basados en diagramas), con código fuentes extensivos proyectos de ejemplo demostrando las características avanzadas - hasta se incluye básicamente un diseñador de reportes. http://www.ceberus.com/lmd/products/index.php3#P4 * 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 Hasta mañana 28 únicamente, Greatis Software ofrece Greatis Object Inspector Pro con un descuento significativo, exclusivo para suscrip- tores de este boletín y visitantes de nuestro sitio web. Vean el aviso abajo de la nota del editor. ¿Qué pasó con la serie Inline Assembler en Delphi? ¿Ya terminó? Defini- tivamente no. En futuras ediciones veremos algunos usos de ejemplo de inline assembler, comenzando en la próxima edición con aritmética de 128 bits. Mientras tanto, espero que disfruten esta edición. Saludos, Ernesto De Spirito eds2004 @ latiumsoftware.com __________________ Colaboró en esta edición: Dave Murray ________________________________________________________________________ OFERTA Object Inspector Pro: $29.95 (ahorre $20 sobre el precio normal). Greatis Object Inspector Pro es un conjunto de componentes que incluye un componente para acceder todas las propiedades y eventos publicados de cualquier componente, un inspector común que puede usarse para inspec- cionar todo en su aplicación, y un inspector de componentes que imita al Object Inspector. http://www.latiumsoftware.com/en/objinspspecial.php ________________________________________________________________________ 2. Operaciones de disco - Como detectar si hay un disektte en la unidad de discos o si está protegido, y más... Por Rafael Ribas Aguiló <rribas @ facilities.com.br> http://www.facilities.com.br/ Si quiere asegurarse si un diskette está en la unidad de diskettes sin mostrar esos extraños mensajes de error, debería usar estas funciones: function ComposeFileName(Dir, Name: string): string; function HasDiskSpace({$IFDEF WIN32}Drive: string{$ELSE}Drive: char{$ENDIF}; MinRequired: longint): boolean; function GetDirectorySize(const Path: string): longint; function GetFileSizeByName(const Filename: string): longint; function IsDiskRemovable(Drive: char): boolean; function IsDiskInDrive(Drive: char): boolean; function IsDiskWriteProtected(Drive: char): boolean; function AskForDisk(Drive: char; Msg: string; CheckWriteProtected: boolean): boolean; procedure GetAvailableDrives(DriveType: TDriveType; Items: TStrings); Estas funciones se implementan en la unidad lDrives (adjunta). ________________________________________________________________________ ¿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 Sólo hay que seguir el enlace y hacer clic en "here" ("aquí") donde dice "Click here to vote!" ("¡Haga clic aquí para votar!"). Luego aparecerá el ranking de los más votados. Su voto significa mucho para nosotros. ________________________________________________________________________ 3. Usando MS Word como generador de reportes Por Igor Siticov SiComponents: http://www.sicomponents.com ¿Por qué no usar MS Word como generador de reportes en sus proyectos? Podemos fácilmente construir un reporte y luego permitir al usuario modificarlo de cualquier forma que quiera usando este conocido editor. El ejemplo de abajo muestra como construir el reporte basado en los contenidos de un StringGrid. procedure TsiGridReporter.ShowReport; var Range: Variant; i, j: integer; begin if FGrid = nil then raise Exception.Create('¡No hay grilla seleccionada!'); try FWordApp := CreateOleObject('Word.Application'); except raise Exception.Create('¡No se puede iniciar MS Word!'); end; FWordApp.Visible := True; FWordApp.Documents.Add; if FShowDate then begin Range := FWordApp.Documents.Item(1); Range := Range.Sections.Item(1); Range := Range.Headers.Item(1).Range; Range.Text := 'Fecha: ' + DateToStr(Date) + ' Hora: ' + TimeToStr(Time); end; Range := FWordApp.Documents.Item(1); Range := Range.Sections.Item(1); Range := Range.Footers.Item(1); Range.Range.Text := 'Page:'; Range.Range.ParagraphFormat.Alignment := ord(waAlignParagraphRight); Range.PageNumbers.Add; FWordApp.Documents.Item(1).Paragraphs.Add; Range := FWordApp.Documents.Item(1).Range( FWordApp.Documents.Item(1).Paragraphs.Item( FWordApp.Documents.Item(1).Paragraphs.Count - 1).Range.End, FWordApp.Documents.Item(1).Paragraphs.Item( FWordApp.Documents.Item(1).Paragraphs.Count - 1).Range.End); Range.Text := FTitle; Range.Bold := fsBold in FTitleFont.Style; Range.Italic := fsItalic in FTitleFont.Style; Range.Underline := fsUnderline in FTitleFont.Style; Range.Font.StrikeThrough := fsStrikeOut in FTitleFont.Style; Range.Font.Name := FTitleFont.Name; Range.Font.Size := FTitleFont.Size; Range.Font.ColorIndex := ord(FTitleColor); Range.ParagraphFormat.Alignment := ord(FTitleAlignment); FWordApp.Documents.Item(1).Paragraphs.Add; FWordApp.Documents.Item(1).Paragraphs.Add; Range := FWordApp.Documents.Item(1).Range( FWordApp.Documents.Item(1).Paragraphs.Item( FWordApp.Documents.Item(1).Paragraphs.Count - 1).Range.End, FWordApp.Documents.Item(1).Paragraphs.Item( FWordApp.Documents.Item(1).Paragraphs.Count - 1).Range.End); FWordApp.Documents.Item(1).Tables.Add(Range, FGrid.RowCount, FGrid.ColCount); Range := FWordApp.Documents.Item(1).Tables.Item( FWordApp.Documents.Item(1).Tables.Count); for i := 1 to FGrid.RowCount do for j := 1 to FGrid.ColCount do begin Range.Cell(i, j).Range.InsertAfter(FGrid.Cells[j-1, i-1]); if (i <= FGrid.FixedRows) or (j <= FGrid.FixedCols) then begin Range.Cell(i, j).Range.Bold := True; Range.Cell(i, j).Range.Shading.BackgroundPatternColorIndex := ord(wcGray25); end else begin Range.Cell(i, j).Range.Bold := fsBold in FCellFont.Style; Range.Cell(i, j).Range.Italic := fsItalic in FCellFont.Style; Range.Cell(i, j).Range.Underline := fsUnderline in FCellFont.Style; Range.Cell(i, j).Range.Font.StrikeThrough := fsStrikeOut in FCellFont.Style; Range.Cell(i, j).Range.Font.Name := FCellFont.Name; Range.Cell(i, j).Range.Font.Size := FCellFont.Size; // Range.Cell(i, j).Range.Font.ColorIndex := ord(FCellColor); Range.Cell(i, j).Range.Shading.BackgroundPatternColorIndex := FCellColor; end; end; end; Este ejemplo es sólo un método del componente adjunto a este artículo. Este componente también tiene los métodos PrintReport y PrintPreview. Vea al código fuente adjunto para más detalles. Este componente le dará sólo el primer paso para crear su propio generador de reportes basado en el uso de MS Word. P.D.: El componente y el código fuente son FREEWARE, así que puede usarlos como quiera. __________________ Igor Siticov es el autor de TsiLang Components Suite (un completo juego de componentes para construir en dos minutos aplicaciones multilingües elegantes, útiles y amistosas con el usuario) y de Resource Builder (un muy completo editor visual de RC script, ideal para reemplazar al Borland Image Editor y al Borland Resource WorkShop para crear y editar archivos de recursos), por SiComponents: http://www.sicomponents.com ________________________________________________________________________ Vote por el Pascal Newsletter (Boletín Pascal) en The Programming Pages! http://www.programmingpages.com/?r=latiumsoftwarecomenpascal ________________________________________________________________________ 4. Número de serie del disco duro IDE - Usando la API S.M.A.R.T. IOCTL Por Alex Konshin http://home.earthlink.net/~akonshin/ Casi todas las FAQs recomiendan el uso de GetVolumeInformation para obtener el "número de serie del disco duro", pero lo que en realidad esta función obtiene es el número de volumen, no el número de serie del disco duro del fabricante. El número de serie del volumen se asigna y cambia durante el formateo de la partición. Algunas empresas usan herramientas de clonación para instalar software en computadoras nuevas, copiando de un disco duro a todos los otros. Por supuesto, el numero de serie de volumen para estos discos será idéntico. Puede obtener el verdadero número de serie del disco duro IDE, nombre del modelo, revisión del firmware, y otra información del disco duro IDE usando la API S.M.A.R.T. IOCTL. // Copyright (c) 2000 Alex Konshin program IdeSN; // PROPÓSITO: Simple aplicación de consola que extrae // el número de serie del primer disco IDE. {$APPTYPE CONSOLE} uses Windows, SysUtils; // sólo para Win32Platform y SysErrorMessage // ------------------------------------------------------------- function GetIdeDiskSerialNumber : String; type TSrbIoControl = packed record HeaderLength : ULONG; Signature : Array[0..7] of Char; Timeout : ULONG; ControlCode : ULONG; ReturnCode : ULONG; Length : ULONG; end; SRB_IO_CONTROL = TSrbIoControl; PSrbIoControl = ^TSrbIoControl; TIDERegs = packed record bFeaturesReg : Byte; // Usado p/especificar "comandos" SMART. bSectorCountReg : Byte; // Registro cantidad de sectores bSectorNumberReg : Byte; // Registro número de sector bCylLowReg : Byte; // Valor bajo de cilindro bCylHighReg : Byte; // Valor alto de cilindro bDriveHeadReg : Byte; // Registro unidad/cabeza bCommandReg : Byte; // Comando IDE real. bReserved : Byte; // Reservado. Debe ser cero. end; IDEREGS = TIDERegs; PIDERegs = ^TIDERegs; TSendCmdInParams = packed record cBufferSize : DWORD; irDriveRegs : TIDERegs; bDriveNumber : Byte; bReserved : Array[0..2] of Byte; dwReserved : Array[0..3] of DWORD; bBuffer : Array[0..0] of Byte; end; SENDCMDINPARAMS = TSendCmdInParams; PSendCmdInParams = ^TSendCmdInParams; TIdSector = packed record wGenConfig : Word; wNumCyls : Word; wReserved : Word; wNumHeads : Word; wBytesPerTrack : Word; wBytesPerSector : Word; wSectorsPerTrack : Word; wVendorUnique : Array[0..2] of Word; sSerialNumber : Array[0..19] of Char; wBufferType : Word; wBufferSize : Word; wECCSize : Word; sFirmwareRev : Array[0..7] of Char; sModelNumber : Array[0..39] of Char; wMoreVendorUnique : Word; wDoubleWordIO : Word; wCapabilities : Word; wReserved1 : Word; wPIOTiming : Word; wDMATiming : Word; wBS : Word; wNumCurrentCyls : Word; wNumCurrentHeads : Word; wNumCurrentSectorsPerTrack : Word; ulCurrentSectorCapacity : ULONG; wMultSectorStuff : Word; ulTotalAddressableSectors : ULONG; wSingleWordDMA : Word; wMultiWordDMA : Word; bReserved : Array[0..127] of Byte; end; PIdSector = ^TIdSector; const IDE_ID_FUNCTION = $EC; IDENTIFY_BUFFER_SIZE = 512; DFP_RECEIVE_DRIVE_DATA = $0007c088; IOCTL_SCSI_MINIPORT = $0004d008; IOCTL_SCSI_MINIPORT_IDENTIFY = $001b0501; DataSize = sizeof(TSendCmdInParams)-1+IDENTIFY_BUFFER_SIZE; BufferSize = SizeOf(SRB_IO_CONTROL)+DataSize; W9xBufferSize = IDENTIFY_BUFFER_SIZE+16; var hDevice : THandle; cbBytesReturned : DWORD; pInData : PSendCmdInParams; pOutData : Pointer; // PSendCmdOutParams Buffer : Array[0..BufferSize-1] of Byte; srbControl : TSrbIoControl absolute Buffer; procedure ChangeByteOrder( var Data; Size : Integer ); var ptr : PChar; i : Integer; c : Char; begin ptr := @Data; for i := 0 to (Size shr 1)-1 do begin c := ptr^; ptr^ := (ptr+1)^; (ptr+1)^ := c; Inc(ptr,2); end; end; begin Result := ''; FillChar(Buffer,BufferSize,#0); if Win32Platform=VER_PLATFORM_WIN32_NT then begin // Windows NT, Windows 2000, Windows XP // Obtener manejador de puerto SCSI hDevice := CreateFile('\\.\Scsi0:', // Nota: '\\.\C:' requiere privilegios administrativos. GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); if hDevice=INVALID_HANDLE_VALUE then Exit; try srbControl.HeaderLength := SizeOf(SRB_IO_CONTROL); System.Move('SCSIDISK',srbControl.Signature,8); srbControl.Timeout := 2; srbControl.Length := DataSize; srbControl.ControlCode := IOCTL_SCSI_MINIPORT_IDENTIFY; pInData := PSendCmdInParams(PChar(@Buffer) +SizeOf(SRB_IO_CONTROL)); pOutData := pInData; with pInData^ do begin cBufferSize := IDENTIFY_BUFFER_SIZE; bDriveNumber := 0; with irDriveRegs do begin bFeaturesReg := 0; bSectorCountReg := 1; bSectorNumberReg := 1; bCylLowReg := 0; bCylHighReg := 0; bDriveHeadReg := $A0; bCommandReg := IDE_ID_FUNCTION; end; end; if not DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT, @Buffer, BufferSize, @Buffer, BufferSize, cbBytesReturned, nil ) then Exit; finally CloseHandle(hDevice); end; end else begin // Windows 95 OSR2, Windows 98, Windows ME hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 ); if hDevice=INVALID_HANDLE_VALUE then Exit; try pInData := PSendCmdInParams(@Buffer); pOutData := @pInData^.bBuffer; with pInData^ do begin cBufferSize := IDENTIFY_BUFFER_SIZE; bDriveNumber := 0; with irDriveRegs do begin bFeaturesReg := 0; bSectorCountReg := 1; bSectorNumberReg := 1; bCylLowReg := 0; bCylHighReg := 0; bDriveHeadReg := $A0; bCommandReg := IDE_ID_FUNCTION; end; end; if not DeviceIoControl( hDevice, DFP_RECEIVE_DRIVE_DATA, pInData, SizeOf(TSendCmdInParams)-1, pOutData, W9xBufferSize, cbBytesReturned, nil ) then Exit; finally CloseHandle(hDevice); end; end; with PIdSector(PChar(pOutData)+16)^ do begin ChangeByteOrder(sSerialNumber,SizeOf(sSerialNumber)); SetString(Result,sSerialNumber,SizeOf(sSerialNumber)); end; end; // ============================================================= var s : String; rc : DWORD; begin s := GetIdeDiskSerialNumber; if s='' then begin rc := GetLastError; if rc=0 then WriteLn('La unidad IDE no soporta SMART') else WriteLn(SysErrorMessage(rc)); end else WriteLn('Número de serie del disco: ''', s,''''); ReadLn; end. Notas: - El código es sólo para unidades IDE que soporten S.M.A.R.T. (Self Monitoring, Analysis and Reporting Technology). Para unidades SCSI-2 vea: http://www.delphi3000.com/articles/article_1174.asp - El hardware IDE debe soportar S.M.A.R.T. y tiene que estar habilitado. - Windows 95 no soporta esta característica hasta Windows 95 OSR2. El código funciona con Windows 95 OSR2/98/98SE/Me/NT4/2000/XP. - Windows 9x: SMARTVSD.VXD debe estar instalado: simplemente cópielo de la carpeta del Sistema (típicamente C:\WINDOWS\SYSTEM) a la carpeta System\IoSubsys (típicamente C:\WINDOWS\SYSTEM\IOSUBSYS) y reinicie. - Windows NT/2000/XP: El código no requiere privilegios administra- tivos y funciona bajo la cuenta 'everyone'. - Para más información acerca de la API SMART IOCTL vea la aplicación de ejemplo SmartApp en la MSDN Knowledge Base: http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B208048 - Si necesita información acerca de un disco esclavo o un disco conectado a la controladora IDE secundaria, vea el ejemplo IdeInfo2 en mi sitio web: http://home.earhlink.net/~akonshin/ - Para más información acerca de S.M.A.R.T. y otros estándares relacionados con dispositivos de almacenamiento ATA, vea el sitio del Technical Committee T13: http://www.t13.org/ Puede encontrar información relacionada con el tema de este artículo en las páginas 87-105 del siguiente documento: http://www.t13.org/project/d1321r3.pdf ______________ Alex Konshin es un Ingeniero de Software Sr. y ex-programador Delphi que programa en Delphi como hobby, pero ha sido mencionado en los cré- ditos de Delphi 7. Puede encontrar algunos componentes útiles freeware y con fuentes en su sitio web: http://home.earthlink.net/~akonshin/ ________________________________________________________________________ ¿Cómo calificaría al boletín? ¡Califique al Boletín Pascal en el ranking Top 200 Delphi! · http://top200.jazarsoft.com/delphi/rank.php3?id=latium ________________________________________________________________________ 5. En las noticias Borland lanza Optimizeit Profiler para .NET =========================================== Optimizeit Profiler es una nueva solución de garantía de rendimiento para la plataforma .NET Framework. Optimizeit Profiler soporta todo el código administrado .NET y hace los ajustes de rendimiento más fáciles proveyendo evaluaciones de rendimiento en tiempo real que rápidamente identifica y prioriza las cuestiones de rendimiento, resaltanto la línea relevante de código fuente para resolución inmediata, permitiendo a los programadores entregar más rápido aplicaciones de alto rendimiento basadas en la Microsoft .NET Framework. Para más información: - Optimizeit Profiler http://www.borland.com/opt_profiler/index.html - Borland Launches Performance Assurance Solution for Microsoft .NET Framework http://www.planetanalog.com/pressreleases/bizwire/57199 - Microsoft Partners Rally Around Visual Studio .NET http://www.internetnews.com/dev-news/print.php/1582361 SideWinder: Borland está desarrollando un IDE para C# para .NET =============================================================== Borland está trabajando en el desarrollo de un IDE para C#, que se conoce actualmente como SideWinder, pero por ahora este es el nombre clave público del producto, y no necesariamente significa que será el nombre del producto cuando sea lanzado (aunque es muy probable). He aquí algunas noticias y artículos sobre SideWinder: - 28-JAN-2003: Borland Becomes First to License the Microsoft .NET Framework Software Development Kit http://www.certificationsuccess.com/index.cfm?pageid=401 - 31-JAN-2003: Borland prepares new IDE for .Net http://www.vnunet.com/News/1138406 - 04-FEB-2003: Borland moves ahead with .NET tools; inks pact with Microsoft http://www.adtmag.com/article.asp?id=7224 - 04-FEB-2003: Borland to offer IDE for Microsoft's .Net http://www.infoworld.com/article/03/02/04/HNsidewinder_1.html - 04-FEB-2003: Borland targets .Net developers http://news.com.com/2100-1001-983321.html http://msnbc-cnet.com.com/2100-1001-983321.html http://www.businessweek.com/technology/cnet/stories/983321.htm - 07-FEB-2003: First SideWinder screenshots http://www.drbob42.com/SideWinder/home.htm - 14-FEB-2003: Interview with Jason Vokes (Borland EMEA) about .NET development at Borland, including SideWinder and Delphi for .NET http://www.drbob42.com/SideWinder/interview.htm SideWinder será el primer producto del proyecto Galileo, un proyecto mucho más grande de Borland anunciado en la BorCon 2002: * Borland to wield tools against Microsoft - By Wylie Wong http://news.com.com/2100-1001-954958.html El objetivo de Galileo es crear un IDE 100% .NET, mulilenguaje, que apunte a diferentes plataformas (una especie de Visual Studio .NET multiplataforma, si quiere verlo de esa manera, pero será mucho más que eso pues por ejemplo integraría modelado y diseño). Otras noticias y artículos ========================== * Flurry Of New Tools Target Microsoft Visual Studio .Net Developers - by Gregg Keizer http://www.techweb.com/wire/story/TWB20030211S0004 * Microsoft rebuilds .Net tools - by Martin LaMonica Borland tools will be integrated into Visual Studio.Net. http://news.com.com/2100-1001-984129.html * .NET: Great Hope or Great Hype - by Alan C. Moore, Ph.D www.delphizine.com/opinion/2003/03/di200303fn_o/di200303fn_o.asp * Short interview with David Intersimone (Borland's VP of Developer Relations) about Kylix. http://www.programmersparadise.com/promo/QA_062402_2.pasp * Borland Defies the Skeptics - by Elise Ackerman Days after President and CEO Dale Fuller joined Borland Software in April 1999, an industry pundit singled out the Scotts Valley company as one of five tech firms unlikely to make it to the new millennium. Fuller has been gleefully quoting the prediction ever since... http://www.belleville.com/mld/belleville/business/4865330.htm * Sip From The Firehose: A message from Borland to developers - David I We've begun an advertising campaign targeted at executives in charge of development. The topic? Borland's new application lifecycle studio of products. http://community.borland.com/article/0,1410,29597,00.html * Blog with Delphi and Borland news http://svd.blogspot.com/ ________________________________________________________________________ ¿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 Sólo hay que seguir el enlace y hacer clic en "here" ("aquí") donde dice "Click here to vote!" ("¡Haga clic aquí para votar!"). Luego aparecerá el ranking de los más votados. Su voto significa mucho para nosotros. ________________________________________________________________________ 6. Foros / listas de correo 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 ________________________________________________________________________ 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 ________________________________________________________________________ 7. Delphi en la Red Por Dave Murray <irongut @ vodafone.net> Componentes, librerías y aplicaciones ===================================== Shareware/Comercial ------------------- * LMD DesignPack - por LMD Innovative - Shareware (EUR 59) Cinco componentes para agregar características de diseño a sus aplicaciones (un clon del Inspector de Objetos, un diseñador de formularios y controles basados en diagramas), con código fuente y extensivos proyectos de ejemplo demostrando las características avanzadas - hasta se incluye básicamente un diseñador de reportes. http://www.ceberus.com/lmd/products/index.php3#P4 * NTTools 7 For Delphi - por i-tivity (USD 39.95) ¡Basta de batallar con la API de Seguridad de Windows NT! Obtenga su copia de NTTools 7 para Delphi 4/5/6/7 ahora y ahórrese incontables horas con esta colección de 40 componentes VCL escritos específica- mente para tratar con las funciones de Seguridad de Windows NT. Se incluye código fuente completo. http://www.i-tivity.biz/nttools.htm Freeware -------- * ODBCTools For Delphi - by i-tivity (with source) ODBCTools is a complete replacement package for the BDE and consists of the following components: ODBC_Database, ODBC_Table, ODBC_Exec, ODBC_Conformance, ODBC_TableList, ODBC_FieldList, ODBC_Info, ODBC_PrimaryKeys, ODBC_Procedures, ODBC_DSNList and ODBC_Admin. http://www.i-tivity.biz/odbctools.htm * TurboPower SysTools v4.03 - by TurboPower (with source) A library of utility routines & algorithms for Delphi, C++Builder and environments that support COM. Among other things, it supports 1-D and 2-D bar codes, sorting, money routines, logging classes, high- precision math and a run-time math expression analyzer. https://sourceforge.net/projects/tpsystools/ * Interbase 6.0 Open Edition Can't find the link to download the free version of Interbase at Borland's web site? Well, here it is: http://info.borland.com/devsupport/interbase/opensource/ Artículos, trucos y consejos ============================ * New Delphi feature: Multiple inheritance for interfaces in Delphi for .NET - by John Kaster Update 3 of the Delphi for .NET preview includes compiler enhancements for multiple inheritance for interfaces. http://community.borland.com/article/0,1410,29779,00.html * Delphi for .NET preview Update 3 available for download - John Kaster An update containing improvements to the compiler, RTL and VCL of the Delphi for .NET preview is now available for download. http://community.borland.com/article/0,1410,29780,00.html * Implementing Callbacks to a Datasnap Server Interface - Xavier Pacheco Add the ability for a Datasnap Server to call your client application through a callback. http://community.borland.com/article/0,1410,29539,00.html * Metadata.NET - by Noel Rice This article shows the capability of requesting information from .NET providers at runtime and deals with Databases, Table, Fields, constraints, Index and data Types. http://community.borland.com/article/0,1410,29708,00.html * Exchanging Raw Data over the Network 2 - by Zarko Gajic An introduction to sending data over the network using Delphi + Indy. Focuses on sending / receiving record data and raw (binary) data using TCP/IP connections. http://delphi.about.com/library/weekly/aa020403a.htm * How to display fonts in a list box - by m3Rlin www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=216 * How to delete a file the next time the PC is rebooted - by m3Rlin www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=217 * How to convert a long filename to a short filename - by m3Rlin www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=218 * How to create a Access-Database (mdb) without Access - by Alex Schlecht Using MS-Jet-Engine to create a *.mdb File. http://www.delphi3000.com/articles/article_3536.asp * Advanced Indy 1: Server Side Techniques - by Romeo Lefter http://www.delphi3000.com/articles/article_3538.asp * Creating "Hidden" Registry Values - by Daniel Wischnewski Using the undocumented MS Native API. http://www.delphi3000.com/articles/article_3539.asp * Delphi and Automation with Word - by Herbert Poltnik Automation allows one application to control another application. The application being controlled is called an automation server (in our case Word). The application controlling the server is called an automation controller. http://www.delphi3000.com/articles/article_3541.asp * Event Chain Mechanism - by Alex Wijoyo How can we attach more than one event handler to a component event? http://www.delphi3000.com/articles/article_3543.asp * BPL Analyze - by quark quark What in BPL? How many Units in BPL? http://www.delphi3000.com/articles/article_3548.asp * How to load big bitmaps with few memory requirement? - by Alex Sanchez http://www.swissdelphicenter.ch/en/showcode.php?id=1526 * How to disable CTRL+ALT+DELETE under XP? - by Andreas Kirchmeyer http://www.swissdelphicenter.ch/en/showcode.php?id=1528 * How to set the background color of a MDI Form? - by Alex Pierson http://www.swissdelphicenter.ch/en/showcode.php?id=1554 * How to resize an image (undistorsioned result image)? - Josep Ma Feliu http://www.swissdelphicenter.ch/en/showcode.php?id=1463 * How to show a preview for a TRichEdit/ TRxRichEdit? - by Robert Dunn http://www.swissdelphicenter.ch/en/showcode.php?id=1467 * How to use the Microsoft Speech API? - by Marco Parreira http://www.swissdelphicenter.ch/en/showcode.php?id=1572 * How to print a TStringgrid? - by Reinhard Schatzl http://www.swissdelphicenter.ch/en/showcode.php?id=1577 * How to enumerate the logged in users on a Remote or Local NT Workstation? - by Manfred Ruzicka http://www.swissdelphicenter.ch/en/showcode.php?id=1578 * How to install an INF file with Delphi? - by patrick http://www.swissdelphicenter.ch/en/showcode.php?id=1585 * Creating an Internet Explorer-style User Interface, Part 1 By Fabio Lucarelli <http://www.pinnaclepublishing.com/dd/DDmag.nsf/0/ 95505F4719043C1185256CC300743624> Tutoriales ========== * The Dynamics of Agile Software Processes, Part I - by Randy Miller Part one describes the characteristics of good agile software development process design. http://bdn.borland.com/article/0,1410,29726,00.html * Adding Auto-Persistence Capabilities To Options Dialogs - by D. Jewell How to avoid the pain of re-coding the saving and restoring of your user-configurable settings for each and every new application, with a little bit of lateral thinking. http://www.thedelphimagazine.com/samples/1560/1560.htm * Using Customisable Keyboard Shortcuts - by Stephen Posey Demonstrates how keyboard shortcuts can be very easy using Actions. http://www.thedelphimagazine.com/samples/1521/1521.htm * Extracting XML Data From SQL Server 2000 - by Jani Järvinen Describes how to use the XML features built into SQL Server 2000 from your Delphi applications, through ADO, HTTP and SOAP. http://www.thedelphimagazine.com/samples/1507/1507.htm * Enhance Reuse by Embracing Service-Oriented Architecture - T Landgrave Thinking of your apps strictly in terms of components can limit your reuse options. Find out how to increase your options by defining applications as services. http://builder.com.com/article.jhtml?id=u00320030129lan01.htm * Adventures in Kylix - by James R. Knowles A blog style tutorial for Kylix. http://www.ifm-services.com/people/jamesk/kylix/ ________________________________________________________________________ ¡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/p0044.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) 2003 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!






