Boletín Pascal #29 - 04-DIC-2001
INDICE
1. UNAS PALABRAS DEL EDITOR
2. AGREGANDO TOOLTIPS A UN TLISTBOX
3. FOROS
4. NOTICIAS
5. TRUCOS Y CONSEJOS
- Usando translucencias en formularios con Delphi 5
- ¿Cómo evitar adentrarse en los fuentes de la VCL al presionar F7?
- Calculando la diferencia en años entre dos fechas
- Usando un formulario de login en nuestra aplicación
6. DELPHI EN LA RED
- Artículos, trucos y consejos
- Componentes, librerías y aplicaciones
. Freeware
. Shareware/Comercial
- Tutoriales
- Otros enlaces
________________________________________________________________________
1. UNAS PALABRAS DEL EDITOR
En esta edición me complace darle la bienvenida al boletín a tres nuevos
autores, Robert Baker, Frederico Pissarra y Alejandro Rufino, quienes
han contribuido sus respectivos artículos para esta publicación. A
propósito, si has resuelto un problema particular y deseas compartir tu
código en el boletín, te invito a que me escribas. Este boletín sólo
puede crecer en contenidos gracias a tu colaboración.
El artículo de Alejandro Rufino, "Aplicaciones Distribuidas", se adjunta
en el archivo MIDAS.DOC.
Este boletín llegó a los 5000 suscriptores, pero queremos duplicar ese
número en los próximas meses. ¿Nos darías una mano? Si piensas que este
boletín es útil, envíales este enlace a tus amigos para que lo conozcan:
http://www.latiumsoftware.com/es/pascal/index.php
Otra forma 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
Por favor vota. Son sólo unos segundos para ti que REALMENTE pueden
hacer la diferencia. Sin tu ayuda, el boletín no podrá continuar.
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. AGREGANDO TOOLTIPS A UN TLISTBOX
Por Robert Baker
Cimba Solutions
http://www.cimba.com
¿Alguna vez has deseado ver el contenido completo de una entrada de un
ListBox si la misma es más ancha que el ListBox?
Normalmente, si estás utilizando cuadros de lista en sus programas y los
elementos del cuadro de lista (listbox) son más anchos que el ancho del
listbox, dichos elementos será "acortados." Esto podría ocasionar que
información importante se pierda visualmente.
Este artículo provee un método para evitar que esto sea un problema
importante, exhibiendo una ayuda tipo tooltip (ayuda de herramientas)
sobre los elementos que son más anchos que el listbox.
La clave de este problema es el objeto de THintWindow. Éste es el mismo
objeto que se utiliza en la Barra de Tareas de Windows o en la Bandeja
de Iconos para desplegar una pista (hint) si el ratón se mueve sobre un
icono por un breve tiempo. El componente TTreeView de la VCL provee esta
capacidad incorporada, mientras que el componente de TListBox no.
Nosotros seremos responsables de crear, mostrar y destruir el
THintWindow por nosotros mismos.
Para comenzar, inicia un nuevo proyecto y agrega al formulario un
TListBox (llamado lstProducts) y un componente TButton (llamado btnOK).
Ubica y dimensiona los componentes como sea necesario.
Necesitarás agregar manualmente la siguiente definición a la sección
privada de la definición del formulario principal:
ThisHintWindow : THintWindow;
Éste es el objeto que utilizaremos para proveer las pistas de los
elementos de la lista.
En el gestor del evento de OnCreate() del formulario principal, necesi-
taremos hacer tres cosas: (a) definir un método para asegurarnos que
estamos mostrando la pista sobre el componente correcto, (b) crear la
ventana de la pista, y (c) establecer el color de la ventana de la
pista.
a. Definir un método para asegurarnos que estamos mostrando la pista
sobre el componente correcto. Hacemos esto estableciendo el gestor
del evento OnShowHint() al procedimiento que deseamos utilizar:
Application.OnShowHint := CheckHint;
La definición del procedimiento CheckHint() es la siguiente:
procedure TfrmMain.CheckHint(var HintStr: string;
var CanShow: Boolean; var HintInfo: THintInfo);
begin
if (HintInfo.HintControl = lstProducts) then
HintInfo.HintPos.y := HintInfo.HintPos.y - 24;
end;
Queremos cerciorarnos que estemos mostrando la pista sobre el componente
correcto, el listbox lstProducts.
b. Crear la ventana de la pista. Simplemente llama al constructor Create
para la ventana de la pista, usando el formulario principal como el
dueño:
ThisHintWindow := THintWindow.Create(Self);
c. Establecer el color de la ventana de la pista. Cuando se muestra la
ventana de la pista, deseamos cerciorarnos de que esté mostrada en
los colores definidos por el usuario usando las propiedades de la
Apariencia de la Pantalla en el Panel de Control de Windows.
Esto se hace usando la constante predefinida clInfoBk de Delphi:
ThisHintWindow.Color := clInfoBk;
Ahora desearemos mostrar la ventana de la pista cuando el ratón esté
sobre sobre los elementos de listbox que son más anchos que éste. Los
demás, los elementos más cortos, están bien como están. Nos encargaremos
de mostrar la ventana de la pista en el gestor del evento OnMouseMove()
del listbox, y abajo están los pasos básicos.
Primero necesitamos obtener el elemento que está debajo del cursor del
ratón, y las líneas siguientes logran eso:
ThePoint.x := X;
ThePoint.y := Y;
Index := ListBox.ItemAtPos(ThePoint, true);
Index nos devolverá el índice con base cero del elemento del listbox, o
–1 si no está sobre un elemento. Si estamos sobre un elemento más ancho
que el listbox, debemos definir las esquinas superior izquierda e
inferior derecha del rectángulo que será usado como las dimensiones de
la ventana de la pista.
if ListBox.Canvas.TextWidth(ListBox.Items[Index]) > ListBox.Width then
begin
ScreenPointUpperLeft.x := ListBox.ItemRect(Index).left - 1;
ScreenPointUpperLeft.y := ListBox.ItemRect(Index).top - 3;
ScreenPointLowerRight.x := ScreenPointUpperLeft.x +
ThisHintWindow.Canvas.TextWidth(ListBox.Items[Index]) + 7;
ScreenPointLowerRight.y := ScreenPointUpperLeft.y +
ThisHintWindow.Canvas.TextHeight(ListBox.Items[Index]) + 2;
ScreenRect.TopLeft := ListBox.ClientToScreen(ScreenPointUpperLeft);
ScreenRect.BottomRight :=
ListBox.ClientToScreen(ScreenPointLowerRight);
Una vez que tengamos las dimensiones del rectángulo definidas, podemos
finalmente mostrar la ventana de la pista:
ThisHintWindow.ActivateHint(ScreenRect, ListBox.Items[Index]);
end;
Mientras el cursor del ratón continúe moviéndose sobre el elemento, la
pista será mostrada. Si el cursor del ratón se mueve a otro elemento
"largo", la ventana todavía será mostrada, pero su contenido será
substituido por el texto del elemento bajo el cursor. Puedes preguntar:
"¿cómo y cuando hace la ventana de la pista desaparece?"
Hacer que la pista se vaya es la parte fácil. Hay dos condiciones en las
cuales quisiéramos que la ventana de la pista no fuera mostrada: cuando
movemos el cursor del ratón a un elemento que sea más corto que el ancho
del listbox, y también cuando movemos el cursor del ratón totalmente
fuera del listbox. Para hacer esto, sin embargo, necesitamos un cierto
código adicional que nos diga si el cursor del ratón está sobre un
componente específico en el formulario:
function TfrmMain.IsMouseOverControl(Control: TWinControl): Boolean;
var P: TPoint;
begin
// Obtener las coordenadas de la posición actual del ratón
GetCursorPos(P);
// El ratón está sobre el control si: (a) el control está definido Y
// creado, (b) es un control "ventana", y (c) el manejador (handle)
// del control es el mismo del control pasado como parámetro
Result := Assigned(Control) and IsWindow(Control.Handle) and
(WindowFromPoint(P) = Control.Handle);
end;
Podemos usar esta función para determinar si el cursor del ratón está
actualmente sobre el listbox o no. Si no estamos sobre el listbox,
queremos destruir la ventana de la pista. Hacemos esto llamando al
procedimiento ReleaseHandle() de la ventana de la pista:
if not IsMouseOverControl(lstProducts) and (ThisHintWindow<>nil) then
ThisHintWindow.ReleaseHandle;
Podemos hacer esto porque este procedimiento se utiliza específicamente
para las ventanas de la pista que se activan que llamando al procedi-
miento ActivateHint(), lo que hicimos arriba en el gestor de evento
OnMouseMove().
Cerrando...
Como puedes ver, mostrar una pista para cualquier elemento del listbox
que sea demasiado ancho es bastante trivial usando la técnica de arriba.
El tamaño predeterminado de un listbox cuando se suelta sobre un formu-
lario es bastante pequeño. Si tienes apremios de espacio, este método se
puede utilizar para evitar que la información en tus programas se pierda
(visualmente hablando).
________________________________________________________________________
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
======
El foro para programadores en Delphi de nivel intermedio continúa
creciendo y cerró el mes pasado con casi 32 mensajes diarios:
http://espanol.groups.yahoo.com/group/delphi-intermedio
Para suscribirte, también puedes hacerlo desde la web o por email:
http://espanol.groups.yahoo.com/group/delphi-intermedio/join
delphi-intermedio-subscribe@gruposyahoo.com
Puedes configurar tu suscripción a los foros 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).
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
________________________________________________________________________
4. NOTICIAS
Gacetilla: Terminus Network Manager
-----------------------------------
Por César Tapia
Hace un tiempo atrás se propuso en el foro delphi-intermedio desarrollar
un programa entre todos/as, para aprender y colaborar. Se hizo una
votación y salió elegido este proyecto:
http://terminus.sourceforge.net
Es un programa escrito por mí, pero que aún está en una fase alpha (como
se deduce viendo la página), por lo que hay mucho trabajo que hacer.
¿Qué es Terminus? Pues mi idea es que sea un gestor y administrador de
redes. Primeramente tendría la capacidad de autodetectar la configu-
ración de la red (qué ordenadores hay, qué sistemas operativos usan,
etc.).
También debería ser capaz de acceder a los servicios que ofrezca cada
máquina: Telnet, SSH, FTP... y conseguir información sobre ella: escaneo
de puertos...
Para más inri, debería ser multiplataforma, esto es, que sea compilable
en Delphi (de momento Delphi 5) y Kylix. Obviamente habrá que reescribir
completamente trozos de código (con {$ifdef linux}), pero me parece una
forma bonita de ver las diferencias entre sistemas operativos.
La licencia del programa es la GPL.
El desarrollo de este programa, se hará desde una lista propia. Puedes
suscribirte en esta dirección:
http://lists.sourceforge.net/lists/listinfo/terminus-desarrollo
Si no dispones de acceso HTTP, puedes suscribirte enviando un mensaje a
<terminus-desarrollo-request@lists.sourceforge.net> escribiendo en la
línea de asunto:
subscribe [contraseña] [digest/nodigest] [address=dir@email]
Por ejemplo, el asunto "subscribe topsecret" (sin las comillas) nos
suscribirá con la contraseña "topsecret" en modo "nodigest" (predeter-
minado) y usando la dirección de email que usemos como remitente. Por
más información, escribir "help" (sin las comillas) en la línea de
asunto.
El código del programa lo tienes aquí (135 Kb):
http://prdownloads.sourceforge.net/terminus/terminus-0.0.5.src.zip
Y el programa compilado (de momento sólo para Windows, 450 Kb):
http://prdownloads.sourceforge.net/terminus/terminus-0.0.5.zip
Te invito a que te suscribas y participes en el desarrollo del programa.
Un saludo, y muchas gracias.
Cesar Tapia
tapia@eitig.com
tapia@users.sourceforge.net
-------------------------------
http://www.eitig.com
http://terminus.sourceforge.net
Actualizaciones de FreeCLX disponibles para descarga
----------------------------------------------------
Mark Duncan, de I&D de Kylix, ha actualizado FreeCLX. Los usuarios de
Kylix 1 pueden obtener muchas de las correcciones de errores de CLX
incluidas con Kylix 2 en esta descarga beta pública.
http://community.borland.com/article/0,1410,28033,00.html
Nuevo: JfControls Grid
----------------------
JfActiveSoft ha lanzado JfControls Grid, agregando cuatro nuevos compo-
nentes (TJfDbGrid, TJfDbLookupComboBox, TJfGrid y TJfTree) a sus
conocida Librería JfControls. ADVERTENCIA: SI ERES IMPRESIONABLE POR
SKINS, COLORES, DEGRADADOS, IMAGENES Y FORMAS, NO SIGAS ESTE ENLACE:
http://www.jfactivesoft.com/spchargrid.htm ¡NO NOS HACEMOS RESPONSABLES
DE LAS CONSECUENCIAS!
Descarga del driver dbExpress de base de datos PostgreSQL para Kylix 2
----------------------------------------------------------------------
Como un incentivo para registrar el producto, los usuarios de Kylix 2
tendrán acceso a la descarga del driver dbExpress de base de datos
PostgreSQL/RedHat después de la registración.
http://community.borland.com/article/0,1410,28013,00.html
Help & Manual 3.01
------------------
Esta gran herramienta de autoría de documentación y ayuda ahora viene
con exportación nativa a PDF, salida HTML mejorada, editor de imágenes
integrado, docenas de nuevas característica y una interfaz de usuario
más amistosa. http://www.helpandmanual.com/hmtour.htm
PE Explorer 1.6 disponible
--------------------------
Heaventools Ltd. anuncia una nueva versión de su herramienta de solución
de problemas para ejecutables para Windows de 32 bits. PE Explorer viene
equipado con Visual Resource Editor, Quick Function Syntax Lookup,
Dependency Scanner, Section Editor y Disassembler.
http://www.heaventools.com
________________________________________________________________________
5. TRUCOS Y CONSEJOS
Usando translucencias en formularios con Delphi 5
=================================================
Por Frederico Pissarra
Hay nuevas propiedades en los formularios de Delphi 6 que permiten usar
opciones de translucencia (alphablending). ¿Cómo hacer esto en Delphi 5?
Para habilitar translucencia en los TForm de Delphi 5 , simplemente usa
las siguientes líneas:
unit Unit1;
interface
type
TForm1 = class(TForm)
... aquí van los miembros ...
public
constructor Create(AOwner : TComponent); override;
end;
implementation
{-------------------------------------------------------
ALPHA_VALUE determina el nivel de translucencia.
0 = transparencia total,
255 = opaco
--------------------------------------------------------}
const ALPHA_VALUE = 128;
{-------------------------------------------------------
Constantes y funciones Win32 faltantes
-------------------------------------------------------}
const WS_EX_LAYERED = $00080000;
const LWA_ALPHA = 2;
function SetLayeredWindowAttributes(Handle : HWND;
crKey : TColor;
bAlpha : Byte;
dwFlags : DWORD) : Boolean;
stdcall; external 'user32.dll';
constructor TForm1.Create(AOwner: TComponent);
var vi : _OSVERSIONINFO;
oldStyle : DWORD;
begin
inherited Create(AOwner);
GetVersionEx(vi);
if vi.dwMajorVersion >= 5 then { Win2000 o superior?! }
begin
oldStyle := GetWindowLong(Self.Handle, GWL_EXSTYLE);
SetWindowLong(Self.Handle, GWL_EXSTYLE, oldStyle or
WS_EX_LAYERED);
SetLayeredWindowAttributes(Self.Handle, clBlack, ALPHA_VALUE,
LWA_ALPHA);
RedrawWindow(Self.Handle, nil, 0,
RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN);
end;
end;
end.
Nota que esto sólo funcionará en Windows 2000 o XP.
------------------
Nota del Editor: Puedes encontrar un artículo relacionado en la MSDN
Library:
http://msdn.microsoft.com/library/en-us/dnwui/html/layerwin.asp
¿Cómo evitar adentrarse en los fuentes de la VCL al presionar F7?
=================================================================
Un pequeño truco: Cuando presionas F7 normalmente te adentras en el
código fuente de la VCL. Si deseas inhabilitar esta característica,
desmarca la casilla de verificación "Use Debug DCUs" en el grupo de
opciones de compilación en tus opciones de proyecto.
Calculando la diferencia en años entre dos fechas
=================================================
La manera más fácil de obtener la diferencia en años entre dos fechas es
restarlas para así obtener la diferencia en días, y después dividir el
resultado por 365,25 (aproximadamente el número promedio de días por
año), truncando el resultado final a un número entero:
function YearsDiff(StartDate: TDateTime; EndDate: TDateTime): word;
begin
Result := Trunc((EndDate - StartDate) / 365.25);
end;
Cuando no requieres precisión, esa función está muy bien, pero bajo
ciertas circunstancias fallará por un año en algunas fechas aniversario.
Por ejemplo, si StartDate es 15-JUL-2000 y EndDate es 15-JUL-2007, la
función devolvería 6 en vez de 7. La razón es que entre esas dos fechas
los años tienen ~365.143 días de promedio y esa pequeña diferencia hace
la diferencia en algunas fechas aniversario (pero por ejemplo funcionará
bien el 15-JUL-2008).
Si necesitas precisión, puedes utilizar la siguiente función:
function YearsDiff(StartDate: TDateTime; EndDate: TDateTime): word;
var
y1, m1, d1: word;
y0, m0, d0: word;
TempDate: TDateTime;
Inverse: boolean;
begin
Inverse := EndDate < StartDate;
if Inverse then begin
TempDate := StartDate;
StartDate := EndDate;
EndDate := TempDate;
end;
DecodeDate(StartDate, y0, m0, d0);
DecodeDate(EndDate, y1, m1, d1);
Result := y1 - y0;
if m0 > m1 then
Dec(Result)
else if m0 = m1 then
if d0 > d1 then
Dec(Result)
else if d0 = d1 then
if Frac(StartDate) > Frac(EndDate) then
Dec(Result);
if Inverse then
Result := -Result;
end;
Usando un formulario de login en nuestra aplicación
===================================================
Antes de cargar nuestro formulario principal deseemos mostrar un diálogo
de login, pero si creamos el formulario de login primero, será tomado
como nuestro formulario principal, y si luego lo cerramos o lo ocul-
tamos, nuestra aplicación terminará. El truco es crear el formulario de
login "manualmente" en nuestro archivo de programa para evitar que se
convierta en nuestro formulario principal:
program Project1;
uses
Forms, Controls,
Unit1 in 'Unit1.pas' {frmMain},
Unit2 in 'Unit2.pas' {frmLogin};
{$R *.RES}
begin
Application.Initialize;
// Creamos el formulario de login "manualmente" (sin usar
// CreateForm)
frmLogin := TfrmLogin.Create(nil);
// Mostramos el formulario para obtener la respuesta del usuario
if frmLogin.ShowModal <> mrOK then
frmLogin.Free; // Falló el login ==> Terminamos el programa
// El login resultó. Creamos el formulario principal
Application.CreateForm(TfrmMain, frmMain);
// Recién ahora podemos liberar el formulario de login
frmLogin.Free;
Application.Run;
end.
Nuestro formulario de login puede tener un par cuadros de texto (para el
nombre de usuario y la contraseña) y un par de botones (Aceptar y
Cancelar). El gestor del evento OnClick del botón Aceptar podría ser
como el siguiente:
procedure TfrmLogin.btnOKClick(Sender: TObject);
begin
// Validación muy simple por propósitos de ejemplo
if (edtUsername.Text = 'username') and
(edtPassword.Text = 'password') then begin
ModalResult := mrOk; // Valor a devolver por ShowModal
Hide; // No podemos usar Close pues terminaría nuestra aplicación
// Ocultar el formulario es suficiente para hacer que
// ShowModal regrese
end else begin
MessageDlg('Nombre de usuario o contraseña inválidos.', mtError,
[mbOk], 0);
edtUsername.SetFocus;
end;
end;
Tras haber comprobado que el nombre de usuario y la contraseña son
válidos, debemos establecer la propiedad ModalResult del formulario a
mrOK para indicar este hecho (será el valor devuelto por ShowModal) y
debemos ocultar el formulario (permitiendo que ShowModal regrese) en vez
de cerrarlo porque si liberásemos el único formulario que tenemos,
nuestra aplicación terminará (a propósito, esta es la razón por la que
liberamos el formulario login recién después de crear nuestro formulario
principal en el archivo de programa).
________________________________________________________________________
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
A new chapter has been added in the last two weeks:
Chapter 20 "From ADO Query to HTML" shows how to export your data to
HTML using Delphi and ADO. This is the first step in publishing your
database on the Internet - see how to create a static HTML page from
an ADO query.
http://delphi.about.com/library/weekly/aa112701a.htm
* Hungarian peanut butter - by Clay Shannon
Introduces and explains Hungarian notation, and proposes an Object
Pascal-specific variant thereof.
http://community.borland.com/article/0,1410,27983,00.html
* A passive debugging solution for CLX - by Chee Wee Chua
Debugging cross-platform applications is easy with this useful code.
http://community.borland.com/article/0,1410,27837,00.html
* Writing custom data to executable files - by Daniel Polistchuck
Think you can't tweak with your project after it's compiled? Check
out these useful techniques for adding custom data to your EXE in
Win32 and Linux.
http://community.borland.com/article/0,1410,27979,00.html
* Mining Delphi's demo programs - by Clay Shannon
Precious nuggets of elegant code are to be found in the free source
code on your Delphi CD.
http://community.borland.com/article/0,1410,27984,00.html
* Custom Component Editors - by Peter Morris
How to write property editors, from simple ones to an advanced editor
which include minimal use of the IFormDesigner interface.
http://delphi.about.com/library/bluc/text/uc092501a.htm
* Get File From the Net - by Zarko Gajic
Create a Delphi application that downloads files from the Internet.
If your program relies on Packages or DLLs then deploying new
versions of your libraries takes time & effort. The Internet provides
a fairly easy way to accomplish this task. Adding an auto-update
option to your apps could be the best way to keep them up to date.
http://delphi.about.com/library/weekly/aa013001a.htm
* Using the XML Features of SQL Server 2000: Part V - by Alex Fedorov
Completes the series by sharing several ways to insert, update, and
delete SQL data by using <sql> templates, updategrams or XML Bulkload
without relying on data-access components.
//www.delphimag.com/features/2001/12/di200112af_f/di200112af_f.asp
* Enable/Disable control & all owned controls - by Christian Cristofori
With these simple procedures you can enable and disable a control and
all controls owned or parented by it. (Make sure you read the notes!)
http://www.delphi3000.com/articles/article_2866.asp
* How to add an Icon to a Statusbar - by Colin Pringle
http://www.delphi3000.com/articles/article_2869.asp
* How to List Functions in a DLL - by Colin Pringle
http://www.delphi3000.com/articles/article_2873.asp
* How to extract icons from files using shell32.dll - by Colin Pringle
http://www.delphi3000.com/articles/article_2874.asp
* Printing a TStringGrid - by Bradley Baumann
A component that prints the selected lines of a TStringGrid.
http://www.delphi3000.com/articles/article_2878.asp
* Simplest way to download a file from the net - by Bradley Baumann
Seem not many people know about the great URLMon (included with
delphi)... The simplest way to download a file from the Internet.
http://www.delphi3000.com/articles/article_2879.asp
* Hiding the caption bar & keeping border style - by Alain Gosselin
This is a way to hide the caption bar of a form but keep the
border visible.
http://www.delphi3000.com/articles/article_2881.asp
* Interface It! - by Jimmy Tharpe
A quick guide to the ins and outs of interfaces in Delphi.
http://community.borland.com/article/0,1410,27825,00.html
* Delphi WebBroker apps and OmniHTTPd - by Dave Nottage
Describes fixes and issues associated with running WebBroker apps
with the OmniHTTPd Web server.
http://community.borland.com/article/0,1410,27752,00.html
* FreeCLX updates available for download - by John Kaster
Kylix 1 users can get many of the Kylix 2 CLX bug fixes in this
public beta download.
http://community.borland.com/article/0,1410,28033,00.html
* SOAP and DataSnap papers - by Bob Swart
Different ways for a SOAP server app to use a SOAP Data Module to
"export" datasets to a SOAP client using SoapConnection component.
http://community.borland.com/article/0,1410,27952,00.html
* Introducing the WebSnap Pack - by Jimmy Tharpe
A walk through of techniques used in the free WebSnap Pack, which
extends WebSnap by re-implementing some interfaces and takes
advantage of some presently un-documented features.
http://community.borland.com/article/0,1410,27905,00.html
* Using a Windows XP Manifest in Delphi - by Michael A. Allen
How to include an XP manifest in a Delphi project to allow your
application to use comctl32.dll version 6 and share the themed look
and feel of Windows XP.
http://delphi.about.com/library/bluc/text/uc111601a.htm
* How to write an Outlook AddIn? - by Andreas Rumsch
http://www.swissdelphicenter.ch/en/showcode.php?id=881
* How to execute actions when the program is Idle? - by Andreas Rumsch
http://www.swissdelphicenter.ch/en/showcode.php?id=887
* How to establish a connection to the internet? - by Andreas Rumsch
http://www.swissdelphicenter.ch/en/showcode.php?id=886
* How to publish to the web using Frontpage? - by Andreas Rumsch
http://www.swissdelphicenter.ch/en/showcode.php?id=888
* How to read a delimited textfile into a StringGrid? - by Loïs Bégué
http://www.swissdelphicenter.ch/en/showcode.php?id=873
* How to obtain list of charsets supported by a font? - Steve Schafer
http://www.swissdelphicenter.ch/en/showcode.php?id=892
* How to check and install MyODBC driver - by Jani Kleindienst
How can I check if MySQL ODBC driver is installed & how can I install
it from my Delphi application?
http://www.delphi3000.com/articles/article_2839.asp
* Simple guide to ADO - by Hans Pieters
A flexible and high performance connection to a range of databases.
http://www.delphi3000.com/articles/article_2845.asp
* Functions to work with icons - by Christian Cristofori
Functions to work with icons in DLL, EXE and ICO files.
http://www.delphi3000.com/articles/article_2853.asp
* Programming a Mail-Slot - by Christian Kuttler
How two applications can communicate using a Mailslot.
http://www.delphi3000.com/articles/article_2857.asp
* BDE Safe Configuration check - by Erwin Molendijk
Running the BDE in a safe mode (known config) requires some settings
in the BDE Administrator tool. This unit checks if the BDE has been
configured correctly (LocalShare=True, NetDir=\\..., etc). Also a
unique PrivDir will be created and cleaned up every time.
http://www.delphi3000.com/articles/article_2859.asp
* Using the Decision Cube without the BDE - by Mark Shapiro
The TDecisionCube component that ships with Delphi Client-Server or
Enterprise does not work well with non-BDE datasets. But we can
change that!
http://community.borland.com/article/0,1410,27848,00.html
* Using XMLMapper and XML Transforms with Kylix 2 Enterprise - by John
Kaster
This article describes the new Borland technology for transforming XML
documents into dataset representations for easy modification.
http://community.borland.com/article/0,1410,28010,00.html
* Flicker-Free Graphics in Delphi! - by Mattias Ekstrand
Using virtual screens to avoid flickering in graphics animations.
http://www.undu.com/Articles/011126a.html
Componentes, librerías y aplicaciones
=====================================
Freeware
--------
* ZLPortIO driver interface unit v.1.50 - by SpecoSoft.com
This library allows your application direct access to port I/O under
all versions of Windows. With it you can easily control any hardware
from your application. Source included, Delphi 3 - 6.
http://www.sourcecodeonline.com/details/zlportio_library.html
* TVideoCapture v.1.09 - by Egor Averchenkov
VideoCapture component to capture video and bitmaps.
Requires DirectShow, to capture single frames you need DirectX 8.
Source included, Delphi 5 only.
http://www.torry.net/vcl/mmedia/video/eavcap.zip
* JB Credit Card Validator - by JBDC Group
Credit card validation component, works with all major credit cards.
Source included, Delphi 5 and 6.
http://jbdc.far.ru
* TPJSysInfo Component and Routines v.1.1 - by Peter Johnson
A system information component and associated routines. Information
provided is: Computer info - user name and computer name, System
folders - windows, system and temp folder, OS info - name, platform,
service packs, version numbers etc. Source included, Delphi 3 and 4.
http://www.pjsoft.contactbox.co.uk/
* Innerfuse Pascal Script v.2.78 - by Carlo Kok
With Innerfuse Pascal Script you can make your applications scripting
enabled. It allows you to add your own functions to the script engine
so it can be used by the script code and you can call functions that
are declared inside the script from the outside. It has a library to
support DLLs directly or indirectly. It also supports procedural
variables and classes. Source included, Delphi 2 - 6.
http://carlo-kok.com
* GExperts
GExperts is a set of Open Source tools that increase the productivity
of Delphi and C++Builder programmers by adding features to the IDE.
Includes: Editor Experts that can find matching delimiters, insert
unit headers, etc,; IDE enhancements that add a Windows menu and show
some menu items hidden in D4 and D5; Palette enhancements that add
multi-line tabs or add tabs to the context menu; and much more.
http://www.gexperts.org
* Jedi Graphics
Freeware open source translations of DirectX header files, with
sample programs and links to other sites with DirectX info.
http://delphi-jedi.org/delphigraphics/jedi-index.htm
* Indy - Internet Direct
Freeware open source internet components, as used in Delphi 6.
http://www.indyproject.org/
Shareware/Comercial
-------------------
* Tips System version 2.04b
Let your application look more professional with the Tips System. It
can be used as ordinal tips or "message of the day" dialog but you can
also give your users power to add, remove, hide or edit tips with the
Tips Editor. Features include advanced graphics, multilanguage
support, event for each button and more. For D2-6, BCB1/3-5. Also OCX.
http://www.cooldev.com/cd_products.html#TipsSystem
Registration includes HtmlTools: http://www.cooldev.com/cd_products.html#HtmlTools
* Cool PSetting
Cool PSetting is the final word in application state management. MRU
lists, windows that "remember" their positions and sizes, and powerful
options and preferences dialogs. Supports saving application state
information in the Registry, in a file, in BLOB fields, or you can use
your own custom save and restore procedures. Data can be encrypted.
http://www.cooldev.com/cd_products.html#CoolPSetting
* AfalinaSoft XL Report 4.0
Template-based Excel reporting & data analyzing with 1 line of code:
Master-detail and multiple-sheet reports, Pivot tables, VBA macros.
TDataset ancestors + custom data. Native VCL code, IDE integration.
Delphi 4-6; Excel 97, 2K, XP. Very fast. Demo and docs. Source code.
http://www.afalinasoft.com/xl-report/index.htm
* GmPrintSuite v2.22 - by Murt Software. Shareware ($49)
GmPrintSuite is a custom report writing/print preview set of
components with full zooming, extensive printing functions, Thumbnail
functionality and much more! Check out the demo for several examples
of it's use.
http://www.murtsoft.com/download.htm
Tutoriales
==========
* Introducción a la OOP - por Pablo Castagnino
Una rápida intro al mundo de la programación orientada a objetos.
Trataremos temas como qué es un objeto, una clase, constructores y
destructores, herencia, visibilidad, polimorfismo, etc.
http://webs.sinectis.com.ar/alvadel/articulos/oop.htm
* Delphi 5 Quick Start - by Borland
http://www.borland.com/techpubs/delphi/delphi5/
* Teach Yourself Delphi 4 in 21 Days
http://www.cesis.lv/learn/delphi/
* Matlus - The Delphi Apostle
Tutorials about emerging technologies and how they relate to Delphi.
Technologies include: TCP/IP, ISAPI, HTTP, SOAP/XML/WebServices and
N-tier Applications and Thin Clients.
http://www.matlus.com
* Classic Delphi
Examples of how many useful functions can be programmed in Delphi.
Written for D5 but with full source can be easily modified for other
versions. Several examples are done as components and some include
owner-draw code. Useful for intermediate Delphi programmers as well
as beginners.
http://www.govst.edu/users/gsmpati/delphi
* How to re-compile DelphiX and UnDelphiX in Delphi 6
http://www.gamedev.net/community/forums/topic.asp?topic_id=84818
Otros enlaces
=============
* Delphiladero
Delphiladero es el lugar donde aprender Delphi será más fácil, el
lugar en donde Delphi habla nuestro idioma. No sólo eso, será también
el lugar en donde tus ideas tengan un espacio para que todos las
conozcan. Te invito a participar de este emprendimiento.
http://webs.sinectis.com.ar/alvadel/
* Jolt Awards
Software Development Magazine has just opened the nominations for the
12th Annual Jolt Software Excellence Awards. Have you used a software
technology or tool that you think other developers need to know
about? Is there a software-related book you simply couldn't put down?
Completing the nomination form takes about 3 mins.
http://www.joltawards.com/
* Delphi Gamer
This site lists games developed in Delphi and resources such as
DelphiX and Direct X tutorials to help you develop games.
http://www.delphigamer.com/
* Delphree Open Source Initiative
Delphree's goal is to encourage and provide support for Open Source
development. Delphree activities are primarily focused on Delphi,
but other Borland development platforms are supported as well.
http://delphree.clexpert.com/pages/lastchanges.htm
* Merlin's Delphi Forge
A huge Delphi FAQ.
http://www.delphifaq.net/
________________________________________________________________________
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=p29
________________________________________________________________________
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
________________________________________________________________________
|