Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Поиск в таблице, стандартные средства 
:(
    Опции темы
Reptile
Дата 20.11.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

Репутация: 2
Всего: 3



Цитата(docwar @  20.11.2006,  17:39 Найти цитируемый пост)
А как цвет текста одной строки поменять?

Оказывается - напрямую никак smile 
Можно хитро smile
Когда находиш нужную ячейку становишся на нее сохраняеш какую нибудь глобальную переменную и перерисовываеш StringGrid
Цитата(docwar @  20.11.2006,  17:10 Найти цитируемый пост)
Но как быть с нажатием на кнопку? Не хватает ведь параметров... 

Код

StringGrid1->Repaint();

В OnDrawCell пишеш 
Код

//если ячейка выделена (Builder-а нет поэтому сам разберешся) и глобал-я переменная в true
{
   StringGrid1->Canvas->Brush=>Color = clBlack; 
   StringGrid1->Canvas->Font->Color = clWhite; 
}

//Теперь закрасим ячейки, но только, если ячейка не Title- Row/Column 
//Естевственно это завит от того, есть у Вас title-Row/Columns или нет. 

If (ACol > 0) and (ARow>0)  
  { 
      //Закрашиваем бэкграунд 
    StringGrid1->canvas->fillRect(Rect); 

      //Закрашиваем текст (Text). Также здесь можно добавить выравнивание и т.д.. 
    StringGrid1->canvas->TextOut(Rect->Left,Rect->Top,StringGrid1->Cells[ACol][ARow]); 
  }  

P.S. Переписывал из Delphi так что могут быть ошибки, но ход мысли, я думаю, ясен.

PM MAIL   Вверх
docwar
Дата 20.11.2006, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Опять же как передать данные строки? Такой код красит всю таблицу кроме первого столбца первой строки! =)
PM MAIL   Вверх
Reptile
Дата 20.11.2006, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

Репутация: 2
Всего: 3



Цитата(docwar @  20.11.2006,  19:05 Найти цитируемый пост)
Опять же как передать данные строки? Такой код красит всю таблицу кроме первого столбца первой строки! =) 

Не правильно поставил условие в Delphi
Код

if (gdFocused in State) then begin//если ячейка в фокусе      
   StringGrid1.Canvas.Brush.Color := clBlack;  
   StringGrid1.Canvas.Font.Color := clWhite;  
end  


PM MAIL   Вверх
docwar
Дата 20.11.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



А что значит "in State" в строке "gdFocused in State"?
PM MAIL   Вверх
Reptile
Дата 21.11.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

Репутация: 2
Всего: 3



Цитата(docwar @  20.11.2006,  20:44 Найти цитируемый пост)
А что значит "in State" в строке "gdFocused in State"?

Еще раз повторю это в Delphi в Builder-е наверное(не проверял)
Код

if (gdFocused)
{
}

Или что-то похожее.
PM MAIL   Вверх
docwar
Дата 21.11.2006, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Цитата(Reptile @  21.11.2006,  10:07 Найти цитируемый пост)
Еще раз повторю это в Delphi в Builder-е наверное(не проверял)

Знаю, что Дельфи! Просто хотел разобраться.
PM MAIL   Вверх
docwar
Дата 22.11.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Я пишу вот так:
Код

if(StringGrid1->Focused())
{
StringGrid1->Canvas->Brush->Color = clBlack;
StringGrid1->Canvas->Font->Color = clWhite;

if((ACol == j) || (ARow == i))
{
StringGrid1->Canvas->FillRect(Rect);
StringGrid1->Canvas->TextOut(Rect.Left,Rect.Top,StringGrid1->Cells[ACol][ARow]);
}
}
}

Но выделяется таблица неправильно... =(  :'(
PM MAIL   Вверх
Vyacheslav
Дата 22.11.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Код

if(StringGrid1->Focused())


smile  
Переводим на русский язык
Цитата

Если StringGrid1 в фокусе, то

А Вам нужно, по всей видимости, убедится находится ли в фокусе конкретная ячейка.
Что же делать? 
Ответ простой смотреть хелп
Научить, как правильно это делать?
открываем TCustomDrawGrid::OnDrawCell
Цитата

typedef void __fastcall (__closure *TDrawCellEvent)(System::TObject* Sender, long ACol, long ARow, TRect Rect, TGridDrawState
 State);
__property TDrawCellEvent OnDrawCell = {read=FOnDrawCell, write=FOnDrawCell};



Нас интересует TGridDrawState. Щелкаем по нему(он выделен зеленым цветом)
Получаем 
Цитата

enum Grids__3 { gdSelected, gdFocused, gdFixed };

typedef Set<Grids_3, gdSelected, gdFixed> TGridDrawState;


Если мы обладаем достаточным любопытством, нас конечно за интересует, что такое тип Set(тоже выделен зеленым цветом). Щелкаем по нему, смотрим список методов и , о чудо, видим метод
Цитата

bool __fastcall Contains(const T el) const;

После этого нам сразу становится понятно smile , что дельфийский код 
Код

if (gdFocused in State)

по билеровски будет выглядет так
Код

if (State.Contains(gdFocused) )


Вот так примерно обычно пользуются хелпом


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
docwar
Дата 23.11.2006, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Большое спасибо, но тем не менее вопрос не решен... выделяется только последняя строка...
PM MAIL   Вверх
pandrew
Дата 24.11.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.3.2006

Репутация: 3
Всего: 3



Попробуй при отрисовке выделять не прямоугольником, а меняя цвет кисти:
Код

canvas->Brush->Color=...
 
У меня, по крайней мере, все отлично выделяется.
PM MAIL   Вверх
docwar
Дата 24.11.2006, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Вообщем, написал вот такой код:
[CODE]void __fastcall TForm6::FillRow(int RowNum)
{
TRect Rec;
for(i=0; i<=Form1->StringGrid1->ColCount; i++)
 {
  Rec=Form1->StringGrid1->CellRect(i,RowNum);
  Form1->StringGrid1->Canvas->Brush->Color=StringToColor(0x00C56A31);
  Form1->StringGrid1->Canvas->FillRect(Rec);
 }
}[CODE]
Вот только как показать текст?! =)
PM MAIL   Вверх
Reptile
Дата 25.11.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

Репутация: 2
Всего: 3



Код

StringGrid1->Сanvas->TextOut(Rect->Left,Rect->Top,StringGrid1->Cells[ACol][ARow]); 

Пробовал?
PM MAIL   Вверх
docwar
Дата 25.11.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Пробовал, но проблема в том, что написал свою собственную функцию, а при записи 
Код
void __fastcall TForm6::FillRow(int RowNum, TRect &Rect, int ACol,
      int ARow)

возникают ошибки при обращении к функции : FillRow(p); , где p - номер строки...
PM MAIL   Вверх
Reptile
Дата 25.11.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

Репутация: 2
Всего: 3



Какие ошибки?
PM MAIL   Вверх
docwar
Дата 25.11.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



[C++ Error] Unit6.cpp(30): E2193 Too few parameters in call to '_fastcall TForm6::FillRow(int,int,int,TRect &)'
Это на строчке FillRow(p);
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0874 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.