Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/05/2006, 12:31
Avatar de dogduck
dogduck
 
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 19 años, 1 mes
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