Boletín Pascal #28 - 20-NOV-2001
INDICE
1. UNAS PALABRAS DEL EDITOR
2. CÓDIGOS DE BARRA (y II)
- Introducción
- TCodeBar
. DrawToCanvas
. Propiedades
- Como se usa "TCodeBar"
- "TBits"
- Dibujando barras
- El programa de prueba
- En el futuro
3. FOROS
- Delphi
- Kylix
- Free Pascal
- Componentes
4. NOTICIAS
- Kylix
. Características
. Descargas
5. TRUCOS Y CONSEJOS
- Determinando si una unidad lógica existe
- Ocultando el cursor para todas las aplicaciones
- Verificando si una característica de Windows existe.
Oculte su aplicación en la Lista de Tareas
- Realizando una operación larga cuando Windows se apaga
6. DELPHI EN LA RED
- Artículos, trucos y consejos
- Componentes, librerías y aplicaciones
. Freeware
. Shareware/Comercial
- Tutoriales
________________________________________________________________________
1. UNAS PALABRAS DEL EDITOR
En esta edición me complace presentar la segunda y última parte del
artículo Códigos de Barra de Alirio Gavidia. En la sección "Delphi en
la Red", ahora a cargo de Dave Murray, hemos agregado un lugar para
componentes, librerías y aplicaciones shareware o comerciales (además
de freeware, por supuesto).
Este boletín alcanzó los 4850 suscriptores, pero la verdad es que
sentimos que este número es muy pequeño. Necesitamos de tu ayuda para
que este boletín pueda continuar y crecer. La forma más sencilla en que
puedes ayudarnos es votándonos en alguno de estos rankings para darle
más visibilidad a nuestro sitio web y aumentar así el número de
suscripciones a este boletín:
http://www.programmingpages.com/?r=latiumsoftwarecomenpascal
http://top100borland.com/in.php?who=20
http://www.lawebdelprogramador.com/buscar/votar.php?id=615
Son sólo unos segundos para ti que REALMENTE significan mucho para
nosotros. También puedes ayudar reenviando el boletín a tus colegas o
invitándolos a suscribirse: http://www.latiumsoftware.com/es/pascal/
Soñamos con llegar a los 10.000 suscriptores y ojalá puedas ayudarnos a
convertir ese sueño en realidad.
Saludos,
Ernesto De Spirito
eds2008 @ latiumsoftware.com
________________________________________________________________________
JfControls Lib. Multilenguaje. Multiapariencia. Skins. Privilegios. Más
de 40 componentes integrados y personalizables. Múltiples problemas de
programación resueltos. Administración centralizada de recursos. Para
Delphi 3-2006 y C++ Builder 3-6. http://www.jfactivesoft.com/spindex.htm
________________________________________________________________________
2. CÓDIGOS DE BARRA (y II)
Por Alirio A. Gavidia
Introducción
============
La primera parte de este artículo versó sobre los códigos de barra tipo
39 y 128 de uso comercial común. En esta segunda entrega se incluirá y
mostrara un conjunto de rutinas desarrolladas en Delphi que implementan
parte de la funcionalidad de estos códigos.
TCodeBar
========
Se anexa un proyecto donde se define "TCodeBar". Éste hereda parte de su
funcionalidad desde "TGraphicControl", que es de donde parte
"TCustomLabel". Al fin al cabo, este control funciona imitando cierta
funcionalidad de un control "TLabel". La definición fundamental es:
TCodeBar = class(TGraphicControl)
:
:
public
procedure Paint; override;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure DrawToCanvas(aCanvas: TCanvas; ax, ay, EscX, EscY:
Integer);
property Price : string read FPrice write SetPrice;
property Description : string read FDescrip write SetDescrip;
property DisplayTextCode: boolean read FDisplayTextCode write
SetDisplayTextCode;
property CodeType : TCodeType read FCodeType write SetCodeType;
property Caption : TCaption read FCaption write SetCaption;
property CurrencyString : string read FCurrencyString write
SetCurrencyString;
end;
DrawToCanvas
------------
procedure DrawToCanvas(aCanvas: TCanvas; ax, ay, EscX, EscY: Integer);
El método anterior está orientado a la impresión del código de barras
escalado en un "canvas" cualquiera (normalmente la impresora).
Propiedades
-----------
Como el uso principal de los códigos de barras es etiquetar productos se
definen aquí propiedades para agregar texto que pueda ser leído por
humanos.
property Price: string; Para impresión del precio del producto.
property Descrip: string; Para impresión de la descripción.
property DisplayTextCode: Boolean; En ocasiones no se requiere nada
más que el código de barras.
property CodeType; Dos opciones, ct128 o ct39, según
el tipo de código a utilizar.
property Caption: TCaption; Es el texto que será convertido a código
de barras. Para esta versión sólo pueden ser números.
property CurrencyString: string; La denominación de la moneda. Se
toma según la definición de Windows de la variable del mismo nombre.
Como se usa "TCodeBar"
======================
De manera similar a una etiqueta, se puede crear y asignarle un "Parent"
y las propiedades dimensionales que se requieran. Adicionalmente, las
propiedades "CodeType", "Price" y "Description".
Ejemplo:
CodBar := TCodeBar.Create(Self);
if RadioGroup1.ItemIndex=0 then
CodBar.CodeType := ct128
else
CodBar.CodeType := ct39;
CodBar.Caption := Edit1.Text;
CodBar.Left := Edit1.Left;
CodBar.Top := Label2.Top;
CodBar.Width := 250;
CodBar.Height := 50;
CodBar.Description := EdDescrip.Text;
CodBar.Price := Edprice.Text;
CodBar.Parent := Self;
Para imprimir, "DrawToCanvas" provee una solución donde se da el
"canvas" destino, posición y factores de escala:
CodBar.DrawToCanvas(Prn.Canvas, SELeft.Value, SETope.Value + paso,
SEX.Value div 2, SEY.Value)
La escala es porcentual.
"TBits"
=======
Es una clase para manipulación de valores true/false, sobre todo cuando
son más de 32 bits. Provee dos propiedades: "Size" y "Bits". La segunda
permite acceso a cada bit como parte de un arreglo.
He utilizado la clase "TBits" para almacenar la codificación del formato
128. Verán que resulta algo "incómodo" escribir 1166 valores uno a uno
por este método. Sin embargo ahora puedo decir que alguna vez en mi vida
utilicé esta clase.
Con código 39 no se utilizó esta clase.
En la siguiente versión, con soporte alfanumérico, posiblemente se
abandonará el uso de "TBits" por otro medio.
Dibujando barras
================
Las rutinas "DrawCode128" y "DrawCode39" son fundamentalmente iguales.
Se determinan ancho y alto de cada elemento del código (Barra o espacio)
y se procede a dibujar barras en el lugar que corresponda (se pudo
dibujar los espacios en blanco, pero parece innecesario).
En particular con el código 128 se requiere un carácter de paridad y uno
de parada (que es más largo que lo usual). Para la paridad existe una
rutina llamada "Getcheck128" que devuelve el número de carácter
resultante.
El programa de prueba
=====================
Este programa de prueba fue desarrollado para una distribuidora con una
amplia cantidad de productos. El código, descripción y precio es
presentado como parte de la etiqueta. La cantidad es el número de veces
que se imprime cada etiqueta.
Los márgenes pueden ser almacenados entre sesiones como "Set 1" y
"Set 2" a través de un menú accesible con el botón derecho del ratón.
"English maincod.dfm" y "Español maincod.dfm" son versiones de
"maincod.dfm" en cada idioma. Copie la que convenga en "maincod.dfm".
Espero sea de utilidad.
En el futuro
============
Se plantean varios cambios y mejoras sobre estas rutinas:
- Soporte alfanumérico tanto para código 39 (falta incluir códigos) como
para 128 (ya tiene los códigos).
- Resolución del problema de códigos de longitud impar en código 128. El
ejemplo completo con los códigos con un cero a la izquierda. Se
presentará la opción de usar el código de "Shift".
- Propiedad "autosize".
- Eliminar la inicialización usando TBits para optar por un archivo de
recursos.
- Mantener el tamaño de cada carácter constante (no el ancho total como
es ahora).
-------------------
El código fuente que acompaña este artículo puede descargarse desde:
http://www.latiumsoftware.com/es/file.php?id=p23
________________________________________________________________________
IBAdmin 3.22 - Complete Interbase SQL tool - Una poderosa herramienta de
administración y desarrollo para manejar servidores y bases de datos
Interbase. IBAdmin provee muchas capacidades para ayudarle en el diseño
y gestión de su base de datos. Diseñe visualmente la estructura de su
BD con el "Database Designer", administre usuarios y permisos con el
"Grant Manager", o emplee el "SQL Debugger" para depurar procedimientos
almacenados y triggers. Disfrute de una edición confortable de código
con Code-Insight y Code Completion. >> http://www.sqlly.com/
________________________________________________________________________
3. FOROS
Delphi
======
Me alegra ver que nuestro foro de consulta delphi-intermedio para
programadores en Delphi de nivel intermedio sigue creciendo y que ya
tiene aproximadamente 500 miembros, con un promedio de casi 30 mensajes
diarios. Como siempre, te invito a que veas los últimos mensajes y
compruebes que sus miembros hacen un gran esfuerzo por no dejar
preguntas sin contestar, a quienes -ya que estamos- les agradezco por
tanta entrega:
http://espanol.groups.yahoo.com/group/delphi-intermedio/messages
Para suscribirte, puedes hacerlo desde la web o -más fácil- por email:
http://espanol.groups.yahoo.com/group/delphi-intermedio/join
delphi-intermedio-subscribe@gruposyahoo.com
Puedes configurar tu suscripción al foro para convertir o no los
mensajes a formato HTML, o para no recibir los mensajes en tu email
(podrás ver los mensajes en la web).
Kylix
=====
El foro de consulta para programadores en Kylix todavía no tiene mucho
movimiento, pero también sigue creciendo a buen ritmo y ya cuenta con
más de 170 miembros.
http://espanol.groups.yahoo.com/group/GrupoKylix
Puedes suscribirte desde la web o -más fácil- por email:
http://espanol.groups.yahoo.com/group/GrupoKylix/join
GrupoKylix-subscribe@yahoogroups.com
Free Pascal
===========
Algo similar ocurre con el foro para programadores en Free Pascal, que
ha superado los 125 miembros.
http://espanol.groups.yahoo.com/group/freepascal-es
Como los otros, puedes suscribirte desde la web o -más fácil- por email:
http://espanol.groups.yahoo.com/group/freepascal-es/join
freepascal-es-subscribe@yahoogroups.com
Componentes
===========
Este es un foro para la búsqueda/recomendación de componentes de
software (componentes VCL y CLX, objetos ActiveX, librerías DLL, objetos
compartidos, etc.), así como utilidades, tutoriales, información, etc.:
http://espanol.groups.yahoo.com/group/componentes
De nuevo, puedes suscribirte desde la web o -más fácil- por email:
http://espanol.groups.yahoo.com/group/componentes/join
componentes-subscribe@yahoogroups.com
------------------
NOTA: Excepto temporalmente en el caso del foro Kylix (porque Kylix es
bastante nuevo), los foros sobre programación no son para principiantes,
sino para programadores de nivel intermedio/avanzado, aunque si eres un
principiante puedes participar como "oyente" y ocasionalmente puedes
preguntar para clarificar algún concepto clave.
________________________________________________________________________
4. NOTICIAS
Kylix 2
=======
Borland lanzó Kylix 2, la primer solución Web Services para Linux. Kylix
2 trae más compatibilidad con Delphi 6, incorporando características
como BizSnap, WebSnap, DataSnap y soporte CORBA.
* Comunicado de prensa - Nov 6
http://www.borland.com/about/press/2001/kylix2.html
* Borland updates Kylix - Por Matthew Broersma
http://news.zdnet.co.uk/software/0,1000000121,2097947,00.htm
* Luxury of Independence. Borland stands above the general web-services
fray - Por John Pallatto
internetworld.com/magazine.php?inc=110101/11.01.01nothingbutnet.html
* Borland Revamps Kylix - Por Alan Zeichick
http://www.sdtimes.com/news/041/story3.htm
* Comunicado de prensa - Nov 6
http://www.borland.com/about/press/2001/k2_ships.html
Características
---------------
* Nuevas características en Kylix 2
http://www.borland.com/kylix/k2/newfeatures.html
* Hoja de datos (PDF)
http://www.borland.com/kylix/k2/k2_datasheet.pdf
* Matriz de características (PDF)
http://www.borland.com/kylix/k2/k2_featurematrix.pdf
* Características y beneficios (PDF)
http://www.borland.com/kylix/k2/k2_feaben.pdf
Descargas
---------
* Kylix 2 Enterprise Trial Edition
http://www.borland.com/kylix/trial2/k2_entdown_steps.html
* Kylix 2 Open Edition
http://www.borland.com/kylix/trial2/k2_opendown_steps.html
________________________________________________________________________
5. TRUCOS Y CONSEJOS
Determinando si una unidad lógica existe
========================================
Puedes usar la API GetLogicalDrives para obtener las unidades lógicas
presentes en el sistema. Esta función devuelve un valor de 32-bit donde
los bits representan las unidades lógicas. Por ejemplo:
+---------------------------------- bit 31 (bit más significativo)
| +--- bit 0 (bit menos significativo)
| |
00000000000000000000000000101101
| ||||||||
| |||||||+--- 1 ==> Unidad A: presente
| ||||||+---- 0 ==> Unidad B: ausente
| |||||+----- 1 ==> Unidad C: presente
| ||||+------ 1 ==> Unidad D: presente
| |||+------- 0 ==> Unidad E: ausente
| ||+-------- 1 ==> Unidad F: presente
| |+--------- 0 ==> Unidad G: ausente
| +---------- 0 ==> Unidad H: ausente
| : : :
+---------------------------- 0 ==> Unidad Z: ausente
Para obtener la máscara de bits correspondiente a una unidad a fin de
testear el resultado de GetLogicalDrives, podemos usar la siguiente
expresión:
1 Shl (Ord(LetraUnidad) - Ord('A'))
Por ejemplo, si LetraUnidad fuera 'D', el resultado de esta expresión
sería:
1 shl (Ord('D') - Ord('A')) = 1 shl (68 - 65) = 1 shl 3 = 8
En binario:
00000000000000000000000000001000
Un And binario entre la máscara y el resultado de GetLogicalDrives será
cero si el bit 3 no está encendido (es decir, si la unidad D: no es una
unidad lógica válida).
Muy bien entonces, vayamos a la función:
uses Windows;
function IsLogicalDrive(Drive: string): boolean;
var
sDrive: string;
cDrive: char;
begin
sDrive := ExtractFileDrive(Drive);
if sDrive = '' then
Result := False
else begin
cDrive := UpCase(sDrive[1]);
if cDrive in ['A'..'Z'] then
result := (GetLogicalDrives And
(1 Shl (Ord(cDrive) - Ord('A')))) <> 0
else
Result := False;
end;
end;
Llamada de ejemplo:
if not IsLogicalDrive(Edit1.Text) then
ShowMessage(Format('"%s" no es una unidad válida.',
[ExtractFileDrive(Edit1.Text)]));
Ocultando el cursor para todas las aplicaciones
===============================================
La API ShowCursor se puede usar par ocultar/mostrar el cursor del ratón,
pero esto sólo afecta nuestra aplicación. Si queremos ocultar el cursor
para todas las aplicaciones, una forma de hacerlo es confinar el cursor
en una posición fuera de los límites de la pantalla con la API
ClipCursor:
uses Windows;
procedure rShowCursor(bShow: BOOL);
var
r: trect;
begin
if not bShow then begin // Ocultar
r.Top := 0;
r.Left := GetSystemMetrics(SM_CXSCREEN)
+ GetSystemMetrics(SM_CXCURSOR);
r.Right := r.Left;
r.Bottom := 0;
ClipCursor(@r);
SetCursorPos(0,0);
end else begin // Restuarar
ClipCursor(nil);
SetCursorPos(GetSystemMetrics(SM_CXSCREEN) div 2,
GetSystemMetrics(SM_CYSCREEN) div 2);
end;
end;
Verificando si una característica de Windows existe
- Oculte su aplicación en la Lista de Tareas
====================================================
Algunas funciones API de Windows pueden o no pueden estar presentes en
su versión de Windows, pero detectar la versión de Windows no es la
mejor manera de saber si una función está presente puesto que eso puede
darnos un falso negativo si el usuario actualizó una DLL y la actuali-
zación incluye la nueva función...
Para comprobar si existe una función API, tenemos que cargar la librería
DLL en donde se supone que la misma reside (llamando la API LoadLibrary)
y después tenemos que obtener la dirección de la función (llamando a la
API GetProcAddress), la que finalmente se utiliza para llamarla. Si
GetProcAddress devuelve Nil, entonces la función no está presente, y si
devuelve un valor distinto de Nil, entonces la función está presente,
pero debemos considerar que no necesariamente está implementada (puede
ser sólo un marcador de lugar y en tal caso si la llamamos obtendremos
el código de error ERROR_CALL_NOT_IMPLEMENTED).
En el siguiente ejemplo implementamos una función llamada
RegisterAsService que intenta llamar la API RegisterServiceProcess para
registrar/"desregistrar" nuestra aplicación como un servicio. La función
devuelve True si tuvo éxito.
function RegisterAsService(Active: boolean): boolean;
const
RSP_SIMPLE_SERVICE = 1;
RSP_UNREGISTER_SERVICE = 0;
type
TRegisterServiceProcessFunction =
function (dwProcessID, dwType: Integer): Integer; stdcall;
var
module: HMODULE;
RegServProc: TRegisterServiceProcessFunction;
begin
Result := False;
module := LoadLibrary('KERNEL32.DLL');
if module <> 0 then
try
RegServProc := GetProcAddress(module, 'RegisterServiceProcess');
if Assigned(RegServProc) then
if Active then
Result := RegServProc(0, RSP_SIMPLE_SERVICE) = 1
else
Result := RegServProc(0, RSP_UNREGISTER_SERVICE) = 1;
finally
FreeLibrary(module);
end;
end;
Nótese que el registrar nuestra aplicación como un servicio tiene el
efecto secundario de ocultar nuestra aplicación en la Lista de Tareas
(en el Administrador de Tareas de Windows).
Llamadas de ejemplo:
RegisterAsService(true); // Oculta nuestra aplicación del Adminis-
// trador de Tareas de Windows registrándola como servicio
RegisterAsService(false); // "Desregistra" la aplicación como servicio
// y eso hace que vuelva a ser visible en el Administrador de Tareas
NOTA: RegisterServiceProcess es una API Windows 9x/Me API. No está
presente en Windows NT/2000, y no creo que haya una forma de ocultar una
aplicación del Administrador de Tareas en estas versiones de Windows.
Realizando una operación larga cuando Windows se apaga
======================================================
Cuando Windows se apaga, le da a las aplicaciones una cantidad limitada
de tiempo para responder a la petición de apagado (el mensaje
WM_QUERYENDSESSION). Si una aplicación no responde a la petición en ese
tiempo, Windows normalmente muestra un cuadro de diálogo permitiendo que
el usuario termine la aplicación por la fuerza, reintente el apagado o
lo cancele.
Si quisiéramos que nuestra aplicación realice un proceso cuando Windows
se apaga, por ejemplo un respaldo (backup), que puede durar algunos
segundos más de los que Windows está dispuesto a esperar, y no queremos
que Windows muestre ese cuadro de diálogo, entonces lo que tenemos que
hacer es cancelar el apagado, realizar nuestro proceso y finalmente,
cuando hayamos terminado, decirle a Windows que se apague.
Puesto que tenemos que responder a Windows antes de ejecutar nuestro
proceso, el truco que utilizamos es establecer un temporizador (timer)
-inicialmente apagado- para permitir que el proceso se ejecute unos
milisegundos más adelante. Utilizamos una variable ProcessStatus para
saber si tenemos que correr el proceso (0), si actualmente está
corriendo (1) o si acaba de terminar (2), para saber así si podemos
permitir que el sistema se cierre o no, y si tenemos que correr el
proceso o no.
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
procedure WMQueryEndSession (var Msg: TWMQueryEndSession);
message WM_QueryEndSession;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var
EndSessionFlags: integer;
ProcessStatus: integer;
procedure TForm1.WMQueryEndSession(var Msg: TWMQueryEndSession);
begin
case ProcessStatus of
0: // Primera vez
begin
ProcessStatus := 1; // Evita entrar aquí de nuevo
EndSessionFlags := Msg.Source; // Guarda la forma de cierre
Msg.Result := 0; // Decimos a Windows que no termine
Timer1.Enabled := True; // Habilita el timer para que podamos
// realizar el proceso dentro de unos milisegundos
end;
1: // Estamos procesando
Msg.Result := 0; // Decimos a Windows que no estamos listos
2: // Hemos terminado de realizar el proceso
begin
ProcessStatus := 0; // Listo para la próxima (si corresponde)
Msg.Result := 1; // Estamos listos. Se puede cerrar Windows
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False; // Apaga el Timer para que el evento no
// se vuelva a ejecutar
// Aquí realizamos nuestro largo proceso
ShowMessage('Windows no se cerrará hasta que cierre este diálogo.');
ProcessStatus := 2; // Señal para indicar que hemos terminado
ExitWindowsEx(EndSessionFlags, 0); // Cerramos Windows
end;
NOTA: En Windows NT/2000 se requieren privilegios para poder apagar el
sistema.
________________________________________________________________________
6. DELPHI EN LA RED
Por Dave Murray
Artículos, trucos y consejos
============================
* Delphi Database Programming Course - by Zarko Gajic
Free online database programming course for beginner Delphi developers
focused on ADO techniques.
http://delphi.about.com/library/weekly/aa010101a.htm
Two new chapters have been added in the last month:
Chapter 18 "Data Modules" shows how to use the TDataModule class -
central location for collecting and encapsulating data access objects,
their properties, events and code.
http://delphi.about.com/library/weekly/aa101601a.htm
Chapter 19 "Handling database errors" introduces error handling
techniques in Delphi ADO development. Find out about global exception
handling and dataset specific error events.
http://delphi.about.com/library/weekly/aa103001a.htm
* What's New In Delphi 6? - by Brian Long
A reviews the latest Delphi version
http://www.thedelphimagazine.com/samples/1263/1263.htm
* .NET complex types in a Delphi web service client - by John Kaster
An article discussing prototype support for .NET web services that
use Document Literal encoding in Delphi.
http://community.borland.com/article/0,1410,27986,00.html
* How to get the screensaver time-out value? - by Rainer Kümmerle
http://www.swissdelphicenter.ch/en/showcode.php?id=854
* How to mount a share? (Kylix) - by Lukas Zurschmiede
http://www.swissdelphicenter.ch/en/showcode.php?id=860
* How to create a cute gradient label - by Alain Gosselin
http://www.delphi3000.com/articles/article_2794.asp
* Give your menus a new look - by Vassilis Perantzakis
This component gives your menus a customizable new look, a lot like
the XP menus - only better!
http://www.delphi3000.com/articles/article_2796.asp
* Call AnimateWindow the safe way - by Adam Lanzafame
AnimateWindow can enhance your GUI by adding special animations to
your forms. However, the API is only valid from Win98 / 2000. This
code shows you how to use it only when it is supported, without
crashing and burning when it is not supported.
http://www.delphi3000.com/articles/article_2799.asp
* Converting from Windows > UNIX ASCII Text Files - by Lloyd Kinsella
How do you convert between Windows and UNIX ASCII files?
http://www.delphi3000.com/articles/article_2815.asp
* Transparent Desktop Icon Text - by Lloyd Kinsella
Annoyed at the icons on your Desktop with those damned colored text
backgrounds, wouldn't it be nice if your wallpaper showed through?
http://www.delphi3000.com/articles/article_2814.asp
* TASPObject - ASP programming with Delphi - by Curtis W. Socha
Introducing the TASPObject. See how to create a real application
that incorporates the TASPObject - by creating an ASP page counter
to see how many times your ASP has been called.
http://delphi.about.com/library/bluc/text/uc110601a.htm
* Help for component creators - by Pintér Gábor
Create a help file for your component exactly like Delphi's help.
With source code, examples, and installation instructions.
http://community.borland.com/article/0,1410,26679,00.html
* Using COM+ object pooling with Delphi 6 - by Vincent Parrett
Delphi 6 introduces support for COM+ object pooling, which provides
significant performance improvements under some circumstances.
http://community.borland.com/article/0,1410,27568,00.html
* Templates in Object Pascal - by Rossen Assenov
Here's a quick guide to implementing C++ like templates in Delphi.
http://community.borland.com/article/0,1410,27603,00.html
* Paging Dr. WebSnap! - by Nick Hodges
Using the TPagedAdapter component for fun and profit!
http://community.borland.com/article/0,1410,27824,00.html
* Implementing Professional Drag&Drop In VCL/CLX Apps - by Brian Long
Simple intra-application drag and drop support is easy to add to a
VCL/CLX application. However, customizing the operation, for example
mouse sensitivity, info sent along with the operation, mouse cursor,
the associated drag image, etc... All these things take more work.
http://www.blong.com/Conferences/BorCon2001/DragAndDrop/4114.htm
* VCL Sourcery - by Brian Long
Very few Delphi Developers know the VCL source code like the back of
their hand. Take a leisurely stroll through the VCL source code,
removing its mystique and seeing what insights we can gain.
www.blong.com/Conferences/BorConUK2001/VCLSourcery/VCLSourcery.htm
* An Introduction to Kylix Open Edition - by Ray Lischner
Explore Kylix Open Edition by covering topics such as selecting the
Linux distribution, installation, FreeCLX issues, dbExpress,
licensing, and more.
www.delphimag.com/features/2001/11/di200111rl_f/di200111rl_f.asp
* Media Player Autorepeat Function - by Cesario Lababidi
How to write an Autorepeat Function for Mediaplayer?
http://www.delphi3000.com/articles/article_2792.asp
* Debugging With More Than Watches And Breakpoints - by Brian Long
or How To Use The CPU Window. A BorCon UK 2001 and DCon 2001 paper.
http://www.blong.com/Conferences/DCon2001/Debugging/Debugging.htm
* Delphi and C++Builder Tips and Techniques - by Brian Long
A BorCon 2001 paper of IDE/RTL/VCL/ObjectPascal Tips. It focuses
mainly on how to be more productive within the Delphi, C++Builder
and Kylix IDEs.
http://www.blong.com/Conferences/BorCon2001/Tips/2106.htm
* Access rights in WebSnap - by Nick Hodges
How to limit access to specific pages based on a user access rights.
http://community.borland.com/article/0%2C1410%2C27777%2C00.html
* A database-enabled Web user list - by Jimmy Tharpe
For most of us, user validation data needs to be stored in a
database. Fortunately, writing a component to encapsulate this
functionality is easy. (Delphi 6)
http://community.borland.com/article/0%2C1410%2C27710%2C00.html
* How can I get the printers installed? - by Josep Lainez
Do you want to get your printer list without using the printer
object? Let's see what's in the Windows registry.
http://www.delphi3000.com/articles/article_2779.asp
* Draw on DeskTop - by Master Tavi
How to draw on DeskTop?
http://www.delphi3000.com/articles/article_2773.asp
* Windows Messages? - by Master Tavi
How can I use Windows Message and what are they? This article
explains the basics of windows messages and includes a list of the
most commonly used Windows messages.
http://www.delphi3000.com/articles/article_2772.asp
* How to search a file for specified text? - by P. Below
http://www.swissdelphicenter.ch/en/showcode.php?id=847
* How to write data directly to the printer port? - by Ramon Schenkel
http://www.swissdelphicenter.ch/en/showcode.php?id=830
* How to convert TDateTime to Unix Timestamp? - by Thomas Greiner
http://www.swissdelphicenter.ch/en/showcode.php?id=844
* InfoWorld interview with Borland CEO Dale Fuller who talks about
competing with Microsoft for the hearts and minds of developers.
http://www.infoworld.com/articles/hn/xml/01/10/19/011019hnfuller.xml
* Optimizing Delphi Code - by Zarko Gajic
How to make sure that the Murphy's law: "Any program will expand to
fill available memory" does not apply to your Delphi applications.
http://delphi.about.com/library/weekly/aa102301a.htm
* Delphi 6 XML Document Programming - by Dr.Bob
This is the first in a series of articles about Delphi 6 XML support
starting off with XML Document Programming in Delphi 6.
http://www.drbob42.com/examines/index.htm
* Floating Menus, Etc. - by Bruno Sonnino
How to put a menu in a toolbar so it can be detached and moved
around.Plus: Setting Tab Stops in Memo and RichEdit Components.
www.delphimag.com/features/2001/11/di200111bs_f/di200111bs_f.asp
* User-modifiable DBGrids - by Ron Nibbelink
How to provide users with highly versatile DBGrid components which
can have their appearance changed at run time.
www.delphimag.com/features/2001/11/di200111rn_f/di200111rn_f.asp
* How to read / write a string to / from the serial port
http://www.swissdelphicenter.ch/torry/showcode.php?id=841
* How to use the AnimateWindow function - by Simon Grossenbacher
http://www.swissdelphicenter.ch/torry/showcode.php?id=838
* How to create an appointment in MS Outlook - by Mike Shkolnik
http://www.delphipages.com/tips/thread.cfm?ID=111
* How to count words in a memo - by Ricardo Arturo Cabral Mejia
http://www.delphipages.com/tips/thread.cfm?ID=109
* How to check if the BDE is installed - by Macroline Software
http://www.delphipages.com/tips/thread.cfm?ID=106
* Delphi 6 Code Completion missing feature - by Brian Long
How to enable an excellent new Code Completion feature in Delphi 6
http://community.borland.com/article/0,1410,27913,00.html
* Is my CPU branded? / Extended CPUID
How to use the extended CPUID instruction to retrieve the name of
the processor from newer AMD (K5 Model 1/2/3, K6 Model 6/7/8,
K6 III Model 9, Athlon & Duron) and Intel (P4) processors.
http://www.delphi3000.com/articles/article_2718.asp
* Exception Logger
A simple way to record exceptions in a log file as well as
displaying a custom error message.
http://www.delphi3000.com/articles/article_2716.asp
* How to add a gague to a status bar
How to add a gague or any other component to a status bar.
http://www.delphi3000.com/articles/article_2728.asp
* How to get all table names in a database
How to get all table names in a database with or without an alias.
http://www.delphi3000.com/article.asp?ID=2754
* How to get BIOS date and version under Win 9X/Me/NT/2k
How to get BIOS date and version under Win 9X/Me/NT/2k and how to
read multi-string values from the registry.
http://www.delphi3000.com/articles/article_2763.asp
* Accessing Web Services from a URL
How to access web services from a Delphi application.
http://www.delphi3000.com/articles/article_2757.asp
Componentes, librerías y aplicaciones
=====================================
Freeware
--------
* Orcka's Component Suite contains over 25 freeware components to aid
in RAD. Most components come with demo applications and all of the
source code is available. Components include: TOrckaAddinManager,
TOrckaSpellChecker, TOrckaMap, TOrckaScreenSaver, TOrckaLabelEdit,
TOrckaRuler, TOrckaVersionInfo, TOrckaButtonEdit, TOrckaTrayIcon,
TOrckaFontButton, TOrckaLibraryLoader, TOrckaWebLabel.
http://cc.codegear.com/Item.aspx?id=16687
* Synapse Serial Port Synchronous Library v.3.0 - by Lukas Gebauer
Support for communicating on serial ports in blocking mode, high
speed communication, same communication mechanism used in Synapse
TCP/IP library, software and hardware handshake and more.
http://www.ararat.cz/synapse
* KDialControl
An additional visual component for Kylix, encapsulates Dial Qt
widget.
http://www.sourcecodeonline.com/details/kdialcontrol.html
Shareware/Comercial
-------------------
* CoolControls v. 3.03b, 23-Jul-2001, 5Mb - For Delphi 2-6 and BCB 1-5
Award winning package of 60+ highly advanced components and classes.
Covers system, GUI and database programming, and original components.
Forms of any shape, SKINS and TRANSPARENCY for ALL controls and forms,
buttons of various shapes, flat borders, animation, original controls,
powerful list and comboboxes, 3D view for most controls with text,
multiline string grids with custom colors and fonts for cells,
scrolling text, system level components.
http://www.cooldev.com/cd_products.html#CoolControls
* CoolMenus v. 3.08, 14-Sep-2001, 1.8Mb - For Delphi 2-6 and BCB 1-5
Award winning package that provides you with the way to create the
most advanced Windows menus. CoolMenus, especially Multimedia edition
has some unique features you will not find in any other menu related
packages on the market. Native Delphi code, fast speed and helpful
design windows are the reasons of CoolMenus popularity.
http://www.cooldev.com/cd_products.html#CoolMenusPro
* AppControls v 2.3.6, 01-Nov-2001 - For Delphi 2-6 and BCB 3-5
Advanced Application Controls is a set of 50+ top quality multipurpose
components for Delphi and BCB. The package contains everything you
need to add neat and, more important, truly professional appearance
for your software, making development of great interfaces really
rapid. All for those you usually spent days or weeks of hard coding,
now you will be able to make for a few minutes of mouse clicking. :-)
http://www.appcontrols.com/appcontrols.html
* ConfigTreeView v. 1.6, 16-Oct-2001, 342Kb - For Delphi 3-6
ConfigTreeView is used to adjust the advanced options of an
application, similar to the one seen in the Options dialog of MSIE.
ConfigTreeView is designed for this particular purpose, adding only
a very small overhead to your executables. It provides methods for
loading and storing the settings. Ver 1.6 supports Windows XP themes!
http://www.choosepill.com/components/cpcctree.htm
Tutoriales
==========
* Delphi-Dolphin
Will guide you through basic topics, such as form + menu design, to
more advanced areas including databases, COM and customizing Delphi
components. Aims to provide help and advice for budding Delphi
novices & experts alike, through tutorials & articles. Includes new
tutorials from Project Jedi's Jedi-Dolphin initiative.
http://www.delphi-dolphin.com/
* Delphi COM Essentials - by Binh Ly
Including: building a COM Client application, building a COM Server
application , building COM components.
http://www.techvanguards.com/stepbystep/comdelphi/
________________________________________________________________________
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=p28
________________________________________________________________________
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) 2001 por Ernesto De Spirito. Todos los derechos reservados
________________________________________________________________________
|