Boletín Pascal #41 - 03-DIC-2002
Índice
1. Unas palabras del editor
2. Clases para información y administración de servidor NT/W2000 remoto
3. Inline Assembler en Delphi (V) - Una introducción a objetos
4. Usando Objetos para guardar la configuración del programa
5. Foros / listas de correo
6. Delphi en la Red
- Componentes, librerías y aplicaciones
. Shareware
. Freeware
- Artículos, trucos y consejos
- Tutoriales
- Otros enlaces
________________________________________________________________________
Tecno Soft Solutions. Reseller Autorizado de Symbol Technologies, líder
mundial en captura de códigos de barras. >>> http://www.tecno-symbol.com
________________________________________________________________________
1. Unas palabras del editor
Agradezco a Mike Heydon por contribuir un artículo para esta edición, y
me complace hacerle entrega de la licencia de TSDBGridFooter:
* TSDBGridFooter v2.0 por Jovan Sedlan, Shareware ($74.50)
Este componente es una poderosa herramienta que provee cálculos auto-
máticos para su DBGrid y muestra información en un pie configurable
debajo de la grilla. Ha sido diseñado para trabajar con TSDBGrid
(también incluido), aunque puede usarse con cualquier descendiente de
TCustomDBGrid.
http://www.softpile.com/Development/Libraries/Review_24756_index.html
Para la próxima edición, tenemos disponible el siguiente premio para el
autor de uno de los artículos contribuidos al boletín (en inglés):
· llPDFLib v1.1 - por llionsoft, Shareware ($70, $280 con fuentes)
llPDFLib en una biblioteca en puro Object Pascal para crear documentos
PDF. No usa ninguna DLL ni software externo de terceras partes para
generar ficheros PDF. La librería consiste del componente TPDFDocument
con propiedades y métodos como los del TPrinter de Delphi, pero
diseñado para generar un fichero PDF.
http://www.llion.net/
En las noticias, ha sido lanzado Interbase 7, representando una signifi-
cativa actualización desde Interbase 6.5, hay una actualización no
oficial para las ActionBands de Delphi 7 en el sitio de Borland, ha
aparecido una versión del generador de reportes gratuito Rpv Printing
System y en nuestro sitio web se encuentran los archivos de recursos en
español para Delphi 6 Update Pack 1 y 2, y también la edición digital
en formato PDF del conocidísimo libro La Cara Oculta de Delphi 4 de Ian
Marteens. Pueden encontrar las descripciones y los enlaces correspon-
dientes más abajo en la sección Delphi en la Red.
Espero que disfruten esta edición.
Saludos,
Ernesto De Spirito
eds2008 @ latiumsoftware.com
__________________
Colaboraron en esta edición: Dave Murray y Charl Linssen
________________________________________________________________________
JfControls Lib. Multilenguaje. Multiapariencia. Skins. Privilegios. Más
de 40 componentes integrados y personalizables. Múltiples problemas de
programación resueltos. Administración centralizada de recursos. Para
Delphi 3-2006 y C++ Builder 3-6. http://www.jfactivesoft.com/spindex.htm
________________________________________________________________________
2. Clases para información y administración de servidor NT/W2000 remoto
Por Mike Heydon <mheydon@pgbison.co.za>
EOH Outsourcing http://www.eoh.co.za
Esta unidad define clases que acceden a máquinas remotas y obtienen
información de ellas. La unidad actualmente sólo lee información.
Muchas de las llamadas NetServerGetInfo tienen equivalentes llamadas
NetServerSetInfo. Tendría que ser suficientemente fácil modificar
estas clases y escribir la funcionalidad deseada (sólo para pocos).
Se implementan las siguientes clases:
TNTServerInfo = class(TObject)
TNTServerEventLog = class(TObject)
TNTServerServices = class(TObject)
TNTServerSessions = class(TObject)
TNTServerOpenFiles = class(TObject)
TNTServerGroups = class(TObject)
TNTServerDisks = class(TObject)
Más estos procedimientos y funciones:
procedure GetServerResources(const RootObject : string;
StringList : TStrings;
RecursiveEnum : boolean;
ResourceTypes : TNTServerResSet=[resAny])
function ValidateUserLogon(const UserName : string;
const Domain : string;
const PassWord : string) : boolean;
NOTA: Para acceso remoto al Registro, ver "TRegistry.RegistryConnect()"
de Borland.
Los métodos que establecen TStrings asignan la propiedad Items o Lines
con campos delimitados por punto y coma (";"). Este formato es ideal
para my componente TMultiColListBox para la función
General.ExtractField(). Los campos Flag DWORD se pueden comprobar vía
la función General.AndEqual(), por ejemplo:
if AndEqual(SI.ServerType,SV_TYPE_SERVER_UNIX) then ...
La mayoría de las funciones que establecen TStrings también permiten un
Set (conjunto) de Field Options que controla la información devuelta en
las columnas de los Items/Lines individuales de los TStringList.
Algunas clases tienen constructores Create sobrecargados. Esto le
permite ya sea crear una instancia ATTACHED (adjunta) o una instancia
UNATTACHED (no adjunta) simple. En el caso de TNTServerEventLog puede
crear una instancia que se adjunte al servidor y abra la bitácora de
eventos (eventlog) SourceName inmediatamente, o sólo crear la clase y
luego llamar a OpenLog() para adjuntarse a la bitácora (log).
NOTA: OpenLog y métodos similares en otras clases automáticamente
cerrarán cualquier bitácora previamente abierta antes de abrir la
nueva. Llamar al método Free también cierra cualquier bitácora
abierta, por lo que no hay necesidad para un CloseLog() o métodos
similares.
Debido a limitaciones de espacio, la documentación se incluye en el
código fuente (adjunto).
________________________________________________________________________
¿Cuándo fue la última vez que votó por el Boletín Pascal? Por favor
apoye esta iniciativa votándonos en "The Programming Top 100!"
________________________________________________________________________
3. Inline Assembler en Delphi (V) - Una introducción a objetos
Los objetos son registros
=========================
Desde la perspectiva del ensamblador, un objeto es como un registro
cuyos campos son sus propios campos más los campos de sus ancestros,
más el puntero a la VMT (Virtual Methods Table = Tabla de Métodos
Virtuales). Veámoslo con un ejemplo:
type
TClase1 = class
CampoA: integer;
CampoB: string;
end;
TClase2 = class(TClase1)
CampoC: integer;
end;
En el ejemplo, TClase2 es como una especie de registro de cuatro campos:
TClase2 = record
VMT: pointer; // campo invisible, siempre primero
CampoA: integer; // heredado de TClase1
CampoB: string; // heredado de TClase1
CampoC: integer; // declarado en TClase2
end;
Las variables objeto son punteros
=================================
Una variable objeto es simplemente un puntero a un objeto, es decir, un
puntero a un registro.
var
a, b: TClase2;
begin
a := TClase2.Create;
b := a; // una simple asignación de punteros
a.Free;
end;
Un constructor asigna memoria para una instancia (objeto) de su clase,
la inicializa, y devuelve un puntero a la memoria asignada. Por
consiguiente, después de la llamada a TClass.Create la variable "a"
apunta al registro (el objeto):
+---+ +--------+
| a | ----------> | VMT |
+---+ +--------+
| CampoA |
+--------+
| CampoB |
+--------+
| CampoC |
+--------+
La asignación "b := a" no crea un nuevo objeto copia del primero, sino
que en realidad hace que ambas variables apunten al mismo objeto:
+---+ +--------+ +---+
| a | ----------> | VMT | <---------- | b |
+---+ +--------+ +---+
| CampoA |
+--------+
| CampoB |
+--------+
| CampoC |
+--------+
Métodos en ensamblador
======================
Los métodos reciben un primer parámetro invisible (no declarado) llamado
Self, que es un puntero al objeto sobre el cual deben operar.
type
TPrueba = class
FCodigo: integer;
public
procedure SetCodigo(NuevoCodigo: integer);
end;
procedure TPrueba.SetCodigo(NuevoCodigo: integer);
begin
FCodigo := NuevoCodigo;
end;
var
a: TPrueba;
begin
:
a.SetCodigo(2);
:
end;
El código Object Pascal de arriba se puede traducir de alguna manera a
Pascal estándar como sigue:
type
TPrueba = record
VMT: pointer;
FCodigo: integer;
end;
procedure SetCodigo(Self: TPrueba; NuevoCodigo: integer);
begin
Self.FCodigo := NuevoCodigo;
end;
var
a: ^TPrueba;
begin
:
SetCodigo(a, 2);
:
end;
El ejemplo sirve para explicar que los métodos reciben el puntero Self
como primer parámetro, es decir, reciben el puntero Self (recordemos
que los registros se pasan por referencia como un puntero a los datos)
en el registro EAX, y el primer parámetro declarado se pasa como segundo
parámetro en EDX y así (el segundo parámetro declarado se pasa entonces
como tercero en ECX, y el resto de los parámetros se pasan en la pila).
El método SetCodigo se puede escribir en ensamblador como sigue:
procedure TPrueba.SetCodigo(NuevoCodigo: integer);
asm
// EAX = Self = Dirección de la instancia de TPrueba
// EDX = Parámetro NuevoCodigo
// FCodigo := NuevoCodigo;
mov TPrueba[eax].FCodigo, edx // TPrueba(EAX)^.FCodigo := EDX;
end;
Como puede verse, los campos de los objetos se acceden de la misma
manera que los campos de un registro.
NOTA: Las propiedades no son campos (son nombres para referenciar
campos y métodos), y no se pueden acceder directamente desde
inline assembler.
Aquí va un ejemplo de un método llamando a otro método:
procedure TPrueba.Increment;
asm
// SetCodigo(Codigo+1);
mov edx, TPrueba[eax].FCodigo // ECX := TPrueba(EAX)^.FCodigo;
inc edx
call TPrueba.SetCodigo;
end;
No establecimos el valor de EAX antes de la llamada a SetCodigo pues
EAX ya contiene el valor deseado (Self), así que el método llamado
operará sobre el mismo objeto que el llamador.
NOTAS:
* Los métodos virtuales sólo pueden llamarse estáticamente, pues se
necesita una referencia a la clase en la sentencia CALL.
* En inline assembler no se pueden distinguir los métodos sobrecargados.
Constructores en ensamblador
============================
Los constructores son métodos muy especiales. Se puede llamar a un
constructor para crear una instancia de una clase (o sea para asignar
la memoria para el objeto e inicializarla), o simplemente para reini-
cializar un objeto ya creado:
a := TPrueba.Create; // asigna memoria
a.Create; // sólo reinicializa un objeto existente
Para distinguir entre estas dos situaciones, a los constructores se
les pasa un invisible segundo parámetro de typo Byte (es decir, en el
registro DL), el que puede ser positivo o negativo respectivamente (el
compilador usa 1 y -1 respectivamente).
Si llamamos a un constructor desde código ensamblador con DL = $01 (para
asignar memoria para el objeto), tenemos que pasar una referencia a la
clase en EAX, y puesto que no hay símbolo para accederla directamente
desde ensamblador, entonces tenemos que hacer algo similar a lo que
hicimos con la información de tipo de los registros:
var
TPrueba_TypeInfo: pointer;
:
initialization
TPrueba_TypeInfo := TPrueba;
Ahora que hemos inicializado una variable global con la referencia a la
clase desde nuestro código Pascal, podemos usarla en nuestro código en
ensamblador:
var
a: TPrueba;
begin
// a := TPrueba.Create(2);
asm
mov eax, TPrueba_TypeInfo
mov dl, 1
mov ecx, 2
call TPrueba.Create
mov a, eax
end;
:
end;
Llamar a un constructor para reinicializar el objeto es más simple, pues
no necesitamos una referencia a la clase:
var
a: TPrueba;
begin
:
// a.Create(2);
asm
mov eax, a
mov dl, -1
mov ecx, 2
call TPrueba.Create
end;
:
end;
No tenemos nada de que preocuparnos si tenemos que escribir un cons-
tructor en ensamblador dado que Delphi se hace cargo de la cuestión
de la asignación de memoria por nosotros al entrar al constructor, y
-luego de ello- EAX apuntará al nuevo objeto, tal como sucede con
cualquier otro método, pero lo que es relevante es que si el constructor
tiene parámetros, el primer parámetro declarado será internamente pasado
tercero, o sea en ECX (en vez de segundo, o sea en EDX, tal como ocurre
con cualquier otro método), y el resto de los parámetros será pasado en
la pila.
constructor TPrueba.Create(NuevoCodigo: integer);
asm
// FCodigo := NuevoCodigo
mov TPrueba[eax].FCodigo, ecx
end;
__________________
NOTA: Se adjunta un ejemplo de código fuente completo.
________________________________________________________________________
4. Usando Objetos para guardar la configuración del programa
Este artículo de Sebastián Mayorá se incluye en formato HTML dentro del
archivo adjunto correspondiente a esta edición, en la carpeta ObjConfig.
________________________________________________________________________
5. Foros / listas de correo
Para quienes son miembros de nuestros foros (grupos en Yahoo! Grupos),
me gustaría recordarles que la participación en los mismos está sujeta
a ciertas reglas.
Estas reglas han sido tildadas por algunos de infantiles y déspotas, por
decir lo menos. Para los que tienen buena experiencia en foros y listas
de correo, estas reglas prácticamente no aportan nada nuevo, pero para
otros admito que pueden resultar molestas y algo chocantes. Realmente lo
siento, pero si he decidido establecerlas, no ha sido porque sí. Los
foros son para profesionales, y no para quienes desean publicar mensajes
como se les da la gana simplemente porque es gratis, sino que esperamos
un mínimo de seriedad y consideración hacia los demás.
He aquí el extracto de las reglas comunes a todos los foros:
* El asunto de los mensajes tiene importancia capital. Es lo primero y a
veces lo único que se ve de un mensaje. Por favor:
. Provee un asunto representativo en tus preguntas. Trata que sea lo
más específico posible y que incluya palabras clave que puedan
facilitar la búsqueda posterior de un determinado tema.
. Evita el uso de palabras como "duda", "problema", "socorro",
"SOS", "ayuda" (excepto que estés hablando de archivos de ayuda),
"consulta" (salvo que estés hablando de una consulta SQL), etc.
. Evita usar de signos de exclamación y escribir todo en mayúsculas.
. No modifiques la línea de asunto al responder un mensaje.
* Elimina lo más posible del mensaje original al responder, para reducir
así el tamaño de los mensajes. Como mínimo, al responder elimina las
líneas innecesarias de arriba y de abajo del mensaje original:
- Todo o parte de los encabezados. Mínimamente las líneas de:
. Destinatario (es el foro, ya lo sabemos)
. Asunto (se repite en la respuesta, ya lo sabemos)
. Fecha de envío (opcional)
- Las frases iniciales y finales como saludos, presentaciones, agrade-
cimientos, firmas ("signatures"), publicidades de los servicios de
webmail y de Yahoo!, direcciones del foro, etc.
- Los mensajes anteriores del hilo de conversación
* No envíes mensajes irrelevantes (como mensajes de agradecimiento,
o respuestas del tipo "yo lo quiero" / "yo también" cuando alguien
ofrece algo en el foro, y mucho menos mensajes fuera de tema como
cartas cadena -o "pirámide"-, alertas de virus, publicidades, etc.)
* No envíes ofrecimientos, solicitudes o apologías de cracks, warez,
seriales y otras formas de piratería informática.
* No envíes mensajes del tipo "¿Dónde puedo encontrar...?" (excepto en
el caso del foro de Componentes, que está para ese fin). Los foros
no son un motor de búsqueda humano.
* Incluye abundante información sobre el problema que planteas (como
por ejemplo versión del producto y sistema operativo que usas, etc.)
para no hacerle perder el tiempo a alguien preparando una respuesta
que después no te sirva porque no se aplica a tu plataforma.
* Todos los foristas y todos los mensajes tienen la misma prioridad,
así que por favor no envíes mensajes urgentes, con prioridad o con
su asunto todo en mayúsculas, y evita usar expresiones como "por
favor ayúdenme", "mi empleo depende de esto", "estoy desesperado",
"ya no sé que hacer", etc., así como cualquier otra forma de
intentar obtener ventaja o resaltar tu mensaje sobre los demás.
* No escribas todo en mayúsculas (parece que estuvieras gritando).
* Los archivos adjuntos en los mensajes son descartados. Si tienes
algo para compartir, contacta directamente al interesado, u ofrécelo
en el foro aclarando que las peticiones deben enviarse a tu cuenta de
email, y no a la dirección del foro.
* Por cualquier cuestión administrativa del foro (como por ejemplo
problemas con tu suscripción, reportar casos de spam, etc.) no
escribas al foro sino a su/s moderador/es.
Como siempre, recordamos a los suscriptores las direcciones de nuestros
foros. Para unirse a algún foro, lo más recomendable es hacerlo desde la
web para así tener acceso a todas las áreas del foro y la configuración
de las opciones de suscripción, pero también es posible suscribirse por
email. Para suscribirse desde la web es necesario poseer un ID de Yahoo!
(si no tienes el tuyo, puedes conseguirlo gratis registrándote como
usuario de Yahoo!).
* Delphi-abierto. Programación en Delphi (todos los niveles). Si estás
en la etapa de aprendizaje o si no te agradan los foros discriminados
por niveles, este foro es para ti.
http://espanol.groups.yahoo.com/group/delphi-abierto
Suscripción:
http://espanol.groups.yahoo.com/group/delphi-abierto/join
delphi-abierto-subscribe@gruposyahoo.com
* Delphi-intermedio. Programación en Delphi (nivel intermedio). Si ya
sabes mucho de Delphi, pero todavía te falta un largo trecho para ser
un gurú (o no tanto), este foro es para ti.
http://espanol.groups.yahoo.com/group/delphi-intermedio
Suscripción:
http://espanol.groups.yahoo.com/group/delphi-intermedio/join
delphi-intermedio-subscribe@gruposyahoo.com
* Delphi-avanzado. Programación en Delphi. Sólo para gurús.
http://espanol.groups.yahoo.com/group/delphi-avanzado
Suscripción:
http://espanol.groups.yahoo.com/group/delphi-avanzado/join
delphi-avanzado-subscribe@yahoogroups.com
* GrupoKylix. Programación en Kylix.
http://espanol.groups.yahoo.com/group/GrupoKylix
Suscripción:
http://espanol.groups.yahoo.com/group/GrupoKylix/join
GrupoKylix-subscribe@yahoogroups.com
* FreePascal-es. Programación en Free Pascal (freepascal.org).
http://espanol.groups.yahoo.com/group/freepascal-es
Suscripción:
http://espanol.groups.yahoo.com/group/freepascal-es/join
freepascal-es-subscribe@yahoogroups.com
* Desarrolladores-Software. Un lugar para tratar todos aquellos temas
relacionados con el desarrollo de software y su comercialización, y
para compartir experiencias en el ámbito laboral, profesional o
comercial con otros.
http://es.groups.yahoo.com/group/desarrolladores-software
Suscripción:
http://es.groups.yahoo.com/group/desarrolladores-software/join
desarrolladores-software-subscribe@yahoogroups.com
* Componentes. Un foro para buscar/recomendar componentes de software
(componentes VCL y CLX, objetos ActiveX, librerías DLL, etc.), así
como utilidades, tutoriales, información, etc.
http://espanol.groups.yahoo.com/group/componentes
Suscripción:
http://espanol.groups.yahoo.com/group/componentes/join
componentes-subscribe@yahoogroups.com
________________________________________________________________________
6. Delphi en la Red
Por Dave Murray <irongut @ vodafone.net>
Componentes, librerías y aplicaciones
=====================================
Shareware/Commercial
--------------------
* SDL Component Suite 7.0 - por Software Development Lohninger ($99)
La SDL Component Suite provee un amplio rango de componentes para la
ciencia y la ingeniería, por ejemplo matemáticas, estadísticas,
química, diagramas, visualización de datos, transformadas de Fourier
(FFT), ploteos 3D, mapas geográficos, ajuste de curvas, etc.
Disponible para Delphi 3-7 y BCB 4-6.
http://www.lohninger.com/sdlindex.html
Freeware
--------
* Archivos de recursos en español para Delphi 6 UP 1 y 2, traducidos
por Felipe Eduardo Ortiz López. Una vez que se haya instalado
Delphi 6 y aplicados los Update Packs 1 y 2 de Borland, sustituir
los DCUs y PASs respectivos en sus lugares (normalmente $Delphi\Lib,
$Delphi\Lib\Debug y $Delphi\Source\VCL) para tener las cadenas de
mensajes traducidas al español.
http://www.latiumsoftware.com/descarga/Delphi6EspP12.zip
* Generador de reportes Rpv Printing System 2.2
Permite generar reportes de alta calidad, incluyendo imágenes,
códigos de barras y links a la web, a otros reportes o a ejecutables.
Compatible con cualquier lenguaje de programación, permite imprimir
también desde DOS, o desde UNIX, Linux, AS/400, etc. Ideal para uso
en intranets, permite generar e imprimir reportes en el cliente,
utilizando PHP, ASP, etc. Fácil de usar y aprender.
http://www.rpvreport.com/span/
* Max's components page
Freeware and commercial components for Delphi and C++ Builder
http://www.maxcomponents.net/
* PHP4Delphi v2.2 - by Serhiy Perevoznyk, FREEWARE with source
PHP4Delphi allows you to execute the PHP scripts within the Delphi
program directly without a WebServer.
http://users.chello.be/ws36637/
* CEditIPAddr by Netta El-al, FREEWARE with source
IP Address Edit component.
http://www.torry.net/vcl/edits/diffedits/neipaddredit.zip
* IE Information Component v4.9 - by Ch Bergmann, FREEWARE with source
IE Availability, Version & Information Component features include:
Availability of IE, Version and Build Number, Encryption-Strength,
IE WindowTitle, IE ShellFolder and SpecialFolder Paths, and more.
http://yazno.tripod.com/ieinstver/
* TssVolumeController v1.0 - by Shen Min, FREEWARE with source
TssVolumeController is a component to control the mixer volume.
http://www.sunisoft.com/volumectrl/
* MiTeC System Information Component v7.73 - by Michal Mutl, FREEWARE
Component providing detailed system information including:
CPU architecture, type, count, level, revision, vendor, id, speed
OS version, build, platform, CSD version, user name, serial number
Graphic adapter chip name, dac, memory, color depth, modes, resolution
Sound card name, WaveIn, WaveOut, MIDIIn, MIDIOut, AUX, Mixer name
Memory info, allocation granularity, min.and max.application address
BDE, ODBC, DAO, ADO, ASPI, DirectX information
and a lot more!
http://www.mitec.d2.cz/
* Delphi Fast Zlib v1.1.2 - by Roberto Della Pasqua, FREEWARE w source
A Delphi zlib 1.1.4 implementation for fastest performance, including
targeted P6 code generation, 64bit alignment, source changes and
optimizations following Borland C++ full standards adherence, and a
Delphi added low level copy memory function to speedup typical strings
management. Embed the newest zlib 1.1.4 objects into your programs
without using external dlls, take a look into the example to see how
to work with streams and strings.
http://www.dellapasqua.com/delphizlib/
Artículos, trucos y consejos
============================
* A Book, a Book, a Kingdom for a Book! - by Zarko Gajic
Find what are the best Delphi books on the market and read expert
reviews. Also, see what are the top picks in the .NET arena!
http://delphi.about.com/cs/magazines/
* Tips on Designing Data-Driven XML - by Edward Tittel
One of the powerful aspects of XML is the ability to define and
structure content or data. Learn a few tips for designing XML
documents based on the structure of the data.
http://builder.com.com/article.jhtml?id=u00320021007edt01.htm
* How to get Kylix to notice function key shortcuts - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=205
* How to identify drives assigned by the Subst command - Flurin Honegger
Recognizing virtual drives and combining 32 Bit and 16 Bit code to fit
from Win95 up to WinXp!
http://www.delphi3000.com/articles/article_3447.asp
* Find text in MS Word files without Word app loading - Dmitry Lifatov
Easy way to find a text in MS Word.
http://www.delphi3000.com/articles/article_3450.asp
* Building a Terminal Server Client-Application - by Max Kleiner
Working with MSTerminal Services Advanced Client ActiveX.
http://www.delphi3000.com/articles/article_3451.asp
* Copy NTFS file security from a source to a destination - Wayne Sherman
By default when coping a folder or file to a destination on an NTFS
partition the destination file takes the security and access control
settings of the destinations parent folder. This function provides an
easy way to copy the original settings to the destination file or copy
security settings from another file/folder.
http://www.delphi3000.com/articles/article_3452.asp
* OnChange Event for TDBLookupComboBox - by Alex Schlecht
How to make a new DBLookupComboBox-Component with OnChange-Event.
http://www.delphi3000.com/articles/article_3454.asp
* Function to Determine Oracle Version Number - by Mike Heydon
GetOraVersion()
http://www.delphi3000.com/articles/article_3455.asp
* Create an ActiveX friendly TSplitter - by Simon Moscrop
Prevent the 'Component has no parent window' error message appearing
when you use a TSplitter in a Delphi ActiveX control.
http://www.delphi3000.com/articles/article_3456.asp
* Function to determine MS SQL Server Version Number - by Mike Heydon
GetSqlVersion().
http://www.delphi3000.com/articles/article_3457.asp
* Check Valid IP Address - by Jerry Pylarinos
A simple way to check whether an IP address is valid.
http://www.delphi3000.com/articles/article_3458.asp
* Instant Messaging in Delphi: The MSN One - by César Nicolás Peña Núñez
An implementation of the MSN Messenger protocol, it isnt complete and
in order to build it you will need the WSocket package. Most of what
is presented here is a part of the specification.
http://www.delphi3000.com/articles/article_3459.asp
* How to get JPEG Image Size, including big images - by Mauricio Herrera
http://www.delphi3000.com/articles/article_3460.asp
* Sip from the Firehose: Short Computer Books I've Enjoyed - by David I
There are so many great computer books and so little time to read them
all. What I really love are the short books, the focused books with
low page counts...
http://community.borland.com/article/0,1410,29253,00.html
* How to use AutoInc fields with DataSnap - by Dan Miser
Implementing auto-incrementing fields for any DataSnap server.
http://community.borland.com/article/0,1410,20847,00.html
* If you are The Lone Gun, Take Aim at Time Bandits - by Jeffrey Kay
The author is the only developer in his small startup, but he also has
other duties as a member of the management team. Check out his tips on
how to stay on time and on track when you wear many hats.
http://builder.com.com/article.jhtml?id=u00420021023JBK01.htm
* How to adapt DateTime values for different SQL-Server formats?
http://www.swissdelphicenter.ch/en/showcode.php?id=1423
* How to load the CD-ROM icon?
http://www.swissdelphicenter.ch/en/showcode.php?id=1417
* How to patch a process?
http://www.swissdelphicenter.ch/en/showcode.php?id=1364
* How to center a TControl?
http://www.swissdelphicenter.ch/en/showcode.php?id=1415
* How to maker the mouse wheel works correct in TDBGrid?
http://www.swissdelphicenter.ch/en/showcode.php?id=1454
* How to use regular expressions in Delphi?
http://www.swissdelphicenter.ch/en/showcode.php?id=1478
* How to list all directories, files and drives in a listbox?
http://www.swissdelphicenter.ch/en/showcode.php?id=1495
* How to display the 'Organize Favorite' dialog box?
http://www.swissdelphicenter.ch/en/showcode.php?id=1494
* How to preform a Shell Sort - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=195
* How to convert an Icon to Bitmap - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=196
* How to set the transparent color of an image - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=197
* How to check if a font is a TrueType font - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=198
* How to read DOS environment variables - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=199
* How to programatically start the screen saver - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=203
* How to change the system date - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=204
* Quick untyped fileaccess - by DenShade Hyp
How can we read quickly from an untyped file consisting out of bytes
without making the code complicated?
http://www.delphi3000.com/articles/article_3415.asp
* ADO Recordset <-> XML - by Dmitry Lifatov
Provides two functions: function RecordsetToXML and function
RecordsetFromXML.
http://www.delphi3000.com/articles/article_3416.asp
* Modulo for huge numbers - by Andreas Schmidt
http://www.delphi3000.com/articles/article_3417.asp
* How To Make Your Own Self Extractor - by William Anthony
How to create a Self Extracting Executable.
http://www.delphi3000.com/articles/article_3419.asp
* Create You Own Custom Dataset (Part 1) - by William Anthony
How to create a custom DataSet.
http://www.delphi3000.com/articles/article_3420.asp
* Create You Own Custom Dataset (Part 2) - by William Anthony
How to create direct access dataset.
http://www.delphi3000.com/articles/article_3421.asp
* Get the published properties of an persistent object - Boris Wittfoth
How to get the published properties of an persistent object / Using
the pPropInfo-Pointer and the RTTI of Delphi.
http://www.delphi3000.com/articles/article_3423.asp
* Moving Controls over the form - by Boris Benjamin Wittfoth
Dragging / moving TWincontrol-Component over a TForm.
http://www.delphi3000.com/articles/article_3424.asp
* How to draw in a StringGrid Cell? - by Boris Benjamin Wittfoth
The standard Delphi-StringGrid can only hold one color for all cells.
How to create an multiple colored Stringgrid ?
http://www.delphi3000.com/articles/article_3425.asp
* TString Super Sort Class (descending,ignore case, etc) - Mike Heydon
http://www.delphi3000.com/articles/article_3427.asp
* Randomizing with the linear congruence method - by DenShade Hyp
The standard randomize function does not return a set of uniformly
randomized numbers.How can i truly randomize values?
http://www.delphi3000.com/articles/article_3429.asp
* Random string generator - by Uros Gaber
Ever wanted to generate a random string with specific random char on a
specific position in the string?
http://www.delphi3000.com/articles/article_3430.asp
* Date String (any format) to TDateTime - by Mike Heydon
http://www.delphi3000.com/articles/article_3431.asp
* Moving objects with snapgrid functionality - by Tommy Andersen
Here's an object that enables you to move your objects on a form
easily during runtime...
http://www.delphi3000.com/articles/article_3432.asp
* Display The Add to favorite Dialog Box - by Khaled Al Ahmad
How To Display the IE Add to favorite Dialog Box.
http://www.delphi3000.com/articles/article_3433.asp
* Screencapture with animated gif support - Christiaan Ten Klooster
How to create a screenshot of the entire screen, a selection or a
specific window to a bitmap, jpeg compressed or (animated) GIF file?
http://www.delphi3000.com/articles/article_3434.asp
* Standard RichEdit and URL highlighting/navigation - by Mike Shkolnik
How can I highlight URLs in RichEdit and how can I detect a mouse
click in text where URL is?
http://www.delphi3000.com/articles/article_3435.asp
* LogonUser() Win API call vs SSPI call - by Mike Heydon
Using the LogonUser API or the Security Support Provider Interface
(SSPI) to verify user credentials.
http://www.delphi3000.com/articles/article_3436.asp
* Redefining TCP/IP Client... - by S S B Magesh Puvananthiran
How do we create a TCP/IP Server/Client in Delphi?
http://www.delphi3000.com/articles/article_3437.asp
* Using queued components in Delphi - by Helmut Dollinger
Example showing queued components in Delphi. Queued Components are
feature of COM+ based on Microsoft Message Queuing Services (MSMQ).
They provide an easy way to invoke and execute components
asynchronously. Processing can occur without regard to the
availability or accessibility of either the sender or the receiver.
http://www.delphi3000.com/articles/article_3439.asp
* How do I unlock a Active Server Library DLL? - by Helmut Dollinger
How to make this a little bit easier during development...
http://www.delphi3000.com/articles/article_3440.asp
* Reading and writing RIFF base files (WAVE, AVI etc) - by Liran Shahar
Ever wanted to read and write user sound into a valid WAVE file? Ever
wanted to read all the available chunks with additional file data from
a WAVE fie?
http://www.delphi3000.com/articles/article_3441.asp
* Delphi 5 TToolbar does not resize correctly when XP common controls
6.0 are enabled - by Flurin Honegger
Altering Delphi 5 comctrls.pas to fit your needs!
http://www.delphi3000.com/articles/article_3445.asp
Tutoriales
==========
* CLR, startup your engines! - by Alain "Lino" Tadros
The Common Language Runtime is the solid rock on which the .NET
Framework was built. From it's many features, we start with one that
defines the way CLR starts .NET applications.
http://community.borland.com/article/0,1410,29291,00.html
* Filtering ClientDataSets - by Cary Jensen
When applied to a dataset, a filter limits the records that are
accessible. This article explores the ins and outs of filtering
ClientDataSets.
http://community.borland.com/article/0,1410,29271,00.html
* ClientDataSet Aggregates and GroupState - by Cary Jensen
How to use aggregates to calculate simple statistics as well as how to
use group state to improve your user interfaces.
http://community.borland.com/article/0,1410,29272,00.html
* Locate and format XML data with XPath functions - Tony Patton
XPath allows you to locate + extract information from an XML hierarchy
and offers functions which provide an easy way to work with numeric
and textual data.
http://builder.com.com/article.jhtml?id=u00320021108ton01.htm&page=1
* Welcome to Caught in the .NET - By Alain "Lino" Tadros
Welcome to "Caught in the .NET" series of articles, my goal is to
introduce myself and set the stage and expectation for the next few
months of reading these series of articles.
http://community.borland.com/article/0,1410,29254,00.html
* Take a Guided Tour of XML Support in .NET - by Lamont Adams
If you're trying to learn your way around .NET's XML neighborhood, let
us take you on a tour. Here's a look at the Framework's various reader
and writer classes.
http://builder.com.com/article.jhtml?id=u00220021101adm01.htm
* Working With XML Entities - by Roy C. Hoobler
XML entities are often overlooked in the XML dialect, but they provide
a powerful vehicle for XML developers. Learn how to effectively use
them in your DTDs as placeholders or to retrieve external data.
http://builder.com.com/article.jhtml?id=u00320021105RCH01.htm
* Use XPath to Locate Information in XML Documents - by Tony Patton
XML offers a wonderful vehicle for packaging and exchanging data but
getting data from an XML document can be troublesome. Find out how
XPath provides a simple, consistent vocabulary for getting the data.
http://builder.com.com/article.jhtml?id=u00320020827ton02.htm
* Principles to Help Create Robust,Reusable OO Design Apps - Rahul Tyagi
Object-oriented software design provides a cleaner design and enhances
the ability to add new features in the future. Learn the basic
elements of good and bad design and two principles you can follow to
build solid object-oriented design code.
http://builder.com.com/article.jhtml?id=u00320021107tyr01.htm
* MVC Design Pattern: Better Organization + Code Reuse - by Brian Kotek
Consider the MVC design pattern for your development projects. Using
its three components, you can open up new levels of robustness, code
reuse and organization.
http://articles.techrepublic.com.com/5100-10878_11-1049862.html
Otros enlaces
=============
* El Rinconcito de Delphi
Sitio dedicado a Delphi y Kylix. Tutorial, Articulos, Noticias,
Libros, Componentes.
http://www.elrinconcito.com/delphi/
* La Cara Oculta de Delphi 4 - por Ian Marteens
Esta es la versión digital en formato PDF del conocidísimo libro de
Ian Marteens. El libro es muy bueno, pero claro, de Delphi 4 a Delphi
7 han habido muchas y muy grandes novedades, así que el libro puede
considerarse obsoleto, pero creo que será muy útil a estudiantes que
normalmente están cortos de dinero para invertir en libros, pero para
el profesional que gana dinero y que tiene que estar medianamente
actualizado le recomendamos que pase por las librerías y pregunte por
el libro La Cara Oculta de Delphi 6 que ya está a la venta.
http://www.latiumsoftware.com/descarga/lcod4.php (3,7MB)
* Unofficial update of ActionBands feature of Delphi 7.0
This patch will affect both end user applications that use ActionBands
as well as the Delphi IDE itself since the menus in the IDE are
ActionBand menus.
http://cc.codegear.com/Item.aspx?id=19151
* Borland Releases Hot New Upgrade to InterBase
Borland has announced the release a significant upgrade to InterBase.
InterBase 7 has features intended to improve application performance
and developer productivity. Support for SMP and hyperthreading can
speed up applications, support more users and more complex application
architecture. New transaction monitoring capabilities can improve
developer productivity and ease deployment issues. According to field
testers, InterBase 7 is a "must have" upgrade.
http://www.borland.com/interbase/pdf/ib7_whatsnew.pdf
* BorCon France
Paris, November 21-22 2002.
http://info.borland.fr/conference/2002/
________________________________________________________________________
¡Tú puedes ayudarnos!
Por favor danos una mano y ayúdanos a llegar a los 10.000 suscriptores
en los próximos meses. Una forma en que puedes ayudarnos es enviando
este enlace a tus amigos:
http://www.latiumsoftware.com/es/pascal/index.php
boletin-pascal-subscribe@gruposyahoo.com
Otra forma es votándonos en alguno de estos rankings para darle más
visibilidad a nuestro sitio web y aumentar así el número de suscrip-
ciones al boletín:
http://www.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=p41
________________________________________________________________________
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) 2002 por Ernesto De Spirito. Todos los derechos reservados
________________________________________________________________________
|