Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-11-2014
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Thumbs up "Dibujando" caracteres en consola

Que tal compañeros del club, resulta que estaba creando una pequeña applicacion que gestionaba backups automaticos y genere una aplicacion de consola para ir mostrando una suerte de log de sucesos

Cuestion, para añadirle un toque "profesional" se me ocurrio añadirle el nombre de la empresa al inicio de todo (tipico de las viejas aplicaciones de consola de antaño )

Como no queria romperme la cabeza haciendo a mano el trabajo sucio para dibujar las letras usando caracteres, llega Google al rescate y encontre esta interesante pagina: Text to ASCII Art Generator, que nos permite elegir una fuente e ingresar el texto deseado, por arte de magia nos devuelve el texto que tanto nos gusta listo para imprimir por pantalla

El resultado:
Código Delphi [-]
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

begin
  try
    Writeln('  ______ _       _        _____        _       _     _ ');
    Writeln(' / _____) |     | |      (____ \      | |     | |   (_)  ');
    Writeln('| /     | |_   _| | _     _   \ \ ____| |____ | | _  _   ');
    Writeln('| |     | | | | | || \   | |   | / _  ) |  _ \| || \| |  ');
    Writeln('| \_____| | |_| | |_) )  | |__/ ( (/ /| | | | | | | | |  ');
    Writeln(' \______)_|\____|____/   |_____/ \____)_| ||_/|_| |_|_|  ');
    Writeln('                                        |_|');
    Writeln;
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.
Saludos

PD: Si a alguien se le ocurre una mejor manera de hacer los write, que a mi me parece que esa es una forma media "chapucera"

Última edición por nlsgarcia fecha: 20-11-2014 a las 18:51:55.
Responder Con Cita
  #2  
Antiguo 20-11-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Una manera simplista es refactorizar el código, creando una función que procese el texto por cada salto de linea, y imprimir en un ciclo, en pseudocodigo:

Código PHP:
function write(texto:String)
   
lineas split(textoENTER)

   for 
linea in lineas:
     
Writeln(linea
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 20-11-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Agustín.

Primero que nada muy buena la página del enlace

En cuanto a tu consulta y tomando en cuenta que el texto lo obtenes del copiado y pegado (de la página) no veo manera mas directa de hacerlo que con WriteLn. Podrías almacenar el texto en variables o constantes con tipo, pero no creo que esos cambios mejoren o hagan mas entendible el código.

Solo para agregar alguna idea, tal vez podrías flexibilizar el mostrado, por ejemplo:
Código Delphi [-]
uses SysUtils, Classes, System;

procedure ShowBanner(Alignment: TAlignment);
const
  LEN = 55;  // Largo del banner
var
  spc: string;
begin
  case Alignment of
    taLeftJustify : spc:= '';
    taCenter      : spc:= StringOfChar(' ', (80-LEN) div 2);
    taRightJustify: spc:= StringOfChar(' ', 80-LEN);
  end;
  WriteLn(spc+'  ______ _       _        _____        _       _      _');
  WriteLn(spc+' / _____) |     | |      (____ \      | |     | |   (_)');
  WriteLn(spc+'| /     | |_   _| | _     _   \ \ ____| |____ | | _  _ ');
  WriteLn(spc+'| |     | | | | | || \   | |   | / _  ) |  _ \| || \| |');
  WriteLn(spc+'| \_____| | |_| | |_) )  | |__/ ( (/ /| | | | | | | | |');
  WriteLn(spc+' \______)_|\____|____/   |_____/ \____)_| ||_/|_| |_|_|');
  WriteLn(spc+'                                        |_|            ');
end;

O también:
Código Delphi [-]
procedure ShowBannerXY(const X, Y: Integer);
const
  LEN = 55;  // Largo del banner
var
  i: Integer;
  spc: string;
begin
  if X <= 80 - LEN then
  begin
    spc:= StringOfChar(' ', X);
    for i:= 1 to Y do WriteLn;
    WriteLn(spc+'  ______ _       _        _____        _       _      _');
    WriteLn(spc+' / _____) |     | |      (____ \      | |     | |   (_)');
    WriteLn(spc+'| /     | |_   _| | _     _   \ \ ____| |____ | | _  _ ');
    WriteLn(spc+'| |     | | | | | || \   | |   | / _  ) |  _ \| || \| |');
    WriteLn(spc+'| \_____| | |_| | |_) )  | |__/ ( (/ /| | | | | | | | |');
    WriteLn(spc+' \______)_|\____|____/   |_____/ \____)_| ||_/|_| |_|_|');
    WriteLn(spc+'                                        |_|            ');
  end
  else
    WriteLn(Format('Maximo valor horizontal %d', [80-LEN]));
end;


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 20-11-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
AgustinOrtu,

Cita:
Empezado por AgustinOrtu
..."Dibujando" caracteres en consola...encontré esta interesante pagina: Text to ASCII Art Generator...por arte de magia nos devuelve el texto...


Cita:
Empezado por AgustinOrtu
..¿A alguien se le ocurre una mejor manera de hacer los Write?...


Revisa este código:
Código Delphi [-]
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  TextApp : Array[0..5] of String =
            (
             ' _   _      _                    _____                _       ',       
             '| \ | |    | |                  / ____|              (_)      ',
             '|  \| | ___| |___  ___  _ __   | |  __  __ _ _ __ ___ _  __ _ ',
             '| . ` |/ _ \ / __|/ _ \| |_ \  | | |_ |/ _` | |__/ __| |/ _` |',
             '| |\  |  __/ \__ \ (_) | | | | | |__| | (_| | | | (__| | (_| |',
             '|_| \_|\___|_|___/\___/|_| |_|  \_____|\__,_|_|  \___|_|\__,_|'
            );

procedure MsgApp(TextApp : Array of String);
var
   i : Integer;
begin
   for i := Low(TextApp) to High(TextApp) do
      Writeln(TextApp[i]);
   Readln;
end;

begin
  MsgApp(TextApp);
end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Imprime en Consola un mensaje contenido en un arreglo por medio de un procedimiento.

Espero sea útil

Nelson.
Responder Con Cita
  #5  
Antiguo 21-11-2014
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Muy buenas sugerencias todos! Lo que comenta el maestro mamcx me parece lo mas acertado, que es exactamente como nos ha ilustrado el compañero nslgarcia

Esta muy interesante esto de estar jugando con la consola, me recuerda a los dias que se empezaba a programar, en mi caso para aprender con el Dev-Pascal (las aplicaciones de consola siempre les tengo un cariño especial)

A veces las cosas mas sencillas nos presentan un reto, yo la verdad no se me habria ocurrido resolverlo como nelson por ejemplo

Saludos!
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
Usar TServerSocket y TClientSocket para enviar "streams" más o menos "grandes" dec Internet 9 04-08-2015 16:11:50
El programa se queda "colgado" mientras copia y luego "despierta" NeWsP OOP 5 10-03-2010 22:05:40
"OBJECT OR CLASS TYPE REQUIRED" en "APPLICATION EXENAME" Xavierator Varios 3 27-10-2008 09:09:50
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53
porque no me reconoce los caracteres "*" ni "%" cuando filtro mrmago Conexión con bases de datos 10 27-01-2006 04:21:16


La franja horaria es GMT +2. Ahora son las 10:03:41.


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