Foros del Web » Programación para mayores de 30 ;) » Programación General »

Graficas Con Delphi

Estas en el tema de Graficas Con Delphi en el foro de Programación General en Foros del Web. Hola a todos, ojala puedan ayudarme: nesesito generar graficas mediante los datos almacenados en una tabla, y la verdad no tengo ni idea de como ...
  #1 (permalink)  
Antiguo 09/05/2006, 12:20
 
Fecha de Ingreso: abril-2006
Mensajes: 14
Antigüedad: 18 años, 7 meses
Puntos: 0
Graficas Con Delphi

Hola a todos, ojala puedan ayudarme:
nesesito generar graficas mediante los datos almacenados en una tabla, y la verdad no tengo ni idea de como hacerlo. La base de datos se encuentra realizada en Mysql server y estoy programando con Delphi 7.
Saludos y de antemano muchas gracias por su atencion.
  #2 (permalink)  
Antiguo 09/05/2006, 12:31
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 10 meses
Puntos: 19
http://www.clubdelphi.com/ -> creo que hay de todo lo que preguntas
Un ejemplo:
Código:
unit UniGraficoMejorado;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, OleCtrls, Menus, ExtCtrls, ArrowCha, Series, TeEngine, Spin,
  TeeProcs, Chart;


type
  TPrincipal = class(TForm)
    Grafico: TChart;
    SE_1: TSpinEdit;
    SE_6: TSpinEdit;
    SE_2: TSpinEdit;
    SE_7: TSpinEdit;
    SE_3: TSpinEdit;
    SE_8: TSpinEdit;
    SE_4: TSpinEdit;
    SE_9: TSpinEdit;
    SE_5: TSpinEdit;
    SE_10: TSpinEdit;
    Series1: TPieSeries;
    Series2: TPieSeries;
    Series3: TBarSeries;
    Series4: TBarSeries;
    Series5: TLineSeries;
    Series6: TAreaSeries;
    Series7: TPointSeries;
    MM_Opciones: TMainMenu;
    MI_Titulos: TMenuItem;
    MI_Salir: TMenuItem;
    MI_TipoGrafico: TMenuItem;
    MI_Pastel2: TMenuItem;
    MI_Pastel3: TMenuItem;
    MI_Barras2: TMenuItem;
    MI_Barras3: TMenuItem;
    MI_Lineas: TMenuItem;
    MI_Areas: TMenuItem;
    MI_Puntos: TMenuItem;
    Acercade: TMenuItem;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Panel1: TPanel;
    Archivos1: TMenuItem;
    Abrir1: TMenuItem;
    Guardar1: TMenuItem;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    procedure MI_SalirClick(Sender: TObject);
    procedure MI_TitulosClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);

    {Declaramos este procedimiento propio para asociarlo al evento
     OnClick de todas las opciones de Tipo de gráfico.}
    procedure MI_GraficoClick(Sender: TObject);

    {Declaramos este procedimiento propio para asociarlo al evento
     OnChange de todos los componentes de tipo SpinEdit.}
    procedure SEChange(Sender: TObject);
    procedure AcercadeClick(Sender: TObject);
    procedure Abrir1Click(Sender: TObject);
    procedure Guardar1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Principal: TPrincipal;

implementation

uses uniAcercade1, uniTitulos;
   {Se declara la unidad que se crea y se invoca en esta ventana.}

{$R *.DFM}

procedure TPrincipal.MI_SalirClick(Sender: TObject);
begin
     close;
end;

{Procedimiento que se ejecuta al arrancar el programa: al crearse
 la forma principal, se ejecuta
 el evento OnClick de la opción MI_Grafico enviando como
 parámetro el valor de la primera opción del menú Tipo de gráfico.}
procedure TPrincipal.FormCreate(Sender: TObject);
begin

   MI_GraficoClick(MI_Pastel2);
end;

{Procedimiento que ejecuta el evento
 OnClick de la opción "Títulos".}
procedure TPrincipal.MI_TitulosClick(Sender: TObject);
begin
     {Se crea aquí la forma donde se preguntan los títulos.}
     Application.CreateForm(TF_Titulos,F_Titulos);
     {"con la forma Títulos hacer lo siguiente".}
     with F_Titulos do
     begin
          {Si el gráfico tiene algún texto escrito
           en su propiedad Text de Title, asignamos
           este texto al Edit Título Superior.}
          if Grafico.Title.Text.Count>0 then
             E_Superior.Text:=Grafico.Title.Text[0];

          {Si el gráfico tiene algún texto escrito en su
           propiedad Text de Foot (pié), asignamos
           este texto al Edit Título Inferior.}
          if Grafico.Foot.Text.Count>0 then
             E_Inferior.Text:=Grafico.Foot.Text[0];

          {A continuación, mostramos la ventana de los títulos
          (ShowModal) y si, al volver, se ha pulsado el botón
          De acuerdo)...}
          if ShowModal=mrOK then
          begin
               {Se borra el texto del título y del pié del gráfico.}
               Grafico.Title.Text.Clear;
               Grafico.Foot.Text.Clear;
               {Si se ha escrito algo en la ventana de los títulos,
                se añaden al título y al pié del gráfico.}
               if (E_Superior.Text<>'') then
                  Grafico.Title.Text.Add(E_Superior.Text);
               if (E_Inferior.Text<>'') then
                  Grafico.Foot.Text.Add(E_Inferior.Text);

               // Se vuelve a dibujar el gráfico.
               Grafico.Repaint;
          end;
          {Se libera de la memoria esta forma de los títulos.}
          Free;
     end;
end;

{Procedimiento de usuario MI_GraficoClick. Todos los
 eventos OnClick de las opciones del menú Tipo de
 gráfico se asocian a este procedimiento.}
procedure TPrincipal.MI_GraficoClick(Sender: TObject);
var j:word;
begin
     {¿Cómo sabemos qué opción del menú es la que se
      ha pulsado? Poniendo en tiempo de diseño a cada una
      un número Tag diferente. Asignamos a j el número
      de Tag de la opción pulsada. sender as TMenuItem
      es la opción que se ha pulsado.}
     j:=(sender as TMenuItem).Tag;

     {Asignamos a la propiedad Caption de P_Panel1
      la Caption da opción pulsada.}
     //P_Panel1.Caption:=(sender as TMenuItem).Caption;

     {Activamos, es decir, asignamos el valor True
      a la serie que corresponde al tipo de gráfico
      que queremos dibujar.}
     Series1.Active:=(j=1);
     Series2.Active:=(j=2);
     Series3.Active:=(j=3);
     Series4.Active:=(j=4);
     Series5.Active:=(j=5);
     Series6.Active:=(j=6);
     Series7.Active:=(j=7);

     {Hacemos que quede marcada la opción
      que hemos activados antes.}
     MI_Pastel2.Checked:=Series1.Active;
     MI_Pastel3.Checked:=Series2.Active;
     MI_Barras2.Checked:=Series3.Active;
     MI_Barras3.Checked:=Series4.Active;
     MI_Lineas.Checked:=Series5.Active;
     MI_Areas.Checked:=Series6.Active;
     MI_Puntos.Checked:=Series7.Active;

     {Cuando se trata de un gráfico de tres dimensiones,
      como 3D Pastel o 3D Barras, activamos esta propiedad
      cuando se haya pulsado una de esas dos opciones.}
     Grafico.View3d:=(j=2) or (j=4);
     Grafico.View3dwalls:=(j=2) or (j=4);
end;

{Procedimiento de usuario SE_Change. Todos los
 eventos OnChange de los SpinEdit se asocian a
 este procedimiento.}
