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.lmdinnovative.com/products/vcl/lmddesignpack/
* 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
eds2008 @ 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!"
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.seagate.com/support/disc/manuals/ata/d1153r17.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://news.zdnet.co.uk/software/0,1000000121,2129909,00.htm
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.cnet.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!"
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-2006 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.lmdinnovative.com/products/vcl/lmddesignpack/
* 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.programmingpages.com/?r=latiumsoftwarecomenpascal
http://top100borland.com/in.php?who=20
http://www.lawebdelprogramador.com/buscar/votar.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/es/file.php?id=p44
________________________________________________________________________
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: eds2008 @ 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
________________________________________________________________________
|