Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

StringGrid - шрифт разного цвета каждой ячейки в зависимости от условия

64K
07 мая 2011 года
Neo_AVE
10 / / 26.02.2011
Здесь описание нахождения средней отметки каждой ячейки и двумерного массива, не правильно считает сумму всех ячеек матрицы
 
Код:
int i,j,a11,b11;
double a1,b1,sum1,sum2,sum3,sum,dh;
double matr;

Код:
void __fastcall TFrmVpl::Btn21Click(TObject *Sender)
{
     FrmVpl->PgCont1->Pages[2]->Show();
     StGr2->FixedCols=0;
     StGr2->FixedRows=0;
     StGr2->ColCount=a11;      
     StGr2->RowCount=b11;      
     for(i=0;i<FrmVpl->StGr1->ColCount-1;i++){  
       for(j=0;j<FrmVpl->StGr1->RowCount-1;j++){    
         sum1=StrToFloat(StGr1->Cells[j])+
                StrToFloat(StGr1->Cells[j+1]);
         sum2=StrToFloat(StGr1->Cells[i+1][j])+
                StrToFloat(StGr1->Cells[i+1][j+1]);
         sum3=(sum1+sum2)/4;    //ср отметка каждой ячейки
         matr+=StrToFloat(StGr1->Cells[j]);  //сложение ячеек всей матрицы
         sum=matr/((a11+1)*(b11+1));    //общ ср отметка
         dh=sum-sum3;   //средняя отметка каждой ячейки
         FrmVpl->StGr2->Cells[j]=dh;
       }}
}

Далее, выделение цветом шрифт в зависимости от условия, например, если отрицательная отметка, то выделяется зеленым цветом, если положит - красным, ноль - желтым. Не меняется цвет, он остается черным.
Код:
void __fastcall TFrmVpl::StGr2DrawCell(TObject *Sender, int ACol, int ARow,
      TRect &Rect, TGridDrawState State)
{
        FrmVpl->StGr2->Cells[j]=dh;
        if(dh>0){
             //FrmVpl->StGr2->Canvas->Brush->Color=clRed;
             StGr2->Canvas->Brush->Color=clRed;
        }
        else if(dh<0) {
             //FrmVpl->StGr2->Canvas->Brush->Color=clGreen;
             StGr2->Canvas->Brush->Color=clGreen;
        }
        else {
             //FrmVpl->StGr2->Canvas->Brush->Color=clRed;
             StGr2->Canvas->Brush->Color=clYellow;
        }
}

И по данным SrGr1->Cells[j] должен строиться график(Lines или Area - не знаю точно) как горизонтальная поверхность. Код:
 
Код:
void __fastcall TFrmVpl::Btn22Click(TObject *Sender)
{
        const double dAXVal=0.0;
        const double dAYVal=0.0;
        const AnsiString sLabel="";
        const TColor Color1=clBlue;
        FrmVpl->PgCont1->Pages[1]->Show();
        Chart1->Series[0]->Clear();
        Chart1->Series[0]->AddXY(dAXVal,dAYVal,sLabel,Color1);
}

Помогите, пожалуйста:(, пишу диплом.Заранее спасибо.
14
07 мая 2011 года
Phodopus
3.3K / / 19.06.2008
В OnDrawCell пользоваться свойством Cells как LValue нельзя, рисуйте самостоятельно, например через Canvas.TextOut(). Цвет шрифта задается Font->Color. Параметры вывода задаются ДО использования вывода а не после.
64K
07 мая 2011 года
Neo_AVE
10 / / 26.02.2011
Код:
void __fastcall TFrmVpl::StGr2DrawCell(TObject *Sender, int ACol, int ARow,
      TRect &Rect, TGridDrawState State)
{
             AnsiString S=dh;  //все равно без изменений
             if(dh>0){
             FrmVpl->StGr2->Canvas->Font->Color=clRed;
             //StGr2->Canvas->FillRect(Rect);
             StGr2->Canvas->TextOut(Rect.Left,Rect.Top,S);
        }
        else if(dh<0) {
             FrmVpl->StGr2->Canvas->Font->Color=clGreen;
             //StGr2->Canvas->FillRect(Rect);
             StGr2->Canvas->TextOut(Rect.Left,Rect.Top,S);
        }
        else {
             FrmVpl->StGr2->Canvas->Font->Color=clYellow;
             //StGr2->Canvas->FillRect(Rect);
             StGr2->Canvas->TextOut(Rect.Left,Rect.Top,S);
        }
}

Написала так, но выводятся одинаковые значения во всех ячейках, почему?
1.9K
10 мая 2011 года
George22
91 / / 09.12.2007
поставь точку останова на AnsiString S=dh;
и посмотри чему равно dh!

Я думаю, если по номеру столбца и номеру строки брать
разные dh, то будет все норм.
64K
10 мая 2011 года
Neo_AVE
10 / / 26.02.2011
Как сделать точку останова? Я с ней ни разу не сталкивалась. Пару слов скажите, пожалуйста. Заранее спасибо
14
10 мая 2011 года
Phodopus
3.3K / / 19.06.2008
 
Код:
AnsiString S=StGr2->Cells[j];
1.9K
11 мая 2011 года
George22
91 / / 09.12.2007
Чтобы поставить точку останова, надо кликнуть мышкой слева от строки,
на которой надо остановитсья - появится красная точка и при выполнении программы она
остановится на этой строчке. А дальше F8 - по шагам...
Надо почитать основы отладки, сходу всего не объяснишь.

А еще лучше создать массив цветов, соответствующий каждой ячейке,
например так:
TColor color[число столбцов][ число строк];

заполнять его при вычислениях и в обработчике использовать:
StGr2->Canvas->Font->Color=color[ACol][ARow];
64K
12 мая 2011 года
Neo_AVE
10 / / 26.02.2011
Как Вы написали, так нельзя к цвету приравнивать ячейки двумерной матрицы
1.9K
12 мая 2011 года
George22
91 / / 09.12.2007
Я же проверил, прежде чем писать: все работает.
StGr2->Canvas->Font->Color имеет тип TColor - мы и присваиваем ему значение типа ТСolor.
64K
12 мая 2011 года
Neo_AVE
10 / / 26.02.2011
Написала следующее: Условие не читает компьютер - выводится зеленым цветом:
Код:
StGr2->DefaultDrawing=false;
        AnsiString S=StGr2->Cells[j];
        if(S>0){
             StGr2->Brush->Color=clRed;
             FrmVpl->StGr2->Canvas->Font->Color=clRed;
             StGr2->Canvas->FillRect(Rect);
             StGr2->Canvas->TextOut(Rect.Left,Rect.Top,StGr2->Cells[ACol][ARow]);
        }
        else if(S<0) {
             StGr2->Brush->Color=clGreen;
             FrmVpl->StGr2->Canvas->Font->Color=clGreen;
             StGr2->Canvas->FillRect(Rect);
             StGr2->Canvas->TextOut(Rect.Left,Rect.Top,StGr2->Cells[ACol][ARow]);
        }
        else {
             StGr2->Brush->Color=clBlue;
             FrmVpl->StGr2->Canvas->Font->Color=clBlue;
             StGr2->Canvas->FillRect(Rect);
             StGr2->Canvas->TextOut(Rect.Left,Rect.Top,StGr2->Cells[ACol][ARow]);
        }

В чем проблема? А выводи значения правильно, но цвета не меняются
246
13 мая 2011 года
GIZMO
1.8K / / 30.07.2004
 
Код:
AnsiString S=StGr2->Cells[j];

а при чем тут i и j? на ACol и ARow не пробовали поменять?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог