Entrar
¿No tienes cuenta? Registrarse
boletin-pascal · Boletín Pascal (Delphi/Kylix)
? ¿Ya tienes membresía? Entra a Yahoo!

Consejos

¿Sabías que...
Decide qué mensajes pueden llegar al grupo. Simplemente, modifica las preferencias.

Mensajes

  Mensajes Ayuda
Avanzado
Boletín Pascal #42 - 18-ENE-2003   Lista de mensajes  
Responder | Reenviar Mensaje #9 de 20 |
Boletín Pascal #42 - 18-ENE-2003

Índice

1. Unas palabras del editor
2. TDataSet => Excel (No se requiere OLE ni EXCEL)
Clase TDataSetToExcel
3. Aplicaciones distribuidas, la forma fácil (I)
Como intercambiar datos entre procesos en aplicaciones distribuidas
4. Llamadas a Qt causan problemas de instalación para componentes en el
IDE BCB de Kylix
5. Inline Assembler en Delphi (VI) - Llamando procedimientos externos
6. Foros / listas de correo
7. Delphi en la Red
- Componentes, librerías y aplicaciones
. Shareware
. Freeware
- Artículos, trucos y consejos
- Tutoriales
- Otros enlaces

________________________________________________________________________

¿Necesitas alojamiento para tu sitio web? http://www.tecnosoftonline.com
________________________________________________________________________


¡Feliz Año Nuevo! Ha transcurrido un largo tiempo desde la última
edición. Lo siento por eso, pero con afán de compensar, al menos para
la primera parte del año habrá dos ediciones del boletín por mes.

Me enorgullece anunciar que el boletín ha alcanzado 7.500 suscriptores,
y quisiera agradecer a todos por haber hecho esto posible, en especial
a quienes recomiendan el boletín a sus colegas o lo votan en los
rankings. A propósito, espero que puedan seguir contribuyendo para que
alcancemos la meta de los 10.000 suscriptores para permitir que esta
publicación pueda continuar. Una forma simple es votando por el boletín
en este ranking:

http://www.sandbrooksoftware.com/cgi-bin/TopSite2/rankem.cgi?id=latium

Sólo hay que seguir el enlace y hacer clic en "here" ("aquí") donde
dice "Click here to vote!" ("¡Haga clic aquí para votar!"). Eso es todo;
luego aparecerá el ranking de los más votados. Son sólo unos segundos
que significan mucho para nosotros.

Quisiera agradecer a Mike Heydon, Eugene Mayevski y Richard Winston por
contribuir artículos para esta edición, y me complace entregarle a
Eugene Mayevski una licencia de llPDFLib:

* 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/

Para la próxima edición, tenemos disponibles los siguientes premios para
dos de los autores que colaboren artículos en inglés:

* 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

* 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.sedlan.com/dbgrid_footer.php

En las noticias, en el sitio web de Borland hay un parche oficial para
Delphi 6, y una actualización de Delphi for .NET preview (disponible
para descarga para los usuarios registrados de Delphi 7). Pueden
encontrar las descripciones y los enlaces correspondientes más abajo
en la sección Delphi en la Red (bajo el título "Otros enlaces").

Espero que disfruten esta edición.

Saludos,

Ernesto D'Spirito
boletin-pascal-owner@...

________________________________________________________________________

Object Inspector 1.2 (por Greatis Software) es un juego de componentes
que incluye un componente especial para acceder a las propiedades y
eventos de cualquier componente, un inspector común que se puede usar
para inspeccionar todo en su aplicación, y un inspector de componentes
listo para usar que imita al Inspector de Objetos del IDE. Admite la
configuración de fuentes y colores. http://www.greatis.com/objinsp.htm
________________________________________________________________________


2. TDataSet => Excel (No se requiere OLE ni EXCEL)
Clase TDataSetToExcel

Copyright (c) 2002 Mike Heydon


Esta clase producirá una hoja de cálculo de Excel desde un TDataSet. No
se requiere OLE o que el Excel esté instalado para crear el archivo. El
problema con Excel OLE es que tiende a ser algo lento. La clase usa
funciones estándar de E/S de Delphi y es considerablemente más rápida
que las llamadas OLE.

Ejemplo:

var
XL : TDataSetToExcel;
begin
XL := TDataSetToExcel.Create(MyQuery,'c:\temp\prueba.xls');
XL.WriteFile;
XL.Free;
end;

Se define el tamaño de las columnas correctamente. Los números son
formateados en "Courier" con formato "###.###.##0,00" para los flotantes
y "0" para los enteros. Las fechas se formatean como "dd-MMM-yyyy
hh:nn:ss". Las cabeceras de las columnas están en negrita y están
recuadradas y sombreadas.

__________________

NOTA DEL EDITOR: Esta clase se provee en la creencia que es de algún
modo útil para algunos propósitos, pero debe advertirse que es sólo una
clase básica y que necesita muchas mejoras. Por ejemplo, el formateado
de las celdas está incrustado en el código, así que la clase no soporta
configuraciones regionales. La clase necesitaría propiedades para varios
formatos de celdas, por ejemplo

property FormatText : string
property FormatInt : string
property FormatFloat : string
property FormatDateTime : string
property FormatDate : string
property FormatTime : string

o métodos de salto de página, propiedades para los colores de las
celdas... ¡la lista es interminable! Por favor no contacten al autor
requiriendo características. La clase se provee "COMO ESTÁ".

________________________________________________________________________

JfControls Lib. Multilenguaje. Multiapariencia. Skins. Privilegios. Más
de 40 componentes integrados y personalizables. Múltiples problemas de
programación resueltos. Administración centralizada de recursos. Para
Delphi 3-7 y C++ Builder 3-6. http://www.jfactivesoft.com/spindex.htm
________________________________________________________________________


3. Aplicaciones distribuidas, la forma fácil (I)
Como intercambiar datos entre procesos en aplicaciones distribuidas

Por Eugene Mayevski <Mayevski @ eldos.org>


Hay muchas formas de transferir datos de un proceso a otro.
Todos esos métodos tienen algunas ventajas, pero también
algunas desventajas. ¿Hay alguna forma de tener un sistema
flexible de intercambio de dato sin tener que ahondar en
los detalles técnicos?


Cuando una aplicación consiste de más de un proceso, uno se ve ante la
cuestión de optimizar las comunicaciones entre estos procesos. Estas
aplicaciones distribuidos incluyen rejillas computacionales, redes
peer-to-peer, aplicaciones cliente-servidor y aplicaciones de negocio
de 3 capas. Todas usan diferentes formas de enviar información a otros
procesos y de recibir respuestas.

Además, hay muchos tipos de aplicaciones comunes que se beneficiarían de
ser divididas en dos o más partes. Éstas son aplicaciones que realizan
tareas de fondo como monitorear sitios web, filtrar tráfico de Internet,
revisar archivos y correo en busca de virus, por citar algunas. Usual-
mente la lógica de negocio puede ser fácilmente separada de la interfaz
de usuario, y la interfaz de usuario puede ser cargada baja petición.

Todas estas aplicaciones tienen algo en común. Esto es la necesidad de
proveer alguna forma de intercambio de datos entre las diferentes partes
de la aplicación.

Hay muchas formas de intercambio de datos, que se usan en diferentes
situaciones. Las más frecuentemente usadas en el mundo de Windows son
(comenzando por la más simple):

1) Mensajes de Windows;
2) Mailslots de Windows;
3) Archivos mapeados en memoria (Memory-mapped files - MMF);
4) Sockets TCP o UDP;
5) COM/DCOM

Cada uno de estos métodos tiene sus propias ventajas. Los mensajes de
Windows son muy fáciles de usar y de trabajar con ellos. Los mailslots
son bastante como los mensajes de Windows pero funcionan en redes
locales. Los archivos mapeados en memoria son una forma rápida y
relativamente fácil de intercambiar datos cuando uno no puede trabajar
con manejadores (handles) de ventana (por ejemplo servicios y aplica-
ciones de consola). Los sockets son universales y multiplataforma.
COM/DCOM está orientado a objetos y es de bastante alto nivel.

Sin embargo, cada uno de esos métodos tiene sus propias desventajas.
COM, los mensajes de Windows y los archivos mapeados en memoria sólo son
utilizables dentro de la misma computadora (los archivos mapeados en
memoria se pueden abrir desde unidades de red, pero no se garantiza la
integridad y actualidad de los datos). Los mailslots y los sockets UDP
no son confiables (esto significa que cuando uno envía datos no puede
fácilmente preguntar si el receptor recibió los datos exitosamente).
Los sockets TCP se pueden usar en una amplia variedad de escenarios,
pero hay un problema: sólo trabajan con corrientes (streams), quedando
a cargo de nuestra aplicación dividir las corrientes de datos en bloques
de datos y procesar estos bloques. DCOM es una solución sofisticada que
es muchas veces difícil de instalar y mantener, y se transforma en una
pesadilla cuando comenzamos a tratar con la seguridad.

No hace decir que todos los métodos descritos, excepto los sockets (y
caras implementaciones DCOM de terceros creadas para sistemas basados
en Unix), son sólo para Windows. Si uno crea una aplicación que debería
trabajar no sólo en la plataforma Windows, quedaría limitado a los
sockets.

Los sockets son una solución poderosa al permitirnos controlar casi
todos los aspectos del envío de datos – como y cuando se envían los
datos, cuanto tiempo la aplicación espera una respuesta, y otras cosas.
Un aspecto negativo de esta flexibilidad es que uno DEBE controlar estos
aspectos (tal vez no todos, pero la mayoría de ellos).

Volvamos a los mensajes de Windows. Son realmente simples – una
estructura con varios campos que pueden ser llenados y enviados al
receptor con una llamada. Y cuando uno necesita pasar un bloque de
datos, puede usar el mensaje WM_COPYDATA. "Qué lindo sería si hubiera
métodos que usan la misma técnica tanto en la misma computadora como a
través de redes", Ud. puede pensar. Nosotros pensamos lo mismo. Desa-
fortunadamente, no es posible... Bueno, hasta ahora.

Ahora puede combinar la simplicidad del sistema de mensajes de Windows
con el poder y la flexibilidad de la comunicación por sockets o de los
archivos mapeados en memoria usando el armazón MsgConnect.

MsgConnect encapsula las operaciones de bajo nivel usadas para esta-
blecer comunicación e intercambiar información, y provee una API simple
API que se parece mucho al sistema de mensajes de Windows. La secuencia
de acciones necesarias para agregar comunicaciones multiplataforma a su
aplicación puede caber en 20 líneas de código:

1) crear una instancia del objeto Messenger (usado para enviar un
mensaje);
2) crear una instancia del objeto Transport (usado para enviar mensajes
a los receptores. Necesitará una instancia de Transport por cada
transporte que use, ya sea sockets o MMF);
3) crear una instancia del objeto Queue (usado para recibir mensajes);
4) vincular estos objetos con un par de llamadas a métodos;
5) definir un manejador para el evento que se dispara cuando se recibe
un mensaje.

Eso es todo. Ya puede comenzar a enviar y recibir mensajes.

¿Por qué usar MsgConnect es más fácil que usar formas convencionales de
comunicación?

Antes que nada, MsgConnect oculta los detalles, pero los mantiene
disponibles para usar. El armazón le permite ajustar los objetos de
transporte para alcanzar el máximo rendimiento para cualquier tipo de
aplicación, desde mensajería convencional hasta pesado intercambio de
datos. Si no quiere ahondar en los detalles, MsgConnect funcionará
perfectamente con la configuración predeterminada.

Por supuesto, necesitará diseñar el protocolo, es decir, definir que
mensajes se usan para diferentes propósitos en su aplicación, y esto
será una parte de la lógica de negocios de su aplicación. No necesita
excavar en los detalles de la implementación del protocolo TCP o
administrar la seguridad para los MMF.

La segunda cosa es que que el intercambio de mensajes es universal. Con
MsgConnect el mensaje puede contener cualquier dato binario y el
receptor puede cambiar este bloque de datos y devolverlo con el mismo
mensaje. En otras palabras, los lados del intercambio de datos pueden
hacer transferencia de datos ida y vuelta con apenas un mensaje. El
resultado es que MsgConnect se puede utilizar tanto en comunicaciones
unidireccionales como bidireccionales sin limitaciones.

La tercera ventaja es que para cambiar la comunicación de computadora
local a remota sólo necesita agregar otro objeto Transport y cambiar la
dirección a la que serán enviados los mensajes. No necesita implementar
otro algoritmo o manejar otro algoritmo de bajo nivel.

Cuarto, su aplicación puede intercambiar información con aplicaciones
que funcionen en diferentes plataformas. MsgConnect soporta un amplio
rango de plataformas (actualmente Windows, Windows CE, Linux, Unix,
Java, .NET y más por venir en el futuro cercano).

Y último pero no menos importante, si usted desarrolla un proyecto de
código abierto o un gran sistema propietario, MsgConnect tiene una
licencia conveniente para usted. Está disponible como código abierto y
provee servicios adicionales para los usuarios que obtengan la
licencia comercial.

__________________


MsgConnect es un proyecto conjunto de EldoS Group (http://www.eldos.org)
(http://www.eldos.org) y TamoSoft (http://www.tamos.com), y se puede
obtener gratis con código fuente completo en http://www.msgconnect.com
(ya sea bajo la licencia GPL o una licencia de Evaluación, actualizable
a una licencia Comercial).

________________________________________________________________________

Greatis Runtime Fusion incluye Form Designer Pro ($ 49.95) y Object
Inspector Pro ($ 49.95), y cuesta sólo $89.90 - Ahórrese $10 y obtenga
demos adicionales. Permita que el usuario diseñe formularios en tiempo
de ejecución con Runtime Fusion. >>>> http://www.greatis.com/runtime.htm
________________________________________________________________________


4. Llamadas a Qt causan problemas de instalación para componentes en el
IDE BCB de Kylix

Por Richard Winston


Resumen: Si un componente escrito en Delphi realiza una
llamada a Qt, instalar el componente en el IDE de Kylix
BCB puede ser difícil. Este artículo describe como superar
este problema.


Tuve problemas con un componente que escribí que usaba llamadas a Qt.

El procedimiento que causaba los problemas escribía Texto en la
ubicación (X,Y) con el ángulo especificado en Angulo usando el siguiente
código:

Uses Qt, QGraphics;

procedure TRbwRegla.PintarRotado(const X, Y, Angulo: double;
const Texto: string);
begin
Canvas.Start;
QPainter_translate(QPainterH(Canvas.Handle),X,Y);
try
QPainter_rotate(QPainterH(Canvas.Handle),Angulo);
try
Canvas.TextOut(0,0,Texto);
finally
QPainter_rotate(QPainterH(Canvas.Handle),-Angulo);
end;
finally
QPainter_translate(QPainterH(Canvas.Handle),-X,-Y);
Canvas.Stop;
end;
end;

Esto funcionaba bien en el IDE de Kylix Delphi, pero no compiló en el
IDE de Kylix C++. Los mensajes de error fueron:

[Linker Error] Unresolved external 'Qt::QPainter_translate(
QT::QPainter *, double, double)' referenced from QrbwRuler.o

y

[Linker Error] Unresolved external 'Qt::QPainter_rotate(
QT::QPainter *, double, double)' referenced from QrbwRuler.o

Pude escribir un componente similar en el IDE de Kylix C++ usando código
como este:

void __fastcall TRbwRegla::PintarRotado(const double X, const double
Y, const double Angulo, const AnsiString Texto)
{
Canvas->Start();
Qt.QPainter_translate((QPainter__*)Canvas->Handle,X,Y);
__try
{
Qt.QPainter_rotate((QPainter__*)Canvas->Handle,Angulo);
__try
{
Canvas->TextOut(0,0,Texto);
}
__finally
{
Qt.QPainter_rotate((QPainter__*)Canvas->Handle,-Angulo);
};
}
__finally
{
Qt.QPainter_translate((QPainter__*)Canvas->Handle,-X,-Y);
Canvas->Stop();
};
}

Logré obtener componentes que trabajaran en ambos IDE declarando un
procedimiento virtual abstracto y luego declarando dos nuevos
componentes - uno para cada IDE - y sobreescribiendo (overriding) ese
procedimiento abstracto con el código que funcione en ese IDE.

Sin embargo, si se desea usar herencia de formularios visual en el IDE
de C++ para heredar de formularios creados en el IDE de Delphi, esto no
funciona. Podía ver estos formularios en el IDE, pero cuando trataba de
compilar el proyecto, reportaba errores del enlazador. Esto parecía
deberse a que las versiones Delphi y C++ del componente en realidad no
fueran la misma cosa, aún si tenían idénticos nombres y funcionalidad.

Esta es realmente la misma clase de problema que estaba intentando
evitar al crear los dos componentes en primer lugar. El IDE de C++ y el
de Delphi parecen necesitar diferentes versiones de QPainter_translate y
QPainter_rotate. El IDE de Delphi parece querer las que están declaradas
en Qt.pas mientras que el IDE de C++ parece querer las que están
declaradas en qpainter.hb.

Mi solución final fue instalar el componente en el IDE C++ como un
paquete.

