![Antiguo](http://static.forosdelweb.com/fdwtheme/images/statusicon/post_old.gif)
09/05/2006, 12:31
|
![Avatar de dogduck](http://static.forosdelweb.com/customavatars/avatar125116_1.gif) | | | 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 |