Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Свой цвет в фокусированной ячейке, DBGrid 
:(
    Опции темы
December
Дата 2.6.2004, 03:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


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

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



Greetings All!
Пытаюсь сделать подсветку в дбгриде. Использую EhLib, но это не важно - методы кастомгридовские.
В чём суть: когда я изменяю цвет шрифта, то в выделенной мышкой ячейке, которая закрашена синим, чёрные буквы не слишком хорошо смотрятся. Как бы сделать так, чтобы в закрашенных ячейках буквы были, к примеру, зелёные?
Код такой:
Код

Stated:=Query1.FieldByName('Заявлено').AsFloat;
       Actual:=Query1.FieldByName('Поступило').AsFloat;
       if Stated<>Actual then DBGridEh1.Canvas.Font.Color:=HighlightColor
                else {if (state=[gdSelected]) or (state=[gdFocused])
                             then DBGridEh1.Canvas.Font.Color:=clGreen else}
                        DBGridEh1.Canvas.Font.Color:=clWindowText;
       DBGridEh1.DefaultDrawColumnCell(Rect,DataCol,Column,State);

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


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 2.6.2004, 05:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


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

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



Попробуй использовать Canvas.TextOut. Перед вызовом данного метода установи нужный цвет в свойстве Font.Color.

Это сообщение отредактировал(а) <Spawn> - 2.6.2004, 05:30


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
December
Дата 2.6.2004, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


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

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



Забыл сказать: это исполняется в OnDrawColumnCell
<Spawn>
Попробую, но имхо, это ход через анус.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 2.6.2004, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


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

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



December А под дургому и вряд ли получится, только если использовать чисто АПИ, либо компоненты, в которых есть методы для реализации твоей затей, но они все равно будут, скорее всего юзать АПИ.

Это сообщение отредактировал(а) <Spawn> - 2.6.2004, 16:19


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
December
Дата 3.6.2004, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


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

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



<Spawn>
Фишка в том, что у события есть параметр State, в котором (как уверяет хелп) лежит состояние ячейки - фокус/не фокус и т.п. Я думаю, что именно этот механизм надо использовать.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Unregistered
Дата 3.6.2004, 02:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











может вот так подойдет?

Код

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
var ARect0,ARect1:Trect;
function GetCellRect(ADatacol:integer):TRect;
begin
 Result:=TFakeGrid(Sender).CellRect(ADataCol+1,TFakeGrid(Sender).Row);
end;
begin
 with TDBGrid(Sender) do
 begin
 ARect0:=GetCellRect(0);
 ARect1:=GetCellRect(1);
 if (gdSelected in State) or (gdFocused in State) then
 begin
   if Columns[0].Field.AsString<>Columns[1].Field.AsString then
   begin
    Canvas.Font.Color:=clLime;
    Canvas.TextRect(ARect0,ARect0.Left,ARect0.Top,Columns[0].Field.AsString);
    Canvas.Font.Color:=clRed;
    Canvas.TextRect(ARect1,ARect1.Left,ARect1.Top,Columns[1].Field.AsString);
   end
   else
   begin
    Canvas.Font.Color:=clgreen;
    Canvas.TextRect(ARect0,ARect0.Left,ARect0.Top,Columns[0].Field.AsString);
    Canvas.Font.Color:=clGreen;
    Canvas.TextRect(ARect1,ARect1.Left,ARect1.Top,Columns[1].Field.AsString);
   end;
 end;
 end;
end;

В GetCellRect передается индекс колонки которую будешь красить. Соответственно у меня здесь сравниваются данные по колонкам 0 и 1.
  Вверх
Unregistered
Дата 3.6.2004, 02:59 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Забыл:
type
TFakeGrid=class(TCustomgrid)
end;
  Вверх
December
Дата 3.6.2004, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


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

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



Thanks! Попробую.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Medved
Дата 5.6.2004, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

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



Тип 1:
Код

         if (Rect.Top = dbg1.CellRect(dbg1.Col,dbg1.Row).Top) and (not (gdFocused in State) or not dbg1.Focused)
           then begin
             dbg1.Canvas.Brush.Color := clBlack;
             dbg1.Canvas.Font.Color := clWhite;
           end;
         dbg1.DefaultDrawColumnCell(Rect,DataCol,Column,State);


Тип 2:
Код

       with Sender as TDBGridEh
         do begin
           if gdSelected in State
             then begin
               Canvas.Brush.Color:= clBlack;
               Canvas.FillRect(Rect);
               Canvas.Font.Color:= clWhite;
               Canvas.TextRect(Rect,Rect.Left+2,Rect.Top+1,Column.DisplayText);
             end;
         end;




--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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