Я новичок, и я работаю над проектом C ++ VCL со StringGrid и GanttChart. Что я хочу сделать, это «обновить» панель Ганта автоматически, как только новые данные введены в StringGrid.
Сначала я создаю диаграмму с барами с помощью этой команды:
TGanttSeries *Series1;
int i = 0;
Series1 = new TGanttSeries(this);
Series1->AddGantt(StrToDate(StringGridEd1->Cells[4][1]),StrToDate(StringGridEd1->Cells[5][1]), i,"Task"+IntToStr(i));
Series1->ParentChart = Chart1;
Это идеально подходит для создания графика, но как мне обновить дату бара Ганта, чтобы бар автоматически изменял свой размер? Например, если пользователь вводит 1 день, панель Ганта отображает только 1 день, а когда пользователь вводит 5 дней, панель Ганта автоматически «меняет размер» с 1 до 5 дней.
Есть ли какая-либо функция или свойства, которые могут сделать это для меня?
Я только что ответил вам на официальном форуме Steema Software (Вот).
Я копирую ответ здесь:
Если я правильно понимаю, вы можете обновить свою серию StartValues / EndValues в событии StringGrid1SetEditText. То есть:
TGanttSeries *Series1;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
StringGrid1->ColCount = 6;
StringGrid1->RowCount = 2;
StringGrid1->Cells[4][1] = "01/01/2016";
StringGrid1->Cells[5][1] = "02/01/2016";
StringGrid1->Options << goEditing;
int i = 0;
Series1 = new TGanttSeries(this);
Series1->AddGantt(StrToDate(StringGrid1->Cells[4][1]),StrToDate(StringGrid1->Cells[5][1]), i,"Task"+IntToStr(i));
Series1->ParentChart = Chart1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1SetEditText(TObject *Sender, int ACol, int ARow,
const UnicodeString Value)
{
TDateTime tmp;
if ((ACol==4) || (ACol==5)) {
if (TryStrToDate(StringGrid1->Cells[ACol][ARow], tmp)) {
if (ACol==4) {
Series1->StartValues->Value[ARow-1] = tmp;
Series1->StartValues->Modified = true;
}
else {
Series1->EndValues->Value[ARow-1] = tmp;
Series1->EndValues->Modified = true;
}
}
}
}
Других решений пока нет …