procedure TPrincipal.SEChange(Sender: TObject);
var i:integer;
begin
     {Si la propiedad Text de los SpinEdit no tiene
      nada, asignamos el valor 0 a la propiedad
      Value de los mismos.}
    { if SE_1.Text='' then SE_1.Value:=0;
     if SE_2.Text='' then SE_2.Value:=0;
     if SE_3.Text='' then SE_3.Value:=0;
     if SE_4.Text='' then SE_4.Value:=0;
     if SE_5.Text='' then SE_5.Value:=0;
     if SE_6.Text='' then SE_6.Value:=0;
     if SE_7.Text='' then SE_7.Value:=0;
     if SE_8.Text='' then SE_8.Value:=0;
     if SE_9.Text='' then SE_9.Value:=0;
     if SE_10.Text='' then SE_10.Value:=0; }

Última edición por dogduck; 09/05/2006 a las 12:36
  #3 (permalink)  
Antiguo 09/05/2006, 12:36
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 10 meses
Puntos: 19
la parte que falta
Código:
   {Con un bucle recorremos todas las series que hayamos
      incorporado al gráfico. En nuestro gráfico hay siete
      series o tipos de gráficos. En este procedimiento los
      datos de los SpinEdit se asignan a cada punto de cada
      serie, si bien sólo se muestra la serie que está
      activada.}
     for i:= 0 to Grafico.SeriesCount -1 do
     with Grafico.Series[i] do
     begin
          {Se borran los datos anteriores de la serie.}
          Clear;
          {Asignamos a los diez puntos de la serie correspondiente
           a cada vuelta de bucle el valor del SpinEdit. Para obtener
           información sobre el método Add aplicado a las Series del
           componente TChart, busca en la ayuda de Delphi el tema
           Add Method. El primer parámetro es un valor que indica
           la magnitud que ha de ocupar ese punto del gráfico; el
           segundo parámetro es un texto y el tercero es el color
           con el que debe dibujarse.}
          Add( SE_1.Value, 'Valor 1' , clRed ) ;
          Add( SE_2.Value, 'Valor 2' , clBlue ) ;
          Add( SE_3.Value, 'Valor 3' , clLime ) ;
          Add( SE_4.Value, 'Valor 4' , clAqua ) ;
          Add( SE_5.Value, 'Valor 5' , clYellow ) ;
          Add( SE_6.Value, 'Valor 6' , clWhite ) ;
          Add( SE_7.Value, 'Valor 7' , clTeal ) ;
          Add( SE_8.Value, 'Valor 8' , clPurple ) ;
          Add( SE_9.Value, 'Valor 9' , clGreen ) ;
          Add( SE_10.Value, 'Valor 10' , clFuchsia ) ;
     end;



end;

procedure TPrincipal.AcercadeClick(Sender: TObject);
begin
 //Application.CreateForm(TAcercade1,Acercade1);
 AcercaDe1:=TAcercaDe1.Create(Application);
     AcercaDe1.ShowModal;
     AcercaDe1.Free;

end;
{procedimineto de evento al clikar sobre elemento abrir
del menu. Donde se leeran de un fichero de texto los valores del gráfico}
procedure TPrincipal.Abrir1Click(Sender: TObject);
var i:integer;
    fichero:textFile;
    valores:array [1..10] of string;
begin
//inicializo valores
for i:=1 to 10 do valores[i]:='';
//directorio inicial por ejemplo c raiz
opendialog1.InitialDir:='c:\';
//se ejecuta el dialogo de abrir
if opendialog1.Execute then begin
// si existe el fichero elegido en el dialogo
 if  fileexists(opendialog1.FileName) then begin
  //leemos sus valores al array valores[]
  i:=1;assignfile(fichero,opendialog1.FileName);
  reset(fichero);
  while not eof(fichero) do begin
    //leemos linea a linea
    readln(fichero,valores[i]);

    //pasamos los valores al grafico

    case i of
      1:SE_1.value:=strtoint(valores[1]);
      2:SE_2.value:=strtoint(valores[2]);
      3:SE_3.value:=strtoint(valores[3]);
      4:SE_4.value:=strtoint(valores[4]);
      5:SE_5.value:=strtoint(valores[5]);
      6:SE_6.value:=strtoint(valores[6]);
      7:SE_7.value:=strtoint(valores[7]);
      8:SE_8.value:=strtoint(valores[8]);
      9:SE_9.value:=strtoint(valores[9]);
      10:SE_10.value:=strtoint(valores[10]);
    end;//case
    inc(i);
  end;//while
  //cerramos el fichero
  closefile(fichero);
  
 end; //if fileexists