Seleccionar Component|Install Packages...
Hacer clic en el botón Add...
Seleccionar un archivo *.so generado por el IDE de Delphi.
Hacer clic en el botón Open.
Hacer clic en el botón OK.

Por cada paquete, necesitamos generar un archivo *.a:

File|CloseAll
File|New|Other|Library
File|Save Project As... y guardar con mismo nombre raíz que al archivo
paquete para el IDE de Delphi
Project|Add to Project
Seleccionar el archivo *.so
File | Save All
Ahora estamos listos para realmente construir la librería:
Project | Build
Click the OK button.

__________________

Richard Winston desarrolla interfaces gráficas para programas de
modelado de aguas subterráneas para el U.S. Geological Survey.

________________________________________________________________________

¿Cuándo fue la última vez que votó por el Boletín Pascal? Por favor
apoye esta iniciativa votándonos en "The Programming Top 100!"
http://www.sandbrooksoftware.com/cgi-bin/TopSite2/rankem.cgi?id=latium
Sólo hay que seguir el enlace y hacer clic en "here" ("aquí") donde dice
"Click here to vote!" ("¡Haga clic aquí para votar!"). Luego aparecerá
el ranking de los más votados. Su voto significa mucho para nosotros.
________________________________________________________________________


5. Inline Assembler en Delphi (VI) - Llamando procedimientos externos


Funciones API y la convención de llamadas Stdcall
=================================================

Las funciones API se llaman transparentemente desde inline assembler con
la sentencia CALL. Sin embargo debemos tener en cuenta que el paso de
parámetros a las funciones API es diferente puesto que normalmente usan
la convención de llamadas Stdcall, en vez de la convención de llamadas
Register, que es la que hemos visto hasta ahora por ser la convención
predeterminada.

En la convención de llamadas Stdcall, todos los parámetros se pasan en
la pila, de derecha a izquierda, es decir, el último parámetro (el de la
derecha) se empuja primero, y el primer parámetro (el de la izquierda)
se empuja último, de modo que será el que quede arriba de la pila. He
aquí un ejemplo de un procedimiento que llama a una función API:

procedure OcultarFormulario(Handle: THandle);
// Windows.ShowWindow(Handle, SW_HIDE);
asm
push SW_HIDE // push 0 // Pasa el 2do parámetro
push Handle // push eax // Pasa el 1er parámetro
call Windows.ShowWindow // Llama a la API ShowWindow
end;

Si tenemos que llamar a un método que use la convención stdcall,
recordemos que el puntero Self es un primer parámetro invisible, así que
sería empujado al último en la pila.

Si tenemos que escribir funciones que usen la convención stdcall, no hay
nada especial de lo que debamos preocuparnos. El compilador siempre crea
un marco de pila (stack frame) y las referencias a nombres de parámetros
se convierten en direcciones relativas al puntero base (EBP):

function SumarYMultiplicar(i1, i2, i3: integer): integer; stdcall;
asm // ==> push ebp; mov ebp, esp
// Result := (i1 + i2) * i3;
mov eax, i1 // mov eax, [ebp+8]
add eax, i2 // add eax, [ebp+12]
imul i3 // imul [ebp+16]
end; // ==> pop ebp; ret 12

Esta es una llamada de ejemplo a la función:

asm
// a := SumarYMultiplicar(1, 2, 3); // el resultado debería ser 9
push 3 // primero se empuja el último parámetro
push 2
push 1
call SumarYMultiplicar
mov a, eax
end;

Tras entrar a la función, la pila se vería así:

| |
+----------------+
| Viejo EBP | [EBP], [ESP]
+----------------+
| Dir.de Retorno | [EBP+4]
+----------------+
| i1 = 1 | [EBP+8]
+----------------+
| i2 = 2 | [EBP+12]
+----------------+
| i3 = 3 | [EBP+16]
+----------------+
| |


Librerías C/C++ y la convención Cdecl
=====================================

A veces necesitamos acceder a funciones en archivos objeto (.OBJ),
librerías estáticas (.LIB) o librerías dinámicas (.DLL) escritas en C o
C++, y bastante frecuentemente estas funciones usan la convención de
llamadas Cdecl. Es muy parecida a la convención Stdcall, pero la pila
debe ser limpiada por el llamador, es decir, el llamador debe hacer
"pop" a los parámetros que empujó en la pila, o -mejor aún- incrementar
el puntero de pila.

function SumarYMultiplicar(i1, i2, i3: integer): integer; cdecl;
asm // ==> push ebp; mov ebp, esp
// Result := (i1 + i2) * i3;
mov eax, i1 // mov eax, [ebp+8]
add eax, i2 // add eax, [ebp+12]
imul i3 // imul [ebp+16]
end; // ==> pop ebp; ret

Nótese en el comentario de la última línea que la función no mueve el
puntero de pila como lo hizo en el ejemplo anterior que usaba la
convención Stdcall, de modo que el llamador es quien es responsable de
ello. Esta es una llamada de ejemplo para la función:

asm
// a := SumarYMultiplicar(1, 2, 3); // el resultado debería ser 9
push 3 // primero se empuja el último parámetro
push 2
push 1
call SumarYMultiplicar
add esp, 12 // limpiar la pila
mov a, eax
end;

Obsérvese que si los parámetros fueran de tipo Byte en vez de Integer,
aún así deberíamos mover el puntero de pila en 12 bytes pues cada uno de
los tres parámetros igual tomaría 32 bits (4 bytes).


La convención de llamadas Pascal
================================

Muchos programadores en C/C++ prefieren la convención de llamadas Pascal
por sobre la convención de llamadas Cdecl porque es más compacta y
también rápida puesto que la función llamada limpia la pila en la
sentencia RET, tal como también sucede en la convención Stdcall. La
convención Pascal es como la convención Stdcall, pero los parámetros se
pasan de izquierda a derecha en vez de derecha a izquierda, es decir,
el primer parámetro (el de la izquierda) se empuja primero, y el último
parámetro (el de la derecha) se empuja último:

