Выделение цветом строки компонента StringGrid

Тема в разделе "LANGS.C", создана пользователем Keva, 6 фев 2008.

  1. Keva

    Keva New Member

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    130
    Вот один обработчик:
    Код (Text):
    1. void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect) {
    2.     selIndex = ARow;
    3.     InvalidateRect( StringGrid1->Handle, NULL, false );
    4. }
    А вот другой:
    Код (Text):
    1. void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) {
    2.     StringGrid1->Canvas->Brush->Color = ( ARow == selIndex ) ? clRed : clWhite;
    3.     StringGrid1->Canvas->Rectangle( Rect );
    Имя одно и тоже а параметры разные, почему так?
     
  2. Electronik

    Electronik New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2009
    Сообщения:
    4
    Спасибо Xerx за идею, вот исправлено и доработано (только используем не StringGrid, a DrawGrid, что особой разницы не имеет):

    void __fastcall TForm1::lol: rawGrid1DrawCell(TObject *Sender, int ACol,
    int ARow, TRect &Rect, TGridDrawState State) {
    Rect.Left--; Rect.Top--; Rect.Bottom++; Rect.Right++;
    if (ARow!=0 && ACol!=0) {
    DrawGrid1->Canvas->Brush->Color = (ARow == selIndex) ? clMoneyGreen :
    ARow%2 == 0 ? clWhite : clInfoBk;
    DrawGrid1->Canvas->Rectangle(Rect);
    }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::lol: rawGrid1SelectCell(TObject *Sender, int ACol,
    int ARow, bool &CanSelect) {
    selIndex = ARow;
    InvalidateRect( DrawGrid1->Handle, NULL, false );
    }

    Комменты по некотрым моментам:

    1. Не понял только куда пихать:
    DrawGrid1->Canvas->Brush->Style = bsSolid;
    и поэтому, как мне кажется, пришлось добавлять это:
    Rect.Left--; Rect.Top--; Rect.Bottom++; Rect.Right++; (смотрим выше)
    появился один минус - затираются черные границы первого столбца (если первый столбец как FixedCol = 1 (по умолчанию в билдере))

    2. Сделал чтобы нечетные строки подсвечивались (как в некоторых тоталкомандёрах), добавил условие:
    ARow%2 == 0 ? clWhite : clInfoBk;
    , если подсветка не нужна, то вместо этой строчки оставляем только clWhite.

    3. Не понял, или уже синий совсем, откуда берется Handle из строчки
    InvalidateRect( DrawGrid1->Handle, NULL, false );

    В оющем все:) Всем удачи.
     
  3. Electronik

    Electronik New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2009
    Сообщения:
    4
    Если не нужны Fixed Col и Row (FixedCol = 0 и FixedRow = 0), то удаляем условие
    if (ARow!=0 && ACol!=0)

    .... и думаем, это гаарят инагда палезна
     
  4. Electronik

    Electronik New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2009
    Сообщения:
    4
    Совсем забыл, про int selIndex = -1;
    Пишем где ниить вверху, можно сразу после TForm1 *Form1;
     
  5. Electronik

    Electronik New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2009
    Сообщения:
    4
    Только, если че ниить рисовать в таком дравгриде, то ниче не появляется. Отстой.