 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 06 Nov, 2019 1:03 pm Asunto: Definir un TChart |
|
|
Buenas a todos. A partir de este código encontrado aquí y en otro foro estoy montando un TChart en base a los resultados de, por ejemplo, este Query:
| Código: | SELECT B.Sigla, B.Color, C.Fecha, SUM(A.Votos) Votos
FROM Resultados A, Partidos B, Elecciones C
WHERE A.CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia')
AND A.CodPrv = C.CodPrv AND C.Proceso = 4 AND C.Fecha BETWEEN 1993 AND 2019
AND A.Proceso = C.Codigo
AND A.Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv)
AND B.CodPrv = A.CodPrv AND A.Partido = B.Codigo
AND A.Partido IN (22, 4, 2, 3, 17, 16)
GROUP BY A.Partido, B.Sigla, B.Color, C.Fecha ORDER BY A.Partido, B.Sigla, C.Fecha |
Con el resultado del mismo genero esta pantalla que tiene un TListView y un TChart.
Para crear el TChart hago esto:
| Código: | if (Chart1->SeriesCount() > 0)
Chart1->RemoveAllSeries();
Chart1->Title->Font->Style = TFontStyles();
Chart1->BottomAxis->Title->Caption = "Años";
Chart1->BottomAxis->Title->Font->Style = TFontStyles() << fsBold;
Chart1->LeftAxis->Title->Caption = "Votos";
Chart1->LeftAxis->Title->Font->Style = TFontStyles() << fsBold;
AnsiString cAux = "";
fMenu->Auxiliar->First();
for (; !fMenu->Auxiliar->Eof; fMenu->Auxiliar->Next())
{
if (fMenu->Auxiliar->FieldByName("Sigla")->AsString != cAux)
{
cAux = fMenu->Auxiliar->FieldByName("Sigla")->AsString;
Chart1->AddSeries(&TLineSeries(this));
}
Chart1->Series[Chart1->SeriesCount() - 1]->Add(fMenu->Auxiliar->FieldByName("Votos")->AsInteger, fMenu->Auxiliar->FieldByName("Fecha")->AsInteger, (TColor)fMenu->Auxiliar->FieldByName("Color")->AsInteger);
} |
Pero me surgen algunos problemas:
1. En el eje horizontal deberían mostrarse los años y en el mismo orden que se ven en el TListView (de menor a myor). Sin embargo la asignación la hace inversa de forma que en la gráfica el valor más a la izquierda corresponde al último año mostrado.
2. En la leyenda quiero mostrar la primera columna del TListView (las siglas del partido).
3. Como veis uno de los registros sólo tiene un valor pero sin embargo no aparece (o esa impresión me da) en la gráfica.
¿Alguna idea de como resolver estos problemas? Porque llevo un par de días dando vueltas al problema y no se me ocurre nada. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 06 Nov, 2019 1:36 pm Asunto: |
|
|
Una parte del problema (el 1º y creo que el 3ºde la lista) ya lo he resuelto. La asignación de valores de cada serie los estoy haciendo mal y por eso parece que está invertida la serie, peor me falta como hacer la asignación de los valores del eje y de la leyenda. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 07 Nov, 2019 10:50 am Asunto: |
|
|
Bueno. He resuelto todos los problemas menos uno. El código ha quedado así partiendo de este query:
| Código: | SELECT A.Partido, B.Sigla, B.Color, C.Fecha, SUM(A.Votos) Votos
FROM Resultados A, Partidos B, Elecciones C
WHERE C.Proceso = :Proceso
AND C.Fecha BETWEEN :Desde AND :Hasta AND A.Proceso = C.Codigo
AND A.Mesa IN (SELECT Codigo FROM Mesas)
AND A.Partido = B.Codigo
AND A.Partido IN (22, 4, 2, 3, 17, 16)
GROUP BY A.Partido, B.Sigla, B.Color, C.Fecha ORDER BY A.Partido, C.Fecha |
y con este código:
| Código: | Chart1->Chart3DPercent = 10;
Chart1->Title->Font->Style = TFontStyles() << fsBold;
Chart1->BottomAxis->Title->Caption = "Años";
Chart1->BottomAxis->Title->Font->Style = TFontStyles() << fsBold;
Chart1->BottomAxis->Labels = fMenu->Auxiliar->FieldByName("Fecha")->AsInteger;
Chart1->LeftAxis->Title->Caption = "Votos";
Chart1->LeftAxis->Title->Font->Style = TFontStyles() << fsBold;
cAux = "";
for (; !fMenu->Auxiliar->Eof; fMenu->Auxiliar->Next())
{
if (fMenu->Auxiliar->FieldByName("Sigla")->AsString != cAux)
{
pItem = Evolucion->Items->Add();
pItem->Caption = (cAux = fMenu->Auxiliar->FieldByName("Sigla")->AsString);
for (nItem = 1; nItem < Evolucion->Columns->Count; nItem ++)
pItem->SubItems->Add("");
Chart1->AddSeries(&TLineSeries(Chart1));
Chart1->Series[Chart1->SeriesCount() - 1]->Title = cAux;
Chart1->Series[Chart1->SeriesCount() - 1]->SeriesColor = (TColor)fMenu->Auxiliar->FieldByName("Color")->AsInteger;
}
nVotos[0] = 0;
for (nItem = 1; nItem < Evolucion->Columns->Count; nItem ++)
if (Evolucion->Columns->Items[nItem]->Caption == IntToStr(fMenu->Auxiliar->FieldByName("Fecha")->AsInteger))
{
nVotos[0] = fMenu->Auxiliar->FieldByName("Votos")->AsInteger;
pItem->SubItems->Strings[nItem - 1] = FormatFloat("###,##0", nVotos[0]);
break;
}
Chart1->Series[Chart1->SeriesCount() - 1]->Add(nVotos[0], fMenu->Auxiliar->FieldByName("Fecha")->AsInteger,
(TColor)fMenu->Auxiliar->FieldByName("Color")->AsInteger);
}
Chart1->Series[0]->XLabelsSource = "FECHA"; |
Obtengo este resultado:
Sin embargo, como podéis ver, las últimas bandas no se inician donde debieran a pesar de añadir valores al definir la serie donde así sea, y esto no se me ocurre como resolverlo. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|