function SumarYMultiplicar(i1, i2, i3: integer): integer; pascal;
asm // ==> push ebp; mov ebp, esp
// Result := (i1 + i2) * i3;
mov eax, i1 // mov eax, [ebp+16]
add eax, i2 // add eax, [ebp+12]
imul i3 // imul [ebp+8]
end; // ==> pop ebp; ret 12

Nótese que las direcciones de los parámetros se traducen de manera
diferente que en los ejemplos anteriores.

Este es un ejemplo de llamada a la función:

asm
// a := SumarYMultiplicar(1, 2, 3); // el resultado debería ser 9
push 1 // primero se empuja el primer parámetro
push 2
push 3
call SumarYMultiplicar
mov a, eax
end;

Tras entrar a la función, la pila se vería así:

| |
+----------------+
| Viejo EBP | [EBP], [ESP]
+----------------+
| Dir.de Retorno | [EBP+4]
+----------------+
| i3 = 3 | [EBP+8]
+----------------+
| i2 = 2 | [EBP+12]
+----------------+
| i1 = 1 | [EBP+16]
+----------------+
| |

________________________________________________________________________


6. Foros / listas de correo


Recordamos a los suscriptores las direcciones de nuestros foros. Para
unirse a algún foro, lo más recomendable es hacerlo desde la web para
así tener acceso a todas las áreas del foro y la configuración de las
opciones de suscripción, pero también es posible suscribirse por email.
Para suscribirse desde la web es necesario poseer un ID de Yahoo! (si
no tienes el tuyo, puedes conseguirlo gratis registrándote como usuario
de Yahoo!).

* Delphi-abierto. Programación en Delphi (todos los niveles).
http://espanol.groups.yahoo.com/group/delphi-abierto
Suscripción:
http://espanol.groups.yahoo.com/group/delphi-abierto/join
delphi-abierto-subscribe@...

* 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@...

* 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

________________________________________________________________________


7. Delphi en la Red

Por Dave Murray <irongut@...>


Componentes, librerías y aplicaciones
=====================================


Shareware/Commercial
--------------------

* Greatis Form Designer v3.4 - por Greatis Software, Shareware ($49.95)
Es un diseñador de formularios en tiempo de ejecución que le permite
mover y cambiar el tamaño de cualquier control de su formulario. No
necesita preparar su formulario para usar Form Designer. Simplemente
suelte el componente TFormDesigner en cualquier formulario, establezca
la propiedad Active en True y ¡disfrute! Para Delphi 4-7 y BCB 3-6.
http://www.greatis.com/formdes.htm


Freeware
--------

* ConvertFiles - por Dennys dos Santos Sobrinho
Asistente para migrar aplicaciones VCL de Delphi a CLX de Kylix.
http://www.delphibr.com.br/artigos/ConvertFiles.php

* HalZip - por Alirio A. Gavidia B. <alirio@...>
Clon de WinZip en español, con búsqueda, "shceduler" (programador de
tareas) que permite realizar respaldos automáticos, "drag & drop"
(arrastrar y soltar) desde el Explorador de Windows, asociaciones de
archivo, y capacidad de partir un archivo en múltiples archivos y de
unirlos nuevamente.
http://www.gavidia.org/halzip/

* ImageFileLib v1.00 - by Michael Vinther (with source)
With this library, Delphi programs can read and write JPEG 2000, PNG,
ICO, CUR and PCX images. RAS, PNM, PGM, PPM, HIPS images can be loaded
but not created. Both lossy and lossless coding of JPEG 2000 images
are supported. In this library also provides support for 24 bit and
256 color palette icons and cursors.
http://www.logicnet.dk/lib/

* TBalloonControl v1.0 - by JWB Software (with source)
The TBalloon component provides an easy interface to balloon-shaped
tooltips which appear more and more in modern software. You can
choose to attach a balloon-window to a control, but you can also place
it anywhere on your desktop, just define the coordinates of the point.
http://people.zeelandnet.nl/famboek/delphi/balloon.html

* TMSNPopUp v5.0 - by JWB Software (with source)
The TMsnPopUp component is created to mimic the behavior of the popup
windows that can be seen in MSN/Windows Messenger from Microsoft. But
it even gets better, because TMsnPopup is fully customizable, so you
can give it your own look and feel.
http://people.zeelandnet.nl/famboek/delphi/msnpopup.html

* TXMLSerializer v2.0 - by JWB Software (with source)
The TXMLSerializer component can save Delphi objects and components to
disk in XML-format. Being an open format, XML has many advantages, it
is a good way to save information in a readable form. You can even
save complete forms as XML-files.
http://people.zeelandnet.nl/famboek/delphi/xmlserializer.html

* Delphi SmartCard Component v0.91 - by N Hüttisch (with source)
Access any SmartCardReader which has drivers for the Microsoft
SmartCard API (PC/SC) from Delphi. Easy-to-use routines to find the
reader, to get informed if a card is inserted/removed and to send and
receive data to / from the reader.
http://www.nobbi.com/download.htm#delphi

* WinTab Interface + Sample Component v1.0 - by Qr Li (with source)
Delphi API translation for WinTab, the standard pointing device
interface to support tablets.
http://www.torry.net/vcl/system/otherhardware/wintab32.zip

* WallSwap v1.1 - by Conspiracy Software (Delphi source on request)
WallSwap, the automatic wallpaper changer for Windows. Give WallSwap a
list of files or point it at an entire directory of pictures and it
will automatically cycle your Windows desktop background through them.
Features include: Support for bmp, gif, jpeg and PNG images; Center,
Stretch or Tile your wallpaper; Use HTML web pages as your wallpaper;
Change wallpaper every time or once daily; Compatible with Active
Desktop. TopQualityFreeware.com Rating 5/5!
http://www.winsite.com/bin/Info?6500000036556

