Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-02-2014
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Question Modificar etiquetas en TChart

Hola a tod@s.
No se si este hilo debe ir aquí o en "Gráficos" (por el componente).

Se trata de los siguiente: Tengo un TChart que lo relleno con 1440 valores minutales (24 horas).
En modo diseño me divide el Grid cada 100 elementos y los señala como 0, 100, 200, ... etc. y necesito que lo divida cada 60 elementos (una hora) y que además los etiquete con la hora correspondiente, comenzando por CERO (0, 1, 2, 3, ..., 23, 24)

He leido que tengo que poner a talText el LabelStyle de los ejes (en este caso BottomAxis y TopAxis, pero me hace una escabechina grisacea .
Código Delphi [-]
{ ajustar los ejes Y a la escala que utilice }
    Chart.LeftAxis.Maximum       := FIN_ESCALA;
    Chart.LeftAxis.Minimum       := INI_ESCALA;
    Chart.RightAxis.Maximum      := FIN_ESCALA;
    Chart.RightAxis.Minimum      := INI_ESCALA;
{ cambiar el estilo de las etiquetas de los ejes X }
    Chart.BottomAxis.LabelStyle  := talText;
    Chart.TopAxis.LabelStyle     := talText;
    Chart.Series[0].Marks.Visible:= False;
{ cambiar el grueso de la pluma }
    (Chart.SeriesList[0] as TLineSeries ).LinePen.Width := 3;
{ re-dibujar el TChart }
    Chart.Repaint;
{ rellenar el TChart con los valores minutales }
    for I:=Low(Array1Minuto) to High(Array1Minuto) do begin
      { calcular la hora y los minutos en cada posición }
        iHora    := I div 60;
        iMinuto  := I mod 60;
        Etiqueta := '';
        if( iMinuto=0 ) then Etiqueta := IntToCadena(iHora, 2);
      { escribir los valores y las etiquetas de la serie }
        Chart.Series[0].Add(ArrayPresion1Minuto[i], Etiqueta, clBlue);
    end;

¿Podeis decirme como se cambian las etiquetas de las escalas en los ejes?

Gracias adelantadas
Salvica
Responder Con Cita
  #2  
Antiguo 13-02-2014
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Como una imagen vale mas que mil palabras os adjunto lo que sale y lo que debería saliren el eje de las X.

Gracias
Imágenes Adjuntas
Tipo de Archivo: jpg Sale_esto.jpg (19,1 KB, 24 visitas)
Tipo de Archivo: jpg Deberia_salir.jpg (23,4 KB, 23 visitas)
Responder Con Cita
  #3  
Antiguo 14-02-2014
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Angry Aclaración de la ayuda

Es la primera vez que utilizo TChar y me parece que estaba enfocando mal el asunto, por lo que os pido disculpas por haceros perder el tiempo. Además se me olvido indicar que es para Delphi-7 y Windows XP.

Asi mismo indicar que previamente a esto, me he leido todas la consulta que contienen TChar en los foros de ClubDelphi

Estaba enfocando el problema como si un TChar fuese un TGridString, en el cual pudiese cambiar el título de las columnas a mi gusto y parece ser que no es el caso aunque debe ser fácil.

Bien, el problema es representar en un TChar una serie de valores para representar una gráfica.
- En los ejes izquierdo y derecho va la escala de valores (por ejemplo de 750 a 1200)
- En los ejes superior e inferior va la escala de tiempo (un día, de 00 horas a 24 horas)
- Lo datos que introduzco en la serie son minutales (de 0 a 1440 = un día completo), almacenados en un Array de tipo real.

Después de mirar las demos de delphi, he visto que la escala X se declara como DateTime, y entonces el DateTimeFormat=hh, declarando el Increment=OneHour (aquí no se si deberia poner OneMinute, aunque no noto la diferencia).

Sin embargo, aunque en diseño queda más o menos bien, el resultado no es el esperado. Os subo una imágenes para que veáis como aparece el EjeX (El ejeY lo cambio a medida)

¿Podéis decirme como se configura este objeto parea este caso específico?

Gracias por todo
salvica
Imágenes Adjuntas
Tipo de Archivo: jpg Modo diseño.jpg (25,0 KB, 16 visitas)
Tipo de Archivo: jpg Modo ejecucion.jpg (24,6 KB, 16 visitas)

Última edición por salvica fecha: 14-02-2014 a las 18:15:52.
Responder Con Cita
  #4  
Antiguo 14-02-2014
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Talking Solucionado

Después de cuatro días ¡¡¡ LO CONSEGUÍ !!!

Para aquellos que tengan el mismo o parecido problema:

1º - Y muy importante: ELIMINAR CUALQUIER TCHAR PREVIO, para ir viendo como se desarrolla.
2º - Añadir una serie (en mi caso una de líneas, sin 3D)
3º - Seleccionar la serie. Seleccionar la pestaña General y marcar la opción DateTime en el eje que se desea, al mismo tiempo que se selecciona donde vamos a ver dicho eje.
4º - Seleccionamos Chart y pulsamos la pestaña Axis (ejes).
5º - Seleccionamos el primer eje que usará el DateTime, desmarcamos Automatic (para poner Maximo y Minimo por código), y cambiamos el valor de DesiredIncrement (yo lo he puesto a una hora)
6º - Pulsamos en pestaña Labels y ponemos el formato que queremos ver (en mi caso solo horas = 'hh')
7º - Si utilizamos otro eje, repetimos los pasos 5º y 6º

NOTA - Yo cambio las escalas en runtime, por lo que todos los ejes tienen desmarcado Automatic

Ahora nos creamos una función que inicializará el TChart
Código Delphi [-]
{
--------------------------------------------------------------------------
   Esta función rellena un TChar que simula una banda de BARÓGRAFO

Chart ----------------------------> el TChart utilizado
FECHA_DATOS -------------------> la fecha a la que se refiere el gráfico
INI_ESCALA, FIN_ESCALA ---------> inicio y fin de la escala
ArrayPresion1Minuto --------------> Array de valores de datos minutales
--------------------------------------------------------------------------
}
  procedure RellenarChartBarografo( Chart:TChart; FECHA_DATOS:TDateTime;
                                    INI_ESCALA, FIN_ESCALA:integer;
                                    ArrayPresion1Minuto:Array of real );
  var
    Serie       : TLineSeries;
    FECHA_INI   : TDateTime;
    FECHA_FIN   : TDateTime;
    Y, M, D     : word;
    H, N, S, MS : word;
    Etiqueta    : string;
    iHora       : integer;
    iMinuto     : integer;
    I           : integer;
  begin

    DecodeDate(FECHA_DATOS, Y, M, D);
    FECHA_INI := EncodeDate(Y, M, D);
    FECHA_FIN := FECHA_INI+1;
    with Chart do begin
       { limpiar y poner un título a la banda (me gusta en el pié) }
         Foot.Text.Clear;
         Foot.Text.Add( 'Banda del BARÓGRAFO correspondiente al '+
                         FechaToCadena(FECHA_DATOS, true) );
       { poner un título al eje izquierdo }
         if BAR_EN_HPA
            then LeftAxis.Title.Caption := 'Hectopascales'
            else LeftAxis.Title.Caption := 'Milímetros de Mercurio';
       { dar máximo y mínimo al eje inferior }
         BottomAxis.Maximum   := FECHA_FIN;
         BottomAxis.Minimum   := FECHA_INI;
       { dar máximo y mínimo al eje izquierdo }
         LeftAxis.Maximum     := FIN_ESCALA;
         LeftAxis.Minimum     := INI_ESCALA;
       { dar máximo y mínimo al eje derecho }
         RightAxis.Maximum    := FIN_ESCALA;
         RightAxis.Minimum    := INI_ESCALA;
       { dar máximo y mínimo al eje superior }
         TopAxis.Maximum      := FECHA_FIN;
         TopAxis.Minimum      := FECHA_INI;
       { calcular la serie de datos }
         Serie                := (SeriesList[0] as TLineSeries );
       { cambiar el ancho de la pluma }
         if Zoomed { ¿es un zoom? }
            then Serie.LinePen.Width := 3
            else Serie.LinePen.Width := 2;
       { cargar datos hasta 23:00 }
         for I:=Low(ArrayPresion1Minuto) to High(ArrayPresion1Minuto)-1 do begin
             iHora    := (I div 60);
             iMinuto  := I - (iHora*60);
             Serie.AddXY(FECHA_INI+EncodeTime(iHora, iMinuto, 0, 0), ArrayPresion1Minuto[i], '', clBlue);
         end;
       { cargar datos de 24:00 -> 00:00 de mañana }
         I   := High(ArrayPresion1Minuto);
         Serie.AddXY(FECHA_FIN+EncodeTime(0, 0, 0, 0), ArrayPresion1Minuto[i], '', clBlue);
    end; { del with Chart do begin }
  end;

Además tengo un evento Chart_OnClick para que forme de nuevo la gráfica entre unos valores MAXIMO y MINIMO calculados previamente
Código Delphi [-]

procedure TForm_Presion.Chart_BAROGRAFO_OnClick(Sender: TObject);
var
  INI_ESCALA, FIN_ESCALA : string;
begin
{ al pulsar sobre el TChart }
  TChart(Sender).Zoomed := not TChart(Sender).Zoomed;
  if TChart(Sender).Zoomed then begin
     INI_ESCALA  := IntToStr(Trunc(ESBFloatEdit_P_MINIMA.AsFloat)-1);
     FIN_ESCALA := IntToStr(Trunc(ESBFloatEdit_P_MAXIMA.AsFloat)+1);
  end else begin
     INI_ESCALA  := ESCALA_BAROGRAFO_INI;
     FIN_ESCALA := ESCALA_BAROGRAFO_FIN;
  end;
  RellenarChartBarografo( TChart(Sender), Form_Main.mxCalendar.Date,
                                 StrToInt(INI_ESCALA), StrToInt(FIN_ESCALA),
                                 ArrayPresion1M );
end;
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
TChart y BDE roman Gráficos 3 27-07-2012 21:34:10
Modificar colores de cada barra de un Tchart cargado desde una BD richisaurio Gráficos 6 07-05-2008 17:35:51
Modificar colores de cada barra de un Tchart cargado desde una BD richisaurio Impresión 0 07-05-2008 16:49:57
modificar diagama de barras! (Tchart) creedence Gráficos 3 06-02-2008 16:25:37
Tchart marlulipe Gráficos 2 15-08-2007 01:32:04


La franja horaria es GMT +2. Ahora son las 13:06:10.


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