Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > разный цвет текста в таблице


Автор: АСК 27.10.2004, 22:46
Пожалуйста помогите!!!!!

Пишу электронный журнал дефектов программа практически готова, но есть проблемы:

1. Не могу сообразить как сделать фильтрацию по нескольким условиям,
например: ТАБЛИЦА (номер, дата, фамилия и т.д.) отфильтровать по дате и фамилии????????

2. Как сделать цвет текста в таблице разный????
например: под номером 1 цвет текста в строке красный
под номером 2 цвет текста в строке зеленый

3. При клике на таблицу выделяется одна ячейка активной строки, как сделать, чтобы выделялась вся строка???????

Заранее благодарен за помощь.

Автор: p0s0l 27.10.2004, 23:56
1) Пример: Table1.Filter := 'Data1 > ''01.01.2005'' AND Fam = ''Пупкин*''';
2) На событие OnDrawColumnCell повесь что-то вроде:
Код
 with DBGrid1.Canvas do
 begin
   if (DBGrid1.DataSource.DataSet.RecNo mod 2) = 0 then Font.Color := clRed
     else Font.Color := clGreen;
   TextRect(Rect, Rect.Left+1, Rect.Top+1, Column.Field.AsString);
 end;

3) У DBGrid'а есть свойство Options, там поставь флаг dgRowSelect

Автор: Guest 28.10.2004, 00:46
ОГРОМЕННОЕ СПАСИБО ЗА ПОДСКАЗКУ

Появился еще один вопрос

как сделать чтобы можно было задавать пределы фильтрации по дате

например с 01.01.04 по 17.03.04


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

Автор: p0s0l 28.10.2004, 00:50
Table1.Filter := 'Data1 >= ''01.01.04'' AND Data1 <= ''17.03.04''';

Автор: Medved 28.10.2004, 01:45
Я Вам не советую использовать фильтрацию, если Вы реализовываете клиент-серверное приложение. Это связано с разницей методов загрузки в компонентах TTable и TQuery (Надеюсь что Вы используете TQuery для клиент-серверных приложений).
Лучше использовать запросы. Это и продуктивней, и самое главное - универсализирует Ваш код.

А p0s0lу я посоветую не использовать DataSet.RecNo, опять же по причинет универсализации кодов, Кроме того, это будет работать не на всех БД.

Автор: Guest 28.10.2004, 08:59
Цитата(Pegas @ 28.10.2004, 01:45)

Я Вам не советую использовать фильтрацию, если Вы реализовываете клиент-серверное приложение.
ето не одназначно, зависит от ситуации. нужно определится, какои метод в данныи момент оптималнее.
Цитата

3. При клике на таблицу выделяется одна ячейка активной строки, как сделать, чтобы выделялась вся строка???????


Код
type
 TMyDBGrid = class(TCustomDBGrid);

procedure TFPatient.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
 With TMyDBGrid(Sender) Do
 if (DataLink.ActiveRecord = Row - 1) then
 begin
   DBGrid.Canvas.Brush.Color := cl...;
   DBGrid.Canvas.Font.Color := cl...;
   DBGrid.Canvas.Font.Name := ...;
   DBGrid.Canvas.Font.Size := ...;
 end;  
 DBGrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;



Цитата

2. Как сделать цвет текста в таблице разный????
например: под номером 1 цвет текста в строке красный
под номером 2 цвет текста в строке зеленый

выбери какое небуть поле (луще конечно идентификатор таблицы) и если значение четное - зеленныи, нечетное - красныи

Автор: Medved 28.10.2004, 12:14
Цитата(Guest @ 28.10.2004, 11:59)

Цитата (Pegas @ 28.10.2004, 01:45)

Я Вам не советую использовать фильтрацию, если Вы реализовываете клиент-серверное приложение.
ето не одназначно, зависит от ситуации. нужно определится, какои метод в данныи момент оптималнее.


На первый взгляд то она так, но если учесть что программа является полноценным приложением и будет в дальнейшем развиваться, то это не самое мудрое решение. ИМХО плохой стиль, который в дальнейшем может вызвать путаницу в кодах и нестабильность работы. К она томуже не всегда нормально работает.

Автор: Guest 28.10.2004, 14:42
иногда, с целю разгрузки сервера и трафика приходится филтровать локално.
а вообше полностю согласен

Автор: АСК 29.10.2004, 02:36
Извиняюсь за долгий ответ, были проблемы со связью (МТС в тесте, пришлось за BeeLine'ом идти)
Спасибо еще раз за подсказки
работает все кроме фильтра
фильтруешь либо по дате, либо по фамилии - все работает
как только объединяешь оба условия в один фильтр через and - ВСЁЁЁЁ - ошибка (Operator not applicable to this operand type)

Уже мозги плавятся!!!!!!!! ГДЕ ОШИБКА???? Никак не пойму

ПА-МА-ГИ-ТЕ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
:sample

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)