* ClassExplorer Pro - by toolsfactory (with source)
ClassExplorer Pro dramatically simplifies the development process by
adding perfectly integrated code navigation, code creation and code
documentation capabilities to your Delphi development environment.
http://www.toolsfactory.com/download.shtml

* deBold v2.2 - by Droopy Eyes Software (with source)
These components make development with Bold for Delphi simpler. Bold
is the MDA (Model Driven Architecture) product which was recently
acquired by Borland and included with some versions of Delphi 7. These
components are based on this framework and help the developer to
perform automatic object validation, etc.
http://www.droopyeyes.com/default.asp?mode=ShowProduct&ID=12

* DIB Controls v1.16 - by Droopy Eyes Software (with source)
DIB Controls are a set of native Delphi VCL components based around a
very fast DIB drawing engine (Device Independant Bitmap). The drawing
engine utilises inline assembly language for optimum speed. This speed
allows these features: Real-time zooming; Real-time rotation; Real-
time alpha masking; 3 x 3 matrix filter (blur, sharpen, emboss, etc).
http://www.droopyeyes.com/default.asp?mode=ShowProduct&ID=3

* FastStrings v2.6 - Droopy Eyes Software (with source) (DELPHI/KYLIX)
A set of string routines for manipulating large strings at high speed.
Includes Boyer-Moore searching algorithm, backwards string searching
and a very high-speed alternative for StringReplace.
http://www.droopyeyes.com/default.asp?mode=ShowProduct&ID=4

* Inno Setup v3.0.6 - by JR Software (with source)
A free installer for Windows programs that rivals and surpasses many
commercial installers in feature set and stability. Features include:
Support for all 32-bit Windows versions; Creation of a single EXE or
disk spanning; Standard wizard interface, including Win2k/XP style;
Customizable setup types; Complete uninstall capabilities; Zip / bzip2
compression; Creation of shortcuts, registry and .INI entries; Silent
install and uninstall.
http://www.jrsoftware.org/isinfo.php

* SQLyog v2.51 - by webyog
SQLyog is an easy to use, compact and fast graphical tool to manage
your MySQL database anywhere in the world. SQLyog was developed keep
in mind the necessities of all who use MySQL as their preferred RDBMS.
Whether you enjoy the control of handwritten SQL or prefer to work in
a visual environment, SQLyog makes it easy for you get started and
provides you with tools to enhance your MySQL experience.
http://www.webyog.com/sqlyog/


Artículos, trucos y consejos
============================

* Overview of the VCL for .NET - by J Kaster, E Churchill and D Thorpe
This article provides an overview of the architecture, design, and
intent of the VCL for .NET included with the Delphi for .NET preview.
http://community.borland.com/article/0,1410,29460,00.html

* Building + Running Delphi for .NET projects using DLite - by M. Binder
The Delphi for .NET preview included with Delphi 7 gives us a peek at
the .NET world from the Delphi point of view. This article shows how
to use DLite to help you build and run your Delphi for .NET projects.
http://community.borland.com/article/0,1410,29077,00.html

* How To Use Scanlines - by Leonel Togniolli
This article shows a fast way to manipulate bitmaps without using the
canvas : the scanlines.
http://community.borland.com/article/0,1410,29173,00.html

* Using Web Services with the Delphi for .NET preview command-line
compiler - by Bob Swart
This article shows how you can use existing Web Services with the
preview command-line compiler Delphi for .NET.
http://community.borland.com/article/0,1410,29486,00.html

* Get TreeView Node By Text - by Zarko Gajic
How to locate (search and select) a TreeView node given by node text.
http://delphi.about.com/library/weekly/aa010703a.htm

* Dephi components to access MySQL - by Zarko Gajic
Overview of VCL components allowing you to access a MySQL database from
Delphi using standard data controls without using BDE/ADO/ODBC. Plus a
few MYSQL related tools.
http://delphi.about.com/cs/toppicks/tp/aatpmysql.htm

* Exchanging Data over the Network - by Zarko Gajic
Examine two Delphi components: TServerSocket and TClientSocket both
designed to let you read and write information over TCP/IP - thus
enabling you to write network-aware applications.
http://delphi.about.com/library/weekly/aa112602a.htm

* Conspiracy Theory: .NET IS Borland's
Is it possible that the whole .NET framework is Borland's idea?
http://delphi.about.com/library/weekly/aa112902a.htm

* How to encode / decode Base64 string?
http://www.swissdelphicenter.ch/en/showcode.php?id=1524

* How to get the Internet Explorer typed urls?
http://www.swissdelphicenter.ch/en/showcode.php?id=1521

* How to use URL highlighting in TRichEdit?
http://www.swissdelphicenter.ch/en/showcode.php?id=1505

* How to show the select directory dialog and specify initial directory?
http://www.swissdelphicenter.ch/en/showcode.php?id=1509

* How to make a flickerless animation using CopyRect?
http://www.swissdelphicenter.ch/en/showcode.php?id=1536

* How to zoom the view of a TWebBrowser?
http://www.swissdelphicenter.ch/en/showcode.php?id=1537

* How to follow the mouse in TMemo to set the cursor position?
http://www.swissdelphicenter.ch/en/showcode.php?id=1538

* How to show a indeterminate ProgressBar in Win XP with PBS_MARQUEE?
http://www.swissdelphicenter.ch/en/showcode.php?id=1541

* How to install Kylix when error -10 popups up - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=206

* How to register Kylix - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=207

* How to get an screen shot of a control - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=208

* How to move components at runtime - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=209

* How to use function overloading - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=210

* How to enter a NULL value - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=211

* How to copy your own application - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=212