end; //if opendialog1
end;//procedimiento

{procedimiento de evento al clikar sobre el elemento guardar del menu
donde se guardarán los valores del grafico en un fichero de texto}
procedure TPrincipal.Guardar1Click(Sender: TObject);
var fichero: textfile;
    i:integer;
    linea:string;

begin
//ejecutamos el dialogo guardar
if savedialog1.Execute then begin
  //si existe el fichero avisamos y damos opcion a salir
  if fileexists(savedialog1.FileName) and
   (MessageDlg(Format('¿Sobreescribir el fichero %s?',[savedialog1.FileName]),
   mtConfirmation, mbYesNoCancel,0)<>idYes) then Exit;
  if DeleteFile(savedialog1.FileName) or not fileexists(savedialog1.FileName) then begin
  assignfile(fichero,savedialog1.FileName);
  rewrite(fichero);
  //escribimos los valores en el fichero
  {no me los guarda en el orden que yo queria con esto ¿???????
  for i:=0 to Principal.ComponentCount-1 do
  if (Principal.Components[i] is TSpinEdit) then begin
      linea:=inttostr((Principal.Components[i] as TSpinEdit).Value);
      writeln(fichero,linea);

    end;//if (Principal. }
    //luego lo hago por el camino largo...
    writeln(fichero,inttostr(SE_1.value));
    writeln(fichero,inttostr(SE_2.value));
    writeln(fichero,inttostr(SE_3.value));
    writeln(fichero,inttostr(SE_4.value));
    writeln(fichero,inttostr(SE_5.value));
    writeln(fichero,inttostr(SE_6.value));
    writeln(fichero,inttostr(SE_7.value));
    writeln(fichero,inttostr(SE_8.value));
    writeln(fichero,inttostr(SE_9.value));
    writeln(fichero,inttostr(SE_10.value));
    //cerramos el fichero
    closefile(fichero);
  end;//if DeleteFile(

end;//if savedialog1.execute

end;//procedimiento

end.
Código:
unit uniTitulos;
   {En esta forma se preguntan los títulos del gráfico:
   inferior y superior.}
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TF_Titulos = class(TForm)
    L_Superior: TLabel;
    L_Inferior: TLabel;
    B_DeAcuerdo: TButton;
    E_Superior: TEdit;
    E_Inferior: TEdit;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  F_Titulos: TF_Titulos;

implementation

{$R *.DFM}

end.
  #4 (permalink)  
Antiguo 09/05/2006, 13:04
 
Fecha de Ingreso: abril-2006
Mensajes: 14
Antigüedad: 18 años, 7 meses
Puntos: 0
¡Gracias por contestarme dogduck!
Analizare el codigo que me mando y lo probare.
Si tengo duda sobre esto la publicare esperando que pueda contestarme nuevamente.
Muchas gracias
  #5 (permalink)  
Antiguo 10/06/2009, 20:35
 
Fecha de Ingreso: junio-2009
Mensajes: 1
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Graficas Con Delphi

Soy estudiante de ingeniería y se que es mucha molestia, bastante has hecho con subir este valioso código fuente, pero no logro compilar el programa, llevo varias semanas en él.
los principales problemas son que no me acepta (E_Inferior.Text:=Grafico.Foot.Text[0];) y no se de donde sacas (procedure TPrincipal.SeChange(Sender: TObject); )

Podrías subir el código pero en delphi?, junto con todos sus archivos (.dfm .pas .dpr .dcu, etc)

Gracias.

Última edición por alexju; 10/06/2009 a las 20:41
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:24.