Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión

 
Búsqueda Avanzada

15.707 Mensajes en 3.130 Temas- por 371 Usuarios - Último usuario: lasfirrot
Mayo 22, 2012, 07:52:30
Foro de Hispabyte.netProgramaciónLenguajes y Programación (Moderadores: D4MR0D, Snaft_J1)Tema: Freepascal / Lazarus
Páginas: [1] 2   Ir Abajo
Imprimir
Autor Tema: Freepascal / Lazarus  (Leído 4454 veces)
0 Usuarios y 1 Visitante están viendo este tema.
JMA_SP
Grupo_Moderadores
Miembro Imprescindible
*
Mensajes: 739



Ver Perfil
« : Octubre 19, 2008, 01:28:44 »


FREEPASCAL / LAZARUS>

Despues de publicar la version 2.2.2 de FreePascal el siguiente paso ha consistido en publicar tambien la version 0.9.26 de Lazarus que ha tenido una gran correccion de errores en menos tiempo de lo que acontecia con anteriores versiones (ya va quedando menos para la version 1) Sonrisa.
Me convence mas que versiones anteriores, para windows al menos, en las que ya me daba errores al compilar con por ejemplo un formulario por defecto.
Ahora que esta mas funcional si tratare de practicar algo mas, en la medida que progrese algo me gustaria empezar un tutorial pero muy despacio porque a pesar de todo sigo siendo mas un programador de turbopascal 7 que de delphi o freepascal con Lazarus (aficionado no profesional).
Si me gustaria contar con la ayuda de alguien que controle sobre el tema ya que se progresaria mas. La verdad es que casi toda la documentacion esta en ingles y aunque en su wiki se puede traducir al idioma que se desee no vendria mal tener aqui una seccion con ejemplos practicos.
Tengo que ver si es posible generar los documentos wiki en local con openoffice 3 y cuando esten revisados subirlos aqui, es mas comodo y supongo que ganaran en presentacion.

Un saludo y espero que si hay programadores de freepascal por aqui al menos posteeis vuestras opiniones.

Para descargar el compilador de freepascal o bien Lazarus la web de referencia es>

http://www.freepascal.org
http://www.lazarus.freepascal.org

O si mas directamente en sourceforge.net en buscar escribiendo como referencia
FreePascal o Lazarus.
Es multiplataforma lo cual ayuda a portar un mismo programa a por ejemplo Linux  Giñar
Sino hacer la prueba y ver funcionar vuestro primer programa en entorno grafico para linux (por ejemplo un formulario simple con unos pulsadores y alguna etiqueta (label)
Para que haga algo le podeis poner en el codigo de un pulsador por ejemplo salir con codigo form1.close
« Última modificación: Octubre 19, 2008, 01:35:26 por JMA_SP » En línea
JMA_SP
Grupo_Moderadores
Miembro Imprescindible
*
Mensajes: 739



Ver Perfil
« Respuesta #1 : Octubre 30, 2008, 05:40:22 »

He estado haciendo pruebas para ver si lograba hacer funcionar la conexión entre un programa realizado con Lazarus y PostgreSQL y el resultado ha sido un poco lamentable Llorar, en fin después de dedicarle un tiempo solo he obtenido errores.
En principio no sería un error de PostgreSQL porque he estado creando tablas y todo con buen resultado.
Tampoco es un problema de conectividad puesto que desde el equipo cliente me he conectado:
1º Utilizando pgAdmin III (accedo sin problemas a bases de datos locales y las del equipo servidor (el servicio está iniciado y correcto), para ello modifiqué los ficheros de configuración para que admitiese conexiones externas no solo de localhost, el puerto por defecto para postgreSQL es 5432 y sin problema).
2º Creando en ODBC un DSN y realizando el test con resultado OK. Indeciso

Si me hubiese funcionado lo habría documentado aquí, pero no ha sido el caso, aunque buscare mas documentacion para volver a replantear el programa. He probado con:

- ZeosLib: el resultado es que una vez añadido ni me arranca Lazarus. Menos mal que al recompilar todo guarda el .exe original con old. (ZeosLib se encuentra disponible para su descarga en sourceforge). Se supone que es el más activo y soporta más variedad de bases de datos. El caso es que al tratar de arrancar Lazarus me da error de sqllite.dll no encontrado.
- Lógicamente con los componentes del IDE que tiene por defecto y sinceramente es lo más aproximado que ha tenido a funcionar pero no he logrado ver nada en el datagrid.
- SQLDB (con este componente peor aún si cabe).
Prueba realizada con Lazarus 0.9.26. No he probado con los componentes que trae para mySLQ, otro día si me animo pruebo a ver si funciona.
Algo mas que he encontrado es Lazarus SQL Explorer en sourceforge y que por ahora solo tiene el codigo fuente no ofrece el programa compilado para linux.
No veo que estos componentes sean perfectos pero para practicar no estaría mal.
Serán bien venidas las aportaciones.
P.D: si hay algún gurú de estos temas por aquí le animo a que se registre en FreePascal y Lazarus para así traducir o aumentar las aportaciones en su wiki que no es que abunden, casi todo está en Inglés.
Un saludo.
He traducido la información sobre ODBCCOnn que explica como crear una conexión ODBC tanto en Windows como en sistemas UNIX.

http://wiki.freepascal.org/ODBCConn/es
http://wiki.freepascal.org/ODBCConn       (es la versión original en inglés)
« Última modificación: Abril 10, 2009, 07:08:14 por JMA_SP » En línea
JMA_SP
Grupo_Moderadores
Miembro Imprescindible
*
Mensajes: 739



Ver Perfil
« Respuesta #2 : Noviembre 01, 2008, 09:58:53 »

Enlaces de interés para manejar bases de datos utilizando Lazarus / FreePascal:

Primero de todo Lazarus (funciona por encima de FreePascal, el cual instala como base de su funcionamiento al ser Lazarus Object Pascal).

PostgreSQL:

- Interface utilizando FreePascal, a la vieja usanza con líneas de código:

  http://www.freepascal.org/packages/postgres.html

- Referencia de la "UNIT" postgres:

http://www.freepascal.org/docs-html/packages/postgres/

(son parcos en palabras, salvo la declaración de las funciones y procedimientos poco más).
Después de todo si han portado de C a Pascal supongo que las llamadas de función serán calcadas así que aquí os dejo algo de ayuda:

http://www.commandprompt.com/community/pgdocs8/libpq

(Gracias al equipo en http://www.commandprompt.com por la documentación tan bien redactada).

- Interactuando con bases de datos con Lazarus:

 http://wiki.freepascal.org/Databases_in_Lazarus/es

En este site se dispone de interesantes ejemplos (fijaros en el de easy DB):

http://paginas.fe.up.pt/~asousa/wiki/doku.php?id=proj:lazarus_projects

Lo he probado y realmente conecta, crea la tabla y rellena el grid.... Sonreir
en cualquier caso un ejemplo muy bueno de funcionamiento.
Eso si, tener en cuenta que en el inspector de objetos hay que cambiar datos
como el equipo que tiene la base de datos postgres, que si no lo teneis en red seria localhost, el nombre de la base de datos, usuario y contrasena de conexion.
Una vez compilado marcar la casilla de conectado y probar a ver como va respondiendo (modificar tambien los casilleros de base de datos, equipo a conectar, usuario, contrasena).
Espero que os sirva, si teneis instalado Lazarus simplemente hacer doble click sobre el fichero .lpi y cargara el proyecto.
Fijaos tambien en la gran cantidad de librerias .dll que incluye en el fichero comprimido de esta forma encuentra casi todo en el directorio de trabajo, logicamente postgresql debe estar instalado, con los servicios activos y con un usuario y contrasena que permita el acceso, creacion, modificacion y borrado.

Más ejemplos:

http://sites.google.com/site/silvioprogbs/downloads/


Este apartado le pongo porque he visto que hay ciertas páginas con información y no siempre resulta sencillo tenerlas accesibles rápidamente, tanto en el site de Lazarus/FreePascal como en otros externos.
Espero que os sean de utilidad y que se puedan obtener resultados aceptables con el mínimo tiempo posible de búsquedas.
Estoy tratando de traducir ciertas secciones de la wiki en el site de Lazarus/FreePascal al Español/Castellano para que resulte un poco más sencillo. Según vaya aprendiendo quizá las explicaciones y el detalle mejore, también los contenidos.
También trato de conseguir que gente que ha publicado contenidos en internet sobre el tema centralice sus esfuerzos en la wiki de la aplicación para que dichos artículos no acaben perdidos o como cachés secundarias en internet.
Aparte de lo que respecta a Lazarus/FreePascal la recomendación es aprender algo de SQL estándar y más en concreto el SQL de PostgreSQL que tiene sus particularidades.
Manuales/prácticas:

http://www.postgresql.org/docs/manuals/

http://sqlcommand.sourceforge.net/ Descargas en:

http://sourceforge.net/projects/sqlcommand/   (con mini-tutorial para realizar un mínimo de cosas fundamentales).

Postgres lo podéis encontrar en:

http://www.postgresql.org/

http://pgtranslation.projects.postgresql.org/    (para traductores)

http://pgfoundry.org/   (desarrolladores)

Interfaces PostgreSQL:

http://www.postgresql.org/docs/interfaces

Bueno que decir en este último enlace ya hay de todo, en concreto explica que la interface de libpq se obtiene con la distribución (lenguaje C).

http://postgresql.mirrors-r-us.net/files/documentation/books/aw_pgsql/node147.html

(al compilar es importante que libpq se encuentre o bien en el path o bien directamente en el directorio donde tengamos la aplicación a compilar.)

Aunque se sale de este punto PostgreSQL-PHP:

http://www.php.net/manual/es/book.pgsql.php

(Quizá algún día alguien se anime en Hispabyte a hacer un curso, por ahora solamente con mysql http://hispabyte.net/wiki/index.php?title=Curso_basico_de_PHP_y_MySQL )


Una vez instalado se puede observar un Servicio PostgreSQL Database Server 8.3 (Descripción PostgreSQL Database Server (postmaster)) que para que la base/s de datos sea/n accesibles debe estar iniciado (bajo Windows).
En principio establece su acceso en la máquina local (localhost o 127.0.0.1) pero se puede hacer accesible para practicar en una LAN modificando el correspondiente fichero de configuración:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# IPv4 local connections:
    host         all           all             127.0.0.1/32              md5

Podríamos cambiar md5 por trus pero es menos seguro.

Si queremos que sea accesible desde otro equipo de nuestra LAN:

    host         all           all             192.168.2.0/24           trust

Tener en cuenta que esto es para practicar, si vais a poner algo más serio en producción la seguridad en la conexión debe ser mayor (ver documentación original).
Os dejo dos enlaces interesantes:

http://www.jorgeivanmeza.com/blog/tag/postgresql/
http://www.postgresql.org/docs/8.3/interactive/ssl-tcp.html

A la fecha de escribir esto al descargarlo (Versión 8.3) permite tener PostgreSQL:

- pgAdminIII: gestor en modo gráfico de PostgreSQL, desde el mismo podéis crear
  bases de datos, tablas.....conectar con bases de datos postgreSQL ubicadas en  otros equipos.... según vayais creando las tablas se puede ver la sintaxis que genera.
- psql: desde la línea de mandatos podéis hacer lo mismo que con pgAdiminIII pero practicando los mandatos que tiene postgreSQL.
- Application Stack Builder: muy intersante puesto que instala aplicaciones adicionales que generarán bases de datos desde para crear una base de datos para un wiki, un foro.... hasta interactuar con un ERP como OpenBravo (este último tiene una instalación aparte (http://www.openbravo.org/) y requiere más elementos para hacerlo funcionar, lo cual incluye JAVA.  Recomiendo que cuando realicéis la instalación se haga un copy/paste de las pantallas que van apareciendo para luego no tener dudas (puertos, contraseñas......).
Lógicamente necesitareis un servidor web (por ejemplo tomcat).
Luego para acceder http://localhost:8080/mediawiki  http://127.0.0.1/mediawiki http://localhost:8080/phpbb .... y así sucesivamente (el puerto dependerá del que le asignéis en Tomcat).
« Última modificación: Marzo 17, 2010, 12:05:38 por JMA_SP » En línea
JMA_SP
Grupo_Moderadores
Miembro Imprescindible
*
Mensajes: 739



Ver Perfil
« Respuesta #3 : Noviembre 11, 2008, 03:15:10 »

Componente que permite realizar el interface con Excel:

http://tcoq.free.fr/composants.html

Parece ser que interactuar con esta serie de programas incluido openoffice es más sencillo en windows, para otros como linux aún no existe tal facilidad (corregirme si me equivoco o está desactualizado) os dejo el enlace:

http://wiki.lazarus.freepascal.org/Office_Automation#Using_COM_Automation_to_interact_with_OpenOffice_and_Microsoft_Office

En este otro el enlace a la API de openoffice:

http://api.openoffice.org/

Para la interacción con OpenOffice mediante lenguajes de programación existe el proyecto UNO (Universal Network Object) pero FreePascal / Lazarus no parece ser uno de ellos, sería interesante que alguien colaborase al menos con algunos ejemplos elementales de como empezar para entenderlo.

 http://udk.openoffice.org

En sourceforge existe: http://sourceforge.net/projects/uno-pas-bridge

Pero está más enfocado a Delphi, quizá algún día soporte FreePascal/Lázarus pero a día de hoy el proyecto se ve un poco parado.

Interesante. Girar ojos
« Última modificación: Febrero 27, 2010, 01:22:08 por JMA_SP » En línea
JMA_SP
Grupo_Moderadores
Miembro Imprescindible
*
Mensajes: 739



Ver Perfil
« Respuesta #4 : Abril 14, 2009, 10:23:54 »

Otro tema muy interesante que se puede realizar con Lazarus es la lectura y escritura de valores en el registro de windows.
La opción dificil lógicamente es la de incluir windows en la clausula USES y acceder directamente a las funciones de la API de windows en la forma:

USES windows;

Y luego buscar funciones a utilizar, para lo cual una buena fuente de documentación es el msdn, os pongo el enlace puesto que tiene un montón de funciones:

http://msdn.microsoft.com/en-us/library/ms724875(VS.85).aspx

La opción relativamente fácil porque ya está adaptada para utilizarla con Lazarus es incorporar a la clausula USES la UNIT registry en la forma.

USES registry;

Lógicamente añadiendo otras entradas en uses, que para una unit de formulario podría ser:

program project1;

{$mode objfpc}{$H+}

uses crt,dos,registry;
var
registro:tregistry;
valor:string;
begin

ClrScr;
WriteLn ('Esto es una demostracion de la unit registry');
WriteLn (' No realiza verificación previa por la existencia de la llave/valor a leer');
registro:=tregistry.create; { creamos el objeto }
{creamos el objeto registro, lo podríamos haber llamado de cualquier otra forma}
Registry.RootKey:=HKEY_LOCAL_MACHINE; { Seleccionamos la llave raiz HKEY_LOCAL_MACHINE }
{ HKEY_LOCAL_MACHINE es una variable del tipo HKEY pero aquí se asigna en modo directo sin
  utilizar variables intermedias
}
{ Utilizando el editor de registro de windows regedt.exe o regedt32.exe sin tener desplegadas sus ramas
  veremos unas cuantas llaves primarias o raiz (root) una de las cuales es HKEY_LOCAL_MACHINE tal cual
  los otros valores se podrían poner literalmente y serviría para acceder a otras partes del registro
  ¡OJO no modifiquéis el registro sin saber lo que estáis haciendo podéis estropear el sistema operativo
  así que cuidadín, y si os decidís a practicar que al principio solo sea utilizando el modo lectura
}
registro.OpenKey ('Software\Microsoft\Windows\CurrentVersion\run\',FALSE);
{ pero podría ser cualquier otra trayectoria que nos interese y que exista }
Valor:=registro.ReadString ('valor a leer de un tipo de dato determinado (en este caso string) y que exista');
{aquí es ya donde obtenemos lo que queremos leer, por ejemplo si es una entrada de hardware para averiguar
que procesador tenemos, en este caso por la trayectoria que hemos definido trataríamos de saber alguna
entrada en run que es la forma que se tiene de arrancar un programa cuando inicia el sistema sin tener
que ponerlo en Inicio->programas->inicio (hay otra entrada que es services para servicios)
}

Registro.CloseKey; { Cerramos igual que al abrir un fichero al dejar de usarlo lo cerramos }
Registro.Free; { esto hace que se liberen los recursos de memoria utilizados por el objeto }

end.     
         


Otras fuentes de información:

https://trac.opensourcevista.net/cprs/browser/trunk/CPRS-Lib/ORSystem.pas?format=txt

También encontré un extenso listado de código creo que era opensource a ver si logro recordar donde y por supuesto cuando se instala Lazarus buscando por la palabra registry encontrais la unit y viendo su código
fuente.
Si tenéis todo bien definido en el código del programa la versión para windows y actualizada observaréis que
al igual que otros compiladores modernos si pusieseis la palabra registro.  en cuanto se pone el punto da el
resto de funciones disponibles como una ayuda inteligente igual que con otros compiladores modernos.
Ojo que puede ser registro o cualquier otro nombre que déis a la variable tregistry.

No soy un experto pero me pareció muy interesante el tema y espero aprender más en profundidad como va este tema ya que hasta ahora el registro de windows lo había utilizado prácticamente con regedit.

No me hago cargo de los daños que pueda ocasionar el código arriba, probablemente ni se compile aunque lo modifiqueis, mejor así porque es para mostrar un poco como va el tema del uso de esta unit. Bajo vuestra responsabilidad el uso que hagáis del mismo.

Existe una utilidad que hace un gran uso de este tipo de funciones y es keyfinder que lo podéis encontrar en sourceforge. Mirar un poco el código fuente por curiosidad.
http://sourceforge.net/search/?type_of_search=soft&words=keyfinder
Esta utilidad creo recordar que cuando no estaba aún en sourceforge permitía leer valores del registro de un equipo conectado en la red (ConnectRegistry) y en su código fuente para la versión actual aparece comentado.

Lo mejor de todo es que los conocimientos que se logran se pueden aplicar a otros lenguajes de programación como C, Phyton, java....









« Última modificación: Abril 14, 2009, 11:33:36 por JMA_SP » En línea
JMA_SP
Grupo_Moderadores
Miembro Imprescindible
*
Mensajes: 739



Ver Perfil
« Respuesta #5 : Abril 14, 2009, 11:38:28 »

A fecha 12-abril-2009 se publica la versión 2.2.4 de FreePascal.
En línea
JMA_SP
Grupo_Moderadores
Miembro Imprescindible
*
Mensajes: 739



Ver Perfil
« Respuesta #6 : Julio 03, 2009, 11:30:13 »

Os dejo aquí el enlace, realicé la traducción de la explicación del inglés, si queréis matizar algo me lo comentais que en microcontroladores no estoy muy puesto. Por lo visto no soporta más que un conjunto de ellos por ahora, pero es un buen principio y supone como muchas otras iniciativas de este compilador el resultado de meses de trabajo en lo que lejos de ser un proyecto en abandono es un proyecto muy colaborativo.

http://wiki.freepascal.org/Embedded/es

Os recuerdo que un foro en español se encuentra disponible en hispalazarus.

http://hispalazarus.mi-web.es/foro/
En línea
JMA_SP
Grupo_Moderadores
Miembro Imprescindible
*
Mensajes: 739



Ver Perfil
« Respuesta #7 : Noviembre 17, 2009, 09:42:40 »

En la siguiente URL como os mencioné más arriba podéis aportar funcionalidades de red a vuestros programas:

http://www.synapse.ararat.cz/doku.php

Hace relativamente poco publicaron su versión 39, por ejemplo una de las preguntas que planteaba en algunos sitios sobre como hacer ping..... pues bien con estas units se puede.
Hice un pequeño programilla tabulado para verificar la conexión hacia algunos equipos y  Sonreir hace el ping, se puede obtener el retardo y además el código de error si no alcanza el destino. Vamos que es una pasada.

Descargándolo se tiene la documentación sobre sus funcionalidades y ejemplos como los del ping, luego ya solo es adaptarlos. Por ejemplo la dirección IP se la paso como una cadena (string)y a partir de ahí es llamar a las diferentes funciones que tiene.
En principio lo tengo implementado con FreePascal en modo ASCII, no he probado con Lazarus que por cierto ha publicado la versión 0.9.28.2 aunque hay cosas que no me gusta como funcionan si es cierto que se han realizado mejoras, como por ejemplo en el componente SMNetGradient que permite gradientes interesantes en la parte GUI.
También se ha anunciado la primera release candidate de FreePascal 2.4.0.

Bueno que si tengo tiempo modificaré un poquillo la aplicación y la pondré aquí, aunque el mérito repito no es de la aplicación sino de Ararat Synapse.
En sourceforge se puede encontrar Visual Synapse por si a alguien le interesa. Y creo haber visto una utilidad opensource que la utiliza.

Saludos y hasta pronto.
« Última modificación: Febrero 27, 2010, 01:15:08 por JMA_SP » En línea
JMA_SP
Grupo_Moderadores
Miembro Imprescindible
*
Mensajes: 739



Ver Perfil
« Respuesta #8 : Diciembre 04, 2009, 11:28:17 »

Los ejemplos de uso los podemos encontrar en la última versión:
synapse->source->demo->FreePascal y una vez en este punto encontramos:

- testdns.
- testhttp.
- testmime.
- testping.
- testroute.
- testssl.

En concreto testping es bastante simple 15 líneas de código y la mayor parte de ellas son para llamar a las unit que utiliza, cabecera de programa, inicialización y finalización.
La línea en si interesante es aquella que realiza el "ping.ping(string);
Donde string es una cadena de por ejemplo '192.168.1.1', aunque lógicamente en vuestra LAN los tiempos van a ser muy bajos, mientras que por ejemplo si ponéis otra dirección externa los tiempos serán considerablemente mayores (70, 86, 100 .....).
También he realizado una variación consistente en cambiar la IP por una cadena de una dirección de internet y parece que también lo acepta, eso si no he puesto la parte que indica el protocolo 'http://'.
ping.pingtime; nos devuelve el tiempo del ping en milisegundos.
Puede venir bien si queréis hacer un programa que os monitorice si un equipo en vuestra red está con conexión, siempre claro está que un cortafuegos no evite la respuesta al eco y por supuesto sin saturar la red, puesto que podéis espaciar cuando se realiza el ping por ejemplo con la función Delay de FreePascal.
En definitiva dentro de la clase TPingSend encontramos dentro de métodos ping utilizando la función ping y a partir de ahí obtener las diferentes propiedades (properties) que nos interesen como PingTime o ReplyCode o mejor aún ReplyError que nos permite saber si obtenemos alguna respuesta del host destino o en caso contrario el tipo de error retornado (ver las constantes que admite o bien mensajes de error o éxito (IE_NoError).

Lógicamente es necesario tener las units para que no nos de errores, en mi caso he copiado tal cual todo el contenido de:
synapse/source/lib/ (fichero synapse39.zip 710,7KB) http://sourceforge.net/projects/synalist/
al directorio:
c:\fpc\2.2.4\units\i386-win32\synapse  donde units es el directorio por defecto para  ubicar nuestras unidades y por darle un orden he creado el directorio synapse.

« Última modificación: Diciembre 05, 2009, 12:13:11 por JMA_SP » En línea
JMA_SP
Grupo_Moderadores
Miembro Imprescindible
*
Mensajes: 739



Ver Perfil
« Respuesta #9 : Diciembre 07, 2009, 11:00:15 »

Bueno aquí tenéis el código fuente del programilla y la presentación es
en modo texto. He incluido algún retardo con Delay y dado que los pings
que realiza son al host local tal como está no es de mucha utilidad, espero que os sirva para aprender como mínimo en como poner texto en pantalla y a diferentes colores.


{ Este programa es meramente did ctico, no se da ninguna garant¡a ni implicita ni
expl¡cita, de hecho ni siquiera se ofrece en formato binario, para que funcione es
necesario compilarlo. Util¡zalo bajo tu propia responsabiliad. Puede
contener errores y no soy un programador profesional.
Dejo puestas las direcciones de localhost y 127.0.0.1 a modo de ejemplo para que
se vea que aparte de la ip se puede poner un nombre.
Yo por ejemplo lo he probado con mi router en la direcci¢n privada y con equipos
en subredes, es un programa muy simple y su funcionalidad radica en las librerias
de ARARAT SYNAPSE   http://www.synapse.ararat.cz/doku.php en concreto he realizado
las pruebas con la release 39 (2009-10-08).
Leer las condiciones de la licencia de uso bien en la citada p gina web o en el
fichero README.
Dentro del fichero podemos encontrar una buena documentaci¢n sobre su utilizaci¢n.
Aparte de esto agradecer los ejemplos escritos en FreePascal que contiene y que
este mismo programa si es de su inter‚s lo puedan distribuir libremente junto
con los actuales.
El programa tiene secciones repetitivas por lo que se puede simplificar mucho pero
as¡ es m s f cil de modificar.
A fecha de editar esto la versi¢n estable de FreePascal es la 2.2.4

07-08-2009

 }


{$MODE DELPHI}

Program testping;

uses
crt,dos,pingsend,sysutils;
VAR
salir:boolean;


PROCEDURE Portada;

VAR

Color_Marco:integer;
Color_Relleno:integer;
Color_Encabezado:integer;

begin
   CursorOff;
   ClrScr;
   Color_Marco:=10;
   Color_Relleno:=10;
   Color_Encabezado:=14;
   GotoXY (1,1);
   TextColor (Color_Marco);
   Write('ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍ»');
   GotoXY (1,2); Write ('º');
   TextColor (Color_Relleno);
   Write ('              º   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»  º            ');
   TextColor (Color_Marco);  Write ('º');
   GotoXY (1,3); Write ('Ì');
   TextColor (Color_Relleno);
   Write ('ÍÍÍÍÍÍÍÍÍÍÍÍÍͼ   º');
   TextColor (Color_Encabezado);
   Write ('          PRUEBA DE PING SIMPLE           ');
   TextColor (Color_Relleno);
   Write (' º  ÈÍÍÍÍÍÍÍÍÍÍÍÍ');
   TextColor (Color_Marco); Write ('¹');
   GotoXY (1,4); Write ('º');
   TextColor (Color_Relleno);
   Write ('±±±±±±±±±±±±±±±   ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ  ±±±±±±±±±±±±±');
   TextColor (Color_Marco); Write ('º');
   GotoXY (1,5); Write ('º');
   Write ('±±±±±±±±±±±±±±ÚÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄ¿ ±±±±±±±±±±±º');
   GotoXY (1,6); Write ('º');
   Write ('±±±±±±±±±±±±±±³   EQUIPO  ³   DIRECCION IP  ³ ESTADO ³  RETARDO  ³ ±±±±±±±±±±±º');
   GotoXY (1,7); Write ('º');
   Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
   GotoXY (1,8); Write ('º');
   Write ('±±±±±±±±±±±±±±³  Equipo 1 ³    localhost    ³        ³           ³ ±±±±±±±±±±±º');
   GotoXY (1,9); Write ('º');
   Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
   GotoXY (1,10); Write ('º');
   Write ('±±±±±±±±±±±±±±³  Equipo 2 ³ ---.---.---.--- ³        ³           ³ ±±±±±±±±±±±º');
   GotoXY (1,11); Write ('º');
   Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
   GotoXY (1,12); Write ('º');
   Write ('±±±±±±±±±±±±±±³  Equipo 3 ³ ---.---.---.--- ³        ³           ³ ±±±±±±±±±±±º');
   GotoXY (1,13); Write ('º');
   Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
   GotoXY (1,14); Write ('º');
   Write ('±±±±±±±±±±±±±±³  Equipo 4 ³ ---.---.---.--- ³        ³           ³ ±±±±±±±±±±±º');
   GotoXY (1,15); Write ('º');
   Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
   GotoXY (1,16); Write ('º');
   Write ('±±±±±±±±±±±±±±³  Equipo 5 ³ ---.---.---.--- ³        ³           ³ ±±±±±±±±±±±º');
   GotoXY (1,17); Write ('º');
   Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
   GotoXY (1,18); Write ('º');
   Write ('±±±±±±±±±±±±±±³  Equipo 6 ³ ---.---.---.--- ³        ³           ³ ±±±±±±±±±±±º');
   GotoXY (1,19); Write ('º');
   Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
   GotoXY (1,20); Write ('º');
   Write ('±±±±±±±±±±±±±±³  Equipo 7 ³ ---.---.---.--- ³        ³           ³ ±±±±±±±±±±±º');
   GotoXY (1,21); Write ('º');
   Write ('±±±±±±±±±±±±±±ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄ´ ±±±±±±±±±±±º');
   GotoXY (1,22); Write ('º');
   Write ('±±±±±±±±±±±±±±³ LocalHost ³ 127.000.000.001 ³        ³           ³ ±±±±±±±±±±±º');
   GotoXY (1,23); Write ('º');
   Write ('±±±±±±±±±±±±±±ÀÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÙ ±±±±±±±±±±±º');
   GotoXY (1,24);
   Write ('ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ');
   GotoXY (1,24); Insline;
   GotoXY (1,24); Write ('º');
   Write ('±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±º');
end;

PROCEDURE Realizar_Ping;
var
  ping:TPingSend;

  Equipo1: string; { Establecemos el tipo para los equipo como string o cadena }
  Equipo2: string;
  Equipo3: string;
  Equipo4: string;
  Equipo5: string;
  Equipo6: string;
  Equipo7: string;
  Equipo8: string;

  Equipo1_Estado: shortint;  { Establecemos el estado obtenido a tipo shortint }
  Equipo2_Estado: shortint;
  Equipo3_Estado: shortint;
  Equipo4_Estado: shortint;
  Equipo5_Estado: shortint;
  Equipo6_Estado: shortint;
  Equipo7_Estado: shortint;
  Equipo8_Estado: shortint;

  Equipo1_retardo: integer;  { Establecemos el tiempo retornado como integer }
  Equipo2_retardo: integer;  { recordar que el tiempo viene dado en ms y que }
  Equipo3_retardo: integer;  { lo normal es que dentro de nuestra LAN los ti-}
  Equipo4_retardo: integer;  { empos se encuetren cercanos a 0 por ejemplo 0 }
  Equipo5_retardo: integer;  { o 1, fuera de nuestra LAN ser n superiores de-}
  Equipo6_retardo: integer;  { pendiendo de la rapidez de las comunicaciones }
  Equipo7_retardo: integer;  { por ejemplo si existen unos cuantos dispositi-}
  Equipo8_retardo: integer;  { vos intermedios entre origen y destino, cada }
                             { uno nos aumentara en mayor o menor medida el }
                             { total }



begin
  Equipo1:='localhost';  { Cadena de Equipo1 nombre o direcci¢n IP }
  Equipo2:='A DEFINIR';  { Cadena de Equipo2 nombre o direcci¢n IP }
  Equipo3:='A DEFINIR';  { Cadena de Equipo3 nombre o direcci¢n IP }
  Equipo4:='A DEFINIR';  { Cadena de Equipo4 nombre o direcci¢n IP }
  Equipo5:='A DEFINIR';  { Cadena de Equipo5 nombre o direcci¢n IP }
  Equipo6:='A DEFINIR';  { Cadena de Equipo6 nombre o direcci¢n IP }
  Equipo7:='A DEFINIR';  { Cadena de Equipo7 nombre o direcci¢n IP }
  Equipo8:='127.0.0.1';  { Cadena de Equipo8 nombre o direcci¢n IP }
  { Si por ejemplo cambiamos 'A DEFINIR' por una direcci¢n externa
     nuestra LAN obtendremos tiempos de ping en ms mayores que
     cero, yo en mis pruebas he obtenido tiempos de 78ms
     En este ejemplo dejo puesto 'localhost' que hace referencia al bucle
     local por nombre o bien su equivalente en IP '127.0.0.1' }

  ping:=TPingSend.Create;

   Repeat

    TextColor (10);   { Color de Texto para fecha y hora }
    GotoXY (5,2);Write (timetostr(time));
    GotoXY (69,2);Write (datetostr(date));
    { Esto hace permite escribir la fecha y la hora en la parte superior al
      tiempo que nos hace espaciar un poco el tiempo entre cada vuelta del
      bucle de pings, l¢gicamente si una direcci¢n no es v lida o no se al-
      canza en los reintentos que realiza hace que el tiempo que tarda en
      realizar el bucle sea variable }

    ping.ping (Equipo1);  { realiza el ping al equipo cuya direcci¢n pongamos
                            en la variable de cadena Equipo1 }

    if ping.pingtime >= 0 then Equipo1_Estado:=1 else Equipo1_Estado:=0;
    Equipo1_retardo:=ping.pingtime;
    ping.ping (Equipo1);
    GotoXY (48,8); Write ('      ');
    IF (Equipo1_Estado >= 1) then
    begin
    GotoXY (48,8);
    TextColor (10);
    Write ('Activo');
    end
    else
    begin
    GotoXY (48,8);
    Write ('      ');
    TextColor (12);
    GotoXY (48,8);
    Write ('SinResp');
    end;
    GotoXY (60,8);
    Write ('    ');
    GotoXY (60,8);
    if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
    else
    Writeln ('***'+' ms');

    ping.ping (Equipo2);
    if ping.pingtime >= 0 then Equipo2_Estado:=1 else Equipo2_Estado:=0;
    Equipo2_retardo:=ping.pingtime;
    ping.ping (Equipo2);

    IF (Equipo2_Estado >= 1) then
    begin
    GotoXY (48,10);
    TextColor (10);
    Write ('Activo');
    end
    else
    begin
    GotoXY (48,10);
    Write ('      ');
    TextColor (12);
    GotoXY (48,10);
    Write ('SinResp');
    end;
    GotoXY (60,10);
    Write ('    ');
    GotoXY (60,10);
    if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
    else
    Writeln ('***'+' ms');

    ping.ping (Equipo3);
    if ping.pingtime >= 0 then Equipo3_Estado:=1 else Equipo3_Estado:=0;
    Equipo3_retardo:=ping.pingtime;
    ping.ping (Equipo3);

    GotoXY (48,12); Write ('      ');
    IF (Equipo3_Estado >= 1) then
    begin
    TextColor (10);
    GotoXY (48,12);
    Write ('Activo');
    end
    else
    begin
    GotoXY (48,12);
    Write ('      ');
    TextColor (12);
    GotoXY (48,12);
    Write ('SinResp');
    end;
    GotoXY (60,12);
    Write ('    ');
    GotoXY (60,12);
    if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
    else
    Writeln ('***'+' ms');

    ping.ping (Equipo4);
    if ping.pingtime >= 0 then Equipo4_Estado:=1 else Equipo4_Estado:=0;
    Equipo4_retardo:=ping.pingtime;
    ping.ping (Equipo4);

    GotoXY (48,14); Write ('      ');
    IF (Equipo4_Estado >= 1) then
    begin
    TextColor (10);
    GotoXY (48,14);
    Write ('Activo');
    end
    else
    begin
    GotoXY (48,14);
    Write ('      ');
    TextColor (12);
    GotoXY (48,14);
    Write ('SinResp');
    end;
    GotoXY (60,14);
    Write ('    ');
    GotoXY (60,14);
    if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
    else
    Writeln ('***'+' ms');

   ping.ping (Equipo5);
    if ping.pingtime >= 0 then Equipo5_Estado:=1 else Equipo5_Estado:=0;
    Equipo5_retardo:=ping.pingtime;
    ping.ping (Equipo5);

    GotoXY (48,16); Write ('      ');
    IF (Equipo5_Estado >= 1) then
    begin
    TextColor (10);
    GotoXY (48,16);
    Write ('Activo');
    end
    else
    begin
    GotoXY (48,16);
    Write ('      ');
    TextColor (12);
    GotoXY (48,16);
    Write ('SinResp');
    end;
    GotoXY (60,16);
    Write ('    ');
    GotoXY (60,16);
    if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
    else
    Writeln ('***'+' ms');

   ping.ping (Equipo6);
    if ping.pingtime >= 0 then Equipo6_Estado:=1 else Equipo6_Estado:=0;
    Equipo6_retardo:=ping.pingtime;
    ping.ping (Equipo6);
    GotoXY (48,18); Write ('      ');

    IF (Equipo6_Estado >= 1) then
    begin
    TextColor (10);
    GotoXY (48,18);
    Write ('Activo');
    end
    else
    begin
    GotoXY (48,18);
    Write ('      ');
    TextColor (12);
    GotoXY (48,18);
    Write ('SinResp');
    end;
    GotoXY (60,18);
    Write ('    ');
    GotoXY (60,18);
    if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
    else
    Writeln ('***'+' ms');

   ping.ping (Equipo7);
    if ping.pingtime >= 0 then Equipo7_Estado:=1 else Equipo7_Estado:=0;
    Equipo7_retardo:=ping.pingtime;
    ping.ping (Equipo7);

    GotoXY (48,20); Write ('      ');
    IF (Equipo7_Estado >= 1) then
    begin
    TextColor (10);
    GotoXY (48,20);
    Write ('Activo');
    end
    else
    begin
    GotoXY (48,20);
    Write ('      ');
    TextColor (12);
    GotoXY (48,20);
    Write ('SinResp');
    end;
    GotoXY (60,20);
    Write ('    ');
    GotoXY (60,20);
    if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
    else
    Writeln ('***'+' ms');

    ping.ping (Equipo8);
    if ping.pingtime >= 0 then Equipo8_Estado:=1 else Equipo8_Estado:=0;
    Equipo8_retardo:=ping.pingtime;
    ping.ping (Equipo8);

    GotoXY (48,22); Write ('      ');
    IF (Equipo8_Estado >= 1) then
    begin
    TextColor (10);
    GotoXY (48,22);
    Write ('Activo');
    end
    else
    begin
    GotoXY (48,22);
    Write ('      ');
    TextColor (12);
    GotoXY (48,22);
    Write ('SinResp');
    end;
    GotoXY (60,22);
    Write ('    ');
    GotoXY (60,22);
    if Ping.PingTime >= 0 then Writeln (IntToStr(Ping.PingTime)+' ms')
    else
    Writeln ('***'+' ms');
    Delay (100);
    if keypressed then salir:=true;

   Until salir=true;
    ping.Free;
end;
begin
   salir:=false;
   Portada;
   Realizar_Ping;
   ClrScr;
end.

{  Lo siguiente es un comentario de lo elemental en lo que hay que centrarse
   lo dem s es presentaci¢n y control

uses
crt,dos,pingsend,sysutils; ya que vamos a necesitar la unit pingsend
ping:=TPingSend.Create;
ping.ping (Equipo1);  donde Equipo1 es una variable de tipo string
Equipo1_retardo:=ping.pingtime  donde Equipo1_retardo es del tipo integer
Si el valor retornado es menor que 0 entonces vemos que el equipo destino
no nos devuelve el eco, no significa necesariamente que est‚ caido, a partir
de ah¡ podemos examinar los diferentes valores para obtener m s informaci¢n
pero aqu¡ simplemente se compara si es >=0 o < 0.
ping.Free;   { liberamos los recursos una vez que ya no los necesitamos

Hay que tener en cuenta la jerarqu¡a de las units ya que por ejemplo pingsend
puede a su vez depender de otras units, por lo cual es conveniente es tenerlas
todas en tiempo de compilaci¢n.
}
« Última modificación: Diciembre 08, 2009, 04:06:35 por JMA_SP » En línea
JMA_SP
Grupo_Moderadores
Miembro Imprescindible
*
Mensajes: 739



Ver Perfil
« Respuesta #10 : Diciembre 29, 2009, 10:28:30 »

- FacturLinex, ContaLinex, NominaLinex y ReciLinex:

    Ahora que alguno de ellos se encuentra en su versión 2.0 y en vista de que tienen muy buena pinta os animo a probarlos:

    - http://sourceforge.net/projects/facturlinex/  http://sourceforge.net/apps/phpbb/facturlinex/viewforum.php?f=8
    - http://editlin.iws.es/productos.html?id=16&cat=7&start
    - http://www.casadellibro.com/libro-gestion-linex-facturacion/993190/2900001016619
    - http://ftp-master.debian.org/new/facturlinex2_2.0.0-1.html (por cierto está disponible la versión 6.0 de debian.
    - http://sourceforge.net/search/?q=contalinex
    - http://sourceforge.net/search/?q=contalinex&q=nominalinex
    - http://sourceforge.net/search/?q=contalinex&q=nominalinex
    - http://www.facebook.com/pages/FacturLinEx/123900300988858
    - http://usuariodebian.blogspot.com/2007/07/facturlinex-contalinex-nominalinex-y.html

He buscado sin mucho éxito una distro que incluya al menos facturlinex y contalinex junto con postgresql todo ello en una imagen descargable para USB con vistas a poderlo testear con facilidad. Si conocéis alguna por favor añadirla como respuesta. Gracias.

- VirtualMoon:

    - http://sourceforge.net/projects/virtualmoon
 
   - http://ap-i.net/avl/en/start (explicación sobre el proyecto).


- Sistemas Operativos:

    - TORO: http://toro.sourceforge.net

    - FPOS: http://code.google.com/p/fpos/
« Última modificación: Febrero 26, 2011, 09:45:46 por JMA_SP » En línea
JMA_SP
Grupo_Moderadores
Miembro Imprescindible
*
Mensajes: 739



Ver Perfil
« Respuesta #11 : Enero 05, 2010, 12:15:15 »

Ya está disponible la versión 2.4.0 de FreePascal (1 enero 2010), que entre otras cosas permite compilar los programas en nuevas plataformas Sonreir

También ZeosDBO 7.0.0 alpha junto a la versión estable 6.6.6 que espero sea utilizable con FreePascal / Lazarus como paquete de acceso a bases de datos.
« Última modificación: Enero 05, 2010, 12:24:54 por JMA_SP » En línea
HQH
Administrator
Miembro Imprescindible
*****
Mensajes: 1.813



Ver Perfil
« Respuesta #12 : Enero 05, 2010, 12:48:01 »

Gran regalo de navidad por parte del equipo de FreePascal Sonrisa
En línea
JMA_SP
Grupo_Moderadores
Miembro Imprescindible
*
Mensajes: 739



Ver Perfil
« Respuesta #13 : Marzo 16, 2010, 11:55:37 »

Libro sobre programación en Lazarus:

http://www.cul.de/lazarus.html    ISBN-13 978-3-936546-38-5

La única pega que le encuentro a priori es que está en alemán y en ese idioma apenas se unas pocas palabras:(, como para plantearse el solo propósito de traducirlo......., habrá que esperar a que lo traduzcan como mínimo al inglés, tenerlo traducido al español ya sería todo un lujo.

Libro de programación en FreePascal:

http://www.cul.de/freepascal2.html ISBN-13 978-3-936546-53-8

« Última modificación: Marzo 17, 2010, 12:00:52 por JMA_SP » En línea
JMA_SP
Grupo_Moderadores
Miembro Imprescindible
*
Mensajes: 739



Ver Perfil
« Respuesta #14 : Marzo 30, 2011, 10:23:00 »

Disponible la version 0.9.30 de Lazarus, desde luego promete. Me instale la version para Windows de 32 bits y funciona muy bien para mi gusto.

http://sourceforge.net/projects/lazarus/files/
http://www.lazarus.freepascal.org/index.php?PHPSESSID=bebcc77aa563f1254d76bd6d97e5fe12&topic=12589.0
http://wiki.lazarus.freepascal.org/Lazarus_0.9.30_release_notes

Espero que os sea de utilidad.

Saludos.
En línea
Páginas: [1] 2   Ir Arriba
Imprimir
Foro de Hispabyte.netProgramaciónLenguajes y Programación (Moderadores: D4MR0D, Snaft_J1)Tema: Freepascal / Lazarus
Ir a:  


Tema diseado por RJ-45 para Hispabyte.net basado en el
theme famouspadexx v.09 designed by Formado Comprido
Downloable here. My present to padexx.de