* How to change the database name - by m3Rlin
www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=213

* Save a webpage with images - by Ken Wilcox
Ever wanted to duplicate the functionality of your browser and save a
web page with images to disk? This example that does just that and you
can pass in a progress bar to show the status of the operation.
http://www.delphi3000.com/articles/article_3464.asp

* MS Exchange API via Collaboration Data Objects - by Mike Heydon
This is a vast subject that is beyond the scope of this article to
fully detail here. This library provides the basic building blocks for
someone who wants to develop using CDO.
http://www.delphi3000.com/articles/article_3467.asp

* How to Build Aggregate/Composite Components in Delphi - by Mark Miller
http://www.delphi3000.com/articles/article_3468.asp

* Handling Winsock errors - by Herbert Poltnik
http://www.delphi3000.com/articles/article_3469.asp

* Getting a Mac Address - The JEDI way - by Michael Brooks
How to get the Mac Address for the local Windows PC (and possibly
other computers on the LAN) without writing/translating a lot of code
or relying completely on NetBios support.
http://www.delphi3000.com/articles/article_3470.asp

* Add Link to MsgBox (Updated) - by Fu-Hun-Ru Kaje-Ja
http://www.delphi3000.com/articles/article_3473.asp

* Building Real-Life Web Services - by Marc Hoffmann
How to build a 'real-world' Web-Service with mixed method calls,
data-aware connections, user-authorisation and session support.
http://www.delphi3000.com/articles/article_3474.asp

* TDataSet => Excel (No OLE or EXCEL required) - by Mike Heydon
This class will produce an Excel Spreadsheet from a TDataSet. No OLE
or Excel Installation is needed to create the file. The problem with
Excel OLE is that it tends to be rather Sloooow. This class uses
standard Delphi I/O functions and is considerably faster than the OLE.
http://www.delphi3000.com/articles/article_3475.asp

* Bmp into StatusBar - by Rodrigo Poli
http://www.delphi3000.com/articles/article_3476.asp

* Introductory Principles of Indexed Searching - by Jim McKeeth
Describe the principles of an Indexed search engine (like google). How
this works when a lot of text information is compressed into an index
- so that a search can be done within a very short time.
http://www.delphi3000.com/articles/article_3479.asp

* WebSnap II: Interacting with the User - by Eber Irigoyen
This article shows one way to allow the user to enter some data and
use that to query your database.
http://www.delphi3000.com/articles/article_3481.asp

* Distributed applications, the easy way (I) - by Eugene Mayevski
There are many ways of transferring data from one process to another.
All those methods have some advantages, but also some drawbacks...
http://www.delphi3000.com/articles/article_3489.asp

* GetDocumentation for Type Library - by Nik Ozniev
How get the Help String for a Type Library.
http://www.delphi3000.com/articles/article_3490.asp

* Calls to Qt cause installation problems for components in
Kylix BCB IDE - by Richard Winston
If a component written in Delphi makes a call to Qt, installing it in
the Kylix BCB IDE can be difficult. This article describes how to
overcome this problem.
http://www.delphi3000.com/articles/article_3491.asp

* Getting an exe File Type - by Lutfi Baran
http://www.delphi3000.com/articles/article_3496.asp

* Call a Procedure in an MDI Child - by Moof Foof
How do I call a procedure or function in an MDI child when Delphi
keeps telling me that TForm is not compatible with my TChildForm?
http://www.delphi3000.com/articles/article_3498.asp

* Build a Table Tree from Records to Objects - by Max Kleiner
How to show a database self join in a TreeView.
http://www.delphi3000.com/articles/article_3499.asp

* How to Prevent an Application Being Closed by User - Manfred Suesens
http://www.delphi3000.com/articles/article_3501.asp

* Balloon Tooltips - by Calin Marinescu
http://www.delphi3000.com/articles/article_3504.asp


Tutoriales
==========

* Under Construction: Delphi, dbExpress And MySQL - by Bob Swart
The BDE has had its day but some of the alternatives seem very costly
(SQL Server at £1,612 for a 10-client standard version?). So this
article looks at MySQL to see how easy it is to use with Delphi. Oh,
and it's either free or cheap, depending on the licence you choose!
http://www.thedelphimagazine.com/Samples/1540/1540.htm

* DotNet Buzz Words Explained - by Alain "Lino" Tadros
This article will explain the different buzz words in the DotNet world
like CTS, CLS, VES, Managed Code, Managed Data, Unmanaged Code,
Assemblies, Metadata, Manifest, Strong Names, etc....
http://community.borland.com/article/0,1410,29344,00.html

* Write your own Reflector - by Alain "Lino" Tadros
Want to write your own "ILDASM" or ".NET Reflector"? Start here by
seeing how easy it is to get RTTI from .NET Assemblies.
http://community.borland.com/article/0,1410,29423,00.html

* Cloning ClientDatSet Cursors - by Cary Jensen
When you clone a ClientDataSet cursor you create an additional pointer
to a shared memory store and also an independent view of the data.
This article shows you how to use this important capability.
http://community.borland.com/article/0,1410,29416,00.html

* Object Destructors and Finalizers in .NET Using C# and Delphi for .NET
- by Brian Long
This in-depth article looks at the role and usage of destructors (or
equivalent) in the managed world of .NET. It examines in detail the
areas of garbage collection, finalizers, the dispose pattern and
language specifics, using both C# and Delphi for .NET.
http://community.borland.com/article/0,1410,29365,00.html

* Memory: from VCL via VCL for .NET to .NET - by Bob Swart
How to migrate a VCL application (the game of Memory) to VCL for .NET
and finally to WinForms on .NET, all using the Delphi for .NET Preview
command-line compiler.
http://community.borland.com/article/0,1410,29320,00.html

* Hanging by a WebSnap Thread - by Nick Hodges
Covers the basics of webmodule threading in both WebSnap and WebBroker
as well as some strategies for dealing with the traps it can create.
http://community.borland.com/article/0,1410,29300,00.html

* Cleaning Your Delphi Code Errors - by Zarko Gajic
A Beginner's Guide to Delphi Programming: Chapter 9. A discussion on
Delphi design, run and compile time errors and how to prevent them.
Also, take a look at some solutions to most common logic errors.
http://delphi.about.com/library/weekly/aa121002a.htm

* Send Binary Data in XML - by Brian Schaffner
XML is generally thought of as a method for describing data using
text. For example, elements are given text names, and element contents
are usually text-based. There are times, however, when you'll want to
put data other than text into your XML documents.
http://builder.com.com/article.jhtml?id=u00220021127sch01.htm

* Build and Customize Modular XML to Simplify XML Documents - E. Tittel
Developers have been working with objects + modules for some time but
now XHTML 1.1 introduces this concept to the XML world. Find out more
about this important advancement and how to put it to use in your XML
documents.
http://builder.com.com/article.jhtml?id=u00320021210edt01.htm

* Pass Parameters to XSL Templates Programmatically - Brian Schaffner
Imagine you have a list of items in an XML document that you display
to a user on a Web page. Users will select which column they want to
sort on and the order of the sort. Using XSL to convert your XML
document to HTML might sound complicated but passing parameters to the
XSL template that performs the conversion is easier than you think.
http://builder.com.com/article.jhtml?id=u00220021212sch01.htm

* Best Practices to Enhance Your SQL Server Applications - Roy Hoobler
Get the most out of your development efforts by familiarizing yourself
with SQL Server. Follow these guidelines to build better applications.
http://builder.com.com/article.jhtml?id=u00320021212RCH01.htm

* Heavyweight vs. Lightweight Methodologies - by Jason P. Charvat
In software development "lightweight" methodologies are gaining ground
on more traditional "heavyweight" methodologies. Both have advantages
and disadvantages and which one you choose depends on your needs. This
article examines some key differences between them.
http://builder.com.com/article.jhtml?id=u00420021016vat01.htm

* Find + Dissect Errors with SQL Server's Bug Hunter - by Tony Patton
Debugging is a necessary evil of software development and tools are
available to make the process less painful. Microsoft provides the SQL
Server Debug Interface to streamline SQL development.
http://builder.com.com/article.jhtml?id=u00320021212ton01.htm


Otros enlaces
=============

* Delphi 6 Update: official run-time patch is available
official patch that fixes some variant and a deadlock issue for
Delphi 6's run-time package.
http://community.borland.com/article/0,1410,29361,00.html

* Borland Logo Stuff
Buy Borland T-shirts, golfballs and other essential stuff.
http://www.borlandstyle.com

* Updated Delphi for .NET preview available for download
Registered users of Delphi 7 can now download an update to the Delphi
for .NET preview.
http://community.borland.com/article/0,1410,29302,00.html

* Quake2.exe Converted to Delphi - by Q2D
The Quake II to Delphi Conversion Team is proud to announce that an
important milestone has been reached: Quake2.exe has been fully
converted to Delphi from the original C sources. All known conversion
bugs have been corrected and the Delphi-compiled binary is able to run
flawlessly using the original DLLs supplied with Quake II 3.20.
Conversion of the game DLLs has almost been completed and we are now
focusing on fixing conversion bugs in the source. We seeking any help
we can get, visit the project's webpage at:
http://www.sulaco.co.za/quake2/

________________________________________________________________________


¡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.php3
boletin-pascal-subscribe@...

Otra forma es votándonos en alguno de estos rankings para darle más
visibilidad a nuestro sitio web y aumentar así el número de suscrip-
ciones al boletín:

http://www.sandbrooksoftware.com/cgi-bin/TopSite2/rankem.cgi?id=latium
http://news.optimax.com/topdelphi/links.exe/click?id=70C517ECAE6E
http://www.top219.org/cgi-bin/vote.cgi?delphi&83
http://top100borland.com/in.php?who=20
http://top200.jazarsoft.com/delphi/rank.php3?id=latium
http://www.programacion.net/votar-enlace.php?id=474

Por favor vota. Son sólo unos segundos para ti que REALMENTE pueden
hacer la diferencia. Necesitamos tu ayuda para poder continuar.

________________________________________________________________________

Si no has recibido el archivo con el código fuente completo de los
ejemplos que se presentan en este boletín, puedes descargarlo de la
siguiente dirección: http://www.latiumsoftware.com/descarga/p0042.zip
________________________________________________________________________

Página del grupo: http://espanol.groups.yahoo.com/group/boletin-pascal/
Para suscribirse / apuntarse: boletin-pascal-subscribe@...
Para cancelar / removerse: boletin-pascal-unsubscribe@...
¿Problemas con tu suscripción? boletin-pascal-owner@...
________________________________________________________________________

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.php3

Copyright (c) 2003 por Ernesto D'Spirito. Todos los derechos reservados.
________________________________________________________________________


Sáb, 18 de Ene, 2003 4:05 pm

edspirito
Sin conexión Sin conexión
Enviar correo Enviar correo

Archivo adjunto:
p0042.zip
Tipo:
application/x-zip-compressed
Reenviar Mensaje #9 de 20 |
Desplegar mensajes Autor Ordenar por fecha

Boletín Pascal #42 - 18-ENE-2003 Índice 1. Unas palabras del editor 2. TDataSet => Excel (No se requiere OLE ni EXCEL) Clase TDataSetToExcel 3. Aplicaciones...
Ernesto D'Spirito
edspirito
Sin conexión Enviar correo
18 de Ene, 2003
4:05 pm
Avanzado

Copyright © 2009 Yahoo! Inc. Todos los derechos reservados.
Normativa de confidencialidad - Condiciones del servicio - Reglas - Ayuda