Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.07.21;
Скачать: CL | DM;

Вниз

Выделение строки в гриде цветов   Найти похожие ветки 

 
yurikon   (2010-10-13 15:28) [0]

Добрый  день!

Простая вроде задача - выделить строку активной записи цветом. Делаю так в событии перерисовки ячейки:

 if Table1.RecNo = Grid1.Row  then
 begin
   grdQoutes.Canvas.Brush.Color := clNavy;
   grdQoutes.Canvas.Font.Color := clYellow  ;
   grdQoutes.DefaultDrawColumnCell(Rect,datacol, column,State);
   Exit;
 end;
 Grid1.DefaultDrawColumnCell(Rect,datacol, column,State);

Работает ... если все записи вмещаются сразу в гриде и начинает сбиваться, если проматываешь грид.

Подскажите плиз, как правильно задать условие, чтобы отловить текущую запись?

С уважением.


 
Медвежонок Пятачок ©   (2010-10-13 16:24) [1]

ячейки отрисовываются не только тогда, когда текущей является строка датасета, которой эти ячейки соответствуют.
поэтому твой код неверный


 
Плохиш ©   (2010-10-13 16:25) [2]

статья "разноцветный грид"


 
Медвежонок Пятачок ©   (2010-10-13 16:27) [3]

смотреть надо не на рекно, а на параметры обработчика рисования. они тебе не просто так даны.


 
yurikon   (2010-10-13 16:58) [4]


> Медвежонок Пятачок ©   (13.10.10 16:24) [1]


Последняя строчка отрисовывает все остальные строки.

(Sender: TObject;  const Rect: TRect; DataCol: Integer; Column: TColumnEh; State: TGridDrawState);

Который из этих параметров поможет?

PS
Статью про грид смотрел, раскрасить в зависимости от содержимого - ноу проблем. А вот подсветить просто текущую ... Использовать встроенную подстветку в DBGridEh не хочу - цвет не тот.

С уважением.


 
Германн ©   (2010-10-13 23:54) [5]


> Который из этих параметров поможет?


> State


 
Германн ©   (2010-10-14 04:25) [6]


> Германн ©   (13.10.10 23:54) [5]

Наверно я не прав.


 
Медвежонок Пятачок ©   (2010-10-14 13:37) [7]

Последняя строчка отрисовывает все остальные строки.

Мда.
Кто бы мог подумать, что она такая трудолюбивая и заботливая.


 
Медвежонок Пятачок ©   (2010-10-14 13:58) [8]

если нот фокусед внутри стэйт тогда дефолтдросолумнцелл
иначе сначала филрект нужным цветом затем текст ячейки поверх.

предварительно выключив дефолтдровинг у грида


 
yurikon   (2010-10-14 15:46) [9]

Добрый день!

Если использовать gdFocused или gdSelected, то выделяется только (!) ячейка, а мне нужно выделить всю строку.

Как из передаваемых параметров определить в какой строке перерисовываемая ячейка?

С уважением.


 
Медвежонок Пятачок ©   (2010-10-14 16:07) [10]

а вся строка выделяется когда в гриде включена сам угадай какая опция.


 
yurikon   (2010-10-14 17:01) [11]


> PS
Использовать
> встроенную подстветку в DBGridEh не хочу - цвет не тот.
>


Уже угадал, Вы пропустили... Но вопрос остался.


 
Медвежонок Пятачок ©   (2010-10-14 17:32) [12]

Вопрос давно решен.
Следуй инструкциям выше и получишь грид с желтой шпалой по всей ширине.


 
TohaNik ©   (2010-10-14 18:45) [13]

Не кошерно!
Надо, что б определялся текущий цвет ногтей у главбуха, и никоим образом не менялся до смены настроения у её же.


 
Кайрат   (2010-11-30 09:44) [14]

TColorGrid = class
 private
   // Цвет строки
   FRowColor : TColor;
 protected
   // Функция чтения
   function GetRowColor : TColor;

   // Процедура записи
   procedure SetRowColor(const Value : TColor);
 public
   // Начальные значения
   constructor Create;

   destructor Destroy; override;

   // Визуализация сетки
   procedure ColorDBGrid(const dgr : TDBGrid; Rect :TRect; Field : TField; State : TGridDrawState); overload;

   // Свойство для установки цвета строки в сетке.
   property RowColor : TColor read GetRowColor write SetRowColor;
 end;

...
var
 ColorGrid : TColorGrid;

implementation

...

procedure TColorGrid.ColorDBGrid(const dgr: TDBGrid; Rect: TRect;
 Field: TField; State: TGridDrawState);
begin
 try
   if not Odd(dgr.DataSource.DataSet.RecNo) then
     if (gdSelected in State) or (gdFocused in State) then
     begin
       dgr.Canvas.Brush.Color := clHighlight;
       dgr.Canvas.Font.Color := clWhite;
     end
     else
     begin
       dgr.Canvas.Brush.Color := FRowColor;
       dgr.Canvas.Font.Color := clBlack;
     end;
     dgr.Canvas.FillRect(Rect);
     dgr.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, Field.AsString);
  finally
   { Nothing }
  end;
end;

constructor TColorGrid.Create;
begin
 inherited;
 FRowColor := $00F7D3C6; // Здесь можете указать любой цвет
end;

destructor TColorGrid.Destroy;
begin

 inherited;
end;

function TColorGrid.GetRowColor: TColor;
begin
 Result := FRowColor;
end;

procedure TColorGrid.SetRowColor(const Value: TColor);
begin
 if FRowColor = Value then
   Exit;
 FRowColor := Value;
end;

// =====================================================
// Пришем обработчик DBGrid1DrawDataCell для грида

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject;
 const Rect: TRect; Field: TField; State: TGridDrawState);
begin
 ColorGrid.ColorDBGrid(TDBGrid(Sender), Rect, Field, State);
end;

// =====================================================
// Изменять цвет можно примерно так
procedure TFormq.btChangeRowColorClick(Sender: TObject);
var
 i : Integer;
begin
 if ColorDialog1.Execute then
 begin
   if ColorDialog1.Color = ColorGrid.RowColor then
     Exit;
   ColorGrid.RowColor := ColorDialog1.Color;
   for i := 0 to ComponentCount - 1 do
     if Components[i] is TDBGrid then
       (Components[i] as TDBGrid).Repaint;
 end;
end;


 
Ega23 ©   (2010-11-30 10:25) [15]

dgr.DataSource.DataSet.RecNo

Далеко не всегда сработает. Не стоит на это свойство закладываться.



Страницы: 1 вся ветка

Текущий архив: 2013.07.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.007 c
15-1362175842
Иксик
2013-03-02 02:10
2013.07.21
Проблема с жестким диском. Может у кого есть какие-нибудь идеи...


3-1291201543
StriderMan
2010-12-01 14:05
2013.07.21
isc_shutinprog


2-1353613774
Tcount
2012-11-22 23:49
2013.07.21
Анти SelectAll...Существует что-нибудь подобное?


15-1360285956
Кто б сомневался
2013-02-08 05:12
2013.07.21
Медленная отрисовка 2D GDI Windows 7 (в 4.5 раза медленнее XP)


2-1353566618
Iandy
2012-11-22 10:43
2013.07.21
Как быстро загрузить в Мемо большой файл