Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Bibliotecas de código fuente > [GH Freebrary]
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-08-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Ejemplos comparativos de GH Freebrary

El propósito de este hilo es tomar muestras de código Delphi de la Red e indicar cómo escribir "la misma idea", pero empleando GH Freebrary. Como en cualquiera de los otros hilos del foro, todo el mundo es libre de participar poniendo ejemplos y adaptaciones que contribuyan a explicar las ventajas de esta biblioteca de programación.

Considero que estos ejemplos, emanados de programas y prácticas de la vida real, ayudarán a comprender cuándo y por qué es útil el uso de esta biblioteca (sin olvidarnos del naciente manual de referencia). En lo personal me resulta más apropiado plantear estas bien intencionadas comparaciones aquí, en el foro GHF, que hacerlo directamente donde se encuentre el código de muestra, pues sería un poco entrometido de mi parte y desvirtuaría el tema tratado en esos lugares.

En el presente hilo toda mención a código ajeno ha de hacerse con el debido respeto a su autor, y el debate no ha de adquirir posiciones dogmáticas sobre qué soluciones son mejores que otras, sino más bien orientarse a descubrir cómo podemos solucionar las misas cosas con clases, funciones y otros elementos de GH Freebrary y el valor agregado que eso tiene.

Comencemos pues...

Última edición por Al González fecha: 17-10-2013 a las 01:40:39. Razón: Poner acento y actualizar enlace
Responder Con Cita
  #2  
Antiguo 05-08-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
ghDirPath y ghInform

Aquí podemos encontrar estas tres sentencias de código:
Código Delphi [-]
begin
  ...
  PDFReport1.Filename := GetCurrentDir()+'\prueba.rep';
  PDFReport1.PDFFilename := GetCurrentDir()+'\prueba.pdf';
  ...
  Application.MessageBox(PChar('Listado exportado correctamente:' +
    #13 + #13 + PDFReport1.PDFFilename), 'Exportando', MB_ICONINFORMATION);
Tal vez este no sea el caso, pero suponiendo que lo sea, he notado que suele utilizarse la función GetCurrentDir para formar una ruta de archivo relativa a la del programa ejecutable. Pero eso puede ser engañoso, porque las funciones nativas GetCurrentDir y GetCurrentDirectory no necesariamente devuelven el directorio del programa ejecutable, sino sencillamente el "directorio actual", el cual puede ser cambiado inadvertidamente por algún elemento del programa que trabaje con el sistema de archivos. Para derivar una ruta de la del programa ejecutable tenemos la función ghDirPath.

Por otra parte, casi nunca es cómodo escribir o leer una llamada a la función MessageBox de la API de Windows (o al método de TApplication que lleva el mismo nombre) por lo especial de sus parámetros: Las cadenas no son de tipo String sino PChar, así que con frecuencia se recurre a moldes de tipos "PChar(Cadena)"; además primero debe indicarse el texto interior de la ventana y luego su título, cuando la lógica común de cualquier diseño es indicar primero el título de la ventana y luego su contenido; y finalmente la constantes MB_ICONXXX no son precisamente estéticas, abultan el código y restan legibilidad. ¿Existe una función sencilla de manejar que muestre un simple cuadro de texto con el icono de información? Sí, su nombre es ghInform.

El anterior bloque de código quedaría así:
Código Delphi [-]
Uses
  GHFRTL, GHFVCL;

Begin
  ...
  PDFReport1.Filename := ghDirPath ('prueba.rep');
  PDFReport1.PDFFilename := ghDirPath ('prueba.pdf');
  ...
  ghInform ('Exportando', 'Listado exportado correctamente:'#13#13 +
    PDFReport1.PDFFilename);
Sólo es necesario añadir a la cláusula Uses la unidad GHFRTL (que contiene a ghDirPath) y la unidad GHFVCL (que contiene a ghInform).
Responder Con Cita
  #3  
Antiguo 05-08-2013
Jose Roman Jose Roman is offline
Miembro
 
Registrado: jul 2006
Ubicación: Colombia
Posts: 361
Poder: 18
Jose Roman Va por buen camino
Gracias por el aporte, no sabia nada al respecto (me considero un novato avanzado) ojala aporten mas ejemplos que ayudan mucho.
Responder Con Cita
  #4  
Antiguo 05-08-2013
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Yo siempre he usado:
Código Delphi [-]
ExtractFilePath(Application.ExeName);
ya que lo que dice Al es muy cierto GetCurrentDir solo nos devuelve el directorio de trabajo actual y puede haber sido cambiado por la aplicación, la propiedad ExeName por otro lado, contiene todo el path completo del ejecutable se haya ejecutado de donde haya sido (inclusive una memoria USB).
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #5  
Antiguo 06-08-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Código Delphi [-]
  DirPrograma := ExtractFileDir (Application.ExeName);
  ...
  RutaReporte := ExtractFilePath (Application.ExeName) + 'Reporte.pdf';
Alternativa:
Código Delphi [-]
  DirPrograma := ghExeDir;
  ...
  RutaReporte := ghDirPath ('Reporte.pdf');
Además de ser más cortas, las segundas opciones no requieren la existencia del objeto Application (algunos programas prescinden de la unidad Forms).
Responder Con Cita
  #6  
Antiguo 06-08-2013
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Me quedo con mi solución, es cierto que requieres la unidad Forms, pero esa ya viene por defecto y el objeto Application se crea y regula automáticamente. Si ya viene con muchas otras opciones ¿Por qué no usarlo? Claro a menos que en ninguna parte de nuestro poyecto usemos la unidad citada, pero en todo caso todo se resumen e usar o no una unidad adicional (una de ellas nativa), ya sea "forms" o las de GHFreebrary. Al final en los dos casos se obtiene exactamente lo mismo.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Sondeo sobre la biblioteca GH Freebrary Al González [GH Freebrary] 23 08-02-2015 21:12:03
GH Freebrary para Delphi XE4 Al González [GH Freebrary] 18 22-09-2014 18:24:04
GH Freebrary para Delphi XE2 Al González [GH Freebrary] 7 12-01-2014 08:49:35
Avanzando con GH Freebrary Al González [GH Freebrary] 13 23-03-2013 07:08:03
Introducción a GH Freebrary Al González [GH Freebrary] 0 18-03-2013 10:11:54


La franja horaria es GMT +2. Ahora son las 14:23:23.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi