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
[-]
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
Foot.Text.Clear;
Foot.Text.Add( 'Banda del BARÓGRAFO correspondiente al '+
FechaToCadena(FECHA_DATOS, true) );
if BAR_EN_HPA
then LeftAxis.Title.Caption := 'Hectopascales'
else LeftAxis.Title.Caption := 'Milímetros de Mercurio';
BottomAxis.Maximum := FECHA_FIN;
BottomAxis.Minimum := FECHA_INI;
LeftAxis.Maximum := FIN_ESCALA;
LeftAxis.Minimum := INI_ESCALA;
RightAxis.Maximum := FIN_ESCALA;
RightAxis.Minimum := INI_ESCALA;
TopAxis.Maximum := FECHA_FIN;
TopAxis.Minimum := FECHA_INI;
Serie := (SeriesList[0] as TLineSeries );
if Zoomed
then Serie.LinePen.Width := 3
else Serie.LinePen.Width := 2;
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;
I := High(ArrayPresion1Minuto);
Serie.AddXY(FECHA_FIN+EncodeTime(0, 0, 0, 0), ArrayPresion1Minuto[i], '', clBlue);
end;
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
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;