StringGrid
StringGrid в которой находятся цифры. В зависимости от цифры окрашивается фон
ячейки, чем больше цифра, тем больше площадь закрашивания ячейки. Для ясности
вопроса прилагаю нарисованный мною рисунок по адресу: http://www.vlad44design.narod.ru/pic.gif
Очевидно, надо использовать событие StringGrid1DrawCell, но не знаю, как его
организовать.
Не знаю как привязать параметр закрашивания если использовать FillRect к цифре в ячейке. Каким образом вычислять площадь закрашивания?
Например, в одной ячейке цифра 456, а в другой цифра 5 и т.д. Как алгоритм закрашивания написать в зависимости от цифры в ячейке?
Спасибо.
Цитата:
Originally posted by vlad44b
Подскажите, как реализовать визуальное представление окрашиванием фона в колонке
StringGrid в которой находятся цифры. В зависимости от цифры окрашивается фон
ячейки, чем больше цифра, тем больше площадь закрашивания ячейки. Для ясности
вопроса прилагаю нарисованный мною рисунок по адресу: http://www.vlad44design.narod.ru/pic.gif
Очевидно, надо использовать событие StringGrid1DrawCell, но не знаю, как его
организовать.
Не знаю как привязать параметр закрашивания если использовать FillRect к цифре в ячейке. Каким образом вычислять площадь закрашивания?
Например, в одной ячейке цифра 456, а в другой цифра 5 и т.д. Как алгоритм закрашивания написать в зависимости от цифры в ячейке?
Спасибо.
Подскажите, как реализовать визуальное представление окрашиванием фона в колонке
StringGrid в которой находятся цифры. В зависимости от цифры окрашивается фон
ячейки, чем больше цифра, тем больше площадь закрашивания ячейки. Для ясности
вопроса прилагаю нарисованный мною рисунок по адресу: http://www.vlad44design.narod.ru/pic.gif
Очевидно, надо использовать событие StringGrid1DrawCell, но не знаю, как его
организовать.
Не знаю как привязать параметр закрашивания если использовать FillRect к цифре в ячейке. Каким образом вычислять площадь закрашивания?
Например, в одной ячейке цифра 456, а в другой цифра 5 и т.д. Как алгоритм закрашивания написать в зависимости от цифры в ячейке?
Спасибо.
Ну если дело только в размерах, то тут все просто:
Код:
TSize size=TextExtend(StringGrid1->Cells[0][0]);
Как работает обработчик OnDrawCell смотри справку.
Спасибо. Буду ковырять в этом направлении.
Можно ли из StringGrid данные сразу в файл сохранить, минуя засовывание данных в массив?
Что-нибудь типа:
StringGrid->....?
Цитата:
Originally posted by daylady
И еще такой вопрос:
Можно ли из StringGrid данные сразу в файл сохранить, минуя засовывание данных в массив?
Что-нибудь типа:
StringGrid->....?
И еще такой вопрос:
Можно ли из StringGrid данные сразу в файл сохранить, минуя засовывание данных в массив?
Что-нибудь типа:
StringGrid->....?
А они уже "засовываны" в массив по имени Cells
Код:
for(int i=0;i<StringGrid->RowCount;i++)
{
for(int j=0;j<StringGrid->ColCount;j++)
{
// запись ячейки StringGrid->Cells[j]
}
}
{
for(int j=0;j<StringGrid->ColCount;j++)
{
// запись ячейки StringGrid->Cells[j]
}
}
Table->Cols->... не помню...SaveToFile(...)
Вот.
(ну де там мой калаш...)
Если вспомнишь, буду благодарна.
Все-таки не хочется делать это:
//-------------------------------------
for(int i=0;i<StringGrid->RowCount;i++)
{
for(int j=0;j<StringGrid->ColCount;j++)
{
// запись ячейки StringGrid->Cells[j]
}
}
//-------------------------------------
Цитата:
Originally posted by daylady
Вот-вот, как раз оно!!!
Если вспомнишь, буду благодарна.
Все-таки не хочется делать это:
//-------------------------------------
for(int i=0;i<StringGrid->RowCount;i++)
{
for(int j=0;j<StringGrid->ColCount;j++)
{
// запись ячейки StringGrid->Cells[j]
}
}
//-------------------------------------
Вот-вот, как раз оно!!!
Если вспомнишь, буду благодарна.
Все-таки не хочется делать это:
//-------------------------------------
for(int i=0;i<StringGrid->RowCount;i++)
{
for(int j=0;j<StringGrid->ColCount;j++)
{
// запись ячейки StringGrid->Cells[j]
}
}
//-------------------------------------
Ну все отбилось совсем желание играть:(
Если срочно, то кажется так:
for(int j=0;j<StringGrid->RowCount;j++)
{
StringGrid->Cols->Strings->SaveToFile(....);
//или без Strings(юзай на здровье:))
}
Цитата:
Originally posted by WidowMaker
for(int j=0;j<StringGrid->RowCount;j++)
{
StringGrid->Cols->Strings->SaveToFile(....);
//или без Strings(юзай на здровье:))
}
for(int j=0;j<StringGrid->RowCount;j++)
{
StringGrid->Cols->Strings->SaveToFile(....);
//или без Strings(юзай на здровье:))
}
Три ошибки, но если было б правильно написано, все равно j+1 строка перезаписывала бы значение j-й строки. Т.е. таким образом можно записать в файл только одну строку.
Код:
TStringList *s = new TStringList;
for(int i=0;i<StringGrid->RowCount;i++)
{
s->AddStrings(StringGrid->Rows);
}
s->SaveToFile("C:\\h.txt");
delete s;
for(int i=0;i<StringGrid->RowCount;i++)
{
s->AddStrings(StringGrid->Rows);
}
s->SaveToFile("C:\\h.txt");
delete s;
Код:
TStringList *s = new TStringList;
s->LoadFromFile("C:\\h.txt");
int k = 0;
for(int i=0;i<StringGrid->RowCount;i++)
{
for(int j=0;j<StringGrid->ColCount;j++)
{
StringGrid->Cells[j] = s->Strings[k++];
}
}
delete s;
s->LoadFromFile("C:\\h.txt");
int k = 0;
for(int i=0;i<StringGrid->RowCount;i++)
{
for(int j=0;j<StringGrid->ColCount;j++)
{
StringGrid->Cells[j] = s->Strings[k++];
}
}
delete s;
Ума не приложу, как я мог Такое написать!
Спасибо, что исправили...
(урок:не шататься по форумам за игрой вCS):(
Полностью согласен с исправлениями(лучше не придумаешь), но надо хоть как-то реабилитироваться:
можно использовать явное окончание данных и писать строку в одну строку(ну и товтология) через свойство Strings::CommaText,
Код:
TStringList *s = new TStringList;
for(int i=0;i<StringGrid->RowCount;i++)
{
s->Add(StringGrid->Rows->CommaText+",");
}
s->SaveToFile(FileName);
delete s;
for(int i=0;i<StringGrid->RowCount;i++)
{
s->Add(StringGrid->Rows->CommaText+",");
}
s->SaveToFile(FileName);
delete s;
Пр и загрузке разбивать можно конечно и strtok для AnsiString, но тут я привел свою:
Код:
AnsiString GTFS(AnsiString String,int num,AnsiString delim =",")
{
AnsiString T=String;
for (int i=1;i<num;i++)T=T.Delete(1,T.Pos(delim));
return T.SubString(1,T.Pos(delim)-1);
}//да,да лишние повторения, но она у меня :-?используется уже давно и не совсеи для этих целей
{
AnsiString T=String;
for (int i=1;i<num;i++)T=T.Delete(1,T.Pos(delim));
return T.SubString(1,T.Pos(delim)-1);
}//да,да лишние повторения, но она у меня :-?используется уже давно и не совсеи для этих целей
загрузка:
Код:
TStringList *SL = TStringList;
AnsiString Line;
SL->LoadFromFile(jk);
Grid->RowCount=SL->Count;
for(int i=0;i<SL->Count;i++)
{
int k=0;
while((Line=GTFS(SL->strings,k+1,","))!="")
{
if(k+1>Grid->ColCount) Grid->ColCount++;
Grid->Cell[k]=Line;
k++;
}
}
delete SL;
AnsiString Line;
SL->LoadFromFile(jk);
Grid->RowCount=SL->Count;
for(int i=0;i<SL->Count;i++)
{
int k=0;
while((Line=GTFS(SL->strings,k+1,","))!="")
{
if(k+1>Grid->ColCount) Grid->ColCount++;
Grid->Cell[k]=Line;
k++;
}
}
delete SL;
Ну это конечно уже ходьба вокруг да около...
Большое спасибо вам!!!
Лучше час потратить на форум, чем 2 часа возиться с компонентами Builder