Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсветка символов в DBGrid при фильтрации 
:(
    Опции темы
Гость_Виталий
  Дата 4.7.2005, 08:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Привет всем!

Кто-нибудь подскажет, как можно реализовать следующее:
в Edit вводтся текст;
таблица фильтруется на предмет совпадения с любой частью поля;

Пример кода:
Query1.Active:=false;
Query1.SQL.Clear;
Query1.SQL.Add(QSQL);
Query1.SQL.Add('WHERE FIO LIKE ''%'+Edit2.Text+'%''');
Query1.Active:=true;


Вопрос:
как в отфильтрованных данных в DBGrid одновременно подсвечивать символы,
по которым фильтруется таблица, другим цветом?

Заранее спасибо.

  Вверх
Akella
Дата 5.7.2005, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



используй событие DrawDataCell сетки, но с подкраской именной нужных символов ячейки тяжело, однако, наврятли тебе здесь дадут пример.
Может сам додумаешься - выкладывай на всеобщее обозрение
PM MAIL   Вверх
kobra
Дата 6.7.2005, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

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



есть вариант, я его когдато исползовал, но в других целях.
в DrawDataCell определяеш ту ячеику, в которои нужная подстрока имеется, динамически создоещ TRichEdit и отрисовываеш его прямо над нужнои ячеикои, и там текст пишеш как душе угодно.
PM MAIL   Вверх
~FoX~
Дата 6.7.2005, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

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



Здесь есть все что тебе может понадобиться.
http://www.delphikingdom.ru/asp/viewitem.a...dbgridcolor.htm


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
~FoX~
Дата 6.7.2005, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

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



А вот простой примерчик, но он выделяет весь текст в ячейке

Код

procedure TForm1.ADOQuery1NameGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin
  if ADOQuery1.FieldbyName('Name').AsString = Edit1.Text then begin
    dbgrid1.canvas.Font.Color := clRed;
    Text := ADOQuery1.FieldByName('Name').AsString;
  end
  else begin
    dbgrid1.canvas.Font.Color := clBlack;
    Text := ADOQuery1.FieldByName('Name').AsString;
  end;
end;



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Akella
Дата 6.7.2005, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



да весь текст - не проблема, а вот нужные симолы...
PM MAIL   Вверх
Гость_Виталий
Дата 6.7.2005, 10:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я вот нарыл кое-что, не знаю, можно ли из этого решить поставленную задачу?


Как изменить цвет ячейки TDBGrid в зависимости от текущего значения
--------------------------------------------------------------------------------


Для изменения цвета некоторых ячеек таблицы TDBGrid необходимо определить реакцию на событие DBGrid1DrawDataCell и проверив необходимые условия, перерисовать ячейку вручную (если в этом есть необходимость).

Все необходимые данные для отрисовки передаются в параметрах процедуры. Отрисовка белых букв на красном фоне если, перерисовывается поле 'First_I', ячейка не в фокусе и значение поля меньше нуля.



procedure TForm1.DBGrid1DrawDataCell(Sender: TObject;
const Rect: TRect; Field: TField; State: TGridDrawState);
begin
with DBGrid1.Canvas do
if (Field.FieldName = 'First_I') and (not (gdFocused in State)) and (Field.AsInteger < 0) then
begin
Brush.Color := clRed;
Font.Color := clWhite;
end;
DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;

smile

  Вверх
Akella
Дата 6.7.2005, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Но ты ведь хотел изменять цвет отдельных символов в ячейке
PM MAIL   Вверх
Гость_Виталий
Дата 6.7.2005, 15:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Сами ячейки и не надо красить.
Задача не изменилась.
Я имел ввиду этот примерчик не дает ли правильное направление хода мысли?
smile
  Вверх
Akella
Дата 6.7.2005, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



смотри ответа~FoX~`а
а в твоём примере не вижу сравнения с Edit1.Text
PM MAIL   Вверх
~FoX~
Дата 7.7.2005, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

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



Хочешь онДравКолумнЦиль - держи:
Код

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  i: integer;
  s: string;
begin
  if Column.Index = 2 then begin //====Вместо 2 указать номер столбца, где надо светить
    for i := 0 to Length(Text) do begin
      s := copy(ADOQuery1.FieldbyName('Name').AsString, i, Length(Edit1.Text)); 
      If Edit1.Text = s then begin
        Dbgrid1.Canvas.Font.Color := clRed;
        TextOut(DBGrid1.Canvas.Handle, Rect.Left + 2 , Rect.Top + 2 , PChar(s), Length(s));
      end;
    end;
  end;
end;

Подсвечивает Красным указанную подстроку.
Да чуть не забыл, чтоб в реал тайм изменить усливие подсветки достаточно сделать DBGrid1.Refresh
Результат работы:

Это сообщение отредактировал(а) ~FoX~ - 7.7.2005, 08:21

Присоединённый файл ( Кол-во скачиваний: 25 )
Присоединённый файл  Grid.jpg 18,33 Kb


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
kobra
Дата 7.7.2005, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

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



Цитата
Подсвечивает Красным указанную подстроку.
ето не подстроку, етот код меняет цвет шрифта в ячеике. а вопрос то был

Цитата
таблица фильтруется на предмет совпадения с любой частью поля;


Цитата
как в отфильтрованных данных в DBGrid одновременно подсвечивать символы,
по которым фильтруется таблица, другим цветом?


PM MAIL   Вверх
~FoX~
Дата 7.7.2005, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

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



Цитата(kobra @ 7.7.2005, 09:56)
ето не подстроку, етот код меняет цвет шрифта в ячеике. а вопрос то был

Он не меняет цвет шрифта в ячейке! Он вообще к ячейке иммет косвенное отношение.


Цитата(kobra @ 7.7.2005, 09:56)
таблица фильтруется на предмет совпадения с любой частью поля;

Цитата (Гость_Виталий @ 4.7.2005, 08:43)
как в отфильтрованных данных в DBGrid одновременно подсвечивать символы,
по которым фильтруется таблица, другим цветом?

Ну и что не так, то? Фильтр он и сам наложить может, условие известно, найти вхождение подстроки в строку в поле не вопрос. А мой код просто пример.



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
kobra
Дата 7.7.2005, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

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



Цитата
А мой код просто пример.
правилно, пример как изменить шрифт, цвет и ... в ячеике грида, но
если данные отфилтровани, зачем так трудится? можно веть изменить цвет шрифта всеи калонке, не ошибешся, все строки удовлетворяют условью.

PM MAIL   Вверх
~FoX~
Дата 7.7.2005, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

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



kobra
Цитата
таблица фильтруется на предмет совпадения с любой частью поля;

Цитата
Query1.SQL.Add('WHERE FIO LIKE ''%'+Edit2.Text+'%''');

Ни о чем не говорит?

Like - вывод значений приблизительно соответствующих нужным!

Предположим условие = Like='%22%'
Возврещаем результат может быть 22, a22, a22a, asdf22222asdfasdf т.д.
Ему нужно выделить в возвращаемых строках только условие т.е. только "22"


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


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

FAQ раздела лежит здесь!


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

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


 




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


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

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