Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2013.07.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.003 c
15-1362166343
N.Cage
2013-03-01 23:32
2013.07.21
Nokia Lumia(отзывы о Винде)


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


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


2-1353504016
Tcount
2012-11-21 17:20
2013.07.21
Пишу свое интернет-радио...


15-1361888673
xayam
2013-02-26 18:24
2013.07.21
Покер онлайн





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский