C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Закраска столбца в StringGrid  (Прочитано 4263 раз)
funtik1
Участник


Сказали спасибо: +13/-1
Offline

Сообщений: 343


« : 22 Май 2009, 00:00:01 »

Доброго времени суток)))))))) Народ, подскажите, плиз как закрасить столбец в StringGride при щелчке по его заголовку? Для DBGrid нашел:
Код:
void __fastcall TmainF::DBGrid1TitleClick(TColumn *Column)
{
for(int j=0;jDBGrid1->Columns->Count;j++)
{
   mainF->DBGrid1->Columns->Items[j]->Color=clWhite;

}

Column->Color= clHighlight ;

  Column->Field->FocusControl();

}
даж закрасил ячейку в StringGride:
Код:
void __fastcall TmainF::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
          TGridDrawState State)
{
if ((ARow == selectRow )&&(selectRow>0)) {//selectRow-номер выделенной строки

StringGrid1->Canvas->Brush->Color = clHighlight;
StringGrid1->Canvas->FillRect(Rect);

StringGrid1->Canvas->TextOut(Rect.Left+1,Rect.Top+1,StringGrid1->Cells[ACol][ARow]);


}

}
А как столбец весь закрасить при щелчке на его заголовке че т не допру никак
Записан
Borgir
Давний друг


Сказали спасибо: +0/-0
Offline

Сообщений: 11


« Ответ #1 : 22 Май 2009, 10:57:34 »

Если я правильно понял суть вопроса, то не проще ли тебе создать глобальную переменную, в которую заносить номер столбца, по заголовку которого ты кликнул (делай это в событии "DBGrid1TitleClick"). А затем при прорисовке таблицы в "StringGrid1DrawCell" просто сравнивай номер столбца клетки с глобальной переменной.
Записан
funtik1
Участник


Сказали спасибо: +13/-1
Offline

Сообщений: 343


« Ответ #2 : 22 Май 2009, 11:58:25 »

а если на форме тока StringList? Вопрос вот в чем: как выделить цветом столбец в StringGrid, по которому щелкнули.(на форме тока стринг грид).
Записан
Borgir
Давний друг


Сказали спасибо: +0/-0
Offline

Сообщений: 11


« Ответ #3 : 22 Май 2009, 18:45:20 »

У меня дома Билдер не установлен, поэтому напишу примерно, основываясь на твоем коде:
Код:
int RememberColumn   // Вот она - глобальная переменная, где будет запоминаться номер колонки
void __fastcall TmainF::DBGrid1TitleClick(TColumn *Column)
{
for(int j=0;jDBGrid1->Columns->Count;j++)
{
   mainF->DBGrid1->Columns->Items[j]->Color=clWhite;

}

Column->Color= clHighlight ;
        RememberColumn=Column->Index;     // надеюсь, что есть такое свойство :)

  Column->Field->FocusControl();
}

void __fastcall TmainF::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
          TGridDrawState State)
{
if ((ARow == selectRow )&&(selectRow>0)) {//selectRow-номер выделенной строки

StringGrid1->Canvas->Brush->Color = clHighlight;
        if(ACol==RememberColumn)StringGrid1->Canvas->Brush->Color=clRed      // закрашивание столбца красным цветом
StringGrid1->Canvas->FillRect(Rect);

StringGrid1->Canvas->TextOut(Rect.Left+1,Rect.Top+1,StringGrid1->Cells[ACol][ARow]);


}

}
Записан
funtik1
Участник


Сказали спасибо: +13/-1
Offline

Сообщений: 343


« Ответ #4 : 23 Май 2009, 21:02:09 »

всем спасиб, я короч вот так сделал:)))
Код:
void SelectCol( TStringGrid *StringGrid, int  ColNumber)//, int ACol, int ARow )


{
   TGridRect NewSel;//=new TGridRect;

  if (( ColNumber> StringGrid->FixedCols-1 ) &&( ColNumber < StringGrid->ColCount ) )
      {
NewSel.Left = ColNumber;
NewSel.Top = StringGrid->FixedRows;
NewSel.Right = ColNumber;
NewSel.Bottom = StringGrid->RowCount - 1;
StringGrid->Selection = NewSel;

  }

}


void __fastcall TmainF::ToolButton1Click(TObject *Sender)
{
   SelectCol( StringGrid1, selectCol );

}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.065 секунд. Запросов: 21.